Hi, I am recently reading the code of the GroomServer and trying to figure out the workflow. The following is my understanding, please correct me if I am wrong.
I already know the following steps: 1. When initializing, the GroomServer will create an instructor, who will buffer the incoming directive instance (a wrapper of action that can launch, recover, or kill a task?). 2. The instance will be handled by the DispatchTasksHandler. 3. If the action is launched, then a couple of things will be done in the order: DispatchTasksHandler.startNewTask -> GroomServer.localizeJob -> GroomServer.launchTaskForJob -> TaskInProgress.launchTask . I haven't figure out why a couple of distinct BSPJob instances are created in these steps. 4. A TaskRunner will be created to run the task. Further, a BSPChildRunner instance will be created. When the BSPChildRunner instance (a thread) been scheduled and executed, it will create a process to execute the BSPPeerChild. 5. BSPChildRunner will create a BSPPeerImpl and it will be executed by a BSPTask (BSPTask.run -> BSPTask.runBSP). 6. BSPPeerImpl will execute its setup, bsp, and cleanup method, which will be implemented by the end user. Regards, Yexi
