Class IndexTree

java.lang.Object
de.bsvrz.ars.ars.mgmt.datatree.IndexTree

public final class IndexTree
extends java.lang.Object
Diese Klasse verwaltet die vom aktuellen Thread geöffneten Indexe. Wenn die Synchronisierung auf eine Datenidentifikation beendet wird, werden automatisch alle Indexe hier freigegeben und können dann von anderen Threads in Anspruch genommen werden.
  • Field Details

    • ENTRIES_WARN_LIMIT

      public static final long ENTRIES_WARN_LIMIT
      Limit ab dem der User über zu viele Containerdateien in einer DID gewarnt wird. 32000 ist schon recht hoch, es gibt aber viele "volle" Archivsysteme, und wir wollen keinen Debug-Spam erzeugen.
      See Also:
      Constant Field Values
  • Constructor Details

    • IndexTree

      public IndexTree​(int maximumIndexSizeBytes, PersistenceManager persistenceManager)
      Konstruktor.
      Parameters:
      maximumIndexSizeBytes - Maximale Anzahl Bytes, die ein Index im Speicher Cachen darf
      persistenceManager - Verwaltung der Persistenz
  • Method Details

    • closeIndexes

      public void closeIndexes()
      Schließt alle Indexe, die vom aktuellen Thread geöffnet wurden.
    • getContainerManagementIndex

      public ContainerManagementIndex getContainerManagementIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws IndexException
      Throws:
      IndexException
    • getDataIndexIndex

      public DataIndexIndex getDataIndexIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws IndexException
      Throws:
      IndexException
    • getDataTimeIndex

      public DataTimeIndex getDataTimeIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws IndexException
      Throws:
      IndexException
    • getArchiveTimeIndex

      public ArchiveTimeIndex getArchiveTimeIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws IndexException
      Throws:
      IndexException
    • recreateIndex

      public void recreateIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, @Nullable PersistenceManager.RebuildResult result) throws IndexException
      Erstellt alle Indexe aus den Containerdaten neu.
      Parameters:
      lock - Synchronisierung auf Datenidentifikation
      archiveDataKind - Archivdatenart
      result - Ergebnis (Statistik) oder null
      Throws:
      IndexException - Falls die Indexe nicht neu erstellt werden konnten
    • deleteIndex

      public void deleteIndex​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind, @Nullable PersistenceManager.RebuildResult result) throws IndexException
      Löscht alle Indexe und Indexdateien in einem Containerverzeichnis.
      Parameters:
      lock - Synchronisierung auf Datenidentifikation
      archiveDataKind - Archivdatenart
      result - Statistik (die Zahl der gelöschten Indexdateien wird in result.containerIgnored gespeichert)
      Throws:
      IndexException - Fehler beim Löschen
    • closeIndexes

      public void closeIndexes​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind) throws IndexException
      Schließt alle vom aktuellen Thread geöffneten Indexe und schreibt die Puffer auf die Festplatte.
      Parameters:
      lock - Synchronisierung auf Datenidentifikation
      archiveDataKind - Archivdatenart
      Throws:
      IndexException - Fehler beim Schreiben der Indexdateien
    • flushIndexes

      public void flushIndexes​(SyncKey<IdDataIdentification> lock, de.bsvrz.dav.daf.main.archive.ArchiveDataKind archiveDataKind)
      Schreibt die Puffer für alle vom aktuellen Thread geöffneten Indexe auf die Festplatte ohne den Index zu schließen. Fehler werden dabei ignoriert udn führen zu einer Warnung. Diese Methode wird vom Datenkonsistenten Backup benutzt. Hier ist bei Fehlern keine bessere Fehlerbehandlung sinnvoll.
      Parameters:
      lock - Synchronisierung auf Datenidentifikation
      archiveDataKind - Archivdatenart
    • ensureNoCached

      public void ensureNoCached()
      Debug-Methode. Wirft eine Exception wenn der aktuelle Thread aktuell Idnexe geöffnet hat.