Software design - 06 Nov 2012

Discussion between Alessandro, Marc, and Kurt. (Initial notes from Kurt)

General notes

Alessandro says:
  • Shifters do init, start, stop, start, stop, etc.
  • Operators change MPI configuration

Overall control tools/applications

PMT - launches the MPI program
System Control - sends XMLRPC commands to elements of the MPI program
"MPI program":
  • boardreader (M copies)
  • eventbuilder (N copies)
  • aggregator (P copies)

The PMT language of choice at the moment is Ruby.

Communication between the System Control application and the elements of the MPI program

We confirmed that XMLRPC calls are synchronous. This means that System Control will never do something like send an Initialize message and while waiting for the response, send an abort message. This can't happen because System Control needs to wait for the Initialize request to finish before sending another command. (This has the ramification that query messages like Report or Status will also be blocked during long-running operations.)

We briefly discussed how timeouts should be handled, but I don't believe that we came to a conclusion.

We talked through the Commandable interface that Marc and Kurt have come up with so far.

Configuration of the MPI program

We agreed that PMT, under the direction of System Control, will only start the necessary number of boardreader, eventbuilder, and aggregator processes. And, we confirmed that the configuration of any particular run of the MPI program is what will be sent in the "MPI Configuration" part of the Initialization message. We recognized that this choice means that changing the number of boardreader, eventbuilder, and aggregator processes means restarting the MPI program.

From the whiteboards

The Commandable interface:

class Commandable {
  virtual ~Commandable() nothrow;
  bool initialize(ParameterSet const &);
  bool pause();
  bool start(art::RunID);
  bool stop();
  Report_ptr report(string const & which); // pointer will not be null - Report may explain a reason for failure
  string status() const;
  bool perfreset(string const & which); // "all" to reset everything?
  bool shutdown();
  bool reinitialize(ParameterSet const&); // remain in the same state?
Notes on Commandable:
  • why Report_ptr?
  • specify timeouts in initialization ParameterSet?
  • init
  • start
  • stop
  • pause
  • resume
  • report
  • status
  • perfreset
  • shutdown
  • reinitialize

There were also initial state and class diagrams which I will try to capture soon.