diff --git a/Worker.md b/Worker.md index d17d61e..ec0c443 100644 --- a/Worker.md +++ b/Worker.md @@ -1,8 +1,24 @@ # Worker ## Description +**Worker's** main role is securely execute given submission and possibly _evaluate_ results against model solutions provided by submitter. **Worker** is logicaly divided into two parts: +- **Listener** - listens and communicates with **Broker** through [ZeroMQ](http://zeromq.org/). It receives new jobs, communicates with **Evaluator** part and sends back results or progress. +- **Evaluator** - gets jobs to evaluate from **Listener** part, evaluate them (possibly in sandbox) and get to know to other part that evaluation ended. This part also communicates with **Fileserver**, downloads needed files and uploads detailed results. + +**Worker** after getting evaluation request has to: + +- Download the archive containing submitted source files and configuration file +- Download any supplementary files based on the configuration file, such as test + inputs or helper programs (This is done on demand, using a `fetch` command + in the assignment configuration) +- Evaluate the submission accordingly to job configuration +- During evaluation progress states can be sent back to **Broker** +- Upload the results of the evaluation to the **Fileserver** +- Notify **Broker** that the evaluation finished ## Architecture +Picture below is overall internal architecture of worker which shows its defined classes with private variables and public functions. Vector version of this picture is available [here](https://github.com/ReCodEx/GlobalWiki/raw/master/images/Worker_Internal_Architecture.pdf). +![Internal Worker architecture](https://github.com/ReCodEx/GlobalWiki/blob/master/images/Worker_Internal_Architecture.png) ## Installation