Class InQueuesMgr

java.lang.Object
de.bsvrz.ars.ars.mgmt.InQueuesMgr

public final class InQueuesMgr extends Object
Warteschlangen-Manager. Verteilt reinkommende Datentelegramm mit Datensätzen/Archivanfragen/Archiv-Informationsanfragen/ Backup-/Restore-/HeaderRestore-/LZV/Delete-/RequestGap-Aufträgen auf die jeweilige Warteschlange.
  • Constructor Details

    • InQueuesMgr

      public InQueuesMgr(ArchiveManager aMgr, RuntimeControl runtimeControl, DataIdentTree dTree, QueueParameters parameters)
      Erzeugt den Warteschlangen-Manager.
      Parameters:
      aMgr - Archiv-Manager
      runtimeControl - Laufzeitumgebung um z.B. die Systemzeit abzufragen oder Spezialcode für Tests zu aktivieren
      dTree - DataIdentTree
      parameters - Queue-Einstellungen
  • Method Details

    • subscribe

      public boolean subscribe(de.bsvrz.dav.daf.main.ClientDavInterface davCon, de.bsvrz.dav.daf.main.config.SystemObject so, de.bsvrz.dav.daf.main.DataDescription dataDescription) throws InterruptedException
      Anmelden mit Verzögerung (Sliding-Window-Mechanismus)
      Parameters:
      davCon - Datenverteilerverbindung
      so - Objekt
      dataDescription - DataDescription
      Returns:
      true wenn die Anmeldung durchgeführt werden konnte, sonst false (z.B. bei Anmeldung eines Empfängers auf Senke-Aspekt)
      Throws:
      InterruptedException - Beim Warten unterbrochen
    • setQueryTaskNumbers

      public void setQueryTaskNumbers(int numHi, int numMid, int numLo)
      Setzt die Anzahl der Threads für Archivanfragen auf die angegebenen Werte. Falls Threads entfernt werden, werden noch behandelte Anfragen zuende bearbeitet.
      Parameters:
      numHi - Anzahl Tasks der Prioritaet "hoch"
      numMid - Anzahl Tasks der Prioritaet "mittel"
      numLo - Anzahl Tasks der Prioritaet "niedrig"
    • getHiQueryTaskNum

      public int getHiQueryTaskNum()
    • getMidQueryTaskNum

      public int getMidQueryTaskNum()
    • getLoQueryTaskNum

      public int getLoQueryTaskNum()
    • suspendTaskIfNecessary

      public void suspendTaskIfNecessary(Task task) throws InterruptedException
      Prüft ob Tasks temporaer blockiert werden sollen und blockiert ggf. den aufrufenden Task.

      Diese Methode und suspendNonWriteTasks() verwenden eine reduzierte Synchronisierung, um die Zahl der durchlaufenen synchronized-Bloecke gering zu halten.

      Diese Methode darf nur ausgeführt werden, wenn der task nicht auf eine Datenidentifikation synchronisiert ist (Deadlock-Gefahr)

      Parameters:
      task - Anzuhaltender Task
      Throws:
      InterruptedException - Thread unterbrochen
    • suspendNonWriteTasksDirect

      public void suspendNonWriteTasksDirect()
      Hält alle lesenden Tasks direkt an, ohne weitere Bedingungen zu prüfen.
    • getObjectsFromDav

      public void getObjectsFromDav()
      In dieser Methode wird allen Tasks (falls notwendig) die Möglichkeit gegeben, benoetigte Objekte vom DAV zu laden.
    • subscribeSettings

      public void subscribeSettings()
      In dieser Methode wird allen Tasks (falls notwendig) die Möglichkeit gegeben, sich auf Objekte anzumelden. Abmelden geschieht zentral über den ConnectionManager.
    • subscribeQueries

      public void subscribeQueries()
      In dieser Methode wird allen Tasks (falls notwendig) die Möglichkeit gegeben, sich auf Objekte anzumelden. Abmelden geschieht zentral über den ConnectionManager.
    • startAllTasks

      public void startAllTasks()
      Startet alle Tasks (Multi- und Single-Tasks) sowie die Archiv-Tasks.
    • stopAllTasks

      public void stopAllTasks() throws InterruptedException
      Beendet alle Tasks (Multi- und Single-Tasks) sowie die Archiv-Tasks.
      Throws:
      InterruptedException - Thread unterbrochen
    • archiveRequestedData

      public void archiveRequestedData(long archiveTime, de.bsvrz.dav.daf.main.archive.ArchiveData ad)
      Fuegt einen nachgeforderten Datensatz in die entsprechende Queue ein.
      Parameters:
      archiveTime - Archivzeit
      ad - Datensatz
    • insertInSimVarDeleteQueue

      public void insertInSimVarDeleteQueue(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Simulationsvarianten-Lösch-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
    • insertSimVarParam

      public void insertSimVarParam(SimulationResultData resultData)
      Fügt dem Parametrierungs-Task einen weiteren Auftrag hinzu.
      Parameters:
      resultData - Auftrag. Enthält Informationen, auf welche Datenidentifikationen sich das Archivsystem anmelden soll.
    • startDeletePermanently

      public void startDeletePermanently()
      Fügt dem Lösch-Task (endgültiges Löschen) einen Auftrag hinzu.
    • insertInRequestQueue

      public void insertInRequestQueue(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Nachfordern-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
    • insertCloseContainer

      public void insertCloseContainer(CloseContainerObject cco)
      Fügt in die Archivqueue ein CloseContainerObject ein, das signalisiert, dass der offene Container aufgrund einer Parameterierungsänderung abgeschlossen werden soll.
      Parameters:
      cco - CloseContainerObject
    • getArchiveQueueCapacity

      public int getArchiveQueueCapacity()
      Returns:
      Gesamtkapazität der Archiv-Warteschlange
    • getQueueLoad

      public double getQueueLoad()
      Returns:
      Auslastungsgrad der Warteschlange. Anhand dieses Wertes wird ermittelt, ob die Bearbeitung nicht schreibender Tasks ausgesetzt wird.
    • countDataInQueues

      public int countDataInQueues()
      Zählt die Datensätze in der Eingangsqueue
      Returns:
      Anzahl Datensätze
    • resetDSCounter

      public void resetDSCounter()
      Setzt alle Zähler auf 0.
    • getArchiveSettingsTask

      public ArchiveSettingsTask getArchiveSettingsTask()
      Liefert den Task, der für die Bearbeitung der Archiveinstellungen verantwortlich ist. Dies ist notwendig, damit der ArchiveManager beim Start einen ArchiveSettingsTask.ArSSettingListener einhängen und darauf warten kann, dass die Bearbeitung der Archiveinstellungen abgeschlossen ist. Das Archivsystem wartet beim Start auf die Archiv-Einstellungen, da es nicht sinnvoll ist, die ersten Sekunden mit Default-Werten loszulaufen.
      Returns:
      Den Task, der für die Bearbeitung der Archiveinstellungen verantwortlich ist.
    • getArchiveDataReceiver

      public InQueuesMgr.ArchiveDataReceiver getArchiveDataReceiver()
      Die Klasse ArchivConfig meldet die zu archivierenden Daten mit dem Objekt als Empfaenger an, das von dieser Methode geliefert wird.
      Returns:
      Empfaengerobjekt für zu archivierende Daten.
    • getDataAckSender

      public InQueuesMgr.DataAckSender getDataAckSender()
      Die Klasse ArchivConfig meldet die Quittungen für die zu archivierenden Daten mit dem Objekt als Sender an, das von dieser Methode geliefert wird.
      Returns:
      Senderobjekt für die Quittungen der zu archivierenden Daten.
    • setFastExit

      public void setFastExit(boolean quickExit)
      Setzt, ob sich der InQueuesMgr schnell terminieren soll. Bei einer schnellen Terminierung wird nicht auf die Abarbeitugn aller Queues gewartet.
      Parameters:
      quickExit - true wenn schnell terminiert werden soll, sonst false
    • getDeletePermanentlyTask

      public DeletePermanentlyTask getDeletePermanentlyTask()
    • getArchiveTask

      public ArchiveTask getArchiveTask()
    • insertRequestedDataFinishedNotification

      public void insertRequestedDataFinishedNotification()
      Fügt in die Archivqueue einen Benachrichtigungstoken ein, der bei seiner "Archivierung" signalisiert, dass alle (zuvor in die Queue eingefügten) nachgeforderten Datensätze archiviert wurden.
    • estimateQueueMemoryUsage

      public long estimateQueueMemoryUsage()
      Schätzt den Speicherverbrauch der Archivqueue ab
      Returns:
      Archivqueue
    • getBackgroundTaskManager

      public BackgroundTaskManager getBackgroundTaskManager()
    • getReceivedCountOnline

      public long getReceivedCountOnline()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() von getArchiveDataReceiver() empfangenen Datensätze, egal ob diese archiviert werden oder nicht. Kann zur Test-Synchronisation verwendet werden.
    • getQueuedCountTotal

      public long getQueuedCountTotal()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Datensätze, die in eine Queue eingefügt wurden.
    • getQueuedCountOnline

      public long getQueuedCountOnline()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Online-Datensätze, die in eine Queue eingefügt wurden.
    • getQueuesCountRequested

      public long getQueuesCountRequested()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() nachgeforderten Datensätze, die in eine Queue eingefügt wurden.
    • getFailedCountTotal

      public long getFailedCountTotal()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Datensätze, die nicht erfolgreich archiviert wurden
    • getSuccessCountTotal

      public long getSuccessCountTotal()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Datensätze, die erfolgreich archiviert wurden
    • getFailedCountOnline

      public long getFailedCountOnline()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Online-Datensätze, die nicht erfolgreich archiviert wurden
    • getSuccessCountOnline

      public long getSuccessCountOnline()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Online-Datensätze, die erfolgreich archiviert wurden
    • getFailedCountRequested

      public long getFailedCountRequested()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() nachgeforderten Datensätze, die nicht erfolgreich archiviert wurden
    • getSuccessCountRequested

      public long getSuccessCountRequested()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() nachgeforderten Datensätze, die erfolgreich archiviert wurden
    • getCloseContainerSuccess

      public long getCloseContainerSuccess()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() erfolgreich verarbeiteten Close-Container-Datensätze. Kann zur Test-Synchronisation verwendet werden.
    • getRuntimeControl

      public RuntimeControl getRuntimeControl()
      Gibt die Laufzeitsteuerung zurück, die u.a. die Archivzeiten ermittelt und Test-Verhalten ermöglicht.
      Returns:
      RuntimeControl