ATLAS Offline Software
|
an interface for classes that handle job management for the Driver More...
#include <Manager.h>
Public Member Functions | |
virtual | ~Manager () noexcept=default |
standard (virtual) destructor More... | |
virtual std::pair< Detail::ManagerOrder, std::string > | getManagerOrder () const noexcept=0 |
get the order/name of this manager More... | |
virtual ::StatusCode | doManagerStep (Detail::ManagerData &data) const =0 |
do whatever needs to be done for the given submission step More... | |
an interface for classes that handle job management for the Driver
The idea of this class is similar to Module, but for work being done on the submission node, instead of the worker node. Even though it is essentially a pluggable infrastructure, but it is meant for expert use only, not as something that the user would directly instantiate or configure himself.
The general way this works is that at the beginning of each task/operation a series of managers get loaded based on the task at hand. Then we go through a series of steps (ManagerStep) and at each step each manager gets the option to do what it needs to do at that step. That way the different managers can operate more or less independently and have their code interleave while avoiding a fair amount of spaghetti code. Any data that needs to be communicated between different managers or steps gets placed into the ManagerData structure, meaning individual managers don't need to know about each other directly.
So far (16 Aug 19) there are only very few managers defined, and most code still tries to address to many things in a single manager/driver. However, this should (hopefully) serve as the infrastructure for making such changes a lot easier in the future.
|
virtualdefaultnoexcept |
standard (virtual) destructor
|
pure virtual |
do whatever needs to be done for the given submission step
Implemented in EL::Detail::DriverManager, EL::Detail::BaseManager, EL::Detail::SubmitDirManager, EL::Detail::RetrieveManager, and EL::Detail::SubmitManager.
|
pure virtualnoexcept |
get the order/name of this manager
This is both used to identify the manager we are looking at, and to make sure they get executed in the right order. It is a mistake to load two managers that report the same order.
This is a pair of an enum that defines the absolute order of managers, and a string that identifies the stream that this manager belongs to. If this manager is not specific to a stream this should be the empty stream.
Implemented in EL::Detail::DriverManager, EL::Detail::BaseManager, EL::Detail::SubmitDirManager, EL::Detail::RetrieveManager, and EL::Detail::SubmitManager.