public class PersistenceManager extends Object
Modifier and Type | Field and Description |
---|---|
private boolean |
_preventWriteStartupInfo |
static String |
ACTIVITY_FLAG_FILE_NAME
Dateiname des Lock-Files des Archivsystems.
|
private String |
archivePath |
private ArchiveManager |
archivMgr |
private static Pattern |
ASP_DIRNAME_PAT |
private static String |
ASP_ID_PREFIX |
private static Pattern |
ATG_DIRNAME_PAT |
private static String |
ATG_ID_PREFIX |
private Map<Task,Map<Integer,ContainerFile>> |
containerFileMap
Jede Task richtet ihre Persistanz-Anfragen an den Persistenz-Manager.
|
static String[] |
DATAKIND_SUFFIX
Verzeichnisnamen der Datensatzarten.
|
private static int |
directoryCount
Zaehlt die besuchten Verzeichnisse beim Pruefen des Persistenzverzeichnisses
|
private File |
isActive
Die Datei zeigt an, ob das Persistenzverzeichnis von einem Archivsystem gerade benutzt wird.
|
private Debug |
logger |
private AtomicLong |
nextContainerID
Enthaelt die zuletzt verwendete ContainerID
|
private static Pattern |
NUM_DIR_PAT |
private static Pattern |
OBJ_DIRNAME_PAT |
private static String |
OBJ_ID_PREFIX |
static String |
REBUILDINDEX_FILE_FLAG_NAME
Eine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index
moeglicherweise (wg.
|
private static int |
REBUILDINDEX_IDX_SIZE
Zum Wiederaufbau der Indexe werden temporaer Indexe dieser Groesse angelegt
|
private StartupProperties |
startupProps |
private static Pattern |
SV_DIRNAME_PAT |
private static String |
SV_PREFIX |
Constructor and Description |
---|
PersistenceManager(ArchiveManager archMgr,
String archPath)
Erzeugt den Persistenz-Manager.
|
Modifier and Type | Method and Description |
---|---|
void |
accessContainer(Task task,
int cfIdx,
long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind,
long containerId)
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainer(Task task,
int cfIdx,
long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind,
String pathName,
boolean createDir,
long containerId)
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainer(Task task,
long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind,
long containerId)
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainer(Task task,
long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind,
String pathName,
boolean createDir,
long containerId)
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainer(Task task,
String didPath,
long containerId)
Assoziiert den angegebenen Task mit dem spezifizierten Container, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainerReadOnly(Task task,
File contFile)
Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
void |
accessContainerReadOnly(Task task,
int cfIdx,
File contFile)
Assoziiert den angegebenen Task mit der angegebenen Containerdatei, so dass alle anschliessend von diesem Task aufgerufenen Methoden auf diesen Container
wirken.
|
static void |
appendPathName(StringBuilder pathName,
String basePath,
long objId,
long atgId,
long aspId,
int sv)
Ergänzt das übergebene StringBuilder-Objekt um den Archiv-Pfad fuer die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems.
|
void |
appendSerializedData(Task task)
Haengt den uebergebenen, serialisierten Archivdatensatz an den mit
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifizierten
Container an. |
void |
assignIndexes(DataIdentTree dit,
ArchiveDataSpecification ads,
ArchiveDataKind adk,
Task task,
byte[] tempMem)
Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu.
|
void |
assignIndexes(DataIdentTree dit,
long objID,
long atgID,
long aspID,
int sv,
ArchiveDataKind archiveDataKind,
Task task,
byte[] tempMem)
Weist, falls nicht bereits geschehen, dem DataIdentNode seine Indexe zu.
|
private boolean |
checkPersDirNode(File curDir,
DataIdentTree dit,
String mode) |
void |
checkPersistenceDir(String mode)
Prueft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen.
|
void |
closeContainer(Task task,
DataIdentNode din,
ArchiveDataKind adk)
Schliesst die Container-Datei fuer den mit
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifizierten Container. |
void |
closeContainerRecount(Task task,
DataIdentNode din,
ArchiveDataKind adk)
Schliesst einen Container, indem jeder Datensatz-Header des Containers gelesen wird, um die Min-/Max-Werte und die Anzahl der Datensaetze zu bestimmen.
|
boolean |
closeIndex(DataIdentNode din,
long objID,
long atgID,
long aspID,
int sv,
ArchiveDataKind archiveDataKind,
byte[] tmpMem)
Schliesst die Indexe der Datensatzart des DataIndentNode.
|
int |
countContainerEntries(Task task)
Zaehlt die Anzahl der Datensaetze in dem mit einer
accessContainer() -Methode im Zugriff befindlichen Container durch Iterieren ueber die
Datensaetze in der Container-Datei. |
void |
createContainer(Task task,
boolean toSave)
Erzeugt eine neue Container-Datei fuer den mit
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifizierten Container. |
String |
createLockFile()
Das Logfile
isActive anlegen. |
void |
createRebuildIxdFlagFile(String didPath)
Legt im Verzeichnis der Datenidentifikation ein
REBUILDINDEX_FILE_FLAG_NAME -Datei an. |
void |
deleteContainerData(Task task)
Loescht alle Datensaetze eines Datencontainers, so dass lediglich der Header mit der Verwaltungs-Information in der Datei erhalten bleibt.
|
boolean |
deleteLockFile()
Löscht das LogFile
isActive , falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder frei |
void |
deleteSimVar(long objId,
long atgId,
long aspId,
int simVar)
Diese Methode loescht das komplette Verzeichnis eines
DataIdentNode mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen
Datencontainern; damit werden alle archivierten Datensaetze einer Simulationsvariante geloescht. |
boolean |
existsContainer(Task task)
Prueft ob bereits eine Container-Datei fuer den mit
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifizierten Container
existiert. |
static long[] |
extractDIdFromPath(File path)
Extrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Laenge 4 haben muss.
|
ContainerDataIterator |
getArchiveData(Task task)
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
|
ContainerDataIterator |
getArchiveData(Task task,
boolean considerDeleted)
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
|
ContainerDataIterator |
getArchiveData(Task task,
int cfIdx)
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
|
ContainerDataIterator |
getArchiveData(Task task,
int cfIdx,
boolean considerDeleted)
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers.
|
static ArchiveDataKind |
getArchiveDataKindFromDir(File dir) |
String |
getArchivePath()
Liefert den Wurzelpfad des Persistenzverzeichisses, der beim Systemstart in der Kommandozeile uebergeben wurde.
|
private ContainerFile |
getContainerFile(Task task)
Liefert das ContainerFile-Objekt fuer die angegebene anfragende Task.
|
private ContainerFile |
getContainerFile(Task task,
int cfIdx)
Liefert das ContainerFile-Objekt mit dem angegebenen Index fuer die angegebene anfragende Task.
|
ArchiveDataKind |
getContainerHeaderParamAsArchiveDataKind(Task task,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
boolean |
getContainerHeaderParamAsBoolean(Task task,
int cfIdx,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
boolean |
getContainerHeaderParamAsBoolean(Task task,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
int |
getContainerHeaderParamAsInt(Task task,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
long |
getContainerHeaderParamAsLong(Task task,
int cfIdx,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
long |
getContainerHeaderParamAsLong(Task task,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
String |
getContainerHeaderParamAsString(Task task,
int cfIdx,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
String |
getContainerHeaderParamAsString(Task task,
KeyValParam param)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. |
long |
getContainerSize(Task task)
Ermittelt die Gesamtlänge des mit
accessContainer() - im Zugriff befindlichen Containers. |
static String |
getContFileName(long containerId)
Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
|
static long |
getContID(File file)
Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
|
static long |
getContID(String fileName)
Liefert die Container-ID zum Namen der angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
|
private File |
getCreatePersDir(long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind archiveDataKind)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation.
|
private File |
getCreatePersDir(String pathName)
Liefert ein File für das angegebene Verzeichnis.
|
ContainerDataIterator |
getHdrData(Task task,
int cfIdx)
Liefert einen Iterator zum Durchlaufen der Min-/Maxwerte des Container-Headers Damit ein Task mehrere Container gleichzeitig parallel offen halten kann,
wird der cfIdx zur Unterscheidung der ContainerFile-Objekte benutzt.
|
static String |
getIDPart(String dirName) |
long |
getLargestContainerID(String path)
Liefert von allen Containerdateien im angegebenen Verzeichnis die hoechste Container-ID.
|
long |
getLastContainerID() |
String |
getPathName(ArchiveDataSpecification ads,
ArchiveDataKind archiveDataKind)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart.
|
String |
getPathName(long objId,
long atgId,
long aspId,
int sv)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation.
|
String |
getPathName(long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart.
|
String |
getPathName(long objId,
long atgId,
long aspId,
int sv,
int dataKind)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und Datensatzart.
|
static String |
getPathName(String basePath,
long objId,
long atgId,
long aspId,
int sv)
Liefert den Archiv-Pfad fuer die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems.
|
static long[] |
getSortedContainerIDs(String path)
Liefert die ContainerIDs von allen Containerdateien im angegebenen Verzeichnis, aufsteigend sortiert.
|
static boolean |
isActivityFlagFile(String name) |
boolean |
isContainerClosed(Task task)
Prueft ob der mit
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifizierte Container bereits abgeschlossen ist. |
boolean |
isContainerClosed(Task task,
int cfIdx)
Prueft ob der mit
accessContainer(Task,int,long,long,long,int,ArchiveDataKind,long) spezifizierte Container bereits abgeschlossen ist. |
static boolean |
isContainerFile(File file)
Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.
|
static boolean |
isIndexFile(String name) |
static boolean |
isRebuildIndexFlagFile(String name) |
static boolean |
isValidAspIdFolderName(String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Aspekt-ID repraesentiert.
|
static boolean |
isValidAtgIdFolderName(String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Attributgruppen-ID repraesentiert.
|
static boolean |
isValidDataKindFolderName(String dirName) |
static boolean |
isValidIDFolderName(String dirName) |
static boolean |
isValidObjIdFolderName(String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name innerhalb eines Pfades ist, der eine Objekt-ID repraesentiert.
|
static boolean |
isValidStorageArSFile(String name) |
static boolean |
isValidSvFolderName(String dirName)
Prueft, ob der gegebene Verzeichnisname ein gueltiger Name fuer ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.
|
static boolean |
isValidTopLevelArSFile(String name) |
void |
leaveContainer(Task task)
Beendet das Arbeiten mit dem zuvor ueber eine der
accessContainer() -Methoden definierten Container. |
void |
leaveContainer(Task task,
int cfIdx)
Beendet das Arbeiten mit dem zuvor ueber eine der
accessContainer() -Methoden definierten Container. |
long |
nextContainerID()
Erhoeht nextContainerID um 1 und gibt den Wert zurueck.
|
void |
prepareShutdown(DataIdentTree dit,
byte[] tmpMem) |
void |
readContainerHeader(Task task)
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.
|
void |
readContainerHeader(Task task,
int cfIdx)
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.
|
int[] |
rebuildIndex(Task task,
byte[] tmpBuf,
long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind archiveDataKind)
Baut Datenindex-, Archivzeit- und Datenzeitindexe der angegebenen Datenidentifikation und Datensatzart neu auf.
|
int[] |
rebuildIndex(Task task,
byte[] tmpBuf,
String didPath)
Baut Datenindex-, Archivzeit- und Datenzeitindexe der Datenidentifikation und Datensatzart unter dem angegebenen Verzeichnis neu auf.
|
void |
removeContainerFileObjects(Task task)
Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte und den Index-Map.
|
void |
removeContainerFileObjects(Task task,
int minCFs)
Loescht alle fuer den angegebenen Task angelegten ContainerFile-Objekte bis auf das angegebene Minimum.
|
private void |
removeRebuildIxdFlagFile(String didPath)
Loescht die
REBUILDINDEX_FILE_FLAG_NAME -Datei. |
void |
resetContainerFileMap()
Leert die Hashtabelle fuer die
ContainerFile -Objekte. |
void |
restoreHeader(Task task,
File file)
Der Container-Header der Container-Datei, die mit dem Aufruf
accessContainer(Task,long,long,long,int,ArchiveDataKind,long) spezifiziert worden ist,
wird mit dem Container-Header aus der angegebenen Container-Datei ueberschrieben. |
int |
serializeData(Task task,
ResultData newData,
long arcTime,
Deflater compresser)
Serialisiert den uebergebenen Datensatz und speichert ihn in
ContainerFile#actualDataBuf und ContainerFile#actualDataSize . |
int |
serializeDataGap(Task task,
long dataIndex,
long dataTime,
long archiveTime,
Deflater compresser)
Serialisiert eine Datenluecke anstelle eines Datensatzes.
|
int |
serializeReqData(Task task,
ArchiveData newData,
long arcTime,
Deflater compresser)
Serialisiert den uebergebenen nachgeforderten Datensatz und speichert ihn in
ContainerFile#actualDataBuf und ContainerFile#actualDataSize . |
void |
setAutoExtendLoeschutz(Task task,
int cfIdx,
long t_ls,
long t_lsMax)
Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2
|
void |
setAutoExtendLoeschutz(Task task,
long t_ls,
long t_lsMax)
Verlaengert den Loschschutz gemaess TAnfArS 5.1.2.4.2
|
void |
setContainerHeaderParam(Task task,
KeyValParam param,
long val)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen
Parameters im Container-Header geaendert werden. |
void |
setContainerHeaderParam(Task task,
KeyValParam param,
String val)
Nachdem mit
readContainerHeader(Task) der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im
Container-Header geaendert werden. |
void |
setPersistenceDir(String archPath) |
boolean |
startupProcedure()
Versucht, die StartUp-Properties-Datei einzulesen.
|
void |
writeContainerHeader(Task task)
Die mit
setContainerHeaderParam(Task task,KeyValParam param,String val) gesetzten Parameter werden im Container-Header persistiert. |
void |
writeContainerHeader(Task task,
int cfIdx)
Die mit
setContainerHeaderParam(Task task,KeyValParam param,String val) gesetzten Parameter werden im Container-Header persistiert. |
private Debug logger
private static final String OBJ_ID_PREFIX
private static final String ATG_ID_PREFIX
private static final String ASP_ID_PREFIX
private static final String SV_PREFIX
public static final String[] DATAKIND_SUFFIX
Util.getDataKindIndex(ArchiveDataKind)
.private static final Pattern OBJ_DIRNAME_PAT
private static final Pattern ATG_DIRNAME_PAT
private static final Pattern ASP_DIRNAME_PAT
private static final Pattern SV_DIRNAME_PAT
private static final Pattern NUM_DIR_PAT
public static final String ACTIVITY_FLAG_FILE_NAME
public static String REBUILDINDEX_FILE_FLAG_NAME
private static int REBUILDINDEX_IDX_SIZE
private static int directoryCount
private AtomicLong nextContainerID
private ArchiveManager archivMgr
private StartupProperties startupProps
private String archivePath
private File isActive
private Map<Task,Map<Integer,ContainerFile>> containerFileMap
private boolean _preventWriteStartupInfo
public PersistenceManager(ArchiveManager archMgr, String archPath)
archMgr
- Archiv-ManagerarchPath
- Archivierungs-Verzeichnispublic void setPersistenceDir(String archPath)
public static boolean isContainerFile(File file)
file
- zu pruefende Dateipublic static boolean isIndexFile(String name)
name
- Name einer Dateipublic static boolean isRebuildIndexFlagFile(String name)
name
- Name einer Dateipublic static boolean isActivityFlagFile(String name)
name
- Name einer Dateipublic static boolean isValidStorageArSFile(String name)
name
- Name einer Dateipublic static boolean isValidTopLevelArSFile(String name)
name
- Name einer Dateipublic static long getContID(File file)
file
- Container-Dateipublic static long getContID(String fileName)
fileName
- Container-Dateipublic static String getContFileName(long containerId)
containerId
- Container-IDpublic String getPathName(long objId, long atgId, long aspId, int sv)
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariantepublic static String getPathName(String basePath, long objId, long atgId, long aspId, int sv)
basePath
- Wurzelpfad des ArchivsystemsobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariantepublic static void appendPathName(StringBuilder pathName, String basePath, long objId, long atgId, long aspId, int sv)
pathName
- StringBuilder-Objekt, an das der ermittelte Pfad ergänzt werden soll.basePath
- Wurzelpfad des ArchivsystemsobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariantepublic String getPathName(long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind)
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- Datensatzartpublic String getPathName(long objId, long atgId, long aspId, int sv, int dataKind)
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- Datensatzart, 0 für OA, 1 für ON, 2 für NA und 3 für NNpublic String getPathName(ArchiveDataSpecification ads, ArchiveDataKind archiveDataKind)
ads
- Spezifikation des Archivdatensatzes (enthaelt objID, atgID, aspID, sv)archiveDataKind
- Datensatzartpublic static ArchiveDataKind getArchiveDataKindFromDir(File dir)
public long getLargestContainerID(String path)
path
- Zu durchsuchendes Verzeichnispublic static long[] getSortedContainerIDs(String path)
path
- Zu durchsuchendes Verzeichnispublic void deleteSimVar(long objId, long atgId, long aspId, int simVar) throws PersistenceException
DataIdentNode
mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen
Datencontainern; damit werden alle archivierten Datensaetze einer Simulationsvariante geloescht. Der DataIdentNode
muss in der Verwaltung aus dem
DataIdentTree
geloescht werden. Falls die Simulationsvariante gleich Null ist, oder das Verzeichnis nicht geloescht werden konnte, wird eine PersistenceException
geworfen.objId
- atgId
- aspId
- simVar
- PersistenceException
public void accessContainer(Task task, String didPath, long containerId) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.task
- Anfragender TaskdidPath
- Pfad bis zur DatensatzartcontainerId
- Container-IDPersistenceException
public void accessContainer(Task task, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, long containerId) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.task
- Anfragender TaskobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- DatensatzartcontainerId
- Container-IDPersistenceException
public void accessContainer(Task task, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, String pathName, boolean createDir, long containerId) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.task
- Anfragender TaskobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- DatensatzartpathName
- Pfadname des Verzeichnisses der ContainerdateicontainerId
- Container-IDPersistenceException
public void accessContainer(Task task, int cfIdx, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, long containerId) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der
ContainerFile-Objekte benutzt. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.task
- Anfragender TaskcfIdx
- ContainerFile-IndexobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- DatensatzartcontainerId
- Container-IDPersistenceException
public void accessContainer(Task task, int cfIdx, long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, String pathName, boolean createDir, long containerId) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur Unterscheidung der
ContainerFile-Objekte benutzt. Falls das Verzeichnis der Datenidentifikation nicht existiert, wird es angelegt.task
- Anfragender TaskcfIdx
- ContainerFile-IndexobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- DatensatzartpathName
- Pfadname des Verzeichnisses der ContainerdateicontainerId
- Container-IDPersistenceException
public void accessContainerReadOnly(Task task, File contFile) throws PersistenceException
leaveContainer(Task)
aufgerufen werden.task
- Anfragender TaskcontFile
- ContainerdateiPersistenceException
public void accessContainerReadOnly(Task task, int cfIdx, File contFile) throws PersistenceException
leaveContainer(Task)
aufgerufen werden. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur
Unterscheidung der ContainerFile-Objekte benutzt.task
- Anfragender TaskcfIdx
- ContainerFile-IndexcontFile
- ContainerdateiPersistenceException
public void leaveContainer(Task task) throws PersistenceException
accessContainer()
-Methoden definierten Container. Diese Methode muss aufgerufen werden, wenn
danach auf einen anderen Container zugegriffen werden soll.task
- Anfragender TaskPersistenceException
public void leaveContainer(Task task, int cfIdx) throws PersistenceException
accessContainer()
-Methoden definierten Container. Diese Methode muss aufgerufen werden, wenn
danach auf einen anderen Container zugegriffen werden soll. Damit ein Task mehrere Container gleichzeitig parallel offen halten kann, wird der cfIdx zur
Unterscheidung der ContainerFile-Objekte benutzt.task
- Anfragender TaskcfIdx
- ContainerFile-IndexPersistenceException
public boolean existsContainer(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten Container
existiert.task
- Anfragende TaskPersistenceException
public void createContainer(Task task, boolean toSave) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten Container. Schreibt den
Container-Header und befuellt diesen mit den angegebenen Parametern.task
- Anfragender TasktoSave
- SichernPersistenceException
public void createRebuildIxdFlagFile(String didPath) throws PersistenceException
REBUILDINDEX_FILE_FLAG_NAME
-Datei an.didPath
- Pfad der DatenidentifikationPersistenceException
REBUILDINDEX_FILE_FLAG_NAME
private void removeRebuildIxdFlagFile(String didPath)
REBUILDINDEX_FILE_FLAG_NAME
-Datei.didPath
- public void closeContainer(Task task, DataIdentNode din, ArchiveDataKind adk) throws PersistenceException, IndexException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten Container. Der
Container-Header wird entsprechend aktualisiert. Die Min/Max-Werte und die Anzahl der Datensaetze werden dem DataIdentNode und dessen Indexen entnommen.task
- Anfragender Taskdin
- DataIdentNode des aktuellen Containersadk
- Datensatzart des aktuellen ContainersPersistenceException
IndexException
public void closeContainerRecount(Task task, DataIdentNode din, ArchiveDataKind adk) throws PersistenceException
task
- Anfragender Taskdin
- DataIdentNode des aktuellen Containersadk
- Datensatzart des aktuellen ContainersPersistenceException
public boolean isContainerClosed(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierte Container bereits abgeschlossen ist.task
- Anfragender TaskPersistenceException
public boolean isContainerClosed(Task task, int cfIdx) throws PersistenceException
accessContainer(Task,int,long,long,long,int,ArchiveDataKind,long)
spezifizierte Container bereits abgeschlossen ist.task
- Anfragender TaskPersistenceException
public void removeContainerFileObjects(Task task, int minCFs)
task
- Anfragender TaskminCFs
- Minimale Anzahl ContainerFiles, die nicht geloescht werden.public void removeContainerFileObjects(Task task)
task
- Anfragender Taskpublic void assignIndexes(DataIdentTree dit, ArchiveDataSpecification ads, ArchiveDataKind adk, Task task, byte[] tempMem) throws DIdNodeNotFoundException, IndexException, PersistenceException
dit
- Baum bestehend aus DataIdentNode
ads
- Spezifikation des Archivdatensatzes (enthaelt objID, atgID, aspID, sv)adk
- Datensatzarttask
- Anfragender TasktempMem
- Temporaerer Speicher zum EInlesen der IndexeDIdNodeNotFoundException
IndexException
PersistenceException
public void assignIndexes(DataIdentTree dit, long objID, long atgID, long aspID, int sv, ArchiveDataKind archiveDataKind, Task task, byte[] tempMem) throws DIdNodeNotFoundException, IndexException, PersistenceException
DataIdentNode.containerEntries
auf -1 gesetzt. Wenn der Index fortgefuehrt wird,
wird im letzten Container nachgezaehlt (aufwendig) und DataIdentNode.containerEntries
auf das Ergebnis gesetzt.dit
- Baum bestehend aus DataIdentNode
objID
- Objekt-IDatgID
- Attributgruppen-IDaspID
- Aspekt-IDsv
- SimulationsvariantearchiveDataKind
- Datensatzarttask
- Anfragender TasktempMem
- Temporaerer Speicher zum Einlesen der IndexeDIdNodeNotFoundException
IndexException
PersistenceException
public void prepareShutdown(DataIdentTree dit, byte[] tmpMem)
public boolean closeIndex(DataIdentNode din, long objID, long atgID, long aspID, int sv, ArchiveDataKind archiveDataKind, byte[] tmpMem) throws IndexException
din
- objID
- atgID
- aspID
- sv
- archiveDataKind
- DatensatzarttmpMem
- temporaerer Speicher, der zum Schliessen des Index benoetigt wirdIndexException
public void readContainerHeader(Task task) throws PersistenceException
getContainerHeaderParamAsString(Task,KeyValParam)
abgefragt werden.task
- Anfragender TaskPersistenceException
public void readContainerHeader(Task task, int cfIdx) throws PersistenceException
getContainerHeaderParamAsString(Task,KeyValParam)
abgefragt werden.task
- Anfragender TaskcfIdx
- ContainerFile-IndexPersistenceException
public String getContainerHeaderParamAsString(Task task, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Wirfte eine PersistenceException
, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters
unabhaengig von dessen Typ immer als String zurueck.task
- Anfragende Taskparam
- Container-Header-ParameterPersistenceException
KeyValParam
public String getContainerHeaderParamAsString(Task task, int cfIdx, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Wirfte eine PersistenceException
, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters
unabhaengig von dessen Typ immer als String zurueck.task
- Anfragende TaskcfIdx
- ContainerFile-Indexparam
- Container-Header-ParameterPersistenceException
KeyValParam
public ArchiveDataKind getContainerHeaderParamAsArchiveDataKind(Task task, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als Datensatzart zurueck. Wirfte eine PersistenceException
, falls der Parameter
nicht gefunden wurde oder nicht in den Typ ArchiveDataKind
umgeformt werden kann.task
- Anfragende Taskparam
- Container-Header-ParameterPersistenceException
public boolean getContainerHeaderParamAsBoolean(Task task, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurueck. Wirfte eine PersistenceException
, falls der
Parameter nicht gefunden wurde oder nicht in den Typ boolean
umgeformt werden kann.task
- Anfragende Taskparam
- Container-Header-Parametertrue
oder false
PersistenceException
public boolean getContainerHeaderParamAsBoolean(Task task, int cfIdx, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurueck. Wirfte eine PersistenceException
, falls der
Parameter nicht gefunden wurde oder nicht in den Typ boolean
umgeformt werden kann.task
- Anfragende TaskcfIdx
- ContainerFile-Indexparam
- Container-Header-Parametertrue
oder false
PersistenceException
public long getContainerHeaderParamAsLong(Task task, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long
zurueck. Wirfte eine PersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typ long
umgeformt werden kann.task
- Anfragende Taskparam
- Container-Header-Parameterlong
PersistenceException
public long getContainerHeaderParamAsLong(Task task, int cfIdx, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long
zurueck. Wirfte eine PersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typ long
umgeformt werden kann.task
- Anfragende TaskcfIdx
- ContainerFile-Indexparam
- Container-Header-Parameterlong
PersistenceException
public int getContainerHeaderParamAsInt(Task task, KeyValParam param) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines
Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long
zurueck. Wirfte eine PersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typ long
umgeformt werden kann.task
- Anfragende Taskparam
- Container-Header-Parameterlong
PersistenceException
public void setContainerHeaderParam(Task task, KeyValParam param, String val) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Parameters im
Container-Header geaendert werden. Wirft eine PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.task
- Anfragender Taskparam
- Container-Header-Parameterval
- Wert des Container-Header-ParametersPersistenceException
public void setContainerHeaderParam(Task task, KeyValParam param, long val) throws PersistenceException
readContainerHeader(Task)
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines numerischen
Parameters im Container-Header geaendert werden. Wirft eine PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.task
- Anfragender Taskparam
- Container-Header-Parameterval
- Numerischer Wert des Container-Header-ParametersPersistenceException
public void restoreHeader(Task task, File file) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifiziert worden ist,
wird mit dem Container-Header aus der angegebenen Container-Datei ueberschrieben.task
- Anfragender Taskfile
- Container-DateiPersistenceException
public void writeContainerHeader(Task task) throws PersistenceException
setContainerHeaderParam(Task task,KeyValParam param,String val)
gesetzten Parameter werden im Container-Header persistiert.task
- Anfragender TaskPersistenceException
public void writeContainerHeader(Task task, int cfIdx) throws PersistenceException
setContainerHeaderParam(Task task,KeyValParam param,String val)
gesetzten Parameter werden im Container-Header persistiert.task
- Anfragender TaskPersistenceException
public boolean startupProcedure()
RestorePersDirTsk
) durchlaufen
und versucht, einen gueltigen Startpunkt wiederherzustellen. Das Persistenzverzeichnis wird in InQueuesMgr.NUM_OF_ARCH_QUEUES_ONLINE
Teile
aufgeteilt, die jeweils von einem Thread bearbeitet werden (zwengs Performance). Am Schluss wird die StartUp-Properties-Datei geloescht. Beim Herunterfahren
wird in prepareShutdown(DataIdentTree,byte[])
die Datei neu geschrieben. Daran kann das ArS beim naechsten Start erkennen, ob es ordnungsgemaess
heruntergefahren wurde oder ob ein Wiederherstellungslauf erforderlich ist.public int[] rebuildIndex(Task task, byte[] tmpBuf, String didPath) throws PersistenceException, IndexException
task
- Anfragender TasktmpBuf
- Temporaerer Speicherbereich, der zum Neuaufbau der Indexe verwendet werden kann.didPath
- Vollstaendiger Pfad bis zur DatensatzartPersistenceException
IndexException
rebuildIndex(Task,byte[],long,long,long,int,ArchiveDataKind)
public int[] rebuildIndex(Task task, byte[] tmpBuf, long objId, long atgId, long aspId, int sv, ArchiveDataKind archiveDataKind) throws IndexException, PersistenceException
task
- Anfragender TasktmpBuf
- Temporaerer Speicherbereich, der zum Neuaufbau der Indexe verwendet werden kann.objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantearchiveDataKind
- DatensatzartPersistenceException
IndexException
PersistenceException
public int serializeData(Task task, ResultData newData, long arcTime, Deflater compresser) throws PersistenceException
ContainerFile#actualDataBuf
und ContainerFile#actualDataSize
. Da der ArchivTask
vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf die Methoden ContainerFile#preserializeData()
und ContainerFile#appendPreserializedData()
aufgeteilt.task
- Anfragender TasknewData
- Zu archivierender DatensatzarcTime
- ArchivzeitstempelPersistenceException
public int serializeDataGap(Task task, long dataIndex, long dataTime, long archiveTime, Deflater compresser) throws PersistenceException
#serializeData(Task,ResultData,long)
.task
- Anfragender TaskdataIndex
- Datenindex der Luecke (= letzter echter Index mit gesetztem Archivbit)dataTime
- DatenzeitarchiveTime
- ArchivzeitPersistenceException
public int serializeReqData(Task task, ArchiveData newData, long arcTime, Deflater compresser) throws PersistenceException
ContainerFile#actualDataBuf
und ContainerFile#actualDataSize
.
Da der ArchivReqTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf
die Methoden ContainerFile#preserializeData()
und ContainerFile#appendPreserializedData()
aufgeteilt.task
- Anfragender TasknewData
- Zu archivierender DatensatzarcTime
- ArchivzeitstempelPersistenceException
public void appendSerializedData(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten
Container an.task
- Anfragender TaskPersistenceException
public ContainerDataIterator getArchiveData(Task task) throws PersistenceException
task
- Anfragender TaskPersistenceException
public ContainerDataIterator getArchiveData(Task task, boolean considerDeleted) throws PersistenceException
task
- Anfragender TaskconsiderDeleted
- gibt an, ob Sonderbehandlung für ausgelagerte Container nötig ist (wichtig beim Nachfordern).PersistenceException
public ContainerDataIterator getArchiveData(Task task, int cfIdx, boolean considerDeleted) throws PersistenceException
task
- Anfragender TaskcfIdx
- ContainerFile-IndexconsiderDeleted
- Gibt an, ob Sonderbehandlung ausgelagerter Container nötig ist (wichtig beim Nachfordern).PersistenceException
public ContainerDataIterator getArchiveData(Task task, int cfIdx) throws PersistenceException
task
- Anfragender TaskcfIdx
- ContainerFile-IndexPersistenceException
public ContainerDataIterator getHdrData(Task task, int cfIdx) throws PersistenceException
task
- Anfragender TaskcfIdx
- ContainerFile-IndexPersistenceException
public int countContainerEntries(Task task) throws PersistenceException
accessContainer()
-Methode im Zugriff befindlichen Container durch Iterieren ueber die
Datensaetze in der Container-Datei. Diese Methode ist nur notwendig, wenn ein noch nicht abgeschlossener Container wieder befuellt wird, weil dann die
Anzahl nicht im Header steht. Im Normalbetrieb wird die Anzahl im DataIdentNode mitgefuehrt.task
- Anfragender TaskPersistenceException
public long getContainerSize(Task task) throws PersistenceException
accessContainer()
- im Zugriff befindlichen Containers.PersistenceException
public void deleteContainerData(Task task) throws PersistenceException
task
- Anfragender TaskPersistenceException
public String createLockFile()
isActive
anlegen. Wird verwendet, um einem Archivsystem anzuzeigen, ob ein anderes Archivsystem dasselbe Persistenzverzeichnis
verwendetpublic boolean deleteLockFile()
isActive
, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder freipublic void checkPersistenceDir(String mode)
private boolean checkPersDirNode(File curDir, DataIdentTree dit, String mode)
public static long[] extractDIdFromPath(File path) throws PersistenceException
path
- Pfad bis zum Verzeichnis der SimulationsvariantePersistenceException
- wenn der Pfad kein gueltiges Verzeichnis istisValidObjIdFolderName(String)
,
isValidAtgIdFolderName(String)
,
isValidAspIdFolderName(String)
,
isValidSvFolderName(String)
public static boolean isValidObjIdFolderName(String dirName)
dirName
- VerzeichisnameOBJ_DIRNAME_PAT
public static boolean isValidAtgIdFolderName(String dirName)
dirName
- VerzeichisnameATG_DIRNAME_PAT
public static boolean isValidAspIdFolderName(String dirName)
dirName
- VerzeichisnameASP_DIRNAME_PAT
public static boolean isValidSvFolderName(String dirName)
dirName
- VerzeichisnameSV_DIRNAME_PAT
public static boolean isValidDataKindFolderName(String dirName)
public static boolean isValidIDFolderName(String dirName)
private File getCreatePersDir(long objId, long atgId, long aspId, int sv, ArchiveDataKind archiveDataKind) throws PersistenceException
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantePersistenceException
private File getCreatePersDir(String pathName) throws PersistenceException
pathName
- PersistenceException
private ContainerFile getContainerFile(Task task)
task
- Taskprivate ContainerFile getContainerFile(Task task, int cfIdx)
task
- Anfragender TaskcfIdx
- ContainerFile-Indexpublic void resetContainerFileMap()
ContainerFile
-Objekte. Dies ist notwendig, wenn (zu Testzwecken) ein neuer InQueuesMgr
angelegt wird.public String getArchivePath()
public long nextContainerID()
public long getLastContainerID()
public void setAutoExtendLoeschutz(Task task, int cfIdx, long t_ls, long t_lsMax) throws PersistenceException
task
- anfragender Taskt_ls
- Zeitdauer, um die der LS verlaengert wird (aus atg.archivEinstellung)t_lsMax
- maximale Zeitdauer, um die verlaengert werden darf (gemessen ab Vorhaltezeitraum)PersistenceException
public void setAutoExtendLoeschutz(Task task, long t_ls, long t_lsMax) throws PersistenceException
task
- anfragender Taskt_ls
- Zeitdauer, um die der LS verlaengert wird (aus atg.archivEinstellung)t_lsMax
- maximale Zeitdauer, um die verlaengert werden darf (gemessen ab Vorhaltezeitraum)PersistenceException