Class InQueuesMgr

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

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

  • Constructor Details

    • InQueuesMgr

      public InQueuesMgr​(ArchiveManager aMgr, DataIdentTree dTree, QueueParameters parameters)
      Erzeugt den Warteschlangen-Manager.
      Parameters:
      aMgr - Archiv-Manager
      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 java.lang.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:
      java.lang.InterruptedException
    • getNumOfArchQueuesOnline

      public final int getNumOfArchQueuesOnline()
      Zahl der Tasks, die aktuelle Datensätze archivieren (sollte Primzahl sein)
    • 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​(AbstractTask task) throws java.lang.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 -
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • suspendNonWriteTasksDirect

      public void suspendNonWriteTasksDirect()
      Hält alle lesenen 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 java.lang.InterruptedException
      Beendet alle Tasks (Multi- und Single-Tasks) sowie die Archiv-Tasks.
      Throws:
      java.lang.InterruptedException - Thread unterbrochen
    • calcOnlineArchivTaskIndex

      public int calcOnlineArchivTaskIndex​(long objID, long atgID, long aspID, int simVar)
      Verteilung der Datenidentifikationen auf die Online-Archiv-Tasks erfolgt anhand der IDs. Jede Datenidentifikation wird somit immer in dieselbe ArchiveQueue eingefuegt. Auf diese Weise kann die Reihenfolge des Eintreffens wesentlich einfacher erhalten werden.
      Parameters:
      objID - Objekt-ID
      atgID - Attributgruppen-ID
      aspID - Aspekt-ID
      simVar - Simulationsvariante
      Returns:
      Summe der IDs und simVar modulo Anzahl der ArchivTasks
    • insertInArchiveQueueReq

      public void insertInArchiveQueueReq​(long archiveTime, java.lang.Object ad)
      Fuegt einen nachgeforderten Datensatz in die entsprechende Queue ein.
      Parameters:
      archiveTime - Archivzeit
      ad - Datensatz
    • insertInSimVarDeleteQueue

      public boolean insertInSimVarDeleteQueue​(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Simulationsvarianten-Lösch-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertSimVarParam

      public boolean 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.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertInDeleteRegularQueue

      public boolean insertInDeleteRegularQueue​(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Lösch-Task (automatisches Löschen) einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertInRequestQueue

      public boolean insertInRequestQueue​(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Nachfordern-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertInLZVQueue

      public boolean insertInLZVQueue​(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem LZV-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertInBackupQueue

      public boolean insertInBackupQueue​(de.bsvrz.dav.daf.main.ResultData resultData)
      Fügt dem Sicherungs-Task einen Auftrag hinzu.
      Parameters:
      resultData - Auftrag.
      Returns:
      true falls der Auftrag eingefügt werden konnte. false sonst.
    • insertCloseContainer

      public void insertCloseContainer​(long objID, ArchiveTask.CloseContainerObject cco)
    • logSendMsgCapaExceeded

      protected void logSendMsgCapaExceeded​(int maxsize, java.lang.String qname, de.bsvrz.dav.daf.main.ResultData rd)
      Betriebsmeldung absetzen: Warteschlange voll.
      Parameters:
      maxsize - Kapazität der Warteschlange
      qname - Name der Warteschlange
      rd - Datensatz.
    • logCapaNoLongerExceeded

      protected void logCapaNoLongerExceeded​(int maxsize, java.lang.String qname, int leftouts)
    • getArchiveQueuesOnlineStatus

      public float[][] getArchiveQueuesOnlineStatus()
      Returns:
      Status der Warteschlangen für aktuelle Datensätze
    • getArchiveQueuesRequestedStatus

      public float[][] getArchiveQueuesRequestedStatus()
      Returns:
      Status der Warteschlangen für nachgelieferte Datensätze
    • getNonArchiveQueuesStatus

      public float[][] getNonArchiveQueuesStatus()
      Returns:
      Status der Warteschlangen für eingehende, nicht zu archivierende Objekte
    • getTotalOnlineQueuesCapa

      public int getTotalOnlineQueuesCapa()
      Returns:
      Gesamtkapazitaet aller Ringpuffers für aktuelle Datensätze
    • getQueueLoad

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

      public int countOnlineDataInQueues()
    • resetDSCounter

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

      public void decrOnlineDataInQueues()
    • getOnlineArchiveTask

      public ArchiveTask getOnlineArchiveTask​(long objId, long atgId, long aspId, int simVar)
      Nur für Testzwecke: Liefert den gewuenschten ArchiveTask
      Parameters:
      objId - Objekt-ID
      atgId - Attributgruppen-ID
      aspId - Aspekt-ID
      simVar - Simulationsvariante
      Returns:
      ArchiveTask
      See Also:
      calcArchivTaskIndex(long,long,long, int, int)
    • 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.
    • getSingleTask

      public AbstractTask getSingleTask​(int taskIndex)
      Liefert den gewuenschten SingleTask (um etwa Listener einzuhängen)
      Parameters:
      taskIndex - Index der internen SingleTask-Liste
      Returns:
      SingleTask
    • 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.
    • setFreeDiskSpace

      public void setFreeDiskSpace​(long freeDiskSpace)
      Aktualisiert den freien Speicherplatz
      Parameters:
      freeDiskSpace - freier Speicherplatz in Bytes
    • getInitialCapacityOfOnlineQueues

      public int getInitialCapacityOfOnlineQueues()
      Initiale Maximalgröße eines Ringpuffers für aktuelle Datensätze. Die MaximalGröße kann sich auf Kosten anderer Puffer ändern. Mit dynamischen PufferGrößen kann man Lastspitzen besser abfangen.
    • getInitialCapacityOfRequestedQueue

      public int getInitialCapacityOfRequestedQueue()
      Kapazität des Ringpuffers für nachgelieferte Datensätze
    • getTotalCapacityOfOnlineQueues

      public int getTotalCapacityOfOnlineQueues()
      Gesamtgröße (Summe) der Online-Queues
    • getTotalCapacityOfRequestedQueues

      public int getTotalCapacityOfRequestedQueues()
      Gesamtgröße (Summe) der Nachgefordert-Queues
    • getOnlineQueueResizeBlockSize

      public int getOnlineQueueResizeBlockSize()
      Größe der Blocks, in denen die Online-Queues vergrößert oder verkleinert werden
      Returns:
    • 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
    • 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
    • getProcessedCountTotal

      public long getProcessedCountTotal()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Datensätze, die verarbeitet wurden
    • getProcessedCountOnline

      public long getProcessedCountOnline()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() Online-Datensätze, die verarbeitet wurden
    • getProcessedCountRequested

      public long getProcessedCountRequested()
      Returns:
      Zahl aller seit dem Start oder letzten resetDSCounter() nachgeforderten Datensätze, die verarbeitet 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.