Klasse PersistenceManager
- Alle implementierten Schnittstellen:
TaskManager
,TaskManagerInterface
,ContainerCreator
,DataIdentificationManager
,DataGapManager
-
Verschachtelte Klassen - Übersicht
Verschachtelte KlassenModifizierer und TypKlasseBeschreibungclass
Klasse 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 TypMethodeBeschreibungvoid
Testmethode fürs Debugging, stellt sicher, dass aktuell keine Locks vom aktuellen Thread gehalten werden.long
createSequenceFromArchiveTimeSpecification
(de.bsvrz.dav.daf.main.archive.ArchiveTimeSpecification ats, LockedContainerDirectory containerDirectory) Konvertiert eineArchiveTimeSpecification
(aus einer Anfrage) in eineSequenceSpecification
.static void
deletePath
(Path path) Löscht ein Verzeichnis inklusive enthaltener Dateien.void
Löscht das Persistenzverzeichnis von einer Simulation komplett vom Datenträger.void
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.long
formatObj
(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.int
Gibt 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 sollenint
Gibt 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)long
getLastDataSet
(LockedContainerDirectory containerDirectory) Ermittelt den zuletzt archivierten Datensatz einer Datenidentifikation und Datenartint
int
List
<? 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.void
Initialisiert die vorhandenen Wochenverzeichnisse von der Festplatteboolean
isRangeUnavailable
(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.long
Erhoeht nextContainerID um 1 und gibt den Wert zurück.void
Die Methode prepareShutdown wird beim Herunterfahren des Archivsystems ausgeführt.void
Sichert den letzten Zeitpunkt, wo gültige Daten empfangen wurden bzw. beim Beenden wo Daten abgemeldet wurden.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.static void
setDeleteBrokenContainers
(boolean deleteBrokenContainers) Setzt, ob defekte Containerdateien umbenannt werden sollenboolean
Gibt zurück, ob bei Fehlern beim Lesen von Containerdateien die Datei umbenannt (und damit deaktiviert) werden soll.boolean
startupProcedure
(RebuildMode rebuildMode) Versucht, die StartUp-Properties-Datei einzulesen.void
suspendTaskIfNecessary
(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.void
updateArchTime
(long archTime) Diese Methode wird aufgerufen, um die aktuelle Archivzeit zu setzen.boolean
Gibttrue
zurück, wenn das System terminiert wurde.Von Klasse geerbte Methoden java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Von 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:DataIdentificationManager
Gibt zurück, ob bei Fehlern beim Lesen von Containerdateien die Datei umbenannt (und damit deaktiviert) werden soll.- Angegeben von:
shouldDeleteBrokenContainers
in 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 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.- 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_ONLINE
Teile 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:
nextContainerID
in SchnittstelleContainerCreator
- Gibt zurück:
- als nächste zu verwendende Container-ID
-
getCloseThreadCount
public int getCloseThreadCount()Beschreibung aus Schnittstelle kopiert:ContainerCreator
Gibt die Anzahl Threads zurück, die für das Schließen von Container- und Indexdateien benutzt werden sollen.- Angegeben von:
getCloseThreadCount
in 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:DataIdentificationManager
Muss 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:
lockIndex
in 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 angegebenenSequenceSpecification
gefiltert. 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 nienull
zurü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:ContainerCreator
Gibt den DataIdentTree zurück, der zu Datenidentifikationen zusatzinformationen enthält.- Angegeben von:
getDataIdentTree
in SchnittstelleContainerCreator
- Gibt zurück:
- den DataIdentTree
-
getIndexCacheMaxSize
public int getIndexCacheMaxSize()Beschreibung aus Schnittstelle kopiert:DataIdentificationManager
Gibt die maximale Größe für Index-Caches zurück- Angegeben von:
getIndexCacheMaxSize
in SchnittstelleDataIdentificationManager
- Angegeben von:
getIndexCacheMaxSize
in 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:
formatObj
in SchnittstelleDataIdentificationManager
- Parameter:
objId
- von Typ long- Gibt zurück:
- String
-
wasTerminated
public boolean wasTerminated()Beschreibung aus Schnittstelle kopiert:TaskManagerInterface
Gibttrue
zurück, wenn das System terminiert wurde.- Angegeben von:
wasTerminated
in SchnittstelleTaskManagerInterface
- Gibt zurück:
true
, wenn das System terminiert wurde, sonstfalse
-
getNumCloseIndexThreads
public int getNumCloseIndexThreads()- Angegeben von:
getNumCloseIndexThreads
in SchnittstelleTaskManagerInterface
-
getRuntimeControl
Beschreibung aus Schnittstelle kopiert:TaskManagerInterface
Gibt die aktuelle Laufzeitsteuerung zurück. Falls das System noch nicht voll initialisiert ist, wirdnull
zurückgegeben.- Angegeben von:
getRuntimeControl
in SchnittstelleTaskManagerInterface
- Gibt zurück:
- die aktuelle Laufzeitsteuerung
-
suspendTaskIfNecessary
Beschreibung aus Schnittstelle kopiert:TaskManagerInterface
Die Methode blockiert und hält damit den aufrufenden Task an, wenn dies (z. B. wegen Überlastung) notwendig ist.- Angegeben von:
suspendTaskIfNecessary
in SchnittstelleTaskManagerInterface
- Parameter:
task
- Task- Löst aus:
InterruptedException
- Unterbrochen beim Anhalten
-
countDataInQueues
public long countDataInQueues()- Angegeben von:
countDataInQueues
in SchnittstelleTaskManagerInterface
-
estimateQueueMemoryUsage
public long estimateQueueMemoryUsage()- Angegeben von:
estimateQueueMemoryUsage
in SchnittstelleTaskManagerInterface
-
getNumCheckPersistenceThreads
public int getNumCheckPersistenceThreads()- Angegeben von:
getNumCheckPersistenceThreads
in SchnittstelleTaskManagerInterface
-
getPersistenceManager
Beschreibung aus Schnittstelle kopiert:TaskManager
Gibt den PersistenzManager zurück.- Angegeben von:
getPersistenceManager
in SchnittstelleTaskManager
- Gibt zurück:
- den PersistenzManager
-