|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.ars.ars.persistence.PersistenceManager
public class PersistenceManager
Zentrale Persistenz-Verwaltung fuer die Archivierung von Daten auf einem Speichermedium vom Typ A (Festplatte) und die entsprechende Meta-Daten-Verwaltung.
Field Summary | |
---|---|
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 Summary | |
---|---|
PersistenceManager(ArchiveManager archMgr,
String archPath)
Erzeugt den Persistenz-Manager. |
Method Summary | |
---|---|
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. ACHTUNG: Das Setzen des Header-Flags auf "geloescht" muss NACH dem Loeschen der Daten aus dem Container erfolgen! |
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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
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
Constructor Detail |
---|
public PersistenceManager(ArchiveManager archMgr, String archPath)
archMgr
- Archiv-ManagerarchPath
- Archivierungs-VerzeichnisMethod Detail |
---|
public void setPersistenceDir(String archPath)
public static boolean isContainerFile(File file)
file
- zu pruefende Datei
public static boolean isIndexFile(String name)
name
- Name einer Datei
public static boolean isRebuildIndexFlagFile(String name)
name
- Name einer Datei
public static boolean isActivityFlagFile(String name)
name
- Name einer Datei
public static boolean isValidStorageArSFile(String name)
name
- Name einer Datei
public static boolean isValidTopLevelArSFile(String name)
name
- Name einer Datei
public static long getContID(File file)
file
- Container-Datei
public static long getContID(String fileName)
fileName
- Container-Datei
public static String getContFileName(long containerId)
containerId
- Container-ID
public String getPathName(long objId, long atgId, long aspId, int sv)
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariante
public static String getPathName(String basePath, long objId, long atgId, long aspId, int sv)
basePath
- Wurzelpfad des ArchivsystemsobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariante
public 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
- Datensatzart
public 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 NN
public String getPathName(ArchiveDataSpecification ads, ArchiveDataKind archiveDataKind)
ads
- Spezifikation des Archivdatensatzes (enthaelt objID, atgID, aspID, sv)archiveDataKind
- Datensatzart
public static ArchiveDataKind getArchiveDataKindFromDir(File dir)
public long getLargestContainerID(String path)
path
- Zu durchsuchendes Verzeichnis
public static long[] getSortedContainerIDs(String path)
path
- Zu durchsuchendes Verzeichnis
public 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-ID
PersistenceException
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-ID
PersistenceException
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-ID
PersistenceException
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-ID
PersistenceException
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-ID
PersistenceException
public void accessContainerReadOnly(Task task, File contFile) throws PersistenceException
leaveContainer(Task)
aufgerufen werden.
task
- Anfragender TaskcontFile
- Containerdatei
PersistenceException
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
- Containerdatei
PersistenceException
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 Task
PersistenceException
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-Index
PersistenceException
public boolean existsContainer(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten Container
existiert.
task
- Anfragende Task
PersistenceException
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
- Sichern
PersistenceException
public void createRebuildIxdFlagFile(String didPath) throws PersistenceException
REBUILDINDEX_FILE_FLAG_NAME
-Datei an.
didPath
- Pfad der Datenidentifikation
PersistenceException
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 Containers
PersistenceException
IndexException
public void closeContainerRecount(Task task, DataIdentNode din, ArchiveDataKind adk) throws PersistenceException
task
- Anfragender Taskdin
- DataIdentNode des aktuellen Containersadk
- Datensatzart des aktuellen Containers
PersistenceException
public boolean isContainerClosed(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierte Container bereits abgeschlossen ist.
task
- Anfragender Task
PersistenceException
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 Task
PersistenceException
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 Indexe
DIdNodeNotFoundException
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 Indexe
DIdNodeNotFoundException
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 wird
IndexException
public void readContainerHeader(Task task) throws PersistenceException
getContainerHeaderParamAsString(Task,KeyValParam)
abgefragt werden.
task
- Anfragender Task
PersistenceException
public void readContainerHeader(Task task, int cfIdx) throws PersistenceException
getContainerHeaderParamAsString(Task,KeyValParam)
abgefragt werden.
task
- Anfragender TaskcfIdx
- ContainerFile-Index
PersistenceException
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-Parameter
PersistenceException
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-Parameter
PersistenceException
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-Parameter
PersistenceException
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-Parameter
true
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-Parameter
true
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-Parameter
long
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-Parameter
long
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-Parameter
long
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-Parameters
PersistenceException
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-Parameters
PersistenceException
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-Datei
PersistenceException
public void writeContainerHeader(Task task) throws PersistenceException
setContainerHeaderParam(Task task,KeyValParam param,String val)
gesetzten Parameter werden im Container-Header persistiert.
task
- Anfragender Task
PersistenceException
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 Task
PersistenceException
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 Datensatzart
PersistenceException
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
- Datensatzart
PersistenceException
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
- Archivzeitstempel
PersistenceException
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
- Archivzeit
PersistenceException
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
- Archivzeitstempel
PersistenceException
public void appendSerializedData(Task task) throws PersistenceException
accessContainer(Task,long,long,long,int,ArchiveDataKind,long)
spezifizierten
Container an.
task
- Anfragender Task
PersistenceException
public ContainerDataIterator getArchiveData(Task task) throws PersistenceException
task
- Anfragender Task
PersistenceException
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-Index
PersistenceException
public ContainerDataIterator getHdrData(Task task, int cfIdx) throws PersistenceException
task
- Anfragender TaskcfIdx
- ContainerFile-Index
PersistenceException
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 Task
PersistenceException
public long getContainerSize(Task task) throws PersistenceException
accessContainer()
- im Zugriff befindlichen Containers.
PersistenceException
public void deleteContainerData(Task task) throws PersistenceException
task
- Anfragender Task
PersistenceException
public String createLockFile()
isActive
anlegen. Wird verwendet, um einem Archivsystem anzuzeigen, ob ein anderes Archivsystem dasselbe Persistenzverzeichnis
verwendet
public boolean deleteLockFile()
isActive
, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder frei
public 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 Simulationsvariante
PersistenceException
- wenn der Pfad kein gueltiges Verzeichnis istisValidObjIdFolderName(String)
,
isValidAtgIdFolderName(String)
,
isValidAspIdFolderName(String)
,
isValidSvFolderName(String)
public static boolean isValidObjIdFolderName(String dirName)
dirName
- Verzeichisname
OBJ_DIRNAME_PAT
public static boolean isValidAtgIdFolderName(String dirName)
dirName
- Verzeichisname
ATG_DIRNAME_PAT
public static boolean isValidAspIdFolderName(String dirName)
dirName
- Verzeichisname
ASP_DIRNAME_PAT
public static boolean isValidSvFolderName(String dirName)
dirName
- Verzeichisname
SV_DIRNAME_PAT
public static boolean isValidDataKindFolderName(String dirName)
public static boolean isValidIDFolderName(String dirName)
public static String getIDPart(String dirName)
private File getCreatePersDir(long objId, long atgId, long aspId, int sv, ArchiveDataKind archiveDataKind) throws PersistenceException
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariante
PersistenceException
private File getCreatePersDir(String pathName) throws PersistenceException
pathName
-
PersistenceException
private ContainerFile getContainerFile(Task task)
task
- Task
private ContainerFile getContainerFile(Task task, int cfIdx)
task
- Anfragender TaskcfIdx
- ContainerFile-Index
public 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
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |