Class TimeBasedPersistenceDirectoryManager<T extends TimeRange<T>>

java.lang.Object
de.bsvrz.ars.ars.persistence.directories.mgmt.TimeBasedPersistenceDirectoryManager<T>
Type Parameters:
T - Typ des gewünschten Zeitabschnitts, z. B. Week
All Implemented Interfaces:
PersistenceDirectoryManager, DataGapManager

public class TimeBasedPersistenceDirectoryManager<T extends TimeRange<T>> extends Object implements PersistenceDirectoryManager
Implementierung des PersistenceDirectoryManager, die je Woche (oder anderer TimeDomain) ein eigenes PersistenceDirectory anlegt. Simulationen werden davon getrennt verwaltet.
  • Field Details

  • Constructor Details

    • TimeBasedPersistenceDirectoryManager

      public TimeBasedPersistenceDirectoryManager(ContainerCreator containerCreator, Path rootPath, TimeDomain<T> domain)
      Erstellt eine neue Instanz
      Parameters:
      containerCreator - Persistenz-Verwaltung
      rootPath - Wurzelverzeichnis, unter dem die Wochenverzeichnisse angelegt werden sollen
      domain - Domain, die Pfadnamen in Zeitbereiche umwandelt, z. B. WeekDomain.
  • Method Details

    • initialize

      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
      InterruptedException - Unterbrochen
      PersistenceException - Persistenz fehler
      DirectoryIsLockedException - Persistenzverzeichnis ist bereits gelockt (isActive-Datei existiert)
    • updatePersistenceDirectories

      public void updatePersistenceDirectories(long archTime) throws IOException
      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)
      Throws:
      IOException - IO-Fehler
    • executeOnSubDirectories

      Führt einen rekursiven Verzeichnisdurchlauf aus und führt für jedes gefundene Wochenverzeichnis den angegebenen Befehl aus
      Parameters:
      pathAction - Auszuführende Aktion
      Throws:
      PersistenceException - Fehler bei Aktion
      IOException - Fehler beim Verzeichnisdurchlauf
      DirectoryIsLockedException
    • getDomain

      @Contract(pure=true) @NotNull public TimeDomain<T> getDomain()
    • getId

      @Contract(pure=true) @Nullable public T getId(Path it)
      Gibt die Woche zu einem Dateisystem-Pfad zurück, welcher ein Wochenverzeichnis darstellt
      Parameters:
      it - Dateisystem-Pfad
      Returns:
      Woche oder null, falls die Woche nicht bestimmbar ist.
    • 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.
    • 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
    • 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
    • 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
    • getPersistenceDirectory

      public PersistenceDirectory getPersistenceDirectory(@NotNull T directoryTimeRange)
      Gibt zu einer Woche das Persistenzverzeichnis zurück
      Parameters:
      directoryTimeRange - Woche
      Returns:
      Persistenzverzeichnis
    • removePersistenceDirectory

      public boolean removePersistenceDirectory(T directoryTimeRange)
      Wirft ein Persistenzverzeichnis aus (entfernt es aus dem aktiven Zugriff)
      Parameters:
      directoryTimeRange - Woche, die ausgeworfen werden soll
      Returns:
      true: erfolgreich, false: Verzeichnis war nicht vorhanden oder Operation wurde unterbrochen
    • addPersistenceDirectory

      public boolean addPersistenceDirectory(T directoryTimeRange)
      Integriert ein Verzeichnis in den aktiven Zugriff
      Parameters:
      directoryTimeRange - Woche
      Returns:
      true: Verzeichnis wurde integriert, false: Verzeichnis konnte nicht integriert werden oder war bereits im Zugriff
    • 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