Level 3 Filter Executable

State Machine

SourceTransitionNew State
Started
exe_msgque(manager)L3_GRAND_INITInitialized
exe_msgque(manager)otherError
internalerrorError
Initialized
exe_msgque(manager)L3_GRAND_FINISHEnding
exe_msgque(manager)L3_RUN_STARTPre-run
exe_msgque(manager)otherError
internalerrorError
Pre-run
private gloqueL3_RUN_BEGINActive Run
private gloqueotherError
internalerrorError
Active Run
ready gloqueL3_RUN_EVENTActive Run
ready gloqueL3_RUN_PAUSEPaused Run
ready gloqueL3_RUN_HALTPost Run
ready gloqueL3_RUN_STOPPost Run
ready gloqueotherError
internalerrorError
Paused Run
exe_msgque(manager)L3_RUN_CONTINUEActive Run
exe_msgque(manager)otherError
internalerrorError
Post Run
private gloqueL3_RUN_ABORTInitialized
private gloqueL3_RUN_ENDInitialized
private gloqueotherError
internalerrorError
Ending
No legal transitions
Error
No legal transitions

Transitions

Instantiation
  1. Create exe_msgque
  2. Connect to box manager msgque (mgr_msgque)
  3. Connect to process state array
  4. Connect to event statistics table
  5. Connect to global buffer system
  6. Send L3_GRAND_INIT acknowledge message to box manager on mgr_msgque
Destruction
  1. Disconnect from global buffer system
  2. Disconnect from event statistics table
  3. Disconnect from process state array
  4. Disconnect from mgr_msgque
  5. Destroy exe_msgque
L3_GRAND_INIT
  1. Send acknowledgement to box manager on mgr_msgque
L3_GRAND_FINISH
  1. Send acknowledgement to box manager on mgr_msgque
L3_RUN_START
  1. Send acknowledgement to box manager on mgr_msgque
L3_RUN_BEGIN
  1. Create/obtain a run_begin event using buffer in data section of message
  2. Form BoR message
  3. Send message to done queue
  4. Send acknowledgement to box manager on mgr_msgque
L3_RUN_EVENT
  1. Analyze event
  2. Form event message
  3. Send message to done queue
L3_RUN_PAUSE
  1. Send acknowledgement to box manager on mgr_msgque
L3_RUN_CONTINUE
  1. Send acknowledgement to box manager on mgr_msgque
L3_RUN_STOP
  1. Send acknowledgement to box manager on mgr_msgque
L3_RUN_END and L3_RUN_ABORT
  1. Create/obtain a run_end/run_abort event using buffer in data section of message
  2. Form EoR event message
  3. Send message to done queue
  4. Send acknowledgement to box manager on mgr_msgque
UNKNOWN (Unrecognized transition)
  1. Send L3_UNKNOWN to box manager on mgr_msgque

Notes

The box manager is the only process which writes to the private gloque, and the node executables are the only ones which receive from it.

In order to send a L3_RUN_BEGIN on the private gloque, the box manager pulls one globuf for each node executable from the inactive gloque. It then waits for acknowledgements on mgr_msgque.

In order to send a L3_RUN_END on the private gloque, the box manager tries to pull globufs from the free gloque. However, if this doesn't work after a period of time, the globufs are pulled from other gloques (first from the ready queue, and then the done queue), which can trash events. Once the desired number of globufs have been freed, it forms L3_RUN_END messages and sends them on the private gloque, waiting for acknowledgements via mgr_msgque.


Extracted from l3_node_exe.c version 1.5 (R. Kennedy)
Jeff Tseng