public class BackupTask extends SingleClientSenderTask
Modifier and Type | Class and Description |
---|---|
static class |
BackupTask.BackupResultData
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 unterscheiden
|
private static class |
BackupTask.BackupResultDataHolder
Holder-Objekt, dass eine statische BackupResultData-Instanz (threadsicher) bereitstellt
|
private static class |
BackupTask.ContainerEntry
Immutable Klasse, die eine ContainerID mit der zugehörigen ContainerLocation, also dem Speicherort (der Datenidentifikation) verknüpft.
|
private class |
BackupTask.ContainerLocation
Immutable Klasse, die speichert, an welchem Ort sich eine bestimmte ContainerID befindet.
|
private class |
BackupTask.DataIdentificationHelper
Hilfsklasse, die zu einem Verzeichnis sowohl die passende
DataIdentNode als auch die zugehörige BackupTask.ContainerLocation ermittelt. |
Thread.State, Thread.UncaughtExceptionHandler
Modifier and Type | Field and Description |
---|---|
private static BackupModul |
_backupModul
das verwendete Backupmodul
|
private static int |
_currentBackupMediumID
die immer aktuell gehaltene backupMediumID
|
private File |
_currentIndexFile
Datei, in der die momentan auf dem Medium gesicherten Indexdaten abgelegt sind
|
private File |
_indexFileDir
Temporäres Verzeichnis in dem
_currentIndexFile abgelegt ist |
private LongTermTaskStatePublisher.Task |
_longTermTaskStatePublisherTask
Objekt, dem Informationen zum aktuellen Zustand der Task und dem Fortschritt von langwierigen Arbeiten übergeben werden.
|
private File |
_tmpFile
Temporäre Datei die zur Erzeugung des temporären Verzeichnisses
+_indexFileDir benutzt wird. |
static String |
INDEXFILE_NAME
Name der Datei, in der alle Indexdaten des momentanen Mediums temporär abgelegt werden
|
atgQuery, ddResponse, deserializer, queryAppObj, queryIdx, SENDCONTROL_TIMEOUT, serializerVersion, syncObj
archMgr, didTree, INDEX_MEMORY_SIZE, isTerminated, logger, persMgr, ringOfDeathListener, taskStepListeners
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
Constructor and Description |
---|
BackupTask(ArchiveManager archiveMgr,
RingOfDeathListener rodl,
RingBuffer<ResultData> inputData,
LongTermTaskStatePublisher longTermTaskStatePublisher)
Erstellt einen neuen BackupTask
|
Modifier and Type | Method and Description |
---|---|
private void |
backupContainerList(ArrayList<BackupTask.ContainerEntry> containerList,
String backupRunID)
Sichert alle angegebenen Container.
|
private void |
clearCurrentIndexFile() |
private void |
closeBackup(ArrayList<BackupTask.ContainerEntry> containerList) |
private ArrayList<BackupTask.ContainerEntry> |
containerWalk()
Laeuft rekursiv durch ein Verzeichnis und laedt die Container in den Index.
|
private void |
deleteFile(File file)
Löscht eine Datei un gibt eine Warnung aus, wenn das Löschen fehlschlägt
|
private void |
disposeIndices()
Löscht die Indexdateien und sonstige temporäre Dateien und Verzeichnisse
|
int |
estimateIndexSize(int countSavedContainers)
Schätzt die Indexgröße für eine angegebene Zahl Einträge.
|
static BackupModul |
getBackupModul()
Gibt das verwendete Backupmodul zurück
|
static BackupTask.BackupResultData |
getBackupResultData()
Gibt einen
BackupTask.BackupResultData -Dummy zurück |
private List<Long> |
getContainerIDsToBackup(File didDir)
Ermittelt, welche Container in einem Verzeichnis gesichert werden sollen.
|
static List<Long> |
getContainerIDsToBackupStatic(File didDir,
PersistenceManager persistenceManager,
Task task)
Ermittelt, welche Container in einem Verzeichnis gesichert werden sollen.
|
static int |
getLastUsedMediumID()
Gibt die zuletzt verwendete MedienID zurück
|
private void |
increaseMediumID()
Erhöht die MedienID um 1
|
private void |
initIndices()
Erstellt das temporäre Verzeichnis für die Indexdatei und erstellt eine leere Indexdatei
|
private void |
markContainer(long containerId,
BackupTask.ContainerLocation containerLocation,
boolean toBeMarkedAsSaved)
Markiert einen Container als gesichert bzw. ungesichert und aktualisiert den Index entsprechend.
|
private void |
requestBackupMedium(int backupMediumID,
String backupRunID)
Mit dieser Methode wird der Operator aufgefordert, ein bestimmtes Medium einzulegen.
|
private void |
rollbackChanges(ArrayList<BackupTask.ContainerEntry> containerList) |
void |
run() |
void |
runBackup()
Startet den Sicherungslauf
|
static void |
setBackupModul(String propertiesFile)
Setzt das zu verwendende Backup-Modul.
|
static void |
setLastUsedMediumID(int mediumID)
Setzt die zuletzt verwendete MedienID.
|
private void |
tryRequestBackupMedium(String backupRunID) |
protected void |
work(ResultData resultData)
Diese Methode ist zu ueberschreiben, um die konkrete Aufgabe der Task zu implementieren.
|
dataRequest, getObjectsFromDAV, init, insertData, isRequestSupported, parseArchiveDataSpec, sendErrorResponse, sendErrorResponse, sendSuccessResponse, sendSuccessResponse, subscribeSender, unsubscribeSender
addTaskStepListener, getArchMgr, isTaskTerminated, removeTaskStepListener, suspendTaskIfNecessary, terminateTask
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
private static BackupModul _backupModul
public static final String INDEXFILE_NAME
private static int _currentBackupMediumID
private File _currentIndexFile
private File _indexFileDir
_currentIndexFile
abgelegt istprivate File _tmpFile
+_indexFileDir
benutzt wird.private final LongTermTaskStatePublisher.Task _longTermTaskStatePublisherTask
public BackupTask(ArchiveManager archiveMgr, RingOfDeathListener rodl, RingBuffer<ResultData> inputData, LongTermTaskStatePublisher longTermTaskStatePublisher)
archiveMgr
- Archivmanagerrodl
- RingOfDeathListenerinputData
- EingangswarteschlangelongTermTaskStatePublisher
- siehe LongTermTaskStatePublisher
public void run()
run
in interface Runnable
run
in class SingleTask
Runnable.run()
protected void work(ResultData resultData)
SingleTask
work
in class SingleTask
resultData
- Zu verarbeitender Datensatz aus der Eingangswarteschlangepublic void runBackup() throws BackupException
BackupException
- Fehler beim Backupprivate void tryRequestBackupMedium(String backupRunID) throws BackupException
BackupException
private ArrayList<BackupTask.ContainerEntry> containerWalk() throws PersistenceException
PersistenceException
- Fehler in der Persistenzprivate List<Long> getContainerIDsToBackup(File didDir) throws PersistenceException
didDir
- Verzeichnis, welches geprüft wirdPersistenceException
- Fehler in der Persistenzpublic static List<Long> getContainerIDsToBackupStatic(File didDir, PersistenceManager persistenceManager, Task task) throws PersistenceException
didDir
- Verzeichnis, welches geprüft wirdpersistenceManager
- PersistenceManagertask
- TaskPersistenceException
- Fehler in der Persistenzprivate void backupContainerList(ArrayList<BackupTask.ContainerEntry> containerList, String backupRunID) throws BackupException
containerList
- Liste mit Containern, welche gesichert werden sollenbackupRunID
- ID des BackuplaufesBackupException
- Fehler beim Backupprivate void closeBackup(ArrayList<BackupTask.ContainerEntry> containerList) throws BackupException
BackupException
private void clearCurrentIndexFile() throws BackupException
BackupException
private void rollbackChanges(ArrayList<BackupTask.ContainerEntry> containerList) throws BackupException
BackupException
private void requestBackupMedium(int backupMediumID, String backupRunID) throws BackupException
backupMediumID
- MediumIDbackupRunID
- ID des BackupvorgangsBackupException
- Medium nicht verfügbarprivate void markContainer(long containerId, BackupTask.ContainerLocation containerLocation, boolean toBeMarkedAsSaved) throws BackupException
containerId
- ContainerIDcontainerLocation
- Speicherort des ContainerstoBeMarkedAsSaved
- falls true, wird der Container als saved markiert, ansonsten als unsavedBackupException
- Fehler bei der Durchführung des Auftragsprivate void initIndices() throws IOException
IOException
- IO-Fehler beim Vorgangprivate void disposeIndices()
private void deleteFile(File file)
file
- Datei die gelöscht werden sollpublic int estimateIndexSize(int countSavedContainers)
countSavedContainers
- Anzahl der Containerprivate void increaseMediumID()
public static void setBackupModul(String propertiesFile) throws BackupException
propertiesFile
- Datei in dem das zu verwendende Modul gespeichert ist.BackupException
- Fehler beim Vorgangpublic static BackupModul getBackupModul()
public static int getLastUsedMediumID()
public static void setLastUsedMediumID(int mediumID)
mediumID
- zuletzt verwendete MedienIDpublic static BackupTask.BackupResultData getBackupResultData()
BackupTask.BackupResultData
-Dummy zurück