EventLoop Driver-Manager update
This is a fairly large EventLoop update/restructuring, to be followed by more EventLoop updates soon, but right now I just want to get this update in, so that there isn't too much to review at once. This is already a fair amount of changes to review, and it will hopefully make future updates smaller and more focused. As such the main thing this update does is move code around and change how things get called and stored internally, but it does very little beyond that.
The main change is that I introduce a class interface Manager
which is similar in concept 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. As such most of these structures are open to change as need arises, as user code shouldn't directly depend on them.
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.