Class PersistenceManager
public final class PersistenceManager
extends java.lang.Object
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfacePersistenceManager.ContainerCallFunktionales Interface für Container-Aktionenstatic classPersistenceManager.RebuildResultclassPersistenceManager.Statistics -
Field Summary
Fields Modifier and Type Field Description static java.lang.StringACTIVITY_FLAG_FILE_NAMEDateiname des Lock-Files des Archivsystems.static java.lang.StringREBUILDINDEX_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.static java.lang.StringRESTART_TIME_FILE_NAMEDateiname 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 ContainerFileHandleaccessContainer(IdContainerFileDir idContainerFileDir, long containerId)Greift auf einen Container zu.BasicContainerFileHandleaccessContainerUnsynchronized(java.io.File file)Greift auf eine Containerdatei unsynchronisiert zu.ContainerFileHandleaccessOpenContainer(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind dataKind, long openContID)Greift auf den offenen Container zu.voidaddIndexEntries(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.PathappendIdElements(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.longarSParamGetVorhalten(IdDataIdentification dataIdentification)Die Methode arSParamGetVorhalten ermittelt den parametrierten Vorhaltezeitraum in Sekunden für eine Datenidentifikation.voidassertNoLocks()Testmethode fürs Debugging, stellt sicher, dass aktuell keine Locks vom aktuellen Thread gehalten werden.voidcheckContainerFile(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId)Überprüft eine Containerdatei darauf, ob diese mit "##\n" endet.voidcheckPersistenceDir(java.lang.String mode)Prüft das Persistenzverzeichnis auf fremde Dateien und Verzeichnisse und falsche Reihenfolgen von ID-Verzeichnissen.static voidcopyHeaders(ContainerManagementData from, ContainerFileHandle to)Trägt Headerdaten in eine Containerdatei einjava.lang.StringcreateLockFile()Das LogfileisActiveanlegen.voidcreateRebuildIxdFlagFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Legt im Verzeichnis der Datenidentifikation einREBUILDINDEX_FILE_FLAG_NAME-Datei an.voiddeleteContainers(SyncKey<IdDataIdentification> indexLock, IdContainerFileDir idContainerFileDir, long... containerIds)Markiert die angegebenen Container als gelöscht und trägt sie als gelöscht im Index ein.voiddeleteLockFile()Löscht das LogFileisActive, falls es von diesem ArS angelegt wurde und es existiert und gibt damit das Persistenzverzeichnis wieder freivoiddeleteSimVar(SyncKey<IdDataIdentification> syncKey)Diese Methode loescht das komplette Verzeichnis einesDataIdentNodemit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensätze einer Simulationsvariante geloescht.voidextendLoeschschutz(SyncKey<IdDataIdentification> lock, ContainerHeaders handle, long t_lsMillis)Verlängert die Löschzeit eines Containers.voidextendLoeschschutz(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.voidflushIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Schreibt den aktuellen Stand der Indexe auf die Festplattejava.lang.StringformatDataIdentification(IdContainerFileDir location)Die Methode formatDataIdentification gibt eine Datenidentifikation als lesbaren String aus (z.java.lang.StringformatObj(long objId)Die Methode formatObj gibt eine Objekt-ID als lesbaren String aus (z.static de.bsvrz.dav.daf.main.archive.ArchiveDataKindgetArchiveDataKindFromDir(java.io.File dir)Extrahiert die Archivdatenart aus einer Pfadangabestatic de.bsvrz.dav.daf.main.archive.ArchiveDataKindgetArchiveDataKindFromDir(java.nio.file.Path dir)Extrahiert die Archivdatenart aus einer PfadangabeArchiveManagergetArchiveManager()Gibt archiveManager von diesem PersistenceManager-Objekt zurück.java.nio.file.PathgetArchivePath()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.ContainerHeadersgetContainerHeaders(SyncKey<IdDataIdentification> indexLock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerID)Gibt die Header eines Containers zurück.static IdContainerFileDirgetContainerLocationFromDir(java.io.File dir)Erzeugt einIdContainerFileDiraus einem Datenträgerverzeichnis.static IdContainerFileDirgetContainerLocationFromDir(java.nio.file.Path dir)Erzeugt einIdContainerFileDiraus einem Datenträgerverzeichnisstatic java.lang.StringgetContFileName(long containerId)Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.static longgetContID(java.io.File file)Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.static IdDataIdentificationgetDataIdentificationFromPath(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 IdDataIdentificationgetDataIdentificationFromPath(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.StringgetDataKindSuffix(int adkIdx)Gibt zu der angegebenen Datenart den Pfadnamen zurück, der verwendet wird.static java.lang.StringgetDataKindSuffix(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.ContainerHeadersgetLastContainerHeaders(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)longgetLastContainerID()StandardOpenContainerDatagetOpenContainerData(IdContainerFileDir containerFileDir)Die Methode getOpenContainerData die zwischengespeicherten daten für den offenen Container zurücklonggetOpenContID(IdContainerFileDir idContainerFileDir)Die Methode getOpenContID gibt die ID des offenen Containers für eine Datenidentifikation zurückjava.nio.file.PathgetPath(long objId, long atgId, long aspId, int sv)Liefert den Archiv-Pfad für die angegebene Datenidentifikation.java.nio.file.PathgetPath(long objId, long atgId, long aspId, int sv, int dataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.java.nio.file.PathgetPath(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.PathgetPath(DataIdentNode dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Liefert den Archiv-Pfad für die angegebene DataIdentNode und Datensatzart.java.nio.file.PathgetPath(IdContainerFileDir containerFileDir)Die Methode getPathName gibt den Speicherort für ein Containerverzeichnis zurückjava.nio.file.PathgetPath(IdDataIdentification dataIdentification)Liefert den Archiv-Pfad für die angegebene Datenidentifikation.java.nio.file.PathgetPath(IdDataIdentification dataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Liefert den Archiv-Pfad für die angegebene Datenidentifikation und Datensatzart.java.nio.file.PathgetPath(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.PathgetPath(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.longgetProtectedDeletionTime(ContainerHeaders headers)Gibt den Zeitpunkt zurück, an dem der Löschschutz abläuft.java.nio.file.PathgetRebuildIdxFile(DataIdentificationDir didPath, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Die Methode getRebuildIdxFile ermittelt den Speicherort für die _rebuildIndex.flaglonggetRegularDeletionTime(ContainerHeaders headers)Gibt den Zeitpunkt zurück, an dem der Container regulär gelöscht werden kannPersistenceManager.StatisticsgetStatistics()Gibt Statistiken von diesem PersistenceManager-Objekt zurück.booleanhasError(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 booleanisContainerFile(java.io.File file)Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.static booleanisValidDataKindSuffix(java.lang.String dirName)Gibttruezurück, wenn es sich um einen gültigen Datenart-Ordnernamen handeltstatic booleanisValidIDFolderName(java.lang.String dirName)Die Methode isValidIDFolderName früft ob ein Order einen gültigen Namen hatstatic booleanisValidSvFolderName(java.lang.String dirName)Prüft, ob der gegebene Verzeichnisname ein gueltiger Name für ein Verzeichnis ist, das eine Simulationsvariante repraesentiert.DataIteratoriterator(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.longmaxATime(IdContainerFileDir idContainerFileDir)Die Methode maxATime gibt die maximale Archivzeit einer datenidentifikation zurücklongmaxContainerId(SyncKey<IdDataIdentification> indexKey, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Ermittelt maximale Container-IDintmaxMedienID(IndexResult<ContainerManagementInformation> headers)Die Methode maxMedienID ermittelt die maximale Medien-ID in einem Index-Abfrage-ErgebnislongnextContainerID()Erhoeht nextContainerID um 1 und gibt den Wert zurück.longnumContainers(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.DeletedContainerFileopenDeletedContainerFile(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)Die Methode openDeletedContainerFile öffnet die Datei mit den Informationen zu den gelöschten ContainernvoidprepareShutdown()Die Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.voidrebuildContainerHeaderIndex(IdContainerFileDir containerFileDir, ContainerManagementIndex containerHeaderIndex, PersistenceManager.RebuildResult rebuildResult)Erzeugt einen neuen ContainerHeaderIndex basierend aus den Containerdateien in einem VerzeichnisvoidrebuildIndexes(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, PersistenceManager.RebuildResult rebuildResult)Die Methode rebuildIndexes baut einen Index erneut auf.voidrebuildStandardIndex(ContainerManagementIndex managementIndex, IdContainerFileDir containerFileDir, BaseIndex<IndexValues> index)Die Methode rebuildStandardIndex erstellt einen Standard-Index aus dem VerwaltungsdatenindexvoidremoveContainerFromIndex(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, long containerId)Die Methode removeContainerFromIndex löscht einen Contaienr aus den IndexenvoidremoveOpenContainerData(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk)Löscht die Daten eines offenen Containers.voidsaveUnsubscriptionTime()Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden.voidsaveUnsubscriptionTime(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 voidsetDeleteBrokenContainers(boolean deleteBrokenContainers)Setzt, ob defekte Containerdateien umbenannt werden sollenstatic voidsetSkipRebuild(boolean skipRebuild)Setzt, ob beim Wiederherstellungslauf beschädigte Indexe einfach nur gelöscht statt wiederhergestellt werden sollen.static voidsettLSMax(long tlsMax)Setzt die maximale LöschschutzzeitvoidsetUseDynamicDeletionTime(boolean useDynamicDeletionTime)Methode für Tests: Setzt, ob die Löschzeit dynamisch an den parameter angepasst wird oder nicht (altes Verhalten)booleanstartupProcedure()Versucht, die StartUp-Properties-Datei einzulesen.voidupdateContainerIndex(SyncKey<IdDataIdentification> lock, ContainerManagementData managementData)Die Methode updateContainerIndex aktualisiert den VerwaltungsdatenindexvoidupdateMaxValues(IdDataIdentification idDataIdentification, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long dataIdx, long arsTime, long dataTime)Die Methode speichert imOpenContainerDataneue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)voidupdateStandardIndexes(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.voidwarnAboutHugeContainerDirectory(IdContainerFileDir location, long numEntries)Die Methode warnAboutHugeContainerDirectory warnt den Benutzer, wenn zu viele Container in einem Containerverzeichnis gespeichert wurden.voidwarnAboutSlowRestore(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)Gibttruezurü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 einIdContainerFileDiraus 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 einIdContainerFileDiraus 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 einesDataIdentNodeausgeführt werden.- Parameters:
indexLock- Index-SchlüsselidContainerFileDir- Container-SchlüsselcontainerIds- Container-IDs, die gelöscht werden sollen- Throws:
PersistenceException- Lesefehler im PersistenzverzeichnisSynchronizationFailedExceptionIndexException
-
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 einesDataIdentNodemit allen Unterverzeichnissen der Datensatzarten und aller darin befindlichen Datencontainern; damit werden alle archivierten Datensätze einer Simulationsvariante geloescht. DerDataIdentNodemuss in der Verwaltung aus demDataIdentTreegeloescht werden. Falls die Simulationsvariante gleich Null ist, oder das Verzeichnis nicht geloescht werden konnte, wird einePersistenceExceptiongeworfen.- 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_ONLINETeile 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 imOpenContainerDataneue 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 LogfileisActiveanlegen. 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)
-