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 StringEine 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.voidaddIndexEntries(LockedContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime, long openContID) Die Methode addIndexEntries fügt einem Index Werte hinzu.voidcloseIndexes(int numThreads) Schließt/Flusht alle Indexdateien und wartet bis alle Indexe geschlossen wurdenvoidcloseOpenContainer(LockedContainerDirectory containerDirectory) Schließt den offenen Container in einem Verzeichnis ab.voidSchließt dieses Persistenz-Wochenverzeichnis dauerhaft ab, schließt also alle Container und Indexe.voidcreateRebuildIxdFlagFile(ContainerDirectory directory) Legt im Verzeichnis der Datenidentifikation ein FLAG-Datei an.voiddeleteOpenContainerData(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.longestimate()Schätzt eine AnzahlvoidflushIndexes(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.longgetIndexResult(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.longgetOpenContID(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 voidhandleUnclosedContainer(ContainerManagementIndex managementIndex, LockedContainerDirectory containerDirectory, long contId, BaseIndex<IndexValues> index) protected OpenContainerDatainitOpenContainerData(LockedContainerDirectory containerDirectory, ContainerManagementIndex headerIndex) Die Methode initOpenContainerData initialisiert die Daten eines geöffneten Containers.voidmarkAsClean(ContainerDirectory directory) Entfernt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.voidmarkAsDirty(ContainerDirectory directory) Erzeugt die Kennzeichen-Datei, ob die Indexe verändert wurden, um nach einem Absturz den Wiederanlauf zu beschleunigen.longmaxATime(ContainerDirectory containerDirectory) Die Methode maxATime gibt die maximale Archivzeit einer Datenidentifikation zurücklongGibt die Anzahl der Einträge inopenContainerDatazurück.voidremoveOpenContainerData(ContainerDirectory containerDirectory) Setzt, dass es aktuell für eine Datenidentifikation keinen offenen Container mehr gibt.voidsetOpenContainerData(LockedContainerDirectory containerDirectory, StandardOpenContainerData data) Setzt die Daten eines offenen Containers.protected static voidupdateContainerIndex(ContainerManagementData containerFile, ContainerManagementIndex index) Die Methode updateContainerIndex aktualisiert den VerwaltungsdatenindexvoidupdateContainerIndex(ContainerManagementData managementData, LockedContainerDirectory containerDirectory) Die Methode updateContainerIndex aktualisiert den VerwaltungsdatenindexvoidupdateMaxValues(ContainerDirectory containerDirectory, long dataIdx, long arsTime, long dataTime) Die Methode speichert imOpenContainerDataneue Maximal-Werte für den offenen Container (Maximal-Datenindex usw.)voidupdateStandardIndexes(LockedContainerDirectory containerDirectory) Die Methode updateStandardIndexes aktualisiert die Indexe mit dem zuletzt gesichertenOpenContainerData.voidupdateStandardIndexes(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:
handleUnclosedContainerin 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 derContainerManagementIndexbereits 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
OpenContainerDatabekannt 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 inopenContainerDatazurü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:
getIndexResultin 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:CountEstimatorSchätzt eine Anzahl- Angegeben von:
estimatein SchnittstelleCountEstimator- Setzt außer Kraft:
estimatein 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:PersistenceDirectoryErmittelt zu einem Containerverzeichnis den gesamten (ggf. in diesem Wochenverzeichnis) vorliegenden Datenbereich.- Angegeben von:
getDataRangein KlassePersistenceDirectory- Parameter:
directory- Containerdatenidentifikation- Gibt zurück:
- Datenbereich, insbesondere
NoData.Instancewenn gar keine Daten vorliegen, einValidDataRangesonst. - 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 imOpenContainerDataneue 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()
-