Class SingletonPersistenceDirectoryManager

java.lang.Object
de.bsvrz.ars.ars.persistence.directories.mgmt.SingletonPersistenceDirectoryManager
All Implemented Interfaces:
PersistenceDirectoryManager, DataGapManager

public class SingletonPersistenceDirectoryManager extends Object implements PersistenceDirectoryManager
Implementierung von PersistenceDirectoryManager, die ein einzelnes Persistenz-(unter-)verzeichnis verwaltet. Nur Simulationen werden in extra-Verzeichnisse ausgelagert, was nicht dem Verhalten des Alten Archivsystems vor Version 5 entspricht. Dort waren Simulationen zusammen mit den normalen Daten im selben Verzeichnis.
  • Constructor Details

    • SingletonPersistenceDirectoryManager

      public SingletonPersistenceDirectoryManager(ContainerCreator containerCreator, Path rootPath)
      Erstellt einen neuen SingletonPersistenceDirectoryManager.
      Parameters:
      containerCreator - Interface der persistenzschicht, z. B. ein PersistenceManager.
      rootPath - Wurzelverzeichnis
  • Method Details

    • updatePersistenceDirectories

      public void updatePersistenceDirectories(long archTime)
      Description copied from interface: PersistenceDirectoryManager
      Aktualisiert das aktive Persistenzverzeichnis basierend auf der aktuellen Archivzeit
      Specified by:
      updatePersistenceDirectories in interface PersistenceDirectoryManager
      Parameters:
      archTime - aktuelle Archivzeit (Millis seit Epoch)
    • getActivePersistenceDirectory

      @Nullable public ActivePersistenceDirectory getActivePersistenceDirectory()
      Description copied from interface: PersistenceDirectoryManager
      Gibt das Persistenzverzeichnis zurück, in das aktuell archiviert wird. Kann null zurückgeben, z. B. während der Initialisierung oder während noch nichts archiviert wurde.
      Specified by:
      getActivePersistenceDirectory in interface PersistenceDirectoryManager
      Returns:
      Aktives Persistenzverzeichnis
    • getPersistenceDirectories

      public List<? extends PersistenceDirectory> getPersistenceDirectories(int simVariant, SequenceSpecification sequenceSpecification)
      Description copied from interface: PersistenceDirectoryManager
      Ermittelt alle Persistenzverzeichnisse, die zur angegebenen Zeitspezifikation die zugehörigen Archivdaten enthält.

      Achtung: Da bei Archivanfragen ggf. ein initialer Zustand und ein Nachfolgedatensatz (Gültigkeitsdauer des letzten Datensatzes) ermittelt werden muss, muss ein Aufrufer ggf. noch zusätzlich einen vorherigen oder nachfolgenden Container aus einem anderen Verzeichnis eigenständig ermitteln!

      Specified by:
      getPersistenceDirectories in interface PersistenceDirectoryManager
      Parameters:
      simVariant - Simulationsvariante
      sequenceSpecification - Zeitspezifikation
      Returns:
      Collection mit Persistenzverzeichnissen, die zurückgegebene Liste ist immutable.
    • getRootPath

      @NotNull public Path getRootPath()
      Description copied from interface: PersistenceDirectoryManager
      Gibt das Wurzelverzeichnis der Persistenz zurück, unter dem die weiteren Persistenzverzeichnisse (je Zeitbereich) angelegt werden.
      Specified by:
      getRootPath in interface PersistenceDirectoryManager
      Returns:
      Wurzelverzeichnis, nicht null
    • initialize

      public void initialize() throws IOException, DirectoryIsLockedException
      Description copied from interface: PersistenceDirectoryManager
      Initialisiert die Verzeichnisverwaltung und lädt z. B. die vorhandenen Verzeichnisse ein
      Specified by:
      initialize in interface PersistenceDirectoryManager
      Throws:
      IOException - Dateisystem-Lesefehler
      DirectoryIsLockedException - Persistenzverzeichnis ist bereits gelockt (isActive-Datei existiert)
    • getSimulationPersistenceDirectory

      @Nullable public ActivePersistenceDirectory getSimulationPersistenceDirectory(int simVariant)
      Description copied from interface: PersistenceDirectoryManager
      Gibt das Persistenzverzeichnis zurück, das von einer speziellen Simulation verwendet wird
      Specified by:
      getSimulationPersistenceDirectory in interface PersistenceDirectoryManager
      Parameters:
      simVariant - Simulationsvariante (> 0)
      Returns:
      zugehöriges Persistenzverzeichnis oder null (wenn keines existiert).
    • createSimulationDirectory

      public ActivePersistenceDirectory createSimulationDirectory(int simVariant)
      Description copied from interface: PersistenceDirectoryManager
      Erstellt für die angegebene Simulationsvariante das Persistenzverzeichnis. Sollte bereits ein Verzeichnis existieren, wird es zurückgegeben.
      Specified by:
      createSimulationDirectory in interface PersistenceDirectoryManager
      Parameters:
      simVariant - Simulationsvariante (größer 0)
      Returns:
      Zugehöriges Persistenzverzeichnis
    • shutDown

      public void shutDown()
      Description copied from interface: PersistenceDirectoryManager
      Terminiert die Verzeichnisverwaltung, markiert die Verzeichnisse nicht mehr als benutzt und löscht alle Lock-Dateien.
      Specified by:
      shutDown in interface PersistenceDirectoryManager
    • deleteSimulationDirectory

      public void deleteSimulationDirectory(ActivePersistenceDirectory directory)
      Description copied from interface: PersistenceDirectoryManager
      Löscht ein Verzeichnis einer Simulation
      Specified by:
      deleteSimulationDirectory in interface PersistenceDirectoryManager
      Parameters:
      directory - Persistenzverzeichnis der Simulation
    • getGapFilePath

      @NotNull public Path getGapFilePath(IdDataIdentification dataIdentification)
      Description copied from interface: PersistenceDirectoryManager
      Gibt den Pfad und Dateinamen einer Lückendatei für das Nachfordern zurück. In dieser Datei werden die bereits erhaltenen Datenlücken vermerkt, also wo erfolglos nachgefordert wurde, damit diese nicht sinnloserweise neu angefragt werden.
      Specified by:
      getGapFilePath in interface PersistenceDirectoryManager
      Parameters:
      dataIdentification - Datenidentifikation
      Returns:
      Ein Dateipfad
    • isRangeUnavailable

      public boolean isRangeUnavailable(long fromArchiveTime, long toArchiveTime)
      Description copied from interface: DataGapManager
      Prüft, ob sich Teile des Persistenzverzeichnisses zwischen 2 Datensätzen nicht mehr im direkten Zugriff befinden, also ausgelagert oder gelöscht wurden. Es wird davon ausgegangen, dass die Zeitstempel selbst zu Daten gehören, die gelesen wurden und also noch im Zugriff sind.
      Specified by:
      isRangeUnavailable in interface DataGapManager
      Parameters:
      fromArchiveTime - Start-Archivzeit in Epoch-Millis
      toArchiveTime - End-Archivzeit in Epoch-Millis
      Returns:
      true, falls der Bereich nicht vollständig verfügbar ist