code: private synchronized void doNodeLeft(final String nodeID) {
      log.info(String.format("%s - %s left the cluster", this, nodeID));
      context.run(new Runnable() {
        @Override
        public void run() {
          // Redeploy any failed deployments.
          synchronized (deployments) {
            Collection<String> sdeploymentsInfo = deployments.get(group);
            for (final String sdeploymentInfo : sdeploymentsInfo) {
              final JsonObject deploymentInfo = new JsonObject(sdeploymentInfo);
              // If the deployment node is equal to the node that left the cluster then
              // remove the deployment from the deployments list and attempt to redeploy it.
              if (deploymentInfo.getString("node").equals(nodeID)) {
                // If the deployment is an HA deployment then attempt to redeploy it on this node.
                if (deployments.remove(group, sdeploymentInfo) && deploymentInfo.getBoolean("ha", false)) {
                  doRedeploy(deploymentInfo);
                }
              }
            }
          }
        }
      });
    }
docs: Called when a node leaves the cluster.