anchor.diff:  The routing table is used by Genie server instances to dispatch a kill request to the instance where the agent is currently connected.
   That instance then forwards the request to the agent.
   
  -==== Agent file streaming
  +=== Agent file streaming
   
   Each agent executing a job opens multiple streaming channels on top of a single connection to a server.
   These channels can be used to pull a file from the agent and serve it via REST API
   
  -==== Agent logging
  +=== Agent logging
   
   Log messages emitted by a genie agent are routed to `agent.log`.
   This file is created at a temporary location when the agent starts, and relocated to the job folder once the latter exists.
  
positive.code: 
  This section provides an overview of Genie subsystems and components.
  
  ==== Leader election
  
  Genie uses Zookeeper to elect an instance to be leader.
  An alternative leader election mechanism can be plugged in instead of Zookeeper.
  
  ===== Leader tasks
  
  The Genie instance elected leader of a given cluster performs different tasks:
  
  
negative.code: 
  All jobs launched by the server (as a result of an API job submission) execute in non-interactive mode.
  
  === Persistence
  
  Out of the box, Genie supports MySQL and Postgres persistence via JPA and Hibernate.
  
  H2 in-memory database is also supported for integration tests.
  
  Other kinds of persistence can be plugged in either via JPA or by re-implementing the persistence interface with a different technology.
  
  === Plug-in Selectors
  
  Genie provides a mechanism to load and invoke Groovy scripts, and even reload the script if it changes at runtime.
  
  These hooks are provided in order to plug-in custom logic:
  
  ==== Command selector script
  
  A job command criteria may be broad enough to match multiple commands (for example, a Spark job may match 10 different Spark commands, one for each Spark version).
  
  