Klasse TimeBasedPersistenceDirectoryManager<T extends TimeRange<T>>

java.lang.Object
de.bsvrz.ars.ars.persistence.directories.mgmt.TimeBasedPersistenceDirectoryManager<T>
Typparameter:
T - Typ des gewünschten Zeitabschnitts, z. B. Week
Alle implementierten Schnittstellen:
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.
  • Felddetails

  • Konstruktordetails

    • TimeBasedPersistenceDirectoryManager

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

    • initialize

      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Initialisiert die Verzeichnisverwaltung und lädt z. B. die vorhandenen Verzeichnisse ein
      Angegeben von:
      initialize in Schnittstelle PersistenceDirectoryManager
      Löst aus:
      IOException - Dateisystem-Lesefehler
      InterruptedException - Unterbrochen
      PersistenceException - Persistenz fehler
      DirectoryIsLockedException - Persistenzverzeichnis ist bereits gelockt (isActive-Datei existiert)
    • updatePersistenceDirectories

      public void updatePersistenceDirectories(long archTime) throws IOException
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Aktualisiert das aktive Persistenzverzeichnis basierend auf der aktuellen Archivzeit
      Angegeben von:
      updatePersistenceDirectories in Schnittstelle PersistenceDirectoryManager
      Parameter:
      archTime - aktuelle Archivzeit (Millis seit Epoch)
      Löst aus:
      IOException - IO-Fehler
    • executeOnSubDirectories

      Führt einen rekursiven Verzeichnisdurchlauf aus und führt für jedes gefundene Wochenverzeichnis den angegebenen Befehl aus
      Parameter:
      pathAction - Auszuführende Aktion
      Löst aus:
      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
      Parameter:
      it - Dateisystem-Pfad
      Gibt zurück:
      Woche oder null, falls die Woche nicht bestimmbar ist.
    • getActivePersistenceDirectory

      @Nullable public ActivePersistenceDirectory getActivePersistenceDirectory()
      Beschreibung aus Schnittstelle kopiert: 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.
      Angegeben von:
      getActivePersistenceDirectory in Schnittstelle PersistenceDirectoryManager
      Gibt zurück:
      Aktives Persistenzverzeichnis
    • getPersistenceDirectories

      public List<? extends PersistenceDirectory> getPersistenceDirectories(int simVariant, SequenceSpecification sequenceSpecification)
      Beschreibung aus Schnittstelle kopiert: 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!

      Angegeben von:
      getPersistenceDirectories in Schnittstelle PersistenceDirectoryManager
      Parameter:
      simVariant - Simulationsvariante
      sequenceSpecification - Zeitspezifikation
      Gibt zurück:
      Collection mit Persistenzverzeichnissen, die zurückgegebene Liste ist immutable.
    • getSimulationPersistenceDirectory

      @Nullable public ActivePersistenceDirectory getSimulationPersistenceDirectory(int simVariant)
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Gibt das Persistenzverzeichnis zurück, das von einer speziellen Simulation verwendet wird
      Angegeben von:
      getSimulationPersistenceDirectory in Schnittstelle PersistenceDirectoryManager
      Parameter:
      simVariant - Simulationsvariante (> 0)
      Gibt zurück:
      zugehöriges Persistenzverzeichnis oder null (wenn keines existiert).
    • createSimulationDirectory

      public ActivePersistenceDirectory createSimulationDirectory(int simVariant)
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Erstellt für die angegebene Simulationsvariante das Persistenzverzeichnis. Sollte bereits ein Verzeichnis existieren, wird es zurückgegeben.
      Angegeben von:
      createSimulationDirectory in Schnittstelle PersistenceDirectoryManager
      Parameter:
      simVariant - Simulationsvariante (größer 0)
      Gibt zurück:
      Zugehöriges Persistenzverzeichnis
    • getRootPath

      @NotNull public Path getRootPath()
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Gibt das Wurzelverzeichnis der Persistenz zurück, unter dem die weiteren Persistenzverzeichnisse (je Zeitbereich) angelegt werden.
      Angegeben von:
      getRootPath in Schnittstelle PersistenceDirectoryManager
      Gibt zurück:
      Wurzelverzeichnis, nicht null
    • shutDown

      public void shutDown()
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Terminiert die Verzeichnisverwaltung, markiert die Verzeichnisse nicht mehr als benutzt und löscht alle Lock-Dateien.
      Angegeben von:
      shutDown in Schnittstelle PersistenceDirectoryManager
    • deleteSimulationDirectory

      public void deleteSimulationDirectory(ActivePersistenceDirectory directory)
      Beschreibung aus Schnittstelle kopiert: PersistenceDirectoryManager
      Löscht ein Verzeichnis einer Simulation
      Angegeben von:
      deleteSimulationDirectory in Schnittstelle PersistenceDirectoryManager
      Parameter:
      directory - Persistenzverzeichnis der Simulation
    • getGapFilePath

      @NotNull public Path getGapFilePath(IdDataIdentification dataIdentification)
      Beschreibung aus Schnittstelle kopiert: 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.
      Angegeben von:
      getGapFilePath in Schnittstelle PersistenceDirectoryManager
      Parameter:
      dataIdentification - Datenidentifikation
      Gibt zurück:
      Ein Dateipfad
    • getPersistenceDirectory

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

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

      public boolean addPersistenceDirectory(T directoryTimeRange)
      Integriert ein Verzeichnis in den aktiven Zugriff
      Parameter:
      directoryTimeRange - Woche
      Gibt zurück:
      true: Verzeichnis wurde integriert, false: Verzeichnis konnte nicht integriert werden oder war bereits im Zugriff
    • isRangeUnavailable

      public boolean isRangeUnavailable(long fromArchiveTime, long toArchiveTime)
      Beschreibung aus Schnittstelle kopiert: 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.
      Angegeben von:
      isRangeUnavailable in Schnittstelle DataGapManager
      Parameter:
      fromArchiveTime - Start-Archivzeit in Epoch-Millis
      toArchiveTime - End-Archivzeit in Epoch-Millis
      Gibt zurück:
      true, falls der Bereich nicht vollständig verfügbar ist