de.bsvrz.ars.ars.mgmt
Class InQueuesMgr

java.lang.Object
  extended by de.bsvrz.ars.ars.mgmt.InQueuesMgr
All Implemented Interfaces:
RingOfDeathListener

public class InQueuesMgr
extends Object
implements RingOfDeathListener

Warteschlangen-Manager. Verteilt reinkommende Datentelegramm mit Datensaetzen/Archivanfragen/Archiv-Informationsanfragen/ Backup-/Restore-/HeaderRestore-/LZV/Delete-/RequestGap-Aufträgen auf die jeweilige Warteschlange.

Author:
beck et al. projects GmbH, Alexander Schmidt

Nested Class Summary
 class InQueuesMgr.ArchiveDataReceiver
          Empfaengerklasse fuer Archivdaten
 class InQueuesMgr.ArchiveSettingsReceiver
          Empfaengerklasse fuer Archiveinstellungen
 class InQueuesMgr.DataAckSender
           
 class InQueuesMgr.DataReceiver
          Abstrakte Klasse, die zum Empfang bestimmter Daten (z.B.
 class InQueuesMgr.QueryReceiver
          Empfaengerklasse fuer Archivanfragen
 
Field Summary
static int CAPA_Q_ARCH_TSK_REQ
          Kapazitaet des Ringpuffers fuer nachgelieferte Datensaetze
static int INITIAL_CAPA_Q_ARCH_TSK_ONLINE
          Initiale Maximalgroesse eines Ringpuffers fuer aktuelle Datensaetze.
static String MSG_PID_QUEUE_FULL
           
static int NUM_OF_ARCH_QUEUES_ONLINE
          Zahl der Tasks, die aktuelle Datensaetze archivieren (sollte Primzahl sein)
static int NUM_OF_ARCH_QUEUES_REQ
          Zahl der Tasks, die nachgelieferte Datensaetze archivieren
static int NUM_OF_NONARCH_QUEUES
           
static int NUM_OF_SINGLETASKS
           
static int Q_ARC_SETT_IDX
           
static int Q_ARCINF_IDX
           
static int Q_BACKUP_IDX
           
static int Q_DELETE_IDX
           
static int Q_HDR_REST_IDX
           
static int Q_LZV_IDX
           
static int Q_QRYA_IDX
          Indexe der Eingangswarteschlangen
static int Q_QRYB_IDX
           
static int Q_QRYC_IDX
           
static int Q_REQ_GAP_IDX
           
static int Q_RESTORE_IDX
           
static int Q_SIMPARAM_IDX
           
static int ST_ARC_SETT_IDX
           
static int ST_BACKUP_IDX
           
static int ST_DELETE_IDX
           
static int ST_HDR_REST_IDX
           
static int ST_LZV_IDX
           
static int ST_REQ_GAP_IDX
           
static int ST_RESTORE_IDX
           
 
Constructor Summary
InQueuesMgr(ArchiveManager aMgr, DataIdentTree dTree)
          Erzeugt den Warteschlangen-Manager.
 
Method Summary
static int calcOnlineArchivTaskIndex(long objID, long atgID, long aspID, int simVar)
          Verteilung der Datenidentifikationen auf die Online-Archiv-Tasks erfolgt anhand der IDs.
static int calcReqArchivTaskIndex(long objID, long atgID, long aspID, int simVar)
          Verteilung der Datenidentifikationen auf die Nachgefordert-Archiv-Tasks erfolgt anhand der IDs.
 void checkForSuspendNonWriteTask()
          Prueft ob Tasks temporaer blockiert werden sollen und blockiert ggf.
 int countOnlineDataInQueues()
           
 void decrOnlineDataInQueues()
           
 InQueuesMgr.ArchiveDataReceiver getArchiveDataReceiver()
          Die Klasse ArchivConfig meldet die zu archivierenden Daten mit dem Objekt als Empfaenger an, das von dieser Methode geliefert wird.
 float[][] getArchiveQueuesOnlineStatus()
           
 float[][] getArchiveQueuesRequestedStatus()
           
 ArchiveSettingsTask getArchiveSettingsTask()
          Liefert den Task, der fuer die Bearbeitung der Archiveinstellungen verantwortlich ist.
 InQueuesMgr.DataAckSender getDataAckSender()
          Die Klasse ArchivConfig meldet die Quittungen fuer die zu archivierenden Daten mit dem Objekt als Sender an, das von dieser Methode geliefert wird.
 int getHiQueryTaskNum()
           
 int getLoQueryTaskNum()
           
 int getMidQueryTaskNum()
           
 float[][] getNonArchiveQueuesStatus()
           
 void getObjectsFromDav()
          In dieser Methode wird allen Tasks (falls notwendig) die Moeglichkeit gegeben, benoetigte Objekte vom DAV zu laden.
 ArchiveTask getOnlineArchiveTask(long objId, long atgId, long aspId, int simVar)
          Nur fuer Testzwecke: Liefert den gewuenschten ArchiveTask
 double getQueueLoad()
           
 SingleTask getSingleTask(int taskIndex)
          Liefert den gewuenschten SingleTask (um etwa Listener einzuhaengen)
static long getTotalDSReceived()
           
static int getTotalOnlineQueuesCapa()
           
 void insertCloseContainer(long objID, ArchiveTask.CloseContainerObject cco)
          Fuegt einen nachgelieferten Datensatz in die entsprechende Queue ein.
 void insertInArchiveQueueReq(long archiveTime, ArchiveData ad)
          Fuegt einen nachgeforderten Datensatz in die entsprechende Queue ein.
 boolean insertInBackupQueue(ResultData resultData)
          Fügt dem Sicherungs-Task einen Auftrag hinzu.
 boolean insertInDeleteRegularQueue(ResultData resultData)
          Fügt dem Lösch-Task (automatisches Löschen) einen Auftrag hinzu.
 boolean insertInLZVQueue(ResultData resultData)
          Fügt dem LZV-Task einen Auftrag hinzu.
 boolean insertInRequestQueue(ResultData resultData)
          Fügt dem Nachfordern-Task einen Auftrag hinzu.
 boolean insertInSimVarDeleteQueue(ResultData resultData)
          Fügt dem Simulationsvarianten-Lösch-Task einen Auftrag hinzu.
 boolean insertSimVarParam(SimulationResultData resultData)
          Fügt dem Parametrierungs-Task einen weiteren Auftrag hinzu.
protected  void logCapaNoLongerExceeded(int maxsize, String qname, int leftouts)
           
protected  void logSendMsgCapaExceeded(int maxsize, String qname, ResultData rd)
          Betriebsmeldung absetzen: Warteschlange voll.
 void ringOfDeath(Task doomedTask)
          Wird von einem Task vor dem Verlassen der Hauptschleife aufgerufen, wenn dem Task dieses Interface im Konstruktor uebergeben wurde..
 void setQueryTaskNumbers(int numHi, int numMid, int numLo)
          Setzt die Anzahl der Threads fuer Archivanfragen auf die angegebenen Werte.
 void startAllTasks()
          Startet alle Tasks (Multi- und Single-Tasks) sowie die Archiv-Tasks.
 void stopAllTasks()
          Beendet alle Tasks (Multi- und Single-Tasks) sowie die Archiv-Tasks.
 void subscribeObjects()
          In dieser Methode wird allen Tasks (falls notwendig) die Moeglichkeit gegeben, sich auf Objekte anzumelden.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ST_ARC_SETT_IDX

public static final int ST_ARC_SETT_IDX
See Also:
Constant Field Values

ST_BACKUP_IDX

public static final int ST_BACKUP_IDX
See Also:
Constant Field Values

ST_RESTORE_IDX

public static final int ST_RESTORE_IDX
See Also:
Constant Field Values

ST_HDR_REST_IDX

public static final int ST_HDR_REST_IDX
See Also:
Constant Field Values

ST_LZV_IDX

public static final int ST_LZV_IDX
See Also:
Constant Field Values

ST_DELETE_IDX

public static final int ST_DELETE_IDX
See Also:
Constant Field Values

ST_REQ_GAP_IDX

public static final int ST_REQ_GAP_IDX
See Also:
Constant Field Values

NUM_OF_SINGLETASKS

public static final int NUM_OF_SINGLETASKS
See Also:
Constant Field Values

Q_QRYA_IDX

public static final int Q_QRYA_IDX
Indexe der Eingangswarteschlangen

See Also:
Constant Field Values

Q_QRYB_IDX

public static final int Q_QRYB_IDX
See Also:
Constant Field Values

Q_QRYC_IDX

public static final int Q_QRYC_IDX
See Also:
Constant Field Values

Q_ARCINF_IDX

public static final int Q_ARCINF_IDX
See Also:
Constant Field Values

Q_BACKUP_IDX

public static final int Q_BACKUP_IDX
See Also:
Constant Field Values

Q_RESTORE_IDX

public static final int Q_RESTORE_IDX
See Also:
Constant Field Values

Q_HDR_REST_IDX

public static final int Q_HDR_REST_IDX
See Also:
Constant Field Values

Q_LZV_IDX

public static final int Q_LZV_IDX
See Also:
Constant Field Values

Q_DELETE_IDX

public static final int Q_DELETE_IDX
See Also:
Constant Field Values

Q_REQ_GAP_IDX

public static final int Q_REQ_GAP_IDX
See Also:
Constant Field Values

Q_ARC_SETT_IDX

public static final int Q_ARC_SETT_IDX
See Also:
Constant Field Values

Q_SIMPARAM_IDX

public static final int Q_SIMPARAM_IDX
See Also:
Constant Field Values

NUM_OF_NONARCH_QUEUES

public static final int NUM_OF_NONARCH_QUEUES
See Also:
Constant Field Values

NUM_OF_ARCH_QUEUES_REQ

public static int NUM_OF_ARCH_QUEUES_REQ
Zahl der Tasks, die nachgelieferte Datensaetze archivieren


NUM_OF_ARCH_QUEUES_ONLINE

public static int NUM_OF_ARCH_QUEUES_ONLINE
Zahl der Tasks, die aktuelle Datensaetze archivieren (sollte Primzahl sein)


INITIAL_CAPA_Q_ARCH_TSK_ONLINE

public static int INITIAL_CAPA_Q_ARCH_TSK_ONLINE
Initiale Maximalgroesse eines Ringpuffers fuer aktuelle Datensaetze. Die Maximalgroesse kann sich auf Kosten anderer Puffer aendern. Mit dynamischen Puffergroessen kann man Lastspitzen besser abfangen.


CAPA_Q_ARCH_TSK_REQ

public static int CAPA_Q_ARCH_TSK_REQ
Kapazitaet des Ringpuffers fuer nachgelieferte Datensaetze


MSG_PID_QUEUE_FULL

public static final String MSG_PID_QUEUE_FULL
See Also:
Constant Field Values
Constructor Detail

InQueuesMgr

public InQueuesMgr(ArchiveManager aMgr,
                   DataIdentTree dTree)
            throws ConfigurationException
Erzeugt den Warteschlangen-Manager.

Parameters:
aMgr - Archiv-Manager
dTree - DataIdentTree
Throws:
ConfigurationException, - falls die IDs der Attributgruppe oder des Aspekts der ArchivAnfrageSchnittstelle nicht bestimmt werden koennen.
ConfigurationException
Method Detail

setQueryTaskNumbers

public void setQueryTaskNumbers(int numHi,
                                int numMid,
                                int numLo)
Setzt die Anzahl der Threads fuer 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()

checkForSuspendNonWriteTask

public void checkForSuspendNonWriteTask()
                                 throws InterruptedException
Prueft ob Tasks temporaer blockiert werden sollen und blockiert ggf. den aufrufenden Task.

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

Throws:
InterruptedException

getObjectsFromDav

public void getObjectsFromDav()
                       throws ConfigurationException
In dieser Methode wird allen Tasks (falls notwendig) die Moeglichkeit gegeben, benoetigte Objekte vom DAV zu laden.

Throws:
ConfigurationException

subscribeObjects

public void subscribeObjects()
In dieser Methode wird allen Tasks (falls notwendig) die Moeglichkeit gegeben, sich auf Objekte anzumelden. Abmelden geschieht zentral ueber 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

ringOfDeath

public void ringOfDeath(Task doomedTask)
Description copied from interface: RingOfDeathListener
Wird von einem Task vor dem Verlassen der Hauptschleife aufgerufen, wenn dem Task dieses Interface im Konstruktor uebergeben wurde..

Specified by:
ringOfDeath in interface RingOfDeathListener
Parameters:
doomedTask - Task, der gerade beendet wird

calcOnlineArchivTaskIndex

public static 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

calcReqArchivTaskIndex

public static int calcReqArchivTaskIndex(long objID,
                                         long atgID,
                                         long aspID,
                                         int simVar)
Verteilung der Datenidentifikationen auf die Nachgefordert-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,
                                    ArchiveData ad)
Fuegt einen nachgeforderten Datensatz in die entsprechende Queue ein.

Parameters:
aTime - Archivzeit
rd - Datensatz

insertInSimVarDeleteQueue

public boolean insertInSimVarDeleteQueue(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(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(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(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(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)
Fuegt einen nachgelieferten Datensatz in die entsprechende Queue ein.

Parameters:
aTime - Archivzeit
rd - Datensatz

logSendMsgCapaExceeded

protected void logSendMsgCapaExceeded(int maxsize,
                                      String qname,
                                      ResultData rd)
Betriebsmeldung absetzen: Warteschlange voll.

Parameters:
maxsize - Kapazität der Warteschlange
qname - Name der Warteschlange
rd - Datensatz.

logCapaNoLongerExceeded

protected void logCapaNoLongerExceeded(int maxsize,
                                       String qname,
                                       int leftouts)

getArchiveQueuesOnlineStatus

public float[][] getArchiveQueuesOnlineStatus()
Returns:
Status der Warteschlangen fuer aktuelle Datensaetze

getArchiveQueuesRequestedStatus

public float[][] getArchiveQueuesRequestedStatus()
Returns:
Status der Warteschlangen fuer nachgelieferte Datensaetze

getNonArchiveQueuesStatus

public float[][] getNonArchiveQueuesStatus()
Returns:
Status der Warteschlangen fuer eingehende, nicht zu archivierende Objekte

getTotalDSReceived

public static long getTotalDSReceived()
Returns:
Zahl aller seit dem Start oder letzten resetDSCounter() von getArchiveDataReceiver() empfangenen Datensaetze, egal ob diese archiviert werden oder nicht. Kann zur Test-Synchronisation verwendet werden.

getTotalOnlineQueuesCapa

public static int getTotalOnlineQueuesCapa()
Returns:
Gesamtkapazitaet aller Ringpuffers fuer aktuelle Datensaetze

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()

decrOnlineDataInQueues

public void decrOnlineDataInQueues()

getOnlineArchiveTask

public ArchiveTask getOnlineArchiveTask(long objId,
                                        long atgId,
                                        long aspId,
                                        int simVar)
Nur fuer 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)

getArchiveSettingsTask

public ArchiveSettingsTask getArchiveSettingsTask()
Liefert den Task, der fuer die Bearbeitung der Archiveinstellungen verantwortlich ist. Dies ist notwendig, damit der ArchiveManager beim Start einen ArchiveSettingsTask.ArSSettingListener einhaengen 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 fuer die Bearbeitung der Archiveinstellungen verantwortlich ist.

getSingleTask

public SingleTask getSingleTask(int taskIndex)
Liefert den gewuenschten SingleTask (um etwa Listener einzuhaengen)

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 fuer zu archivierende Daten.

getDataAckSender

public InQueuesMgr.DataAckSender getDataAckSender()
Die Klasse ArchivConfig meldet die Quittungen fuer die zu archivierenden Daten mit dem Objekt als Sender an, das von dieser Methode geliefert wird.

Returns:
Senderobjekt fuer die Quittungen der zu archivierenden Daten.