Klasse PersistenceManager
- Alle implementierten Schnittstellen:
TaskManager,TaskManagerInterface,ContainerCreator,DataIdentificationManager,DataGapManager
-
Verschachtelte Klassen - Übersicht
Verschachtelte KlassenModifizierer und TypKlasseBeschreibungclassKlasse die Statistiken wie Queue-Größe oder Speicherverbrauch enthält, die z. -
Feldübersicht
Felder -
Konstruktorübersicht
KonstruktorenKonstruktorBeschreibungPersistenceManager(TaskManagerInterface archMgr, Path archPath, TimeDomain<?> domain) Erzeugt den Persistenz-Manager. -
Methodenübersicht
Modifizierer und TypMethodeBeschreibungvoidTestmethode fürs Debugging, stellt sicher, dass aktuell keine Locks vom aktuellen Thread gehalten werden.longcreateSequenceFromArchiveTimeSpecification(de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification ats, LockedContainerDirectory containerDirectory) Konvertiert eineArchiveTimeSpecification(aus einer Anfrage) in eineSequenceSpecification.static voiddeletePath(Path path) Löscht ein Verzeichnis inklusive enthaltener Dateien.voidLöscht das Persistenzverzeichnis von einer Simulation komplett vom Datenträger.voiddeleteSimVar(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.longformatObj(long objId) Die Methode formatObj gibt eine Objekt-ID als lesbaren String aus (z.getActivePersistenceDirectory(int simVariant) Gibt das aktive Persistenzverzeichnis (in das gerade aktiviert wird) zurück.intGibt die Anzahl Threads zurück, die für das Schließen von Container- und Indexdateien benutzt werden sollen.Gibt den DataIdentTree zurück, der zu Datenidentifikationen zusatzinformationen enthält.getGapFilePath(IdDataIdentification dataIdentification) Gibt den Dateipfad zurück, in dem Lückendateien gespeichert werden sollenintGibt die maximale Größe für Index-Caches zurückcom.google.common.collect.SetMultimap<IdDataIdentification, SyncKey<IdDataIdentification>> Gibt alle aktuell genutzten Locks zur Synchronisation auf die Datenidentifikationen zurück.getIndexResult(LockedContainerDirectory containerDirectory, SequenceSpecification sequenceSpecification) Führt eine Index-Abfrage über mehrere Persistenzverzeichnisse durchgetIndexResult(LockedContainerDirectory containerDirectory, de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification archiveTimeSpecification) Führt eine Index-Abfrage über mehrere Persistenzverzeichnisse durchgetLastContainerHeaders(LockedContainerDirectory containerDirectory) Ermittelt die Header vom letzten Container (vom Container mit der größten ID)longgetLastDataSet(LockedContainerDirectory containerDirectory) Ermittelt den zuletzt archivierten Datensatz einer Datenidentifikation und DatenartintintList<? extends PersistenceDirectory> getPersistenceDirectories(int simVariant) Gibt alle Persistenzverzeichnisse einer Simulationsvariante zurück.List<? extends PersistenceDirectory> getPersistenceDirectories(int simVariant, SequenceSpecification sequenceSpecification) Ermittelt relevante Persistenzverzeichnisse.Gibt die Verwaltung der einzelnen Unterverzeichnisse zurück.Gibt den PersistenzManager zurück.Gibt das Wurzelverzeichnis der Persistenz zurück.Gibt die aktuelle Laufzeitsteuerung zurück.Gibt Statistiken von diesem PersistenceManager-Objekt zurück.voidInitialisiert die vorhandenen Wochenverzeichnisse von der FestplattebooleanisRangeUnavailable(long fromArchiveTime, long toArchiveTime) Prüft, ob sich Teile des Persistenzverzeichnisses zwischen 2 Datensätzen nicht mehr im direkten Zugriff befinden, also ausgelagert oder gelöscht wurden.lockIndex(IdDataIdentification dataIdentification) Muss immer vor Zugriffen auf den kritischen Bereich (die Indexe oder Container) der Datenidentifikation aufgerufen werden.longErhoeht nextContainerID um 1 und gibt den Wert zurück.voidDie Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.voidSichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden.voidsaveUnsubscriptionTime(com.google.common.collect.Multimap<Long, IdDataIdentification> didForUnsubscriptionTime, 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 sollenbooleanGibt zurück, ob bei Fehlern beim Lesen von Containerdateien die Datei umbenannt (und damit deaktiviert) werden soll.booleanstartupProcedure(RebuildMode rebuildMode) Versucht, die StartUp-Properties-Datei einzulesen.voidsuspendTaskIfNecessary(Task task) Die Methode blockiert und hält damit den aufrufenden Task an, wenn dies (z.updateAndGetActivePersistenceDirectory(long archTime, int simVariant) Diese Methode wird aufgerufen, um die aktuelle Archivzeit zu setzen und gibt gleichzeitig das zugehörige aktive Persistenzverzeichnis zurück.voidupdateArchTime(long archTime) Diese Methode wird aufgerufen, um die aktuelle Archivzeit zu setzen.booleanGibttruezurück, wenn das System terminiert wurde.Von Klasse geerbte Methoden java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitVon Schnittstelle geerbte Methoden de.bsvrz.ars.ars.persistence.DataIdentificationManager
formatContainerDirectory, lockIndex
-
Felddetails
-
BACKUP_DIR_NAME
Name des Verzeichnisses für das Datenkonsistente Backup- Siehe auch:
-
RESTART_TIME_FILE_NAME
Name der Datei mit den Datenzeitinformationen für den Neustart- Siehe auch:
-
-
Konstruktordetails
-
PersistenceManager
Erzeugt den Persistenz-Manager.- Parameter:
archMgr- Archiv-Manager oder andere Implementierung vonTaskManagerInterface(insb. für Tests)archPath- Archivierungs-Verzeichnisdomain- Klasse, die die Unterteilung der Persistenzverzeichnisse definiert
-
-
Methodendetails
-
setDeleteBrokenContainers
public static void setDeleteBrokenContainers(boolean deleteBrokenContainers) Setzt, ob defekte Containerdateien umbenannt werden sollen- Parameter:
deleteBrokenContainers- Sollen defekte Containerdateien umbenannt werden?
-
shouldDeleteBrokenContainers
public boolean shouldDeleteBrokenContainers()Beschreibung aus Schnittstelle kopiert:DataIdentificationManagerGibt zurück, ob bei Fehlern beim Lesen von Containerdateien die Datei umbenannt (und damit deaktiviert) werden soll.- Angegeben von:
shouldDeleteBrokenContainersin SchnittstelleDataIdentificationManager- Gibt zurück:
- Defekte Container umbenennen/löschen?
-
getGapFilePath
Gibt den Dateipfad zurück, in dem Lückendateien gespeichert werden sollen- Parameter:
dataIdentification- Datenidentifikation- Gibt zurück:
- Dateipfad
-
initialize
public void initialize() throws IOException, InterruptedException, PersistenceException, DirectoryIsLockedExceptionInitialisiert die vorhandenen Wochenverzeichnisse von der Festplatte- Löst aus:
IOException- LesefehlerInterruptedException- UnterbrochenPersistenceException- LesefehlerDirectoryIsLockedException- Das aktuelle Persistenzverzeichnis ist noch gesperrt (_isActive.flag-Datei existiert)
-
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.- Parameter:
syncKey- Schlüssel für Zugriff auf Indexknoten- Löst aus:
PersistenceException- Schreibfehler im Persistenzverzeichnis
-
deletePath
Löscht ein Verzeichnis inklusive enthaltener Dateien.- Parameter:
path- Verzeichnis- Löst aus:
IOException- Mögliche Exception
-
prepareShutdown
Die Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.- Löst aus:
InterruptedException- Wenn der Thread beim Warten auf das Schließen der Indexdateien unterbrochen wurde
-
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 (zwecks 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.- Parameter:
rebuildMode- Wiederherstellungsmodus- Gibt zurück:
- Wahr, falls der Durchlauf des Persistenzverzeichnisses erfolgreich war und das Archivsystem starten kann, falsch sonst.
-
getStatistics
Gibt Statistiken von diesem PersistenceManager-Objekt zurück.- Gibt zurück:
- Statistiken (Typ Statistics)
-
nextContainerID
public long nextContainerID()Erhoeht nextContainerID um 1 und gibt den Wert zurück.- Angegeben von:
nextContainerIDin SchnittstelleContainerCreator- Gibt zurück:
- als nächste zu verwendende Container-ID
-
getCloseThreadCount
public int getCloseThreadCount()Beschreibung aus Schnittstelle kopiert:ContainerCreatorGibt die Anzahl Threads zurück, die für das Schließen von Container- und Indexdateien benutzt werden sollen.- Angegeben von:
getCloseThreadCountin SchnittstelleContainerCreator- Gibt zurück:
- Anzahl Threads (>= 1)
-
getLastContainerID
public long getLastContainerID()- Gibt zurück:
- 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 potenziellen Datenlücken verwendet. -
saveUnsubscriptionTime
public void saveUnsubscriptionTime(com.google.common.collect.Multimap<Long, IdDataIdentification> didForUnsubscriptionTime, 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 potenziellen Datenlücken verwendet.- Parameter:
didForUnsubscriptionTime- Zu schreibende ZeitstempelunsubscriptionFile- Datei, die geschrieben wird.
-
getLastContainerHeaders
@Nullable public ContainerHeaders getLastContainerHeaders(LockedContainerDirectory containerDirectory) throws IndexException Ermittelt die Header vom letzten Container (vom Container mit der größten ID)- Parameter:
containerDirectory- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten (Datenidentifikation + ADK, unabhängig vom spezifischen Persistenzverzeichnis)- Gibt zurück:
- ContainerHeaders
- Löst aus:
IndexException- wenn der Indexzugriff fehlschlägt
-
getLastDataSet
@Nullable public ContainerDataResult getLastDataSet(LockedContainerDirectory containerDirectory) throws IndexException, PersistenceException, SynchronizationFailedException Ermittelt den zuletzt archivierten Datensatz einer Datenidentifikation und Datenart- Parameter:
containerDirectory- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten (Datenidentifikation + ADK, unabhängig vom spezifischen Persistenzverzeichnis)- Gibt zurück:
- ContainerHeaders
- Löst aus:
IndexException- wenn der Indexzugriff fehlschlägtSynchronizationFailedException- Synchronisierung fehlgeschlagenPersistenceException- Persistenzfehler
-
lockIndex
public SyncKey<IdDataIdentification> lockIndex(IdDataIdentification dataIdentification) throws SynchronizationFailedException Beschreibung aus Schnittstelle kopiert:DataIdentificationManagerMuss 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.- Angegeben von:
lockIndexin SchnittstelleDataIdentificationManager- Parameter:
dataIdentification- Datenidentifikation- Gibt zurück:
- Lock
- Löst aus:
SynchronizationFailedException- Synchronisierung ist fehlgeschlagen (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.- Gibt zurück:
- 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. -
getActivePersistenceDirectory
Gibt das aktive Persistenzverzeichnis (in das gerade aktiviert wird) zurück.- Parameter:
simVariant- Simulationsvariante- Gibt zurück:
- Persistenzverzeichnis, oder null, wenn gerade keines zum Beschreiben benutzt wird.
-
getPersistenceDirectories
public List<? extends PersistenceDirectory> getPersistenceDirectories(int simVariant, SequenceSpecification sequenceSpecification) Ermittelt relevante Persistenzverzeichnisse. Achtung: Die zurückgegebenen Verzeichnisse sind grob nach der angegebenenSequenceSpecificationgefiltert. D. h. der Anfangs-Zustand und ein ggf. nachfolgender Datensatz fehlen in sehr ungünstigen Fällen eventuell, und zwar wenn die Grenze des Anfragebereichs genau auf einem Wechsel des Wochenverzeichnisses liegt.Daher muss in diesen Fällen #validateIndexResult aufgerufen werden.
- Parameter:
simVariant- Simulationsvariante (oder 0 für "normale" Daten)sequenceSpecification- Anfragebereich- Gibt zurück:
- Liste mit Persistenzverzeichnissen
-
getPersistenceDirectories
Gibt alle Persistenzverzeichnisse einer Simulationsvariante zurück.- Parameter:
simVariant- Simulationsvariante (oder 0 für "normale" Daten)- Gibt zurück:
- alle Persistenzverzeichnisse, die zurückgegebene Liste ist immutable.
-
getIndexResult
public LocatedIndexResult<IndexValues> getIndexResult(LockedContainerDirectory containerDirectory, de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification archiveTimeSpecification) throws IndexException Führt eine Index-Abfrage über mehrere Persistenzverzeichnisse durch- Parameter:
containerDirectory- Gelocktes ContainerverzeichnisarchiveTimeSpecification- Archivzeitspezifikation- Gibt zurück:
- Index-Ergebnis
- Löst aus:
IndexException- Fehler beim Index-Zugriff
-
getIndexResult
public LocatedIndexResult<IndexValues> getIndexResult(LockedContainerDirectory containerDirectory, SequenceSpecification sequenceSpecification) throws IndexException Führt eine Index-Abfrage über mehrere Persistenzverzeichnisse durch- Parameter:
containerDirectory- Gelocktes ContainerverzeichnissequenceSpecification- Abfragebereich- Gibt zurück:
- Index-Ergebnis
- Löst aus:
IndexException- Fehler beim Index-Zugriff
-
createSequenceFromArchiveTimeSpecification
public SequenceSpecification createSequenceFromArchiveTimeSpecification(de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification ats, LockedContainerDirectory containerDirectory) throws IndexException Konvertiert eineArchiveTimeSpecification(aus einer Anfrage) in eineSequenceSpecification. Es werden nur absoluteArchiveTimeSpecification-Objekte unterstützt.- Parameter:
ats- ArchivzeitspezifikationcontainerDirectory- Containerverzeichnis- Gibt zurück:
- SequenceSpecification
- Löst aus:
IndexException- Fehler beim Index-Zugriff
-
getBackupConfigurationDirectory
-
deletePersistenceDirectory
public void deletePersistenceDirectory(ActivePersistenceDirectory directory) throws PersistenceException Löscht das Persistenzverzeichnis von einer Simulation komplett vom Datenträger. Es dürfen keine Verzeichnisse übergeben werden, die nicht von Simulationen können, dann wird ein Fehler geworfen.- Parameter:
directory- Persistenzverzeichnis der Simulation.- Löst aus:
PersistenceException- Fehler beim Löschen
-
updateArchTime
Diese Methode wird aufgerufen, um die aktuelle Archivzeit zu setzen. Diese Methode wird aufgerufen, bevor ein Datensatz archiviert wird, damit die Persistenzschicht die erforderlichen Arbeiten durchführen kann, also z. B. ein neues Wochenverzeichnis anzulegen.- Parameter:
archTime- Aktuelle Archivzeit- Löst aus:
PersistenceException- Fehler beim Erstellen eines neuen Persistenzverzeichnisses
-
updateAndGetActivePersistenceDirectory
@NotNull public ActivePersistenceDirectory updateAndGetActivePersistenceDirectory(long archTime, int simVariant) throws PersistenceException Diese Methode wird aufgerufen, um die aktuelle Archivzeit zu setzen und gibt gleichzeitig das zugehörige aktive Persistenzverzeichnis zurück. Diese Methode wird aufgerufen, bevor ein Datensatz archiviert wird, damit die Persistenzschicht die erforderlichen Arbeiten durchführen kann, also z. B. ein neues Wochenverzeichnis anzulegen.Im Gegensatz zu
getActivePersistenceDirectory(int)wird nienullzurückgegeben.- Parameter:
archTime- Aktuelle ArchivzeitsimVariant- Simulationsvariante- Gibt zurück:
- Persistenzverzeichnis für die angegebenen Dateninformationen.
- Löst aus:
PersistenceException- Fehler beim Erstellen eines neuen Persistenzverzeichnisses
-
getRootPath
Gibt das Wurzelverzeichnis der Persistenz zurück.- Gibt zurück:
- Wurzelverzeichnis
-
getPersistenceDirectoryManager
Gibt die Verwaltung der einzelnen Unterverzeichnisse zurück.- Gibt zurück:
- Verwaltungsschicht für Verzeichnisse
-
getDataIdentTree
Beschreibung aus Schnittstelle kopiert:ContainerCreatorGibt den DataIdentTree zurück, der zu Datenidentifikationen zusatzinformationen enthält.- Angegeben von:
getDataIdentTreein SchnittstelleContainerCreator- Gibt zurück:
- den DataIdentTree
-
getIndexCacheMaxSize
public int getIndexCacheMaxSize()Beschreibung aus Schnittstelle kopiert:DataIdentificationManagerGibt die maximale Größe für Index-Caches zurück- Angegeben von:
getIndexCacheMaxSizein SchnittstelleDataIdentificationManager- Angegeben von:
getIndexCacheMaxSizein SchnittstelleTaskManagerInterface- Gibt zurück:
- Maximale Größe in Bytes
-
formatObj
Die Methode formatObj gibt eine Objekt-ID als lesbaren String aus (z. B. ermitteln der Pid falls möglich)- Angegeben von:
formatObjin SchnittstelleDataIdentificationManager- Parameter:
objId- von Typ long- Gibt zurück:
- String
-
wasTerminated
public boolean wasTerminated()Beschreibung aus Schnittstelle kopiert:TaskManagerInterfaceGibttruezurück, wenn das System terminiert wurde.- Angegeben von:
wasTerminatedin SchnittstelleTaskManagerInterface- Gibt zurück:
true, wenn das System terminiert wurde, sonstfalse
-
getNumCloseIndexThreads
public int getNumCloseIndexThreads()- Angegeben von:
getNumCloseIndexThreadsin SchnittstelleTaskManagerInterface
-
getRuntimeControl
Beschreibung aus Schnittstelle kopiert:TaskManagerInterfaceGibt die aktuelle Laufzeitsteuerung zurück. Falls das System noch nicht voll initialisiert ist, wirdnullzurückgegeben.- Angegeben von:
getRuntimeControlin SchnittstelleTaskManagerInterface- Gibt zurück:
- die aktuelle Laufzeitsteuerung
-
suspendTaskIfNecessary
Beschreibung aus Schnittstelle kopiert:TaskManagerInterfaceDie Methode blockiert und hält damit den aufrufenden Task an, wenn dies (z. B. wegen Überlastung) notwendig ist.- Angegeben von:
suspendTaskIfNecessaryin SchnittstelleTaskManagerInterface- Parameter:
task- Task- Löst aus:
InterruptedException- Unterbrochen beim Anhalten
-
countDataInQueues
public long countDataInQueues()- Angegeben von:
countDataInQueuesin SchnittstelleTaskManagerInterface
-
estimateQueueMemoryUsage
public long estimateQueueMemoryUsage()- Angegeben von:
estimateQueueMemoryUsagein SchnittstelleTaskManagerInterface
-
getNumCheckPersistenceThreads
public int getNumCheckPersistenceThreads()- Angegeben von:
getNumCheckPersistenceThreadsin SchnittstelleTaskManagerInterface
-
getPersistenceManager
Beschreibung aus Schnittstelle kopiert:TaskManagerGibt den PersistenzManager zurück.- Angegeben von:
getPersistenceManagerin SchnittstelleTaskManager- Gibt zurück:
- den PersistenzManager
-