de.bsvrz.ars.ars.mgmt.tasks
Class RequestGapTask

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.ars.ars.mgmt.tasks.Task
          extended by de.bsvrz.ars.ars.mgmt.tasks.SingleTask
              extended by de.bsvrz.ars.ars.mgmt.tasks.SingleClientSenderTask
                  extended by de.bsvrz.ars.ars.mgmt.tasks.RequestGapTask
All Implemented Interfaces:
SuspendableTask, ClientSenderInterface, Runnable

public class RequestGapTask
extends SingleClientSenderTask

Task zur Nachforderung fehlender Archivdaten aus anderen Archivsystemen gemaess Parametrierung.

Author:
beck et al. projects GmbH, Alexander Schmidt

Nested Class Summary
 class RequestGapTask.GapFile
          Diese Klasse speichert nicht schliessbare Datenluecken in einer Datei im Verzeichnis der Datenidentifikation in der Form 10-20archiv1#archiv2 30-40archiv3#archiv4 ...
static class RequestGapTask.GapMarker
          Speichert pro Archivsystem die Luecken, die von diesem nicht geschlossen werden konnten.
static class RequestGapTask.RequestGapResultData
          Diese Klasse sieht aus wie ein ResultData, wird aber nur intern verwendet, um einen über den Scheduler angestoßenen Sicherungslauf von einem extern angestoßenen zu unterscheieden
private  class RequestGapTask.RequestGapWorker
           
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  ArchiveDataSpecification[] archDataSpecs
           
private  List<SystemObject> archiveList
           
private  ArchiveTimeSpecification archTimeSpec
          Zeitspezifikation, die beim Nachfordern verwendet werden soll oder null, falls keine Einschränkung berücksichtigt werden soll.
private  Semaphore finishedSema
           
private static String GAP_ARCH_SEPARATOR
           
static String GAP_FILE_NAME
          Dateiname der Datenluecken-Datei.
private static String GAP_IDX_SEPARATOR
           
private static String GAP_KEYWORD
           
private static Pattern GAP_PAT
           
static int REQUEST_GAP_THREADS
          Anzahl der Threads zum Nachfordern fehlender Archivdaten.
static ArchiveQueryPriority REQUEST_PRIO
          Prioritaet der Nachforserungsanfragen.
private static ArchiveDataKindCombination requestAdk
           
private  RequestGapTask.RequestGapWorker[] requester
           
private static RequestGapTask.RequestGapResultData requestGapResultData
           
private  AtomicInteger totalGapsFound
           
 
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.SingleClientSenderTask
atgQuery, ddResponse, deserializer, queryAppObj, queryIdx, SENDCONTROL_TIMEOUT, serializerVersion, syncObj
 
Fields inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
archMgr, didTree, INDEX_MEMORY_SIZE, isTerminated, logger, persMgr, ringOfDeathListener, taskStepListeners
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Fields inherited from interface de.bsvrz.dav.daf.main.ClientSenderInterface
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
 
Constructor Summary
RequestGapTask(ArchiveManager archiveMgr, RingOfDeathListener rodl, RingBuffer<ResultData> inputData)
          Erzeugt einen neuen Task zur Nachforderung fehlender Archivdaten.
 
Method Summary
static RequestGapTask.RequestGapResultData getRequestGapResultData()
          Liefert den Nachforderungsanfrage-Datensatz.
private  List<SystemObject> parseArchiveList(Deserializer ds)
          Extrahiert die Liste der Archivsysteme, bei denen nachgefordert werden soll.
private  void performRequest()
          Erzeugt eine Anzahl (REQUEST_GAP_THREADS) von RequestGapTask(ArchiveManager,RingOfDeathListener,RingBuffer)- Objekten, die die Nachforderung durchführen.
 void terminateTask()
          Beendet den Nachforderungs-Task.
protected  void work(ResultData resultData)
          Startet das automatische oder manuelle Nachfordern entsprechend dem uebergebenen Nachforderungs-Datensatz.
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.SingleClientSenderTask
dataRequest, getObjectsFromDAV, init, isRequestSupported, parseArchiveDataSpec, sendErrorResponse, sendErrorResponse, sendSuccessResponse, sendSuccessResponse, subscribeSender, unsubscribeSender
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.SingleTask
run
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

GAP_FILE_NAME

public static String GAP_FILE_NAME
Dateiname der Datenluecken-Datei.


REQUEST_GAP_THREADS

public static int REQUEST_GAP_THREADS
Anzahl der Threads zum Nachfordern fehlender Archivdaten.


REQUEST_PRIO

public static ArchiveQueryPriority REQUEST_PRIO
Prioritaet der Nachforserungsanfragen.


GAP_KEYWORD

private static String GAP_KEYWORD

GAP_IDX_SEPARATOR

private static String GAP_IDX_SEPARATOR

GAP_ARCH_SEPARATOR

private static String GAP_ARCH_SEPARATOR

GAP_PAT

private static Pattern GAP_PAT

requestAdk

private static ArchiveDataKindCombination requestAdk

requestGapResultData

private static RequestGapTask.RequestGapResultData requestGapResultData

requester

private RequestGapTask.RequestGapWorker[] requester

finishedSema

private Semaphore finishedSema

archDataSpecs

private ArchiveDataSpecification[] archDataSpecs

archiveList

private List<SystemObject> archiveList

totalGapsFound

private AtomicInteger totalGapsFound

archTimeSpec

private ArchiveTimeSpecification archTimeSpec
Zeitspezifikation, die beim Nachfordern verwendet werden soll oder null, falls keine Einschränkung berücksichtigt werden soll.

Constructor Detail

RequestGapTask

public RequestGapTask(ArchiveManager archiveMgr,
                      RingOfDeathListener rodl,
                      RingBuffer<ResultData> inputData)
Erzeugt einen neuen Task zur Nachforderung fehlender Archivdaten.

Parameters:
archiveMgr - Der Archiv-Manager.
rodl - Der Listener wird benachrichtigt beim Beenden der Task.
inputData - Eingangswarteschlange
Method Detail

getRequestGapResultData

public static RequestGapTask.RequestGapResultData getRequestGapResultData()
Liefert den Nachforderungsanfrage-Datensatz.


work

protected void work(ResultData resultData)
Startet das automatische oder manuelle Nachfordern entsprechend dem uebergebenen Nachforderungs-Datensatz.

Specified by:
work in class SingleTask
Parameters:
resultData - Nachforderungs-Datensatz.

parseArchiveList

private List<SystemObject> parseArchiveList(Deserializer ds)
                                     throws Exception
Extrahiert die Liste der Archivsysteme, bei denen nachgefordert werden soll. Der Deserialisierer muss genau vor dem Laengenbyte der Liste stehen. Doppelte EIntraege werden gefiltert, Nachfordern bei sich selbst ebenso.

Parameters:
ds -
Returns:
Liste mit Archivsystem-Objekten, leere Liste, falls keine angegeben sind
Throws:
IOException
Exception

performRequest

private void performRequest()
                     throws Exception
Erzeugt eine Anzahl (REQUEST_GAP_THREADS) von RequestGapTask(ArchiveManager,RingOfDeathListener,RingBuffer)- Objekten, die die Nachforderung durchführen. Diese Methode wartet, bis alle Threads fertig sind.

Throws:
Exception

terminateTask

public void terminateTask()
Beendet den Nachforderungs-Task.

Overrides:
terminateTask in class Task