Klasse ActivePersistenceDirectory
java.lang.Object
de.bsvrz.ars.ars.persistence.directories.PersistenceDirectory
de.bsvrz.ars.ars.persistence.directories.ActivePersistenceDirectory
- Alle implementierten Schnittstellen:
CountEstimator
Diese Klasse steht für ein "aktives" (noch nicht abgeschlossenes) Persistenzverzeichnis, in das laufend Online-Daten
archiviert werden. Daher bietet diese Klasse gegenüber der Basisklasse
PersistenceDirectory
, die für allgemeine
Persistenzverzeichnisse (insbesondere im Nur-Lesen-Modus) benutzt wird weitere Funktionalitäten.-
Verschachtelte Klassen - Übersicht
Von Klasse geerbte verschachtelte Klassen/Schnittstellen de.bsvrz.ars.ars.persistence.directories.PersistenceDirectory
PersistenceDirectory.ContainerCall
-
Feldübersicht
FelderModifizierer und TypFeldBeschreibungstatic final String
Eine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index möglicherweise (wg.Von Klasse geerbte Felder de.bsvrz.ars.ars.persistence.directories.PersistenceDirectory
debug, indexTree, largeDataIdentifications
-
Konstruktorübersicht
KonstruktorenKonstruktorBeschreibungActivePersistenceDirectory
(ContainerCreator containerCreator, PersistenceDirectoryLayoutInstance layoutInstance) Erstellt ein neues ActivePersistenceDirectory. -
Methodenübersicht
Modifizierer und TypMethodeBeschreibungaccessOpenContainer
(ContainerDirectory containerDirectory, long openContID) Greift auf den offenen Container zu.void
addIndexEntries
(LockedContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime, long openContID) Die Methode addIndexEntries fügt einem Index Werte hinzu.void
closeIndexes
(int numThreads) Schließt/Flusht alle Indexdateien und wartet bis alle Indexe geschlossen wurdenvoid
closeOpenContainer
(LockedContainerDirectory containerDirectory) Schließt den offenen Container in einem Verzeichnis ab.void
Schließt dieses Persistenz-Wochenverzeichnis dauerhaft ab, schließt also alle Container und Indexe.void
createRebuildIxdFlagFile
(ContainerDirectory directory) Legt im Verzeichnis der Datenidentifikation ein FLAG-Datei an.void
deleteOpenContainerData
(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) Löscht die Daten eines offenen Containers komplett, also auch die Information, dass es keinen offenen Container gibt.long
estimate()
Schätzt eine Anzahlvoid
flushIndexes
(LockedContainerDirectory containerDirectory) Schreibt den aktuellen Stand der Indexe auf die FestplattegetDataRange
(LockedContainerDirectory directory) Ermittelt zu einem Containerverzeichnis den gesamten (ggf. in diesem Wochenverzeichnis) vorliegenden Datenbereich.long
getIndexResult
(LockedContainerDirectory containerDirectory, SequenceSpecification sequenceSpecification) Die Methode getIndexResult führt eine Index-Abfrage durch (für Archivanfragen) und aktualisiert dabei die Daten vom offenen Container im IndexgetLoadedContainerData
(ContainerDirectory containerDirectory) Entspricht etwagetOpenContainerData()
, gibt die Daten aber nur zurück, wenn sie bereits bekannt sind, d.h. es wird nicht im letzten Container nachgesehen.getOpenContainerData
(ContainerDirectory containerFileDir) Die Methode getOpenContainerData die zwischengespeicherten Daten für den offenen Container zurück.getOpenContainerData
(LockedContainerDirectory containerDirectory, ContainerManagementIndex containerManagementIndex) Die Methode getOpenContainerData ermittelt die Daten vom offenen Container.long
getOpenContID
(ContainerDirectory containerDirectory) Die Methode getOpenContID gibt die ID des offenen Containers für eine Datenidentifikation zurückgetRebuildIdxFile
(ContainerDirectory directory) Die Methode getRebuildIdxFile ermittelt den Speicherort für die _rebuildIndex.flagprotected void
handleUnclosedContainer
(ContainerManagementIndex managementIndex, LockedContainerDirectory containerDirectory, long contId, BaseIndex<IndexValues> index) protected OpenContainerData
initOpenContainerData
(LockedContainerDirectory containerDirectory, ContainerManagementIndex headerIndex) Die Methode initOpenContainerData initialisiert die Daten eines geöffneten Containers.void
markAsClean
(ContainerDirectory directory) Entfernt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.void
markAsDirty
(ContainerDirectory directory) Erzeugt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.long
maxATime
(ContainerDirectory containerDirectory) Die Methode maxATime gibt die maximale Archivzeit einer Datenidentifikation zurücklong
Gibt die Anzahl der Einträge inopenContainerData
zurück.void
removeOpenContainerData
(ContainerDirectory containerDirectory) Setzt, dass es aktuell für eine Datenidentifikation keinen offenen Container mehr gibt.void
setOpenContainerData
(LockedContainerDirectory containerDirectory, StandardOpenContainerData data) Setzt die Daten eines offenen Containers.protected static void
updateContainerIndex
(ContainerManagementData containerFile, ContainerManagementIndex index) Die Methode updateContainerIndex aktualisiert den Verwaltungsdatenindexvoid
updateContainerIndex
(ContainerManagementData managementData, LockedContainerDirectory containerDirectory) Die Methode updateContainerIndex aktualisiert den Verwaltungsdatenindexvoid
updateMaxValues
(ContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime) Die Methode speichert imOpenContainerData
neue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)void
updateStandardIndexes
(LockedContainerDirectory containerDirectory) Die Methode updateStandardIndexes aktualisiert die Indexe mit dem zuletzt gesichertenOpenContainerData
.void
updateStandardIndexes
(LockedContainerDirectory containerDirectory, StandardOpenContainerData data) Die Methode updateStandardIndexes fügt einem Index Werte hinzu oder aktualisiert die vorhandenen Werte.Von Klasse geerbte Methoden de.bsvrz.ars.ars.persistence.directories.PersistenceDirectory
accessContainer, computeDataRange, createDirectoriesIfAbsent, deleteIndexes, executeOnContainer, getBasePath, getContainerHeaders, getContainerHeaders, getIndexTree, getLargeDataIdentifications, getLastContainerHeaders, getLayoutInstance, getLockFile, getPath, getPath, getSimulationVariant, hasError, iterator, maxContainerId, openDeletedContainerFile, rebuildContainerHeaderIndex, rebuildIndexes, rebuildStandardIndex, removeContainerFromIndex, renameContainerFile, setCount, toString, warnAboutHugeContainerDirectory, warnAboutSlowRestore
-
Felddetails
-
REBUILD_INDEX_FILE_FLAG_NAME
Eine Datei dieses Namens wird pro Verzeichnis einer Datenidentifikation/Datensatzart angelegt, wenn ein neuer Datensatz archiviert wurde und der Index möglicherweise (wg. Caching) noch nicht auf die Platte durchgeschrieben wurde. Beim Herunterfahren des Systems werden alle Indexe durchgeschrieben und die Flag-Dateien gelöscht. 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 verworfen bzw. neu aufgebaut.- Siehe auch:
-
-
Konstruktordetails
-
ActivePersistenceDirectory
public ActivePersistenceDirectory(@NotNull ContainerCreator containerCreator, @NotNull PersistenceDirectoryLayoutInstance layoutInstance) Erstellt ein neues ActivePersistenceDirectory.- Parameter:
containerCreator
- Interface mit den benötigten Funktionen zum Erstellen von neuen ContainernlayoutInstance
- Konkrete Instanz des zu benutzenden Verzeichnis-Layouts
-
-
Methodendetails
-
handleUnclosedContainer
protected void handleUnclosedContainer(ContainerManagementIndex managementIndex, LockedContainerDirectory containerDirectory, long contId, BaseIndex<IndexValues> index) throws IndexException - Setzt außer Kraft:
handleUnclosedContainer
in KlassePersistenceDirectory
- Löst aus:
IndexException
-
updateContainerIndex
protected static void updateContainerIndex(ContainerManagementData containerFile, ContainerManagementIndex index) throws PersistenceException Die Methode updateContainerIndex aktualisiert den Verwaltungsdatenindex- Parameter:
containerFile
- Containerdaten, die in den Index eingefügt werden sollen (ersetzt ggf. vorhandene Einträge mit gleicher ContainerID)index
- Verwaltungsdatenindex- Löst aus:
PersistenceException
- wenn ein Fehler auftritt
-
accessOpenContainer
public ContainerFileHandle accessOpenContainer(ContainerDirectory containerDirectory, long openContID) throws PersistenceException Greift auf den offenen Container zu. Die Methode darf nicht für geschlossene Container verwendet werden, da dann die Synchronisation nicht sichergestellt ist.- Parameter:
containerDirectory
- Verzeichnis des ContainersopenContID
- Id des offenen Containers.- Gibt zurück:
- Containerhandle
- Löst aus:
PersistenceException
- Lesefehler
-
updateContainerIndex
public void updateContainerIndex(ContainerManagementData managementData, LockedContainerDirectory containerDirectory) throws PersistenceException, IndexException Die Methode updateContainerIndex aktualisiert den Verwaltungsdatenindex- Parameter:
managementData
- Containerdaten, die in den Index eingefügt werden sollen (ersetzt ggf. vorhandene Einträge mit gleicher ContainerID)containerDirectory
- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten- Löst aus:
PersistenceException
- wenn ein Fehler auftrittIndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
getOpenContainerData
@Nullable public StandardOpenContainerData getOpenContainerData(ContainerDirectory containerFileDir) throws IndexException, SynchronizationFailedException Die Methode getOpenContainerData die zwischengespeicherten Daten für den offenen Container zurück. Dieser Overload ohneContainerManagementIndex
-Parameter öffnet den Index, falls erforderlich.- Parameter:
containerFileDir
- Containerverzeichnis- Gibt zurück:
- StandardOpenContainerData oder null, falls kein offener Container existiert
- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
- Synchronisierung fehlgeschlagen
-
getOpenContainerData
@Nullable public StandardOpenContainerData getOpenContainerData(LockedContainerDirectory containerDirectory, ContainerManagementIndex containerManagementIndex) Die Methode getOpenContainerData ermittelt die Daten vom offenen Container. Dies ist eine optimierte Variante vongetOpenContainerData(ContainerDirectory)
wenn derContainerManagementIndex
bereits geladen wurde.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis des ContainerscontainerManagementIndex
- von Typ ContainerManagementIndex- Gibt zurück:
- StandardOpenContainerData
-
getLoadedContainerData
Entspricht etwagetOpenContainerData()
, gibt die Daten aber nur zurück, wenn sie bereits bekannt sind, d.h. es wird nicht im letzten Container nachgesehen.- Parameter:
containerDirectory
- Containerverzeichnis- Gibt zurück:
- null, wenn kein
OpenContainerData
bekannt ist,NO_OPEN_CONTAINER
, wenn bekannt ist, dass es keinen offenen Container gibt, sonst die Daten des offenen Containers
-
initOpenContainerData
protected OpenContainerData initOpenContainerData(LockedContainerDirectory containerDirectory, ContainerManagementIndex headerIndex) Die Methode initOpenContainerData initialisiert die Daten eines geöffneten Containers. Da die Header des offenen Containers nicht aussagekräftig sind, muss im offenen Container im Regelfall über die Datensätze iteriert werden.- Parameter:
containerDirectory
- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten ContainerdatenverzeichnisheaderIndex
- Verwaltungsdatenindex, um zu bestimmen welcher Container der offene ist (oder ob es überhaupt einen offenen gibt)- Gibt zurück:
- StandardOpenContainerData
-
setOpenContainerData
public void setOpenContainerData(LockedContainerDirectory containerDirectory, StandardOpenContainerData data) Setzt die Daten eines offenen Containers.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis des Containersdata
- Neue Daten
-
removeOpenContainerData
Setzt, dass es aktuell für eine Datenidentifikation keinen offenen Container mehr gibt.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis des Containers
-
deleteOpenContainerData
public void deleteOpenContainerData(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk) Löscht die Daten eines offenen Containers komplett, also auch die Information, dass es keinen offenen Container gibt. Hierdurch wird der Speicher freigegeben.- Parameter:
lock
- Synchroniserungszugriffsschlüsseladk
- Archivdatenart
-
openContainerDataSize
public long openContainerDataSize()Gibt die Anzahl der Einträge inopenContainerData
zurück.- Gibt zurück:
- die Anzahl der Einträge in
openContainerData
-
getRebuildIdxFile
Die Methode getRebuildIdxFile ermittelt den Speicherort für die _rebuildIndex.flag- Parameter:
directory
- Datenidentifikation/Verzeichnis der Flag-Datei- Gibt zurück:
- Path
-
createRebuildIxdFlagFile
Legt im Verzeichnis der Datenidentifikation ein FLAG-Datei an.- Parameter:
directory
- Datenidentifikation/Verzeichnis der Flag-Datei- Löst aus:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
markAsDirty
Erzeugt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.- Parameter:
directory
- Datenidentifikation/Verzeichnis, das markiert werden soll- Löst aus:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
markAsClean
Entfernt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.- Parameter:
directory
- Datenidentifikation/Verzeichnis, mit Flag-Datei
-
flushIndexes
Schreibt den aktuellen Stand der Indexe auf die Festplatte- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis, in dem die Indexe geflusht werden sollen
-
maxATime
public long maxATime(ContainerDirectory containerDirectory) throws IndexException, SynchronizationFailedException Die Methode maxATime gibt die maximale Archivzeit einer Datenidentifikation zurück- Parameter:
containerDirectory
- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Containerverzeichnis- Gibt zurück:
- long
- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
- Synchronisierung auf Indexe fehlgeschlagen
-
getOpenContID
public long getOpenContID(ContainerDirectory containerDirectory) throws IndexException, SynchronizationFailedException Die Methode getOpenContID gibt die ID des offenen Containers für eine Datenidentifikation zurück- Parameter:
containerDirectory
- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Containerverzeichnis- Gibt zurück:
- long oder -1 falls es keinen offenen Container gibt
- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
- Synchronisierung auf Indexe fehlgeschlagen
-
getIndexResult
public IndexResult<IndexValues> getIndexResult(LockedContainerDirectory containerDirectory, SequenceSpecification sequenceSpecification) throws IndexException, SynchronizationFailedException Die Methode getIndexResult führt eine Index-Abfrage durch (für Archivanfragen) und aktualisiert dabei die Daten vom offenen Container im Index- Setzt außer Kraft:
getIndexResult
in KlassePersistenceDirectory
- Parameter:
containerDirectory
- Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Container-VerzeichnissequenceSpecification
- von Typ ArchiveTimeSpecification- Gibt zurück:
- IndexResult<IndexValues>
- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
- wenn die Synchronisierung auf die Indexe fehlschlägt
-
estimate
public long estimate()Beschreibung aus Schnittstelle kopiert:CountEstimator
Schätzt eine Anzahl- Angegeben von:
estimate
in SchnittstelleCountEstimator
- Setzt außer Kraft:
estimate
in KlassePersistenceDirectory
- Gibt zurück:
- geschätzte Anzahl. Der Wert muss größer-gleich 0 sein und sollte der realen Anzahl möglichst gut entsprechen.
-
getDataRange
Beschreibung aus Klasse kopiert:PersistenceDirectory
Ermittelt zu einem Containerverzeichnis den gesamten (ggf. in diesem Wochenverzeichnis) vorliegenden Datenbereich.- Angegeben von:
getDataRange
in KlassePersistenceDirectory
- Parameter:
directory
- Containerdatenidentifikation- Gibt zurück:
- Datenbereich, insbesondere
NoData.Instance
wenn gar keine Daten vorliegen, einValidDataRange
sonst. - Löst aus:
IndexException
-
addIndexEntries
public void addIndexEntries(LockedContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime, long openContID) throws IndexException Die Methode addIndexEntries fügt einem Index Werte hinzu.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis, in dem die Indexwerte hinzugefügt werden sollendataIdx
- von Typ longarsTime
- von Typ longdataTime
- von Typ longopenContID
- von Typ long- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
updateStandardIndexes
public void updateStandardIndexes(LockedContainerDirectory containerDirectory) throws IndexException Die Methode updateStandardIndexes aktualisiert die Indexe mit dem zuletzt gesichertenOpenContainerData
.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis, in dem die Indexwerte aktualisiert werden sollen- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
updateStandardIndexes
public void updateStandardIndexes(LockedContainerDirectory containerDirectory, StandardOpenContainerData data) throws IndexException Die Methode updateStandardIndexes fügt einem Index Werte hinzu oder aktualisiert die vorhandenen Werte.- Parameter:
containerDirectory
- Datenidentifikation/Verzeichnis, in dem die Indexwerte aktualisiert werden sollendata
- von Typ OpenContainerData- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftritt
-
updateMaxValues
public void updateMaxValues(ContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime) throws IndexException, SynchronizationFailedException Die Methode speichert imOpenContainerData
neue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)- Parameter:
containerDirectory
- ContainerverzeichnisdataIdx
- DatenindexarsTime
- ArchivzeitdataTime
- Datenzeit- Löst aus:
IndexException
- wenn ein Problem beim Zugriff auf den Index auftrittSynchronizationFailedException
- Synchronisierung auf Indexe fehlgeschlagen
-
closeIndexes
Schließt/Flusht alle Indexdateien und wartet bis alle Indexe geschlossen wurden- Parameter:
numThreads
- Anzahl Threads fürs parallele Schließen- Löst aus:
InterruptedException
- Unterbrochen beim Warten auf die Threads
-
closeOpenContainer
public void closeOpenContainer(LockedContainerDirectory containerDirectory) throws IndexException, SynchronizationFailedException Schließt den offenen Container in einem Verzeichnis ab.- Parameter:
containerDirectory
- Verzeichnis- Löst aus:
IndexException
- Fehler beim Schreiben der IndexeSynchronizationFailedException
- Fehler beim Synchronisieren auf die Indexe der Datenidentifikation
-
closePermanently
Schließt dieses Persistenz-Wochenverzeichnis dauerhaft ab, schließt also alle Container und Indexe.- Löst aus:
InterruptedException
- Unterbrochen beim Warten auf Beendigung des AbschließensPersistenceException
- Schreibfehler beim Container schließen
-
getDirtyDirectoriesSize
public long getDirtyDirectoriesSize()
-