docs: function restartAction(params) {
          logger.log('debug', 'M|restartAction|params=%j', params, meta);
          
          // 1) Make sure the Engine is in the RUNNING state before asking all the
          //    workers to restart.
          if (state !== states.running) {
              logger.log('debug', 'M|restartAction|ERROR|REJECT', meta);
              params.deferred.reject(new Error('Unable to restart workers. Invalid state ' + states.toString(state) + '. Expected running.'));
              return null;
          }
          
          // 2) Change the state from 'running' to restarting
          nextState(states.restarting);
          
          // 3) Clone the Current workers, to keep track of them.
          var currentWorkers = [];
          eachWorker(function (worker) {
              currentWorkers.push(worker);
          });
  
          var cycleWorkers = function (workersToShutdown) {
              logger.log('debug', 'M|restart|workerToShutdown=%d', workersToShutdown.length, meta);
              
              var newWorker    = startOneWorkerHelper();
              var startPromise = monitorOneWorkerHelper("start", savedConfig.startTimeoutInMs, newWorker);
              
              // 1) Start a new worker to replace an old one.
              startPromise.then(function (object) {
                  logger.log('debug', 'M|worker-id=%d|restart|started', newWorker.id, meta);
                  var oneWorker = workersToShutdown.shift();
                  var stopPromise = monitorOneWorkerHelper("shutdown", savedConfig.shutdownTimeoutInMs, oneWorker);
                  logger.log('debug', 'M|worker-id=%d|restart|stop', oneWorker.id, meta);
                  oneWorker.send({
                      "action"     : "stop",
                      "id"         : oneWorker.id,
                      "origin"     : meta.module,
                      "methodArgs" : [false]
                  });
                  oneWorker.disconnect();
                  stopPromise.then(function (object) {
                      logger.log('debug', 'M|worker-id=%d|restart|stopped', oneWorker.id, meta);
                      if (workersToShutdown.length === 0) {
                          actionCompleted("restart", states.running, true, 'Workers restarted', params);                        
                      } else {
                          cycleWorkers(workersToShutdown);
                      }
                      logger.log('debug', 'M|worker-id=%d|restart|unwinding', oneWorker.id, meta);
                  }).fail(function (object) {
                      logger.log('debug', 'M|restartAction|stop|rejected|object=%j', object, meta);
                      actionCompleted("restart", states.error, false, 'A worker failed to shudown', params);                        
                  });
              }).fail(function (object) {
                  logger.log('debug', 'M|restartAction|start|rejected|object=%j', object, meta);
                  actionCompleted("restart", states.running, false, 'A worker failed to start', params);                        
              }).done();
          };
  
          // 3) Start one worker and shutdown another
          cycleWorkers(currentWorkers);
          
          // 4) Return null, to inform the ActionQueue that this action should not
          //    be reinstered into the queue.
          return null;
      }