Klasse PersistenceDirectory

java.lang.Object
de.bsvrz.ars.ars.persistence.directories.PersistenceDirectory
Alle implementierten Schnittstellen:
CountEstimator
Bekannte direkte Unterklassen:
ActivePersistenceDirectory, ReadonlyPersistenceDirectory

public abstract sealed class PersistenceDirectory extends Object implements CountEstimator permits ActivePersistenceDirectory, ReadonlyPersistenceDirectory
Einzelnes Persistenzverzeichnis, das für einen bestimmten Zeitbereich oder für eine bestimmte Simulationsvariante die Daten enthält.
  • Felddetails

    • debug

      protected static final de.bsvrz.sys.funclib.debug.Debug debug
    • indexTree

      protected final IndexTree indexTree
      Baum zur Verwaltung der Indexe
    • largeDataIdentifications

      protected final ConcurrentSkipListSet<IdContainerFileDir> largeDataIdentifications
      Menge von Datenidentifikationen, in denen sehr viele Containerdateien enthalten sind (für Warnmeldung)
  • Konstruktordetails

  • Methodendetails

    • getLastContainerHeaders

      @Nullable public ContainerHeaders getLastContainerHeaders(LockedContainerDirectory containerDirectory) throws IndexException
      Die Methode getLastContainerHeaders 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 Container-Verzeichnis
      Gibt zurück:
      ContainerHeaders
      Löst aus:
      IndexException - wenn der Indexzugriff fehlschlägt
    • executeOnContainer

      protected void executeOnContainer(Path contFile, PersistenceDirectory.ContainerCall action) throws PersistenceException, SynchronizationFailedException
      Führt eine Aktion auf einem Container auf und benennt den Container um, falls die Aktion eine PersistenceException geworfen hat und der Benutzer PersistenceManager.shouldDeleteBrokenContainers() gesetzt hat.
      Parameter:
      contFile - Containerdatei
      action - Aktion
      Löst aus:
      PersistenceException - Beliebiger Grund
      SynchronizationFailedException
    • renameContainerFile

      protected void renameContainerFile(Path contFile) throws PersistenceException
      Löst aus:
      PersistenceException
    • getContainerHeaders

      public ContainerHeaders getContainerHeaders(LockedContainerDirectory containerDirectory, long containerID) throws IndexException
      Gibt die Header eines Containers zurück. Die Daten werden aus dem Verwaltungsdatenindex gelesen.
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Container-Verzeichnis
      containerID - Container-ID, dessen Header gelesen werden sollen
      Gibt zurück:
      die Header eines Containers
      Löst aus:
      IndexException - Daten konnten nicht ermittelt werden (z. B. Container nicht vorhanden)
    • getContainerHeaders

      public IndexResult<ContainerManagementInformation> getContainerHeaders(LockedContainerDirectory containerDirectory) throws IndexException
      Gibt die Header von allen Containern eines Verzeichnisses zurück. Im Prinzip wird der gesamte Inhalt des Verwaltungsdatenindex zurückgegeben.
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Container-Verzeichnis
      Gibt zurück:
      die Header als IndexResult
      Löst aus:
      IndexException - Daten konnten nicht ermittelt werden
    • accessContainer

      @NotNull public ContainerFileHandle accessContainer(LockedContainerDirectory containerDirectory, long containerId) throws PersistenceException
      Greift auf einen Container zu
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Containerverzeichnis
      containerId - Id des Containers
      Gibt zurück:
      Container-Handle
      Löst aus:
      PersistenceException - Lesefehler
    • getBasePath

      public final Path getBasePath()
      Gibt das Verzeichnis auf dem Datenträger zurück.
      Gibt zurück:
      das Verzeichnis auf dem Datenträger
    • createDirectoriesIfAbsent

      public static Path createDirectoriesIfAbsent(Path path) throws PersistenceException
      Liefert ein File für das angegebene Verzeichnis. Wenn das Verzeichnis nicht existiert, wird es angelegt (lazy-Verhalten).
      Parameter:
      path - Verzeichnis
      Gibt zurück:
      Archiv-Pfad als File
      Löst aus:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • rebuildStandardIndex

      public final void rebuildStandardIndex(ContainerManagementIndex managementIndex, BaseIndex<IndexValues> index, LockedContainerDirectory containerDirectory) throws IndexException
      Die Methode rebuildStandardIndex erstellt einen Standard-Index aus dem Verwaltungsdatenindex
      Parameter:
      managementIndex - Verwaltungsdatenindex
      index - Zu erzeugender Index (leer)
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten
      Löst aus:
      IndexException - Problem beim Index-Zugriff
    • handleUnclosedContainer

      protected void handleUnclosedContainer(ContainerManagementIndex managementIndex, LockedContainerDirectory containerDirectory, long contId, BaseIndex<IndexValues> index) throws IndexException
      Löst aus:
      IndexException
    • rebuildContainerHeaderIndex

      public void rebuildContainerHeaderIndex(IdContainerFileDir containerFileDir, ContainerManagementIndex containerHeaderIndex, @Nullable RebuildResult rebuildResult) throws IndexException
      Erzeugt einen neuen ContainerHeaderIndex basierend aus den Containerdateien in einem Verzeichnis
      Parameter:
      containerFileDir - ID des Containerverzeichnisses
      containerHeaderIndex - Container-Header-Index (leer)
      rebuildResult - Statistik über die Wiederherstellung
      Löst aus:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • hasError

      public boolean hasError(IndexResult<ContainerManagementInformation> contents, int i, HashSet<Long> knownMinDataIndexes, Map<Long,Long> contIdToMinDataIndex, boolean checkIndexMonotonic)
      Bestimmt, ob ein Eintrag im Verwaltungsdatenindex fehlerhaft ist
      Parameter:
      contents - Indexinhalte
      i - Zu prüfende Zeile im Index
      knownMinDataIndexes - 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-ID
      checkIndexMonotonic - Soll geprüft werden, ob der Datenindex-Minimum-Wert monoton ist?
      Gibt zurück:
      true falls Fehler vorhanden, sonst false
    • warnAboutSlowRestore

      public void warnAboutSlowRestore(IdContainerFileDir location, long currentEntries, Duration currentDuration)
      Die Methode warnAboutSlowRestore warnt den Benutzer, wenn die Wiederherstellung eines Verzeichnisses sehr lange dauert.
      Parameter:
      location - von Typ IdContainerFileDir
      currentEntries - von Typ long
      currentDuration - von Typ Duration
    • getLayoutInstance

      public final PersistenceDirectoryLayoutInstance getLayoutInstance()
    • getPath

      @NotNull @Contract(pure=true) public Path getPath(IdDataIdentification dataIdentification)
      Gibt zu einer Datenidentifikation das zugehörige Verzeichnis zurück. Die Simulationsvariante der Datenidentifikation muss mit getSimulationVariant() übereinstimmen.
      Parameter:
      dataIdentification - Datenidentifikation
      Gibt zurück:
      Verzeichnis
    • getPath

      @NotNull @Contract(pure=true) public Path getPath(ContainerDirectory containerDirectory)
      Gibt zu einem ContainerDirectory das zugehörige Verzeichnis zurück. Die Simulationsvariante der Datenidentifikation muss mit getSimulationVariant() übereinstimmen.
      Parameter:
      containerDirectory - Datenidentifikation und Archivdatenart, die das Containerverzeichnis identifizieren
      Gibt zurück:
      Verzeichnis
    • getIndexTree

      public IndexTree getIndexTree()
      Gibt die Verwaltung der Indexe zurück
      Gibt zurück:
      Klasse zum zugriff auf Indexdateien in diesem Verzeichnis
    • getLargeDataIdentifications

      public Set<IdContainerFileDir> getLargeDataIdentifications()
      Gibt ein Set zurück, dass alle bekannten Containerverzeichnisse enthält, die "übermäßig viel" Daten enthalten. Das Set ist thread-safe und änderbar.
      Gibt zurück:
      Set mit Containerverzeichnissen
    • getLockFile

      public Path getLockFile()
      Gibt den Pfad der Lockdatei zurück (unabhängig davon, ob diese gerade vorhanden ist).
      Gibt zurück:
      Potenzieller Pfad der Lockdatei
    • warnAboutHugeContainerDirectory

      public void warnAboutHugeContainerDirectory(IdContainerFileDir location, long numEntries)
      Die Methode warnAboutHugeContainerDirectory warnt den Benutzer, wenn zu viele Container in einem Containerverzeichnis gespeichert wurden.
      Parameter:
      location - von Typ IdContainerFileDir
      numEntries - von Typ long
    • openDeletedContainerFile

      public DeletedContainerFile openDeletedContainerFile(LockedContainerDirectory containerDirectory) throws PersistenceException, SynchronizationFailedException
      Die Methode openDeletedContainerFile öffnet die Datei mit den Informationen zu den gelöschten Containern
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Containerverzeichnis
      Gibt zurück:
      DeletedContainerFile
      Löst aus:
      PersistenceException - Lesefehler
      SynchronizationFailedException - Fehler bei Index-Synchronisation
    • iterator

      @NotNull public DataIterator iterator(de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, long containerId, IdDataIdentification dataIdentification) throws PersistenceException
      Erstellt einen Iterator über die Daten eines Containers. Der zurückgegebene Iterator muss nach Gebrauch geschlossen werden!
      Parameter:
      adk - Archivdatenart
      containerId - Container-ID
      dataIdentification - Datenidentifikation
      Gibt zurück:
      Iterator
      Löst aus:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • removeContainerFromIndex

      public void removeContainerFromIndex(LockedContainerDirectory containerDirectory, long containerId) throws IndexException
      Die Methode removeContainerFromIndex löscht einen Container aus den Indexen
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Container-Verzeichnis
      containerId - von Typ long
      Löst aus:
      IndexException - wenn der Indexzugriff fehlschlägt
    • 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 ähnliche Operationen)
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Container-Verzeichnis
      sequenceSpecification - der gewünschte Datenbereich, siehe SequenceSpecification
      Gibt zurück:
      IndexResult<IndexValues>
      Löst aus:
      IndexException - wenn ein Problem beim Zugriff auf den Index auftritt
      SynchronizationFailedException - wenn die Synchronisierung auf die Indexe fehlschlägt
    • rebuildIndexes

      public void rebuildIndexes(LockedContainerDirectory containerDirectory, @Nullable RebuildResult rebuildResult) throws IndexException
      Die Methode rebuildIndexes baut die Indexe in einem Verzeichnis erneut auf.
      Parameter:
      containerDirectory - Containerverzeichnis im exklusiven Zugriff, in dem die Indexdateien aufgebaut werden sollen
      rebuildResult - Ergebnis für Statistiken, optional
      Löst aus:
      IndexException - wenn ein Problem beim Zugriff auf den Index auftritt
    • deleteIndexes

      public void deleteIndexes(LockedContainerDirectory containerDirectory, @Nullable RebuildResult rebuildResult) throws IndexException
      Die Methode deleteIndexes löscht alle Indexdateien in einem Verzeichnis.
      Parameter:
      containerDirectory - Containerverzeichnis im exklusiven Zugriff, in dem die Indexdateien gelöscht werden sollen
      rebuildResult - Ergebnis für Statistiken
      Löst aus:
      IndexException - wenn ein Problem beim Zugriff auf den Index auftritt
    • maxContainerId

      public long maxContainerId(LockedContainerDirectory containerDirectory) throws IndexException
      Ermittelt maximale Container-ID in einem Verzeichnis.
      Parameter:
      containerDirectory - Referenz auf die gelockte Datenidentifikation und Datenart für den Zugriff auf Containerdaten Containerverzeichnis
      Gibt zurück:
      Größte Container-ID im Verzeichnis
      Löst aus:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • getSimulationVariant

      public int getSimulationVariant()
      Gibt die Simulationsvariante dieses Verzeichnisses zurück. In jedem Persistenz-Wochenverzeichnis wird nur eine einzelne Simulationsvariante verwaltet.
      Gibt zurück:
      die Simulationsvariante dieses Verzeichnisses
    • toString

      public String toString()
      Setzt außer Kraft:
      toString in Klasse Object
    • estimate

      public long estimate()
      Beschreibung aus Schnittstelle kopiert: CountEstimator
      Schätzt eine Anzahl
      Angegeben von:
      estimate in Schnittstelle CountEstimator
      Gibt zurück:
      geschätzte Anzahl. Der Wert muss größer-gleich 0 sein und sollte der realen Anzahl möglichst gut entsprechen.
    • setCount

      public void setCount(long actualCount)
      Beschreibung aus Schnittstelle kopiert: CountEstimator
      Wird aufgerufen, wenn die richtige Anzahl (einmalig als Schnappschuss) ermittelt wurde. Eine Implementierung kann (muss aber nicht) den Wert nutzen, um zukünftige Schätzungen zu aktualisieren.
      Angegeben von:
      setCount in Schnittstelle CountEstimator
      Parameter:
      actualCount - Momentanwert der tatsächlichen Anzahl
    • getDataRange

      public abstract DataRange getDataRange(LockedContainerDirectory directory) throws IndexException
      Ermittelt zu einem Containerverzeichnis den gesamten (ggf. in diesem Wochenverzeichnis) vorliegenden Datenbereich.
      Parameter:
      directory - Containerdatenidentifikation
      Gibt zurück:
      Datenbereich, insbesondere NoData.Instance wenn gar keine Daten vorliegen, ein ValidDataRange sonst.
      Löst aus:
      IndexException
    • computeDataRange

      protected DataRange computeDataRange(LockedContainerDirectory directory)