code: public boolean upgradeNode(String downloadJSON) {
          LOGGER.entering(downloadJSON);
  
          // verify the servlet is supported on the node
          if (!supportsAutoUpgrade()) {
              LOGGER.exiting(false);
              return false;
          }
  
          // call the NodeAutoUpgradeServlet on the node
          proxyLogger.fine("Upgrading node " + getId());
  
          List<NameValuePair> nvps = new ArrayList<>();
          nvps.add(new BasicNameValuePair(NodeAutoUpgradeServlet.TOKEN_PARAMETER,
                  NodeAutoUpgradeServlet.CONFIGURED_TOKEN_VALUE));
          NameValuePair jsonNVP = new BasicNameValuePair(GridAutoUpgradeDelegateServlet.PARAM_JSON, downloadJSON);
          nvps.add(jsonNVP);
  
          HttpResponse response = sendToNodeServlet(NodeAutoUpgradeServlet.class, nvps);
          if (response == null) {
              proxyLogger.warning("Node " + getId() + " failed to upgrade and returned a null response.");
              LOGGER.exiting(false);
              return false;
          }
  
          final int responseStatusCode = response.getStatusLine().getStatusCode();
          if (responseStatusCode != HttpStatus.SC_OK) {
              proxyLogger.warning("Node " + getId() + " failed to upgrade and returned HTTP " + responseStatusCode);
              LOGGER.exiting(false);
              return false;
          }
  
          requestNodeShutdown();
          LOGGER.exiting(true);
          return true;
      }
docs: Upgrades the node by calling {@link NodeAutoUpgradeServlet} and then {@link #requestNodeShutdown}
  
  @param downloadJSON
  the download.json to install on node
  @return <code>true</code> on success. <code>false</code> when an error occured.