public class BackupTask extends SingleClientSenderTask
Task zur Durchführung eines Sicherungslaufs.
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. |
Modifier and Type | Field and Description |
---|---|
private static BackupModul |
_backupModul
das verwendete Backupmodul
|
private static int |
_currentBackupMediumID
die immer aktuell gehaltene backupMediumID
|
private java.io.File |
_currentIndexFile
Datei, in der die momentan auf dem Medium gesicherten Indexdaten abgelegt sind
|
private java.io.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 java.io.File |
_tmpFile
Temporäre Datei die zur Erzeugung des temporären Verzeichnisses
+_indexFileDir benutzt wird. |
static java.lang.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
TERMINATE_TASK
_debug, _shouldTerminate, archMgr, didTree, INDEX_MEMORY_SIZE, persMgr
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
Constructor and Description |
---|
BackupTask(ArchiveManager archiveMgr,
java.util.concurrent.BlockingQueue<java.lang.Object> inputData,
LongTermTaskStatePublisher longTermTaskStatePublisher)
Erstellt einen neuen BackupTask
|
Modifier and Type | Method and Description |
---|---|
private int |
backupContainerList(java.util.ArrayList<BackupTask.ContainerEntry> containerList,
java.lang.String backupRunID)
Sichert alle angegebenen Container.
|
private void |
clearCurrentIndexFile() |
private void |
closeBackup(java.util.ArrayList<BackupTask.ContainerEntry> containerList) |
private java.util.ArrayList<BackupTask.ContainerEntry> |
containerWalk()
Laeuft rekursiv durch ein Verzeichnis und laedt die Container in den Index.
|
private void |
deleteFile(java.io.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.
|
void |
execute()
Diese Methode muss implementiert werden und definiert die Aktion, die dieser Task ausführt
|
static BackupModul |
getBackupModul()
Gibt das verwendete Backupmodul zurück
|
static BackupTask.BackupResultData |
getBackupResultData()
Gibt einen
BackupTask.BackupResultData -Dummy zurück |
private java.util.List<java.lang.Long> |
getContainerIDsToBackup(java.io.File didDir)
Ermittelt, welche Container in einem Verzeichnis gesichert werden sollen.
|
static java.util.List<java.lang.Long> |
getContainerIDsToBackupStatic(java.io.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,
java.lang.String backupRunID)
Mit dieser Methode wird der Operator aufgefordert, ein bestimmtes Medium einzulegen.
|
private void |
rollbackChanges(java.util.ArrayList<BackupTask.ContainerEntry> containerList) |
void |
runBackup()
Startet den Sicherungslauf
|
static void |
setBackupModul(java.lang.String propertiesFile)
Setzt das zu verwendende Backup-Modul.
|
static void |
setLastUsedMediumID(int mediumID)
Setzt die zuletzt verwendete MedienID.
|
private void |
tryRequestBackupMedium(java.lang.String backupRunID) |
protected void |
work(ResultData resultData) |
dataRequest, getObjectsFromDav, init, insertData, isRequestSupported, parseArchiveDataSpec, sendErrorResponse, sendErrorResponse, sendSuccessResponse, sendSuccessResponse, subscribeSender, unsubscribeSender
getQueue, step, submit, terminateTask
addTaskStepListener, cleanUp, getArchMgr, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone
private static BackupModul _backupModul
das verwendete Backupmodul
public static final java.lang.String INDEXFILE_NAME
Name der Datei, in der alle Indexdaten des momentanen Mediums temporär abgelegt werden
private static int _currentBackupMediumID
die immer aktuell gehaltene backupMediumID
private java.io.File _currentIndexFile
Datei, in der die momentan auf dem Medium gesicherten Indexdaten abgelegt sind
private java.io.File _indexFileDir
Temporäres Verzeichnis in dem _currentIndexFile
abgelegt ist
private java.io.File _tmpFile
Temporäre Datei die zur Erzeugung des temporären Verzeichnisses +_indexFileDir
benutzt wird.
private final LongTermTaskStatePublisher.Task _longTermTaskStatePublisherTask
Objekt, dem Informationen zum aktuellen Zustand der Task und dem Fortschritt von langwierigen Arbeiten übergeben werden.
public BackupTask(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData, LongTermTaskStatePublisher longTermTaskStatePublisher)
Erstellt einen neuen BackupTask
rodl
- RingOfDeathListenerarchiveMgr
- ArchivmanagerinputData
- EingangswarteschlangelongTermTaskStatePublisher
- siehe LongTermTaskStatePublisher
public void execute()
Task
Diese Methode muss implementiert werden und definiert die Aktion, die dieser Task ausführt
execute
in class RepeatingTask
protected void work(ResultData resultData)
work
in class QueueTask<ResultData>
public void runBackup() throws BackupException
Startet den Sicherungslauf
BackupException
- Fehler beim Backupprivate void tryRequestBackupMedium(java.lang.String backupRunID) throws BackupException
BackupException
private java.util.ArrayList<BackupTask.ContainerEntry> containerWalk() throws PersistenceException
Laeuft rekursiv durch ein Verzeichnis und laedt die Container in den Index.
PersistenceException
- Fehler in der Persistenzprivate java.util.List<java.lang.Long> getContainerIDsToBackup(java.io.File didDir) throws PersistenceException
Ermittelt, welche Container in einem Verzeichnis gesichert werden sollen. Diese Funktion wird nur benutzt, wenn der schnelle Weg über ContainerBackupIndex nicht funktioniert.
didDir
- Verzeichnis, welches geprüft wirdPersistenceException
- Fehler in der Persistenzpublic static java.util.List<java.lang.Long> getContainerIDsToBackupStatic(java.io.File didDir, PersistenceManager persistenceManager, Task task) throws PersistenceException
Ermittelt, welche Container in einem Verzeichnis gesichert werden sollen. Wird statisch bereitgestellt, da auch an anderen Stellen gebraucht
didDir
- Verzeichnis, welches geprüft wirdpersistenceManager
- PersistenceManagertask
- TaskPersistenceException
- Fehler in der Persistenzprivate int backupContainerList(java.util.ArrayList<BackupTask.ContainerEntry> containerList, java.lang.String backupRunID) throws BackupException
Sichert alle angegebenen Container.
containerList
- Liste mit Containern, welche gesichert werden sollenbackupRunID
- ID des BackuplaufesBackupException
- Fehler beim Backupprivate void closeBackup(java.util.ArrayList<BackupTask.ContainerEntry> containerList) throws BackupException
BackupException
private void clearCurrentIndexFile() throws BackupException
BackupException
private void rollbackChanges(java.util.ArrayList<BackupTask.ContainerEntry> containerList) throws BackupException
BackupException
private void requestBackupMedium(int backupMediumID, java.lang.String backupRunID) throws BackupException
Mit dieser Methode wird der Operator aufgefordert, ein bestimmtes Medium einzulegen. Die Methode blockiert bis der Operator das Einlegen bestätigt oder abgebrochen hat.
backupMediumID
- MediumIDbackupRunID
- ID des BackupvorgangsBackupException
- Medium nicht verfügbarprivate void markContainer(long containerId, BackupTask.ContainerLocation containerLocation, boolean toBeMarkedAsSaved) throws BackupException
Markiert einen Container als gesichert bzw. ungesichert und aktualisiert den Index entsprechend.
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 java.io.IOException
Erstellt das temporäre Verzeichnis für die Indexdatei und erstellt eine leere Indexdatei
java.io.IOException
- IO-Fehler beim Vorgangprivate void disposeIndices()
Löscht die Indexdateien und sonstige temporäre Dateien und Verzeichnisse
private void deleteFile(java.io.File file)
Löscht eine Datei un gibt eine Warnung aus, wenn das Löschen fehlschlägt
file
- Datei die gelöscht werden sollpublic int estimateIndexSize(int countSavedContainers)
Schätzt die Indexgröße für eine angegebene Zahl Einträge. Wird gebraucht um festzustellen, ob noch genug Platz für einen Container + Index auf einem Medium ist
countSavedContainers
- Anzahl der Containerprivate void increaseMediumID()
Erhöht die MedienID um 1
public static void setBackupModul(java.lang.String propertiesFile) throws BackupException
Setzt das zu verwendende Backup-Modul.
propertiesFile
- Datei in dem das zu verwendende Modul gespeichert ist.BackupException
- Fehler beim Vorgangpublic static BackupModul getBackupModul()
Gibt das verwendete Backupmodul zurück
public static int getLastUsedMediumID()
Gibt die zuletzt verwendete MedienID zurück
public static void setLastUsedMediumID(int mediumID)
Setzt die zuletzt verwendete MedienID. Für nach nächste Backup wird der um 1 inkrementierte Wert verwendet
mediumID
- zuletzt verwendete MedienIDpublic static BackupTask.BackupResultData getBackupResultData()
Gibt einen BackupTask.BackupResultData
-Dummy zurück