de.bsvrz.ars.ars.mgmt.tasks
Class ArchiveTask

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.ArchiveTask
All Implemented Interfaces:
SuspendableTask, Runnable
Direct Known Subclasses:
ArchiveRequestedTask

public class ArchiveTask
extends Task

Task zur Archivierung von Datensaetzen. Ist nicht von SingleTask abgeleitet, weil ein spezieller ArchiveRingBuffer verwendet wird, der zwei Objekte (ResultData und Archivzeit) speichern kann. Die work()-Methode hat deswegen zwei Parameter.

Author:
beck et al. projects GmbH, Alexander Schmidt

Nested Class Summary
static class ArchiveTask.CloseContainerObject
          Eine Instanz dieser Klasse wird eingefuegt, wenn ein Container aufgrund einer Parametrierungs-Aenderung abgeschlossen werden soll.
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
protected  ArchiveDataKind adk
           
protected  long arsTime
           
protected  long aspID
           
protected  AttributeGroup atg
           
protected  Deflater compresser
           
protected  int dataEntryLen
          Laenge des serislisierten Datensatzes inklusive Datensatz-Header
protected  long dataIdx
           
protected  long dataTime
           
protected  String didPath
           
protected  String didPathA
           
protected  String didPathN
           
protected  DataIdentNode din
           
protected  byte[] idxBuffer
           
static String MSG_PID_DATAINDEX_ANOMALY
          Kennzeichen der Betriebsmeldung
protected static ArchiveDataKind NA
           
protected static ArchiveDataKind NN
           
protected  long objID
           
protected static boolean ONLINE
           
protected  long openContID
           
protected static boolean REQUESTED
           
protected  int sv
           
 
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
ArchiveTask(ArchiveManager archiveMgr, RingOfDeathListener rodl, int tskIdx, ArchiveRingBuffer inQueue)
          Konstruktor des Archiv-Tasks.
 
Method Summary
protected  void assignIndexes(boolean requested)
           
protected  void createRebuildIndexFlagFile()
          Erzeugt die Kennzeichen-Datei, ob die Indexe veraendert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.
static long getCloseContainerSuccess()
           
static ContainerSettings getContainerSettings()
          Liefert die Container-Einstellungen des Archivsystems.
static long getLastArchiveTime()
           
static long getTotalDS_Fail()
           
static long getTotalDS_Processed()
           
static long getTotalDS_Queued()
           
static long getTotalDS_Success()
           
protected  void handleErr(Exception e, ArchiveTask.CloseContainerObject cco)
           
protected  void handleErr(Exception e, String corpusDelicti)
           
protected  void handleSevereErr(Throwable e, String corpusDelicti)
           
static void incrementTotalDS_Queued()
          Wird vom InQueuesMgr.ArchiveDataReceiver aufgerufen, nachdem er einen zu archivierenden Datensatz in eine der Queues gelegt hat.
protected  void logManualCloseContainer(long closeObjID, ArchiveTask.CloseContainerObject cco)
           
protected  void logNewContainer()
           
protected  void logReceivedData(ResultData rd)
           
protected  void logWriteData()
           
protected  void lookupLastDataIdxes(boolean requested)
          Sucht die letzten Datenindexe im Index sowie den Container aus dem .
protected  boolean mustCloseContainer(boolean requested)
          Prueft ob ein Container abgeschlossen werden muss.
static void resetDSCounter()
          Setzt alle Zaehler auf 0.
 void run()
           
static void setContainerSettings(ContainerSettings cs)
          Setzt die Container-Einstellungen des Archivsystems.
static void setLastArchiveTime(long atime)
           
protected  boolean storeData()
           
protected  boolean tooLargeForNewContainer()
          Prueft extra auf Containergroesse.
 void work(Object resultData, long archTime)
          Archiviert den uebergebenen Datensatz unter dem angegebenen Archivzeitstempel.
 
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

REQUESTED

protected static final boolean REQUESTED
See Also:
Constant Field Values

ONLINE

protected static final boolean ONLINE
See Also:
Constant Field Values

NA

protected static final ArchiveDataKind NA

NN

protected static final ArchiveDataKind NN

MSG_PID_DATAINDEX_ANOMALY

public static final String MSG_PID_DATAINDEX_ANOMALY
Kennzeichen der Betriebsmeldung

See Also:
Constant Field Values

idxBuffer

protected byte[] idxBuffer

objID

protected long objID

aspID

protected long aspID

arsTime

protected long arsTime

dataTime

protected long dataTime

dataIdx

protected long dataIdx

openContID

protected long openContID

atg

protected AttributeGroup atg

sv

protected int sv

adk

protected ArchiveDataKind adk

didPath

protected String didPath

didPathA

protected String didPathA

didPathN

protected String didPathN

din

protected DataIdentNode din

dataEntryLen

protected int dataEntryLen
Laenge des serislisierten Datensatzes inklusive Datensatz-Header


compresser

protected Deflater compresser
Constructor Detail

ArchiveTask

public ArchiveTask(ArchiveManager archiveMgr,
                   RingOfDeathListener rodl,
                   int tskIdx,
                   ArchiveRingBuffer inQueue)
Konstruktor des Archiv-Tasks.

Parameters:
tMgr - Task-Manager
pMgr - Persistenz-Manager
Method Detail

setContainerSettings

public static void setContainerSettings(ContainerSettings cs)
Setzt die Container-Einstellungen des Archivsystems.

Parameters:
cs - Container-Einstellungen

getContainerSettings

public static ContainerSettings getContainerSettings()
Liefert die Container-Einstellungen des Archivsystems.

Returns:
Container-Einstellungen

run

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

incrementTotalDS_Queued

public static void incrementTotalDS_Queued()
Wird vom InQueuesMgr.ArchiveDataReceiver aufgerufen, nachdem er einen zu archivierenden Datensatz in eine der Queues gelegt hat.


getTotalDS_Queued

public static long getTotalDS_Queued()
Returns:
Anzahl der seit Systemstart in die Warteschlangen eingefuegten zu archivierenden Datensatze

getTotalDS_Processed

public static long getTotalDS_Processed()
Returns:
Anzahl der seit Systemstart zur Archivierung verarbeiteten Datesaetze (erfolgreich und nicht erfolgreich archiviert)

getTotalDS_Success

public static long getTotalDS_Success()
Returns:
Anzahl der seit Systemstart erfolgreich archivierten Datesaetze

getTotalDS_Fail

public static long getTotalDS_Fail()
Returns:
Anzahl der seit Systemstart nicht erfolgreich archivierten Datesaetze

getCloseContainerSuccess

public static long getCloseContainerSuccess()
Returns:
Zahl aller seit dem Start oder letzten resetDSCounter() erfolgreich verarbeiteten Close-Container-Datensaetze. Kann zur Test-Synchronisation verwendet werden.

resetDSCounter

public static void resetDSCounter()
Setzt alle Zaehler auf 0.


setLastArchiveTime

public static void setLastArchiveTime(long atime)

getLastArchiveTime

public static long getLastArchiveTime()

assignIndexes

protected void assignIndexes(boolean requested)
                      throws DIdNodeNotFoundException,
                             IndexException,
                             PersistenceException
Throws:
DIdNodeNotFoundException
IndexException
PersistenceException

work

public void work(Object resultData,
                 long archTime)
Archiviert den uebergebenen Datensatz unter dem angegebenen Archivzeitstempel.

Parameters:
resultData - Ergebnisdatensatz
archTime - Archivzeitstempel

storeData

protected boolean storeData()
                     throws PersistenceException,
                            IndexException
Throws:
PersistenceException
IndexException

lookupLastDataIdxes

protected void lookupLastDataIdxes(boolean requested)
                            throws IndexException
Sucht die letzten Datenindexe im Index sowie den Container aus dem . Der Aufrufer dieser Methode muss die Synchronisierung ueber den DataIdentNode durchfuehren.

Throws:
IndexException

handleErr

protected void handleErr(Exception e,
                         String corpusDelicti)

handleErr

protected void handleErr(Exception e,
                         ArchiveTask.CloseContainerObject cco)

handleSevereErr

protected void handleSevereErr(Throwable e,
                               String corpusDelicti)

createRebuildIndexFlagFile

protected void createRebuildIndexFlagFile()
                                   throws PersistenceException
Erzeugt die Kennzeichen-Datei, ob die Indexe veraendert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.

Throws:
PersistenceException

logReceivedData

protected void logReceivedData(ResultData rd)

logWriteData

protected void logWriteData()
                     throws IndexException
Throws:
IndexException

logNewContainer

protected void logNewContainer()

logManualCloseContainer

protected void logManualCloseContainer(long closeObjID,
                                       ArchiveTask.CloseContainerObject cco)

mustCloseContainer

protected boolean mustCloseContainer(boolean requested)
                              throws PersistenceException,
                                     IndexException
Prueft ob ein Container abgeschlossen werden muss. Die Pruefung basiert auf containerSettings und dem mit de.bsvrz.ars.ars.persistence.PersistenceManager#accessContainer() im Zugriff befindlichen Daten. Der Aufrufer dieser Methode muss die Synchronisierung ueber den DataIdentNode durchfuehren.

Parameters:
requested - Wahr fuer nachgeforderte, falsch fuer aktuelle Daten.
Returns:
Wahr, falls Container abgeschlossen werden muss, falsch sonst.
Throws:
PersistenceException
IndexException

tooLargeForNewContainer

protected boolean tooLargeForNewContainer()
                                   throws PersistenceException
Prueft extra auf Containergroesse. Damit kann verhindert werden, dass staendig neue Container angelegt werden, wenn bereits mit einem Datum die Groesse ueberschritten wuerde. Stattdessen wird mit der maximal erlaubten Groesse eine Fehlermeldung ausgegeben. Der Aufrufer dieser Methode muss die Synchronisierung ueber den DataIdentNode durchfuehren.

Returns:
wahr, falls die maximale Containergroesse ueberschritten ist, falsch sonst
Throws:
PersistenceException