docs: @Override
    public boolean restart(Integer containerId) {
      // there is no backpressure for container 0, delegate to aurora client
      if (containerId == null || containerId == 0) {
        return cliController.restart(containerId);
      }
  
      if (stateMgrAdaptor == null) {
        LOG.warning("SchedulerStateManagerAdaptor not initialized");
        return false;
      }
  
      StMgr sm = searchContainer(containerId);
      if (sm == null) {
        LOG.warning("container not found in pplan " + containerId);
        return false;
      }
  
      String url = "http://" + sm.getHostName() + ":" + sm.getShellPort() + "/killexecutor";
      String payload = "secret=" + stateMgrAdaptor.getExecutionState(topologyName).getTopologyId();
      LOG.info("sending `kill container` to " + url + "; payload: " + payload);
  
      HttpURLConnection con = NetworkUtils.getHttpConnection(url);
      try {
        if (NetworkUtils.sendHttpPostRequest(con, "X", payload.getBytes())) {
          return NetworkUtils.checkHttpResponseCode(con, 200);
        } else { // if heron-shell command fails, delegate to aurora client
          LOG.info("heron-shell killexecutor failed; try aurora client ..");
          return cliController.restart(containerId);
        }
      } finally {
        con.disconnect();
      }
    }