Class PersistenceManager
public final class PersistenceManager
extends java.lang.Object
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
PersistenceManager.ContainerCall
Funktionales Interface für Container-Aktionenstatic class
PersistenceManager.RebuildResult
class
PersistenceManager.Statistics
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ACTIVITY_FLAG_FILE_NAME
Dateiname des Lock-Files des Archivsystems.static java.lang.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 möglicherweise (wg.static java.lang.String
RESTART_TIME_FILE_NAME
Dateiname für Datei mit Zeitstempeln je Datenidentifikation für die Ermittlung des Datenlückenanfangs. -
Constructor Summary
Constructors Constructor Description PersistenceManager(ArchiveManager archMgr, java.nio.file.Path archPath)
Erzeugt den Persistenz-Manager. -
Method Summary
Modifier and Type Method Description ContainerFileHandle
accessContainer(IdContainerFileDir idContainerFileDir, long containerId)
Greift auf einen Container zu.BasicContainerFileHandle
accessContainerUnsynchronized(java.io.File file)
Greift auf eine Containerdatei unsynchronisiert zu.ContainerFileHandle
accessOpenContainer(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind, long openContID)
Greift auf den offenen Container zu.void
addIndexEntries(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long dataIdx, long arsTime, long dataTime, long openContID)
Die Methode addIndexEntries fügt einem Index Werte hinzu.static java.nio.file.Path
appendIdElements(java.nio.file.Path basePath, java.lang.String prefix, long id)
Zerlegt die numerische ID in Gruppen von jeweils 3 Zeichen in Dezimaldarstellung und ergänzt das übergebene Path-Objekt, sodass die übergebene Separtor/Prefixsequenz hinzugefügt wird.long
arSParamGetVorhalten(IdDataIdentification dataIdentification)
Die Methode arSParamGetVorhalten ermittelt den parametrierten Vorhaltezeitraum in Sekunden für eine Datenidentifikation.void
assertNoLocks()
Testmethode fürs Debugging, stellt sicher, dass aktuell keine Locks vom aktuellen Thread gehalten werden.void
checkContainerFile(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId)
Überprüft eine Containerdatei darauf, ob diese mit "##\n" endet.void
checkPersistenceDir(java.lang.String mode)
Prüft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen.static void
copyHeaders(ContainerManagementData from, ContainerFileHandle to)
Trägt Headerdaten in eine Containerdatei einjava.lang.String
createLockFile()
Das LogfileisActive
anlegen.void
createRebuildIxdFlagFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Legt im Verzeichnis der Datenidentifikation einREBUILDINDEX_FILE_FLAG_NAME
-Datei an.void
deleteContainers(SyncKey<IdDataIdentification> indexLock, IdContainerFileDir idContainerFileDir, long... containerIds)
Markiert die angegebenen Container als gelöscht und trägt sie als gelöscht im Index ein.void
deleteLockFile()
Löscht das LogFileisActive
, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder freivoid
deleteSimVar(SyncKey<IdDataIdentification> syncKey)
Diese Methode loescht das komplette Verzeichnis einesDataIdentNode
mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensätze einer Simulationsvariante geloescht.void
extendLoeschschutz(SyncKey<IdDataIdentification> lock, ContainerHeaders handle, long t_lsMillis)
Verlängert die Löschzeit eines Containers.void
extendLoeschschutz(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long contID)
Verlängert die Löschzeit eines Containers in Folge einer Archivanfrage oder ArchivInfoAnfrage.void
flushIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Schreibt den aktuellen Stand der Indexe auf die Festplattejava.lang.String
formatDataIdentification(IdContainerFileDir location)
Die Methode formatDataIdentification gibt eine Datenidentifikation als lesbaren String aus (z.java.lang.String
formatObj(long objId)
Die Methode formatObj gibt eine Objekt-ID als lesbaren String aus (z.static de.bsvrz.dav.daf.main.archive.ArchiveDataKind
getArchiveDataKindFromDir(java.io.File dir)
Extrahiert die Archivdatenart aus einer Pfadangabestatic de.bsvrz.dav.daf.main.archive.ArchiveDataKind
getArchiveDataKindFromDir(java.nio.file.Path dir)
Extrahiert die Archivdatenart aus einer PfadangabeArchiveManager
getArchiveManager()
Gibt archiveManager von diesem PersistenceManager-Objekt zurück.java.nio.file.Path
getArchivePath()
Liefert den Wurzelpfad des Persistenzverzeichisses, der beim Systemstart in der Kommandozeile übergeben wurde.IndexResult<ContainerManagementInformation>
getContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Gibt die Header von alles Cotnainern eines Verzeichnisses zurück.ContainerHeaders
getContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerID)
Gibt die Header eines Containers zurück.static IdContainerFileDir
getContainerLocationFromDir(java.io.File dir)
Erzeugt einIdContainerFileDir
aus einem Datenträgerverzeichnis.static IdContainerFileDir
getContainerLocationFromDir(java.nio.file.Path dir)
Erzeugt einIdContainerFileDir
aus einem Datenträgerverzeichnisstatic java.lang.String
getContFileName(long containerId)
Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.static long
getContID(java.io.File file)
Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.static IdDataIdentification
getDataIdentificationFromPath(java.io.File path)
Extrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Länge 4 haben muss.static IdDataIdentification
getDataIdentificationFromPath(java.nio.file.Path path)
Extrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Länge 4 haben muss.static java.lang.String
getDataKindSuffix(int adkIdx)
Gibt zu der angegebenen Datenart den Pfadnamen zurück, der verwendet wird.static java.lang.String
getDataKindSuffix(de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
Gibt zu der angegebenen Datenart den Pfadnamen zurück, der verwendet wird.com.google.common.collect.SetMultimap<IdDataIdentification,SyncKey<IdDataIdentification>>
getIndexLocks()
Gibt alle aktuell genutzten Locks zur Synchronisation auf die Datenidentifikationen zurück.IndexResult<IndexValues>
getIndexResult(SyncKey<IdDataIdentification> key, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification ats)
Die Methode getIndexResult führt eine Index-Abfrage durch (für Archivanfragen) und aktualisiert dabei die Daten vom offenen Container im Indexjava.util.Set<IdContainerFileDir>
getLargeDataIdentifications()
Gibt ein Set zurück, dass alle bekannten Contaienrverzeichnisse enthält, die "übermäßig viel" Daten enthalten.ContainerHeaders
getLastContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Die Methode getLastContainerHeaders ermittelt die Header vom letzten Container (vom Container mti der größten ID)long
getLastContainerID()
StandardOpenContainerData
getOpenContainerData(IdContainerFileDir containerFileDir)
Die Methode getOpenContainerData die zwischengespeicherten daten für den offenen Container zurücklong
getOpenContID(IdContainerFileDir idContainerFileDir)
Die Methode getOpenContID gibt die ID des offenen Containers für eine Datenidentifikation zurückjava.nio.file.Path
getPath(long objId, long atgId, long aspId, int sv)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation.java.nio.file.Path
getPath(long objId, long atgId, long aspId, int sv, int dataKind)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.java.nio.file.Path
getPath(long objId, long atgId, long aspId, int sv, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.java.nio.file.Path
getPath(DataIdentNode dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
Liefert den Archiv-Pfad für die angegebene DataIdentNode und Datensatzart.java.nio.file.Path
getPath(IdContainerFileDir containerFileDir)
Die Methode getPathName gibt den Speicherort für ein Containerverzeichnis zurückjava.nio.file.Path
getPath(IdDataIdentification dataIdentification)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation.java.nio.file.Path
getPath(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.java.nio.file.Path
getPath(de.bsvrz.dav.daf.main.archive.ArchiveDataSpecification ads, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.static java.nio.file.Path
getPath(java.nio.file.Path basePath, long objId, long atgId, long aspId, int sv)
Liefert den Archiv-Pfad für die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems.long
getProtectedDeletionTime(ContainerHeaders headers)
Gibt den Zeitpunkt zurück, an dem der Löschschutz abläuft.java.nio.file.Path
getRebuildIdxFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Die Methode getRebuildIdxFile ermittelt den Speicherort für die _rebuildIndex.flaglong
getRegularDeletionTime(ContainerHeaders headers)
Gibt den Zeitpunkt zurück, an dem der Container regulär gelöscht werden kannPersistenceManager.Statistics
getStatistics()
Gibt Statistiken von diesem PersistenceManager-Objekt zurück.boolean
hasError(IndexResult<ContainerManagementInformation> contents, int i, java.util.HashSet<java.lang.Long> knownMinDataIndexes, java.util.Map<java.lang.Long,java.lang.Long> contIdToMinDataIndex, boolean checkIndexMonotonic)
Bestimmt, ob ein Eintrag im Verwaltungsdatenindex fehlerhaft iststatic boolean
isContainerFile(java.io.File file)
Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.static boolean
isValidDataKindSuffix(java.lang.String dirName)
Gibttrue
zurück, wenn es sich um einen gültigen Datenart-Ordnernamen handeltstatic boolean
isValidIDFolderName(java.lang.String dirName)
Die Methode isValidIDFolderName früft ob ein Order einen gültigen Namen hatstatic boolean
isValidSvFolderName(java.lang.String dirName)
Prüft, ob der gegebene Verzeichnisname ein gueltiger Name für ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.DataIterator
iterator(de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerId, DeletedTreatment deletedTreatment, java.util.zip.Inflater inflater, SyncKey<IdDataIdentification> indexLock)
Iteriert über die Daten eines Containers.SyncKey<IdDataIdentification>
lockIndex(IdDataIdentification dataIdentification)
Muss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.SyncKey<IdDataIdentification>
lockIndex(IdDataIdentification dataIdentification, java.time.Duration timeout)
Muss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.long
maxATime(IdContainerFileDir idContainerFileDir)
Die Methode maxATime gibt die maximale Archivzeit einer datenidentifikation zurücklong
maxContainerId(SyncKey<IdDataIdentification> indexKey, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Ermittelt maximale Container-IDint
maxMedienID(IndexResult<ContainerManagementInformation> headers)
Die Methode maxMedienID ermittelt die maximale Medien-ID in einem Index-Abfrage-Ergebnislong
nextContainerID()
Erhoeht nextContainerID um 1 und gibt den Wert zurück.long
numContainers(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind)
Die Methode numContainers zählt die Anzahl Einträge im Verwaltungsdatenindex für ein Containerverzeichnis.DeletedContainerFile
openDeletedContainerFile(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
Die Methode openDeletedContainerFile öffnet die Datei mit den Informationen zu den gelöschten Containernvoid
prepareShutdown()
Die Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.void
rebuildContainerHeaderIndex(IdContainerFileDir containerFileDir, ContainerManagementIndex containerHeaderIndex, PersistenceManager.RebuildResult rebuildResult)
Erzeugt einen neuen ContainerHeaderIndex basierend aus den Containerdateien in einem Verzeichnisvoid
rebuildIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, PersistenceManager.RebuildResult rebuildResult)
Die Methode rebuildIndexes baut einen Index erneut auf.void
rebuildStandardIndex(ContainerManagementIndex managementIndex, IdContainerFileDir containerFileDir, BaseIndex<IndexValues> index)
Die Methode rebuildStandardIndex erstellt einen Standard-Index aus dem Verwaltungsdatenindexvoid
removeContainerFromIndex(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId)
Die Methode removeContainerFromIndex löscht einen Contaienr aus den Indexenvoid
removeOpenContainerData(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)
Löscht die Daten eines offenen Containers.void
saveUnsubscriptionTime()
Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden.void
saveUnsubscriptionTime(com.google.common.collect.Multimap<java.lang.Long,IdDataIdentification> didForUnsubscriptionTime, java.nio.file.Path unsubscriptionFile)
Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden.static void
setDeleteBrokenContainers(boolean deleteBrokenContainers)
Setzt, ob defekte Containerdateien umbenannt werden sollenstatic void
setSkipRebuild(boolean skipRebuild)
Setzt, ob beim Wiederherstellungslauf beschädigte Indexe einfach nur gelöscht statt wiederhergestellt werden sollen.static void
settLSMax(long tlsMax)
Setzt die maximale Löschschutzzeitvoid
setUseDynamicDeletionTime(boolean useDynamicDeletionTime)
Methode für Tests: Setzt, ob die Löschzeit dynamisch an den parameter angepasst wird oder nicht (altes Verhalten)boolean
startupProcedure()
Versucht, die StartUp-Properties-Datei einzulesen.void
updateContainerIndex(SyncKey<IdDataIdentification> lock, ContainerManagementData managementData)
Die Methode updateContainerIndex aktualisiert den Verwaltungsdatenindexvoid
updateMaxValues(IdDataIdentification idDataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long dataIdx, long arsTime, long dataTime)
Die Methode speichert imOpenContainerData
neue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)void
updateStandardIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, OpenContainerData data)
Die Methode updateStandardIndexes fügt einem Index Werte hinzu oder aktualisiert die vorhandenen Werte.void
warnAboutHugeContainerDirectory(IdContainerFileDir location, long numEntries)
Die Methode warnAboutHugeContainerDirectory warnt den Benutzer, wenn zu viele Container in einem Containerverzeichnis gespeichert wurden.void
warnAboutSlowRestore(IdContainerFileDir location, long currentEntries, java.time.Duration currentDuration)
Die Methode warnAboutSlowRestore warnt den Benutzer, wenn die Wiederherstellung eines Verzeichnisses sehr lange dauert.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Field Details
-
ACTIVITY_FLAG_FILE_NAME
public static final java.lang.String ACTIVITY_FLAG_FILE_NAMEDateiname des Lock-Files des Archivsystems. Die Datei wird angelegt, wenn das Archivsystem gestartet wird. Die wird gelöscht, wenn das Archivsystem heruntergefahren wird.- See Also:
- Constant Field Values
-
REBUILDINDEX_FILE_FLAG_NAME
public static final java.lang.String REBUILDINDEX_FILE_FLAG_NAMEEine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index möglicherweise (wg. Caching) noch nicht auf die Platte durchgeschrieben wurde. Beim Herunterfahren des Systems werden alle Indexe durchgeschrieben und die Flag-Dateien geloescht. Existiert diese Datei beim Systemstart noch, ist dies ein Hinweis auf eine unkorrekte Beendigung des Archivsystems. Für jede DId, für die die Datei existiert, werden die Indexe neu aufgebaut.- See Also:
- Constant Field Values
-
RESTART_TIME_FILE_NAME
public static final java.lang.String RESTART_TIME_FILE_NAMEDateiname für Datei mit Zeitstempeln je Datenidentifikation für die Ermittlung des Datenlückenanfangs.- See Also:
- Constant Field Values
-
-
Constructor Details
-
PersistenceManager
Erzeugt den Persistenz-Manager.- Parameters:
archMgr
- Archiv-ManagerarchPath
- Archivierungs-Verzeichnis
-
-
Method Details
-
setUseDynamicDeletionTime
public void setUseDynamicDeletionTime(boolean useDynamicDeletionTime)Methode für Tests: Setzt, ob die Löschzeit dynamisch an den parameter angepasst wird oder nicht (altes Verhalten)- Parameters:
useDynamicDeletionTime
- Soll der Löschzeitpunkt dynamisch aus der Parametrierung ermittelt werden (true) oder beim Abschließen der Containerdatei dort einmal fest eingetragen werden (klassisches Verhalten, false)
-
setSkipRebuild
public static void setSkipRebuild(boolean skipRebuild)Setzt, ob beim Wiederherstellungslauf beschädigte Indexe einfach nur gelöscht statt wiederhergestellt werden sollen.- Parameters:
skipRebuild
- Wiederherstellung überspringen?
-
setDeleteBrokenContainers
public static void setDeleteBrokenContainers(boolean deleteBrokenContainers)Setzt, ob defekte Containerdateien umbenannt werden sollen- Parameters:
deleteBrokenContainers
-
-
lockIndex
public SyncKey<IdDataIdentification> lockIndex(IdDataIdentification dataIdentification) throws SynchronizationFailedExceptionMuss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.Wenn ein anderer Task sich im kritischen Bereich befindet, blockiert diese Methode bis der kritische Bereich wieder frei ist.
Da der Index-Bereich möglicherweise von vielen Tasks benutzt wird und auch Zugriffe beim Archivieren von Daten erfolgen sollte der Bereich so schnell wie möglich wieder verlassen werden. Es ist zwingend erforderlich, das zurückgegebene Lock-Objekt nach Benutzung zu schließen, sonst können andere Threads blockiert werden.
Beispiel-Code:
try(SyncKey<IdDataIdentification> lock = archMgr.lockIndex(din.getDataIdentification())) { // Tue was mit den Indexen }
Das zurückgegebene
SyncKey
-Objekt verhält sich wie einReentrantLock
, es ist also möglich, ein zweites Lock zu erhalten wenn bereits ein Lock geholt wurde.- Parameters:
dataIdentification
- Datenidentifikation- Returns:
- Lock
- Throws:
SynchronizationFailedException
- Synchronisierung ist fehlgeschlagen (Unterbrochen beim Warten)
-
lockIndex
public SyncKey<IdDataIdentification> lockIndex(IdDataIdentification dataIdentification, java.time.Duration timeout) throws SynchronizationFailedExceptionMuss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.Wenn ein anderer Task sich im kritischen Bereich befindet, blockiert diese Methode bis der kritische Bereich wieder frei ist.
Da der Index-Bereich möglicherweise von vielen Tasks benutzt wird und auch Zugriffe beim Archivieren von Daten erfolgen sollte der Bereich so schnell wie möglich wieder verlassen werden. Es ist zwingend erforderlich, das zurückgegebene Lock-Objekt nach Benutzung zu schließen, sonst können andere Threads blockiert werden.
Beispiel-Code:
try(SyncKey<IdDataIdentification> lock = archMgr.lockIndex(din.getDataIdentification())) { // Tue was mit den Indexen }
Das zurückgegebene
SyncKey
-Objekt verhält sich wie einReentrantLock
, es ist also möglich, ein zweites Lock zu erhalten wenn bereits ein Lock geholt wurde.- Parameters:
dataIdentification
- Datenidentifikationtimeout
- Maximale Wartezeit- Returns:
- Lock
- Throws:
SynchronizationFailedException
- Synchronisierung ist fehlgeschlagen (Timeout oder Unterbrochen beim Warten)
-
getIndexLocks
public com.google.common.collect.SetMultimap<IdDataIdentification,SyncKey<IdDataIdentification>> getIndexLocks()Gibt alle aktuell genutzten Locks zur Synchronisation auf die Datenidentifikationen zurück.- Returns:
- Locks
-
assertNoLocks
public void assertNoLocks()Testmethode fürs Debugging, stellt sicher, dass aktuell keine Locks vom aktuellen Thread gehalten werden. Dieser Aufruf kann eingefügt werden, wenn eine Methode einen blockierenden Aufruf macht (z. B. auf Netzwerkantwort warten). Dies sollte aus Deadlock-Gefahr-Gründen nicht gemacht werden, während ein Index gelockt ist. -
settLSMax
public static void settLSMax(long tlsMax)Setzt die maximale Löschschutzzeit- Parameters:
tlsMax
- Zeit in Sekunden- See Also:
_tLSMax
-
getDataKindSuffix
public static java.lang.String getDataKindSuffix(de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Gibt zu der angegebenen Datenart den Pfadnamen zurück, der verwendet wird.- Parameters:
archiveDataKind
- Archivdatenart- Returns:
- Suffix
-
getDataKindSuffix
public static java.lang.String getDataKindSuffix(int adkIdx)Gibt zu der angegebenen Datenart den Pfadnamen zurück, der verwendet wird.- Parameters:
adkIdx
- Archivdatenart (sieheUtil.getDataKindFromIndex(int)
)- Returns:
- Suffix
-
isValidDataKindSuffix
public static boolean isValidDataKindSuffix(java.lang.String dirName)Gibttrue
zurück, wenn es sich um einen gültigen Datenart-Ordnernamen handelt- Parameters:
dirName
- Ordnername- Returns:
true
, wenn es sich um einen gültigen Datenart-Ordnernamen handelt, sonstfalse
-
getArchiveDataKindFromDir
public static de.bsvrz.dav.daf.main.archive.ArchiveDataKind getArchiveDataKindFromDir(java.io.File dir)Extrahiert die Archivdatenart aus einer Pfadangabe- Parameters:
dir
- Ordner- Returns:
- Archivdatenart
- Throws:
java.lang.IllegalArgumentException
- Falls der Ordnername ungültig ist.
-
getArchiveDataKindFromDir
public static de.bsvrz.dav.daf.main.archive.ArchiveDataKind getArchiveDataKindFromDir(java.nio.file.Path dir)Extrahiert die Archivdatenart aus einer Pfadangabe- Parameters:
dir
- Ordner- Returns:
- Archivdatenart
- Throws:
java.lang.IllegalArgumentException
- Falls der Ordnername ungültig ist.
-
getContainerLocationFromDir
public static IdContainerFileDir getContainerLocationFromDir(java.nio.file.Path dir) throws PersistenceExceptionErzeugt einIdContainerFileDir
aus einem Datenträgerverzeichnis- Parameters:
dir
- Verzeichnis- Returns:
- IdContainerFileDir
- Throws:
PersistenceException
- Falls der Pfad kein gültiges Containerverzeichnis war.
-
getContainerLocationFromDir
public static IdContainerFileDir getContainerLocationFromDir(java.io.File dir) throws PersistenceExceptionErzeugt einIdContainerFileDir
aus einem Datenträgerverzeichnis.- Parameters:
dir
- Verzeichnis- Returns:
- IdContainerFileDir
- Throws:
PersistenceException
- Falls der Pfad kein gültiges Containerverzeichnis war.
-
deleteContainers
public void deleteContainers(SyncKey<IdDataIdentification> indexLock, IdContainerFileDir idContainerFileDir, long... containerIds) throws PersistenceException, SynchronizationFailedException, IndexExceptionMarkiert die angegebenen Container als gelöscht und trägt sie als gelöscht im Index ein. Diese Methode muss synchronisiert auf die Container einesDataIdentNode
ausgeführt werden.- Parameters:
indexLock
- Index-SchlüsselidContainerFileDir
- Container-SchlüsselcontainerIds
- Container-IDs, die gelöscht werden sollen- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisSynchronizationFailedException
IndexException
-
getContainerHeaders
public ContainerHeaders getContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerID) throws IndexExceptionGibt die Header eines Containers zurück. Die Daten werden aus dem Verwaltungsdatenindex gelesen.- Parameters:
indexLock
- Indexzugriffadk
- ArchivdatenartcontainerID
- Container-ID, dessen Header glesen wurden- Returns:
- die Header eines Containers
- Throws:
IndexException
- Daten konnten nicht ermittelt werden (z. B. Container nicht vorhanden)
-
getContainerHeaders
public IndexResult<ContainerManagementInformation> getContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws IndexExceptionGibt die Header von alles Cotnainern eines Verzeichnisses zurück. Im Pronzip wird der gesamte Inhlt des Verwaltungsdatenindex zurüückgegeben.- Parameters:
indexLock
- Indexzugriffadk
- Archivdatenart- Returns:
- die Header als
IndexResult
- Throws:
IndexException
- Daten konnten nicht ermittelt werden
-
copyHeaders
public static void copyHeaders(ContainerManagementData from, ContainerFileHandle to) throws PersistenceExceptionTrägt Headerdaten in eine Containerdatei ein- Parameters:
from
- datento
- Handle auf einen Container- Throws:
PersistenceException
- Schreibfehler
-
isContainerFile
public static boolean isContainerFile(java.io.File file)Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.- Parameters:
file
- zu prüfende Datei- Returns:
- Kennzeichen
-
getContID
public static long getContID(java.io.File file)Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. Alternativ kann die Container-ID aus den Container-Header-Parametern gelesen werden.- Parameters:
file
- Container-Datei- Returns:
- Container-ID
-
getContFileName
public static java.lang.String getContFileName(long containerId)Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.- Parameters:
containerId
- Container-ID- Returns:
- Dateiname
-
getPath
public java.nio.file.Path getPath(long objId, long atgId, long aspId, int sv)Liefert den Archiv-Pfad für die angegebene Datenidentifikation. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe und pro SimVarwird ein Verzeichnis verwendet.- Parameters:
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariante- Returns:
- Archiv-Pfad
-
getPath
public static java.nio.file.Path getPath(java.nio.file.Path basePath, long objId, long atgId, long aspId, int sv)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und den Wurzelpfad des Archivsystems. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe und pro SimVarwird ein Verzeichnis verwendet.- Parameters:
basePath
- Wurzelpfad des ArchivsystemsobjId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- Simulationsvariante- Returns:
- Archiv-Pfad
-
appendIdElements
public static java.nio.file.Path appendIdElements(java.nio.file.Path basePath, java.lang.String prefix, long id)Zerlegt die numerische ID in Gruppen von jeweils 3 Zeichen in Dezimaldarstellung und ergänzt das übergebene Path-Objekt, sodass die übergebene Separtor/Prefixsequenz hinzugefügt wird. Beispiel: mit "obj" im Parameter prefix führt die ID 12345678 dazu, dass der Pfad "/obj123/obj456/obj78" ergänzt wird.- Parameters:
basePath
- Basispfadprefix
- Prefix, das vor jeder Zeichengruppe eingefügt werden soll.id
- Numerische ID.
-
getPath
public java.nio.file.Path getPath(long objId, long atgId, long aspId, int sv, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.- Parameters:
objId
- Objekt-IDatgId
- Attributgruppen-IDaspId
- Aspekt-IDsv
- SimulationsvariantedataKind
- Datensatzart- Returns:
- Archiv-Pfad
-
getPath
public java.nio.file.Path getPath(long objId, long atgId, long aspId, int sv, int dataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.- Parameters:
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- Returns:
- Archiv-Pfad
-
getPath
public java.nio.file.Path getPath(de.bsvrz.dav.daf.main.archive.ArchiveDataSpecification ads, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.- Parameters:
ads
- Spezifikation des Archivdatensatzes (enthält objID, atgID, aspID, sv)archiveDataKind
- Datensatzart- Returns:
- Name des Archiv-Pfads
-
getPath
public java.nio.file.Path getPath(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.- Parameters:
dataIdentification
- objID, atgID, aspID, svarchiveDataKind
- Datensatzart- Returns:
- Name des Archiv-Pfads
-
getPath
Liefert den Archiv-Pfad für die angegebene Datenidentifikation. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe und pro SimVar wird ein Verzeichnis verwendet.- Parameters:
dataIdentification
- objID, atgID, aspID, sv- Returns:
- Name des Archiv-Pfads
-
getPath
public java.nio.file.Path getPath(DataIdentNode dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Liefert den Archiv-Pfad für die angegebene DataIdentNode und Datensatzart. Der Pfad wird gebildet indem die IDs und die SV in Dreiergruppen zerlegt und mit einem Praefix versehen werden. Pro Dreiergruppe, pro SimVar und pro Datensatzart wird ein Verzeichnis verwendet.- Parameters:
dataIdentification
- objID, atgID, aspID, svarchiveDataKind
- Datensatzart- Returns:
- Name des Archiv-Pfads
-
deleteSimVar
Diese Methode loescht das komplette Verzeichnis einesDataIdentNode
mit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensätze einer Simulationsvariante geloescht. DerDataIdentNode
muss in der Verwaltung aus demDataIdentTree
geloescht werden. Falls die Simulationsvariante gleich Null ist, oder das Verzeichnis nicht geloescht werden konnte, wird einePersistenceException
geworfen.- Parameters:
syncKey
- Schlüssel für Zugriff auf Indexknoten- Throws:
PersistenceException
- Schreibfehler im Persistenzverzeichnis
-
createRebuildIxdFlagFile
public void createRebuildIxdFlagFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws PersistenceExceptionLegt im Verzeichnis der Datenidentifikation einREBUILDINDEX_FILE_FLAG_NAME
-Datei an.- Parameters:
didPath
- Pfad der Datenidentifikationadk
- Archivdatenart- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis- See Also:
REBUILDINDEX_FILE_FLAG_NAME
-
getRebuildIdxFile
@NotNull public java.nio.file.Path getRebuildIdxFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Die Methode getRebuildIdxFile ermittelt den Speicherort für die _rebuildIndex.flag- Parameters:
didPath
- von Typ DataIdentificationDiradk
- von Typ ArchiveDataKind- Returns:
- Path
-
checkContainerFile
public void checkContainerFile(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId) throws PersistenceExceptionÜberprüft eine Containerdatei darauf, ob diese mit "##\n" endet. Falls nicht wird das ungültige Ende der Datei abgeschnitten (NÄM-79)- Parameters:
dataIdentification
- DatenidentifikationarchiveDataKind
- ArchivdatenartcontainerId
- Container-ID- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
accessContainer
@NotNull public ContainerFileHandle accessContainer(IdContainerFileDir idContainerFileDir, long containerId) throws PersistenceExceptionGreift auf einen Container zu.- Parameters:
idContainerFileDir
- Synchronisierung auf ContainerverzeichniscontainerId
- Id- Returns:
- Cotnainerhandle
- Throws:
PersistenceException
- Lesefehler
-
accessOpenContainer
public ContainerFileHandle accessOpenContainer(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind, long openContID) throws PersistenceExceptionGreift auf den offenen Container zu. Die Methode darf nicht für geschlossene Container verwendet werden, da dann die Synchronisation nicht sichergestellt ist.- Parameters:
dataIdentification
- DatenidentifikationdataKind
- ArchivdatenartopenContID
- Id des offenen Containers.- Returns:
- Containerhandle
- Throws:
PersistenceException
- Lesefehler
-
accessContainerUnsynchronized
public BasicContainerFileHandle accessContainerUnsynchronized(java.io.File file) throws PersistenceExceptionGreift auf eine Containerdatei unsynchronisiert zu. Diese Methode darf nur für Container außerhalb des Persistenzverzeichisses benutzt werden.- Parameters:
file
- Containerdatei- Returns:
- Handle
- Throws:
PersistenceException
- Lesefehler
-
iterator
public DataIterator iterator(de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerId, DeletedTreatment deletedTreatment, @Nullable java.util.zip.Inflater inflater, SyncKey<IdDataIdentification> indexLock) throws PersistenceException, SynchronizationFailedExceptionIteriert über die Daten eines Containers.- Parameters:
adk
- ArchivdatenartcontainerId
- Container-IDdeletedTreatment
- Behandlung gelöschter Containerdateninflater
- Unzip-Klasse zum dekomprimieren (darf null sein, wenn die Dateninhalte nicht interessant sind)- Returns:
- Iterator
- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisSynchronizationFailedException
-
prepareShutdown
public void prepareShutdown() throws java.lang.InterruptedExceptionDie Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.- Throws:
java.lang.InterruptedException
-
startupProcedure
public boolean startupProcedure()Versucht, die StartUp-Properties-Datei einzulesen. Wenn das nicht gelingt, wird das gesamte Persistenzverzeichnis (RestorePersDirTsk
) durchlaufen und versucht, einen gueltigen Startpunkt wiederherzustellen. Das Persistenzverzeichnis wird inInQueuesMgr.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 inprepareShutdown()
die Datei neu geschrieben. Daran kann das ArS beim nächsten Start erkennen, ob es ordnungsgemäß heruntergefahren wurde oder ob ein Wiederherstellungslauf erforderlich ist.- Returns:
- Wahr, falls der Durchlauf des Persistenzverzeichnisses erfolgreich war und das Archivsystem starten kann, falsch sonst.
-
getPath
Die Methode getPathName gibt den Speicherort für ein Containerverzeichnis zurück- Parameters:
containerFileDir
- von Typ IdContainerFileDir- Returns:
- String
-
rebuildStandardIndex
public void rebuildStandardIndex(ContainerManagementIndex managementIndex, IdContainerFileDir containerFileDir, BaseIndex<IndexValues> index) throws IndexExceptionDie Methode rebuildStandardIndex erstellt einen Standard-Index aus dem Verwaltungsdatenindex- Parameters:
managementIndex
- VerwaltungsdatenindexcontainerFileDir
- Speicherortindex
- Zu erzeugender Index (leer)- Throws:
IndexException
- problem beim Index-Zugriff
-
rebuildContainerHeaderIndex
public void rebuildContainerHeaderIndex(IdContainerFileDir containerFileDir, ContainerManagementIndex containerHeaderIndex, @Nullable PersistenceManager.RebuildResult rebuildResult) throws IndexExceptionErzeugt einen neuen ContainerHeaderIndex basierend aus den Containerdateien in einem Verzeichnis- Parameters:
containerFileDir
- ID des ContainerverzeichnissescontainerHeaderIndex
- Container-Header-Index (leer)rebuildResult
- Statistik über die Wiederherstellung- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
hasError
public boolean hasError(IndexResult<ContainerManagementInformation> contents, int i, java.util.HashSet<java.lang.Long> knownMinDataIndexes, java.util.Map<java.lang.Long,java.lang.Long> contIdToMinDataIndex, boolean checkIndexMonotonic)Bestimmt, ob ein Eintrag im Verwaltungsdatenindex fehlerhaft ist- Parameters:
contents
- Indexinhaltei
- Zu prüfende Zeile im IndexknownMinDataIndexes
- Bereits bekannte Minimum-Datenindex-Werte im Container (Duplikate sind ein Fehler), dieses Set wird von der Methode ergänzt.contIdToMinDataIndex
- Bekannte Minimum-Datenindex-Werte je Container-IDcheckIndexMonotonic
- Soll geprüft werden ob der Datenindex-Minimum-Wert monoton ist?- Returns:
- true falls Fehler vorhanden, sonst false
-
getIndexResult
public IndexResult<IndexValues> getIndexResult(SyncKey<IdDataIdentification> key, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification ats) throws IndexException, SynchronizationFailedExceptionDie Methode getIndexResult führt eine Index-Abfrage durch (für Archivanfragen) und aktualisiert dabei die Daten vom offenen Container im Index- Parameters:
key
- von Typ SyncKey<IdDataIdentification>adk
- von Typ ArchiveDataKindats
- von Typ ArchiveTimeSpecification- Returns:
- IndexResult<IndexValues>
- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
-
updateContainerIndex
public void updateContainerIndex(SyncKey<IdDataIdentification> lock, ContainerManagementData managementData) throws PersistenceException, IndexExceptionDie Methode updateContainerIndex aktualisiert den Verwaltungsdatenindex- Parameters:
managementData
- Containerdaten, die in den Index eingefügt werden sollen (ersetzt ggf. vorhandene Einträge mit gleicher ContainerID)lock
- Schlüssel zum Zugriff auf den Verwaltungsdatenindex- Throws:
PersistenceException
- wenn ein Fehler auftrittIndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
maxMedienID
Die Methode maxMedienID ermittelt die maximale Medien-ID in einem Index-Abfrage-Ergebnis- Parameters:
headers
- von Typ IndexResult<ContainerManagementInformation>- Returns:
- Medien-ID oder -1 falls Index keine Medien-IDs enthält (also z. B. nie etwas gesichert wurde)
-
maxContainerId
public long maxContainerId(SyncKey<IdDataIdentification> indexKey, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws IndexExceptionErmittelt maximale Container-ID- Parameters:
indexKey
- Indexzugriffschlüsseladk
- Datensatzart (ArchiveDataKind: OA/ON/NA/NN)- Returns:
- Größte Container-ID im Verzeichnis
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
rebuildIndexes
public void rebuildIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, @Nullable PersistenceManager.RebuildResult rebuildResult) throws IndexExceptionDie Methode rebuildIndexes baut einen Index erneut auf.- Parameters:
lock
- von Typ SyncKey<IdDataIdentification>adk
- von Typ ArchiveDataKindrebuildResult
- Ergebnis für Statistiken- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
addIndexEntries
public void addIndexEntries(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long dataIdx, long arsTime, long dataTime, long openContID) throws IndexExceptionDie Methode addIndexEntries fügt einem Index Werte hinzu.- Parameters:
lock
- von Typ SyncKey<IdDataIdentification>adk
- von Typ ArchiveDataKinddataIdx
- von Typ longarsTime
- von Typ longdataTime
- von Typ longopenContID
- von Typ long- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
updateStandardIndexes
public void updateStandardIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, OpenContainerData data) throws IndexExceptionDie Methode updateStandardIndexes fügt einem Index Werte hinzu oder aktualisiert die vorhandenen Werte.- Parameters:
lock
- von Typ SyncKey<IdDataIdentification>adk
- von Typ ArchiveDataKinddata
- von Typ OpenContainerData- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
updateMaxValues
public void updateMaxValues(IdDataIdentification idDataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long dataIdx, long arsTime, long dataTime) throws IndexException, SynchronizationFailedExceptionDie Methode speichert imOpenContainerData
neue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)- Parameters:
idDataIdentification
- Datenidentifikationadk
- von Typ ArchiveDataKinddataIdx
- DatenindexarsTime
- ArchivzeitdataTime
- Datenzeit- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
-
getOpenContID
public long getOpenContID(IdContainerFileDir idContainerFileDir) throws IndexException, SynchronizationFailedExceptionDie Methode getOpenContID gibt die ID des offenen Containers für eine Datenidentifikation zurück- Parameters:
idContainerFileDir
- Containerverzeichnis- Returns:
- long oder -1 falls es keinen offenen Container gibt
- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
-
maxATime
public long maxATime(IdContainerFileDir idContainerFileDir) throws IndexException, SynchronizationFailedExceptionDie Methode maxATime gibt die maximale Archivzeit einer datenidentifikation zurück- Parameters:
idContainerFileDir
- Containerverzeichnis- Returns:
- long
- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
-
getOpenContainerData
@Nullable public StandardOpenContainerData getOpenContainerData(IdContainerFileDir containerFileDir) throws IndexException, SynchronizationFailedExceptionDie Methode getOpenContainerData die zwischengespeicherten daten für den offenen Container zurück- Parameters:
containerFileDir
- Containerverzeichnis- Returns:
- StandardOpenContainerData oder null falls kein offener Container existiert
- Throws:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
-
removeOpenContainerData
@Nullable public void removeOpenContainerData(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Löscht die Daten eines offenen Containers. Diese Methode wird aufgerufen, wenn es keinen offenen Container mehr gibt.- Parameters:
lock
- Synchroniserungszugriffsschlüsseladk
- Archivdatenart
-
removeContainerFromIndex
public void removeContainerFromIndex(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId) throws IndexExceptionDie Methode removeContainerFromIndex löscht einen Contaienr aus den Indexen- Parameters:
lock
- von Typ SyncKey<IdDataIdentification>archiveDataKind
- von Typ ArchiveDataKindcontainerId
- von Typ long- Throws:
IndexException
- wenn der Indexzugriff fehlschlägt
-
numContainers
public long numContainers(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind) throws IndexExceptionDie Methode numContainers zählt die Anzahl Einträge im Verwaltungsdatenindex für ein Containerverzeichnis. Dies ist die Menge der potentiell vorhandenen Container, ausgelagerte Container werden dabei mitgezählt.- Parameters:
lock
- Synchronisierung auf DatenidentifikationdataKind
- Archivdatenart- Returns:
- long Anzahl Containerdateien
- Throws:
IndexException
- wenn der Indexzugriff fehlschlägt
-
getLastContainerHeaders
@Nullable public ContainerHeaders getLastContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws IndexExceptionDie Methode getLastContainerHeaders ermittelt die Header vom letzten Container (vom Container mti der größten ID)- Parameters:
indexLock
- Synchronisierung auf Datenidentifikationadk
- Archivdatenart- Returns:
- ContainerHeaders
- Throws:
IndexException
- wenn der Indexzugriff fehlschlägt
-
arSParamGetVorhalten
Die Methode arSParamGetVorhalten ermittelt den parametrierten Vorhaltezeitraum in Sekunden für eine Datenidentifikation.- Parameters:
dataIdentification
- Datenidentifikation- Returns:
- long Vorhaltezeitraum in Sekunden
-
getStatistics
Gibt Statistiken von diesem PersistenceManager-Objekt zurück.- Returns:
- Statistiken (Typ Statistics)
-
warnAboutHugeContainerDirectory
Die Methode warnAboutHugeContainerDirectory warnt den Benutzer, wenn zu viele Container in einem Containerverzeichnis gespeichert wurden.- Parameters:
location
- von Typ IdContainerFileDirnumEntries
- von Typ long
-
warnAboutSlowRestore
public void warnAboutSlowRestore(IdContainerFileDir location, long currentEntries, java.time.Duration currentDuration)Die Methode warnAboutSlowRestore warnt den Benutzer, wenn die Wiederherstellung eines Verzeichnisses sehr lange dauert.- Parameters:
location
- von Typ IdContainerFileDircurrentEntries
- von Typ longcurrentDuration
- von Typ Duration
-
getLargeDataIdentifications
Gibt ein Set zurück, dass alle bekannten Contaienrverzeichnisse enthält, die "übermäßig viel" Daten enthalten. Das Set ist threadsafe und änderbar.- Returns:
- Set mit Containerverzeichnissen
-
formatDataIdentification
Die Methode formatDataIdentification gibt eine Datenidentifikation als lesbaren String aus (z. B. ermitteln der Pid falls möglich)- Parameters:
location
- Containerverzeichnis-ID- Returns:
- String
-
formatObj
public java.lang.String formatObj(long objId)Die Methode formatObj gibt eine Objekt-ID als lesbaren String aus (z. B. ermitteln der Pid falls möglich)- Parameters:
objId
- von Typ long- Returns:
- String
-
flushIndexes
public void flushIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) throws IndexExceptionSchreibt den aktuellen Stand der Indexe auf die Festplatte- Parameters:
lock
- Lock für Datenidentifikationadk
- Archivdatenart- Throws:
IndexException
- Falls ein Indexfehler auftrat.
-
createLockFile
@Nullable public java.lang.String createLockFile()Das LogfileisActive
anlegen. Wird verwendet, um einem Archivsystem anzuzeigen, ob ein anderes Archivsystem dasselbe Persistenzverzeichnis verwendet- Returns:
- Fehlermeldung, wenn das Erstellen nicht erfolgreich war, null sonst
-
deleteLockFile
public void deleteLockFile()Löscht das LogFileisActive
, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder frei -
checkPersistenceDir
public void checkPersistenceDir(java.lang.String mode) throws java.lang.InterruptedExceptionPrüft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen. Die Ergebnisse werden über den Logger protokolliert. Kann durch einen Kommandozeilenparameter beim Systemstart aufgerufen werden.- Parameters:
mode
- Ein Wert von P_CHECK_PERS_DIR_DIR, P_CHECK_PERS_DIR_HDR, P_CHECK_PERS_DIR_ALL- Throws:
java.lang.InterruptedException
-
getDataIdentificationFromPath
public static IdDataIdentification getDataIdentificationFromPath(java.io.File path) throws PersistenceExceptionExtrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Länge 4 haben muss. Voraußetzung ist, dass alle Verzeichnisnamen entsprechend den Konventionen des PersistenceManagers gebildet sind. Das unterste Verzeichnis kann entweder die SimVar bezeichnen oder eine Datensatzart sein.- Parameters:
path
- Pfad bis zum Verzeichnis der Simulationsvariante. Falls ein Datenart-Verzeichnis angegeben wird, wir dieses ignoriert.- Returns:
- Feld bestehend aus [ObjID, AtgID, AspID SimVar] wenn der Pfad ein gueltiges Verzeichnis ist
- Throws:
PersistenceException
- wenn der Pfad kein gueltiges Verzeichnis ist- See Also:
isValidObjIdFolderName(String)
,isValidAtgIdFolderName(String)
,isValidAspIdFolderName(String)
,isValidSvFolderName(String)
-
getDataIdentificationFromPath
public static IdDataIdentification getDataIdentificationFromPath(java.nio.file.Path path) throws PersistenceExceptionExtrahiert Objekt-ID, Attributgruppen-ID, Aspekt-ID und SimVar von unten beginnend aus einem Verzeichnispfad, der mindestens die Länge 4 haben muss. Voraußetzung ist, dass alle Verzeichnisnamen entsprechend den Konventionen des PersistenceManagers gebildet sind. Das unterste Verzeichnis kann entweder die SimVar bezeichnen oder eine Datensatzart sein.- Parameters:
path
- Pfad bis zum Verzeichnis der Simulationsvariante. Falls ein Datenart-Verzeichnis angegeben wird, wir dieses ignoriert.- Returns:
- Feld bestehend aus [ObjID, AtgID, AspID SimVar] wenn der Pfad ein gueltiges Verzeichnis ist
- Throws:
PersistenceException
- wenn der Pfad kein gueltiges Verzeichnis ist- See Also:
isValidObjIdFolderName(String)
,isValidAtgIdFolderName(String)
,isValidAspIdFolderName(String)
,isValidSvFolderName(String)
-
isValidSvFolderName
public static boolean isValidSvFolderName(java.lang.String dirName)Prüft, ob der gegebene Verzeichnisname ein gueltiger Name für ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.- Parameters:
dirName
- Verzeichisname- Returns:
- Wahr, wenn der Verzeichnisname korrekt ist, falsch sonst.
- See Also:
SV_DIRNAME_PAT
-
isValidIDFolderName
public static boolean isValidIDFolderName(java.lang.String dirName)Die Methode isValidIDFolderName früft ob ein Order einen gültigen Namen hat- Parameters:
dirName
- von Typ String- Returns:
- boolean
-
getArchivePath
public java.nio.file.Path getArchivePath()Liefert den Wurzelpfad des Persistenzverzeichisses, der beim Systemstart in der Kommandozeile übergeben wurde.- Returns:
- Wurzelpfad des Persistenzverzeichisses
-
nextContainerID
public long nextContainerID()Erhoeht nextContainerID um 1 und gibt den Wert zurück.- Returns:
- als nächste zu verwendende Container-ID
-
getLastContainerID
public long getLastContainerID()- Returns:
- Letzte vergebe ContainerID
-
saveUnsubscriptionTime
public void saveUnsubscriptionTime()Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden. Dieser Zeitpunkt wird nach einem Neustart als Grundlage für die Bildung von potentiellen Datenlücken verwendet. -
saveUnsubscriptionTime
public void saveUnsubscriptionTime(com.google.common.collect.Multimap<java.lang.Long,IdDataIdentification> didForUnsubscriptionTime, java.nio.file.Path unsubscriptionFile)Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden. Dieser Zeitpunkt wird nach einem Neustart als Grundlage für die Bildung von potentiellen Datenlücken verwendet.- Parameters:
didForUnsubscriptionTime
- Zu schreibende ZeitstempelunsubscriptionFile
- Datei, die geschrieben wird.
-
openDeletedContainerFile
public DeletedContainerFile openDeletedContainerFile(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws PersistenceException, SynchronizationFailedExceptionDie Methode openDeletedContainerFile öffnet die Datei mit den Informationen zu den gelöschten Containern- Parameters:
lock
- von Typ SyncKey<IdDataIdentification>archiveDataKind
- von Typ ArchiveDataKind- Returns:
- DeletedContainerFile
- Throws:
PersistenceException
- LesefehlerSynchronizationFailedException
- Fehler bei Index-Synchronisation
-
extendLoeschschutz
public void extendLoeschschutz(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long contID) throws PersistenceException, IndexExceptionVerlängert die Löschzeit eines Containers in Folge einer Archivanfrage oder ArchivInfoAnfrage.- Parameters:
lock
- Objekt, das den synchronisierten Zugriff auf den Index erlaubtadk
- ArchivdatenartcontID
- ContainerID- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisIndexException
-
extendLoeschschutz
public void extendLoeschschutz(SyncKey<IdDataIdentification> lock, ContainerHeaders handle, long t_lsMillis) throws PersistenceException, IndexExceptionVerlängert die Löschzeit eines Containers.- Parameters:
lock
- Objekt, das den synchronisierten Zugriff auf den Index erlaubthandle
- Container-Headert_lsMillis
- Neuer Löschschutz ab aktuellem Zeitpunkt (in Millisekunden)- Throws:
PersistenceException
- Lesefehler im PersistenzverzeichnisIndexException
-
getProtectedDeletionTime
Gibt den Zeitpunkt zurück, an dem der Löschschutz abläuft.- Parameters:
headers
- von Typ ContainerHeaders- Returns:
- long (Millisekunden-Zeitstempel)
-
getRegularDeletionTime
Gibt den Zeitpunkt zurück, an dem der Container regulär gelöscht werden kann- Parameters:
headers
- von Typ ContainerHeaders- Returns:
- long (Millisekunden-Zeitstempel)
-
getArchiveManager
Gibt archiveManager von diesem PersistenceManager-Objekt zurück.- Returns:
- archiveManager (Typ ArchiveManager)
-