public class RestorePersDirTsk extends Task
Diese Klasse teilt das Persistenzverzeichnis in disjunkte Teilbaeume auf und stellt alle Verwaltungsinformationen wieder her.
Modifier and Type | Field and Description |
---|---|
private int |
_errorCount
Zähler für unerwartete RuntimeExceptions
|
private int |
badDID |
private int |
goodDID |
private long |
maxArchiveTime |
private long |
maxContID |
private int |
maxMedienID |
private PersistenceManager |
persMgr |
private static int |
RESTORE_TEMP_MEM |
private static RestorePersDirTsk[] |
restoreTasks |
private java.util.List<java.io.File> |
startDirs |
private static long |
startTime |
static int |
test_badDID |
static int |
test_frebuilt |
static int |
test_goodDID |
static int |
test_totalDID |
static int |
test_viscont |
private byte[] |
tmpMem |
private int[] |
total_cont_rebuilt |
private int |
totalDID |
_debug, _shouldTerminate, archMgr, didTree, INDEX_MEMORY_SIZE
Modifier | Constructor and Description |
---|---|
private |
RestorePersDirTsk(PersistenceManager pMgr,
java.util.List<java.io.File> startDirectories,
int tmpMemSize) |
Modifier and Type | Method and Description |
---|---|
private boolean |
anyIndexFileMissing(java.io.File didDir)
Prueft, ob im genannten Verzeichnis einer DId und Datenart mindestens eine Indexdatei fehlt.
|
private static java.util.List<java.util.List<java.io.File>> |
calcPartitions(java.lang.String persDir,
int numOfPartitions)
Teilt das uebergebene Verzeichnis in eine Liste (mit
numOfPartitions Elementen) von Listen von Verzeichnissen ein. |
static void |
cleanUpTask()
Gibt den benutzten Speicher frei (insbes. den von den einzelnen Tasks zum Wiederherstellen der Indexe benoetigten Speicher)
|
private ContainerBackupIndex |
createContainerBackupIndex(java.io.File didDir)
Erstellt einen ContainerBackupIndex mit den zu sichernden ContainerIDs in einem Verzeichnis
|
void |
execute()
Durchlaueft mit Hilfe eines
ContainerDataIterator jedes Verzeichnis aus startDirs und stellt die Verwaltungsinformation wieder her. |
static int |
getBadDID() |
static int |
getErrorCount() |
static int |
getFullyRebuiltCont() |
static int |
getGoodDID() |
static long |
getMaxArchiveTime() |
private long[] |
getMaxArchiveTimeMedID(java.io.File didDir,
long[] containerIds)
Gibt die maximale Archivzeit und MedienID aus einem Verzeichnis mit Containerdateien zurück.
|
static long |
getMaxContID() |
static int |
getMaxMedienID() |
static int |
getTotalDID() |
static int |
getVisitedCont() |
static boolean |
restoreDone() |
private static boolean |
splitDirs(java.util.List<java.util.List<java.io.File>> dirs,
int pos)
Die uebergebene Liste enthaelt einen vollstaendigen Querschnitt durch die Verzeichnishierarchie.
|
static void |
startRestore(PersistenceManager pMgr,
int numOfPartitions)
Zerlegt das Persistenzverzeichnis in eine Anzahl disjunkter Teile, erzeugt ebenso viele Wiederherstellungstasks und startet sie.
|
static java.lang.String |
status() |
private static void |
stepDown(java.util.List<java.io.File> dirs)
Steigt solange die Verzeichnishierarchie hinab (maximal bis zur sv-Ebene), wie stets nur ein Verzeichnis auf dem Pfad liegt.
|
static boolean |
success() |
static java.lang.String |
summary() |
static void |
terminateRestore()
Bricht den Wiederherstellungslauf ab
|
addTaskStepListener, cleanUp, getArchMgr, getName, getObjectsFromDav, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone, terminateTask
private static int RESTORE_TEMP_MEM
private static RestorePersDirTsk[] restoreTasks
private static long startTime
public static int test_totalDID
public static int test_badDID
public static int test_goodDID
public static int test_viscont
public static int test_frebuilt
private PersistenceManager persMgr
private java.util.List<java.io.File> startDirs
private byte[] tmpMem
private long maxArchiveTime
private long maxContID
private int maxMedienID
private int totalDID
private int badDID
private int goodDID
private int _errorCount
Zähler für unerwartete RuntimeExceptions
private int[] total_cont_rebuilt
private RestorePersDirTsk(PersistenceManager pMgr, java.util.List<java.io.File> startDirectories, int tmpMemSize)
public static void startRestore(PersistenceManager pMgr, int numOfPartitions)
Zerlegt das Persistenzverzeichnis in eine Anzahl disjunkter Teile, erzeugt ebenso viele Wiederherstellungstasks und startet sie. Zum Wiederherstellen gehoert:
PersistenceManager.REBUILDINDEX_FILE_FLAG_NAME
-Datei (siehe Beschreibung dort) vorhanden ist.pMgr
- Aufrufender PersistenceManagernumOfPartitions
- gewuenschte maximale Anzahl disjunkter Teilepublic static boolean restoreDone()
public static void terminateRestore()
Bricht den Wiederherstellungslauf ab
public static void cleanUpTask()
Gibt den benutzten Speicher frei (insbes. den von den einzelnen Tasks zum Wiederherstellen der Indexe benoetigten Speicher)
public static long getMaxArchiveTime()
public static long getMaxContID()
public static int getMaxMedienID()
public static int getTotalDID()
public static int getGoodDID()
public static int getBadDID()
public static int getErrorCount()
public static int getVisitedCont()
public static int getFullyRebuiltCont()
public static boolean success()
public static java.lang.String summary()
public static java.lang.String status()
public void execute()
Durchlaueft mit Hilfe eines ContainerDataIterator
jedes Verzeichnis aus startDirs
und stellt die Verwaltungsinformation wieder her.
private boolean anyIndexFileMissing(java.io.File didDir)
Prueft, ob im genannten Verzeichnis einer DId und Datenart mindestens eine Indexdatei fehlt.
didDir
- Verzeichnis das geprüft werden sollprivate long[] getMaxArchiveTimeMedID(java.io.File didDir, long[] containerIds)
Gibt die maximale Archivzeit und MedienID aus einem Verzeichnis mit Containerdateien zurück. Die Archivzeit wird aus dem Header oder den Archivdaten der jüngsten Containerdatei gelesen. Da der letzte Container häufig nicht abgeschlossen ist, werden zur Ermittlung der maximalen MedienID auch die Header der älteren Containerdateien geprüft.
didDir
- Verzeichnis mit den ContainerdateiencontainerIds
- Aufsteigend sortiertes Array mit den ContainerIDs der in diesem Verzeichnis enthaltenen Container (kann über PersistenceManager.getSortedContainerIDs(String)
ermittelt werden}private ContainerBackupIndex createContainerBackupIndex(java.io.File didDir)
Erstellt einen ContainerBackupIndex mit den zu sichernden ContainerIDs in einem Verzeichnis
didDir
- Verzeichnisprivate static java.util.List<java.util.List<java.io.File>> calcPartitions(java.lang.String persDir, int numOfPartitions)
Teilt das uebergebene Verzeichnis in eine Liste (mit numOfPartitions
Elementen) von Listen von Verzeichnissen ein. Diese Liste repraesentiert das vollstaendige Verzeichnis. Jedes Element kann von einem eigenen Thread bearbeitet werden.
persDir
- numOfPartitions
- private static void stepDown(java.util.List<java.io.File> dirs)
Steigt solange die Verzeichnishierarchie hinab (maximal bis zur sv-Ebene), wie stets nur ein Verzeichnis auf dem Pfad liegt. Das unterste einzelne Verzeichnis wird dann durch die enthaltenen Unterverzeichnisse ersetzt.
dirs
- Verzeichnisse eines Verzeichnissesprivate static boolean splitDirs(java.util.List<java.util.List<java.io.File>> dirs, int pos)
Die uebergebene Liste enthaelt einen vollstaendigen Querschnitt durch die Verzeichnishierarchie. Diese Methode teilt die Liste von Verzeichnissen an Position pos
in zwei Haelften und fuegt die zweite Haelfte hinter pos
ein.
dirs
- Liste von Listen von Verzeichnissenpos
- Position