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

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.RequestGapTask.RequestGapWorker
All Implemented Interfaces:
SuspendableTask, Runnable
Enclosing class:
RequestGapTask

private class RequestGapTask.RequestGapWorker
extends Task


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  DataDescription dataDesc
           
private  byte[] indexMem
           
private  InQueuesMgr iqm
           
private  SystemObject object
           
 int workerIndex
           
 
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
 
Constructor Summary
RequestGapTask.RequestGapWorker(ArchiveManager aMgr, int wkIndex)
           
 
Method Summary
private  ArchiveDataSpecification buildRequest(long startIdx, long endIdx)
           
private  long calcLastDIdx(long obj, long atg, long asp, short sv, ArchiveTimeSpecification ats, IndexResult oa, IndexResult on, IndexResult na, IndexResult nn)
          Errechnet den groessten Datenindex aus allen Containerlisten, der unter dem angegebenen TimingType noch innerhalb des nachzufordernden Bereichs liegt.
private  void closeMultiContIter(MultiContainerDataIterator multiContIt)
           
private  List<SystemObject> copyReqArSFromDIN(DataIdentNode din)
          Kopiert die Liste der Nachforderungs-Archive aus dem DataIdentNode.
private  String[] extractUnaskedArS(List<SystemObject> reqArchives, String[] failedArchives)
           
private  IndexResult getIndexResult(long obj, long atg, long asp, short sv, ArchiveTimeSpecification ats, DataIdentNode din, ArchiveDataKind archiveDataKind)
           
private  long getMaxContainerDataIndexMaxArchiveTime(long maxTime, File containerFile)
          Gibt von einer Containerdatei den höchsten DataIndex zurück, von dem die ArchiveTime nicht älter als die angegebene Zeit ist
private  long getMaxContainerDataIndexMaxDataTime(long maxTime, File containerFile)
          Gibt von einer Containerdatei den höchsten DataIndex zurück, von dem die DataTime nicht älter als die angegebene Zeit ist
private  long idx(ArchiveData ad)
           
private  boolean isGap(long start, long end)
           
private  long noModBits(ArchiveData ad)
           
private  long noModBits(long dataIndex)
           
private  boolean properDataState(ArchiveData ad)
           
private  void requestDID(long obj, long atg, long asp, short sv, DataIdentNode din, ArchiveTimeSpecification ats)
          Fordert die angegebene Datenidentifikation innerhalb des angegebenen Bereichs nach.
private  void requestGap(List<SystemObject> archs, int aIdx, long lowBnd, long upBnd, String[] unaskedPreviousFailedArS, RequestGapTask.GapFile oldGaps, RequestGapTask.GapMarker newGaps)
          Diese Methode fragt die uebergebene Datenluecke rekursiv bei der Liste der Archivsysteme ab.
 void run()
           
private  boolean startCondition(ArchiveTimeSpecification ats, long lowDidx, long lowDTime, long lowATime)
          Prueft, ob der anstehende Datensatz innerhalb der Grenzen liegt
 
Methods inherited from class de.bsvrz.ars.ars.mgmt.tasks.Task
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTask
 
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

workerIndex

public int workerIndex

dataDesc

private DataDescription dataDesc

object

private SystemObject object

iqm

private InQueuesMgr iqm

indexMem

private byte[] indexMem
Constructor Detail

RequestGapTask.RequestGapWorker

public RequestGapTask.RequestGapWorker(ArchiveManager aMgr,
                                       int wkIndex)
Method Detail

run

public void run()
Specified by:
run in interface Runnable
Overrides:
run in class Thread

requestDID

private void requestDID(long obj,
                        long atg,
                        long asp,
                        short sv,
                        DataIdentNode din,
                        ArchiveTimeSpecification ats)
Fordert die angegebene Datenidentifikation innerhalb des angegebenen Bereichs nach. Diese Methode pausiert, solange das Archivsystem im kritsichen Zustand (d.h. Warteschlange fast voll) ist.


calcLastDIdx

private long calcLastDIdx(long obj,
                          long atg,
                          long asp,
                          short sv,
                          ArchiveTimeSpecification ats,
                          IndexResult oa,
                          IndexResult on,
                          IndexResult na,
                          IndexResult nn)
                   throws PersistenceException
Errechnet den groessten Datenindex aus allen Containerlisten, der unter dem angegebenen TimingType noch innerhalb des nachzufordernden Bereichs liegt.

Parameters:
obj - ObjektID
atg - AttributgruppenID
asp - AspektID
sv - imVar
ats - Bereich
oa - Liste der OA-Container (mit Hilfe der Indexe ermittelt)
on - Liste der ON-Container (mit Hilfe der Indexe ermittelt)
na - Liste der NA-Container (mit Hilfe der Indexe ermittelt)
nn - Liste der NN-Container (mit Hilfe der Indexe ermittelt)
Returns:
groessten passenden Datenindex
Throws:
PersistenceException
PersistenceException

getMaxContainerDataIndexMaxDataTime

private long getMaxContainerDataIndexMaxDataTime(long maxTime,
                                                 File containerFile)
                                          throws PersistenceException
Gibt von einer Containerdatei den höchsten DataIndex zurück, von dem die DataTime nicht älter als die angegebene Zeit ist

Parameters:
maxTime - Maximalzeit der Datenindexe, die berücksichtigt werden
containerFile - Die zu öffnende Containerdatei
Returns:
Den maximalen Datenindex innerhalb der Containerdatei oder -1 falls die Containerdatei gelöscht ist oder keine Daten enthält
Throws:
PersistenceException - Fehler in der Persistenz

getMaxContainerDataIndexMaxArchiveTime

private long getMaxContainerDataIndexMaxArchiveTime(long maxTime,
                                                    File containerFile)
                                             throws PersistenceException
Gibt von einer Containerdatei den höchsten DataIndex zurück, von dem die ArchiveTime nicht älter als die angegebene Zeit ist

Parameters:
maxTime - Maximalzeit der Datenindexe, die berücksichtigt werden
containerFile - Die zu öffnende Containerdatei
Returns:
Den maximalen Datenindex innerhalb der Containerdatei oder -1 falls die Containerdatei gelöscht ist oder keine Daten enthält
Throws:
PersistenceException - Fehler in der Persistenz

startCondition

private boolean startCondition(ArchiveTimeSpecification ats,
                               long lowDidx,
                               long lowDTime,
                               long lowATime)
Prueft, ob der anstehende Datensatz innerhalb der Grenzen liegt

Parameters:
ats - Grenzen
lowDidx - Datenindex der unteren Lueckenkante
lowDTime - Datenzeit der unteren Lueckenkante
lowATime - Archivzeit der unteren Lueckenkante
Returns:
Wahr, wenn der anstehende Datensatz innerhalb der Grenzen liegt, falsch sonst

getIndexResult

private IndexResult getIndexResult(long obj,
                                   long atg,
                                   long asp,
                                   short sv,
                                   ArchiveTimeSpecification ats,
                                   DataIdentNode din,
                                   ArchiveDataKind archiveDataKind)
                            throws Exception
Throws:
Exception

extractUnaskedArS

private String[] extractUnaskedArS(List<SystemObject> reqArchives,
                                   String[] failedArchives)

copyReqArSFromDIN

private List<SystemObject> copyReqArSFromDIN(DataIdentNode din)
Kopiert die Liste der Nachforderungs-Archive aus dem DataIdentNode. Jedes Archivsystem wird nur einmal in die Ergebnisliste aufgenommen.

Parameters:
din -
Returns:
Liste von Archiv-Objekten

requestGap

private void requestGap(List<SystemObject> archs,
                        int aIdx,
                        long lowBnd,
                        long upBnd,
                        String[] unaskedPreviousFailedArS,
                        RequestGapTask.GapFile oldGaps,
                        RequestGapTask.GapMarker newGaps)
                 throws InterruptedException
Diese Methode fragt die uebergebene Datenluecke rekursiv bei der Liste der Archivsysteme ab. Bei jeder Luecke in der aktuellen Anfrage wird rekursiv eine Anfrage bis Lueckenende an das in der Liste nachfolgende Archivsystem gestellt. Dadurch werden immer alle parametrierten Archivsysteme angefragt, bevor der Datenindex an ein Lueckenende springt. Wenn fuer eine Luecke und ein Archivsystem vermerkt ist, dass dieses die Luecke nicht schliessen kann, wird keine Nachforderungsanfrage gestellt.

Parameters:
archs - Liste von Archivsystemen
aIdx - Archivsystem in der Liste, bei dem diese Anfrage gestellt werden soll
lowBnd - Untergrenze der Anfrage (letzter vorhandener DS)
upBnd - Obergrenze der Anfrage (erster wieder vorhandener DS)
Throws:
InterruptedException

buildRequest

private ArchiveDataSpecification buildRequest(long startIdx,
                                              long endIdx)

isGap

private boolean isGap(long start,
                      long end)

properDataState

private boolean properDataState(ArchiveData ad)

idx

private long idx(ArchiveData ad)

noModBits

private long noModBits(long dataIndex)

noModBits

private long noModBits(ArchiveData ad)

closeMultiContIter

private void closeMultiContIter(MultiContainerDataIterator multiContIt)