You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by vi...@apache.org on 2012/06/07 05:29:19 UTC

svn commit: r1347356 - in /incubator/ambari/branches/ambari-186: ./ hmc/html/ hmc/js/ hmc/php/frontend/

Author: vikram
Date: Thu Jun  7 03:29:18 2012
New Revision: 1347356

URL: http://svn.apache.org/viewvc?rev=1347356&view=rev
Log:
AMBARI-508. Support Resume For Add Nodes (Contributed by Varun)

Added:
    incubator/ambari/branches/ambari-186/hmc/html/showDeployAddedNodesProgress.php
    incubator/ambari/branches/ambari-186/hmc/js/showDeployAddedNodesProgress.js
    incubator/ambari/branches/ambari-186/hmc/php/frontend/restoreDeployedStatePostProcess.php
Modified:
    incubator/ambari/branches/ambari-186/CHANGES.txt
    incubator/ambari/branches/ambari-186/hmc/js/deployAddedNodesProgress.js
    incubator/ambari/branches/ambari-186/hmc/js/reviewAndDeploy.js
    incubator/ambari/branches/ambari-186/hmc/js/selectComponents.js
    incubator/ambari/branches/ambari-186/hmc/php/frontend/deployAddedNodes.php
    incubator/ambari/branches/ambari-186/hmc/php/frontend/fetchTxnProgress.php

Modified: incubator/ambari/branches/ambari-186/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/CHANGES.txt?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/CHANGES.txt (original)
+++ incubator/ambari/branches/ambari-186/CHANGES.txt Thu Jun  7 03:29:18 2012
@@ -6,6 +6,8 @@ characters wide.
 
 Release 0.1.x - unreleased
 
+  AMBARI-508. Support Resume For Add Nodes (Varun via Vikram)
+
   AMBARI-506. Do not use epel in local yum repo installs (Hitesh via Vikram)
 
   AMBARI-507. Install rpms instead of tar.gz downloads (Ramya via Vikram)

Added: incubator/ambari/branches/ambari-186/hmc/html/showDeployAddedNodesProgress.php
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/html/showDeployAddedNodesProgress.php?rev=1347356&view=auto
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/html/showDeployAddedNodesProgress.php (added)
+++ incubator/ambari/branches/ambari-186/hmc/html/showDeployAddedNodesProgress.php Thu Jun  7 03:29:18 2012
@@ -0,0 +1,45 @@
+<?php require_once "./head.inc" ?>
+<html>
+  <head>
+    <title id="pageTitleId"><?php echo $RES['page.title'] ?></title>
+
+    <!-- CSS -->
+    <link type="text/css" rel="stylesheet" href="../yui-3.5.1/build/cssreset/cssreset-min.css">
+    <link type="text/css" rel="stylesheet" href="../css/bootstrap.css" media="screen"/>
+    <link type="text/css" rel="stylesheet" href="../css/common.css" media="screen"/>
+    <link type="text/css" rel="stylesheet" href="../css/common2.css" media="screen"/>
+    <link type="text/css" rel="stylesheet" href="../css/common3.css" media="screen"/>
+    <link rel="shortcut icon" href="../images/logo-micro.gif">
+    <!-- End CSS -->
+  </head>
+
+  <body class="yui3-skin-sam">
+    <?php require "./topnav.htmli"; ?>
+
+    <div id="contentDivId"> 
+
+      <?php require "./utils.htmli"; ?>
+      <?php require "./txnUtils.htmli"; ?>
+
+    </div>
+    <!-- End of contentDivId -->
+
+    <?php require "./footer.htmli"; ?>
+
+    <!-- Javascript Scaffolding -->
+    <script type="text/javascript">
+      /* Minimal data required to bootstrap clusters.js. */
+      var clusterName = '<?php echo $clusterName; ?>';
+
+      var jsFilesToLoad = [ 
+        'js/utils.js',
+        'js/txnUtils.js',
+        'js/deployAddedNodesProgress.js',
+        'js/showDeployAddedNodesProgress.js' 
+      ];
+    </script>
+
+    <?php require "./bootstrapJs.htmli"; ?>
+    <!-- End of Javascript Scaffolding -->
+  </body>
+</html> 

Modified: incubator/ambari/branches/ambari-186/hmc/js/deployAddedNodesProgress.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/js/deployAddedNodesProgress.js?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/js/deployAddedNodesProgress.js (original)
+++ incubator/ambari/branches/ambari-186/hmc/js/deployAddedNodesProgress.js Thu Jun  7 03:29:18 2012
@@ -1,112 +1,106 @@
-function DeployAddedNodes() {
+function generateLogsContent(errorInfoJson) {
+  return '<pre>' +
+           globalYui.JSON.stringify( errorInfoJson.logs, null, 4 ) +
+         '</pre>';
+}
+  
+function renderDeployAddedNodesProgress(progressInfo) {
+
+  hideLoadingImg();
+
+  /* At this point, our users are done with the installation wizard
+   * and have asked for a deploy, so there's no going back - remove
+   * all traces of #installationWizardProgressBarDivId.
+   */
+  var installationWizardProgressBarDiv = globalYui.one('#installationWizardProgressBarDivId');
 
-  function generateLogsContent(errorInfoJson) {
-    return '<pre>' +
-             globalYui.JSON.stringify( errorInfoJson.logs, null, 4 ) +
-           '</pre>';
+  /* But be safe and perform this removal only if #installationWizardProgressBarDivId 
+   * actually exists on the page - this .js file is now being used in more 
+   * than one place, so this robustness is needed.
+   */
+  if (installationWizardProgressBarDiv) {
+    installationWizardProgressBarDiv.setStyle('display', 'none')
   }
-    
-  this.renderProgress = function(progressInfo) {
-  
-    hideLoadingImg();
-  
-    /* At this point, our users are done with the installation wizard
-     * and have asked for a deploy, so there's no going back - remove
-     * all traces of #installationWizardProgressBarDivId.
-     */
-    var installationWizardProgressBarDiv = globalYui.one('#installationWizardProgressBarDivId');
-  
-    /* But be safe and perform this removal only if #installationWizardProgressBarDivId 
-     * actually exists on the page - this .js file is now being used in more 
-     * than one place, so this robustness is needed.
-     */
-    if (installationWizardProgressBarDiv) {
-      installationWizardProgressBarDiv.setStyle('display', 'none')
-    }
-  
-    var progressStatusMessage = {
-  
-      success:
-        '<p>' +
-          'Successfully added new nodes to your cluster.<br><a href="index.php" id="addMoreNodesSuccessLink" style="margin-top:10px" class="btn btn-large">Continue</a>' + 
-        '</p>',
-      failure:
-        '<p>' +
-          'Failed to add new nodes to the cluster.<br>Take a look at the ' +
-            '<a href="javascript:void(null)" id="showDeployTxnLogsLinkId">deploy logs</a>' +
-          ' to find out what might have gone wrong.' +
-          '<a href="index.php" class="btn btn-large" style="margin-top:10px" id="addMoreNodesFailedLink">' + 
-          'Continue' +
-          '</a>' +
-        '</p>'
-    };
-  
-    var postCompletionFixup = {
-  
-      success: function(txnProgressWidget) {  
-      },
-  
-      failure: function(txnProgressWidget) {
-  
-        /* Create the panel that'll display our error info. */
-        var errorInfoPanel = 
-          createInformationalPanel( '#informationalPanelContainerDivId', 'Deploy Logs' );
-  
-        /* Prime the panel to start off showing our stock loading image. */
-        var errorInfoPanelBodyContent = 
-          '<img id="errorInfoPanelLoadingImgId" class="loadingImg" src="../images/loading.gif" />';
-  
-        /* Make the call to our backend to fetch the report for this txnId. */
-        globalYui.io('../php/frontend/fetchTxnLogs.php?clusterName=' + 
-          txnProgressWidget.txnProgressContext.clusterName + '&txnId=' + txnProgressWidget.txnProgressContext.txnId, {
-            
-            timeout: 10000,
-            on: {
-              success: function (x,o) {
-  
-                globalYui.log("RAW JSON DATA: " + o.responseText);
-  
-                var errorInfoJson = null;
-  
-                // Process the JSON data returned from the server
-                try {
-                  errorInfoJson = globalYui.JSON.parse(o.responseText);
-                }
-                catch (e) {
-                  alert("JSON Parse failed!");
-                  return;
-                }
-  
-                /* TODO XXX Remove some of the noise from this to allow
-                 * for better corelation - for now, just dump a 
-                 * pretty-printed version of the returned JSON.
-                 */
-                errorInfoPanelBodyContent = generateLogsContent(errorInfoJson);
-  
-                /* Update the contents of errorInfoPanel (which was, till
-                 * now, showing the loading image). 
-                 */
-                errorInfoPanel.set( 'bodyContent', errorInfoPanelBodyContent );
-              },
-              failure: function (x,o) {
-                alert("Async call failed!");
+
+  var progressStatusMessage = {
+
+    success:
+      '<p>' +
+        'Successfully added new nodes to your cluster.<br><a href="index.php" id="addMoreNodesSuccessLink" style="margin-top:10px" class="btn btn-large">Continue</a>' + 
+      '</p>',
+    failure:
+      '<p>' +
+        'Failed to add new nodes to the cluster.<br>Take a look at the ' +
+          '<a href="javascript:void(null)" id="showDeployTxnLogsLinkId">deploy logs</a>' +
+        ' to find out what might have gone wrong.' +
+        '<a href="index.php" class="btn btn-large" style="margin-top:10px" id="addMoreNodesFailedLink">' + 
+        'Continue' +
+        '</a>' +
+      '</p>'
+  };
+
+  var postCompletionFixup = {
+
+    failure: function(txnProgressWidget) {
+
+      /* Create the panel that'll display our error info. */
+      var errorInfoPanel = 
+        createInformationalPanel( '#informationalPanelContainerDivId', 'Deploy Logs' );
+
+      /* Prime the panel to start off showing our stock loading image. */
+      var errorInfoPanelBodyContent = 
+        '<img id="errorInfoPanelLoadingImgId" class="loadingImg" src="../images/loading.gif" />';
+
+      /* Make the call to our backend to fetch the report for this txnId. */
+      globalYui.io('../php/frontend/fetchTxnLogs.php?clusterName=' + 
+        txnProgressWidget.txnProgressContext.clusterName + '&txnId=' + txnProgressWidget.txnProgressContext.txnId, {
+          
+          timeout: 10000,
+          on: {
+            success: function (x,o) {
+
+              globalYui.log("RAW JSON DATA: " + o.responseText);
+
+              var errorInfoJson = null;
+
+              // Process the JSON data returned from the server
+              try {
+                errorInfoJson = globalYui.JSON.parse(o.responseText);
               }
-          }
-        });
-  
-        /* Register a click-handler for #showDeployTxnLogsLinkId to render 
-         * the contents inside errorInfoPanel (and make it visible). 
-         */
-        globalYui.one("#showDeployTxnLogsLinkId").on( "click", function(e) {
-          errorInfoPanel.set('bodyContent', errorInfoPanelBodyContent);
-          errorInfoPanel.show();
-  
-        });
-      }
-    };
+              catch (e) {
+                alert("JSON Parse failed!");
+                return;
+              }
+
+              /* TODO XXX Remove some of the noise from this to allow
+               * for better corelation - for now, just dump a 
+               * pretty-printed version of the returned JSON.
+               */
+              errorInfoPanelBodyContent = generateLogsContent(errorInfoJson);
+
+              /* Update the contents of errorInfoPanel (which was, till
+               * now, showing the loading image). 
+               */
+              errorInfoPanel.set( 'bodyContent', errorInfoPanelBodyContent );
+            },
+            failure: function (x,o) {
+              alert("Async call failed!");
+            }
+        }
+      });
+
+      /* Register a click-handler for #showDeployTxnLogsLinkId to render 
+       * the contents inside errorInfoPanel (and make it visible). 
+       */
+      globalYui.one("#showDeployTxnLogsLinkId").on( "click", function(e) {
+        errorInfoPanel.set('bodyContent', errorInfoPanelBodyContent);
+        errorInfoPanel.show();
+
+      });
+    }
+  };
+
+  var progressWidget = new TxnProgressWidget(progressInfo, 'Add Nodes Progress', progressStatusMessage, postCompletionFixup);
   
-    var progressWidget = new TxnProgressWidget(progressInfo, 'Add Nodes', progressStatusMessage, postCompletionFixup);
-    
-    progressWidget.show();
-  } 
-};
+  progressWidget.show();
+} 

Modified: incubator/ambari/branches/ambari-186/hmc/js/reviewAndDeploy.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/js/reviewAndDeploy.js?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/js/reviewAndDeploy.js (original)
+++ incubator/ambari/branches/ambari-186/hmc/js/reviewAndDeploy.js Thu Jun  7 03:29:18 2012
@@ -44,7 +44,7 @@ function renderDeploySummary (deployInfo
         if (type == "checkbox") {
           readOnlyAttr = 'disabled="disabled"';
           var checkVal = perServiceInfo.properties[mPropertiesKey].value;
-          if (checkVal) {
+          if (checkVal == 'true') {
             valueAttr = 'checked=yes';
           } else {
             valueAttr = '';
@@ -95,7 +95,6 @@ globalYui.one('#deploySubmitButtonId').o
     submitDataAndProgressToNextScreen(url, requestData, submitButton, thisScreenId, nextScreenId, nextScreenRenderFunction);
 });
 
-
 function renderDeploy (deployInfo) {
   globalDeployInfo = deployInfo;
   var inputUrl = "../php/frontend/fetchClusterServices.php?clusterName=" + deployInfo.clusterName + "&getConfigs=true&getComponents=true";

Modified: incubator/ambari/branches/ambari-186/hmc/js/selectComponents.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/js/selectComponents.js?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/js/selectComponents.js (original)
+++ incubator/ambari/branches/ambari-186/hmc/js/selectComponents.js Thu Jun  7 03:29:18 2012
@@ -99,46 +99,12 @@ globalYui.one('#deployAddedNodesSubmitBu
     e.target.set('disabled', true);
 
     var deployRequestData = getSelectedComponents();
-    var deployAddedNodes = new DeployAddedNodes();
-    
-    globalYui.io("../php/frontend/deployAddedNodes.php?clusterName="+ InstallationWizard.SelectServicesForNewNodes.renderData.clusterName, {
-      method: 'POST',
-      data: globalYui.JSON.stringify(deployRequestData),
-      timeout : 10000,
-      on: {
-        start: function(x, o) {
-          e.target.set('disabled', false);
-          showLoadingImg();
-        },
-        complete: function(x, o) {
-          e.target.set('disabled', false);
-          hideLoadingImg();
-        },
-        success: function (x,o) {
-          globalYui.log("RAW DEPLOY DATA: " + o.responseText);
 
-          try {
-            deployProgressInfoJson = globalYui.JSON.parse(o.responseText);
-          } catch (e) {
-            alert("JSON Parse failed!");
-            return;
-          }
-
-          globalYui.log("PARSED DATA: " + globalYui.Lang.dump(deployProgressInfoJson));
-
-          /* Done with this stage, transition to the next. */
-          transitionToNextStage( "#selectServicesCoreDivId", deployRequestData, "#txnProgressCoreDivId", deployProgressInfoJson, deployAddedNodes.renderProgress);
-
-          /* At this point, our users are done with the installation wizard
-          * and have asked for a deploy, so there's no going back - remove
-          * all traces of #installationWizardProgressBarDivId.
-          */
-          globalYui.one('#installationWizardProgressBarDivId').setStyle('display', 'none');
-        },
-      failure: function (x,o) {
-        e.target.set('disabled', false);
-        alert("Async call failed!");
-      }
-    }
-  });
+    var url = "../php/frontend/deployAddedNodes.php?clusterName=" + InstallationWizard.SelectServicesForNewNodes.renderData.clusterName;
+    var requestData = deployRequestData;
+    var submitButton = e.target;
+    var thisScreenId = "#selectServicesCoreDivId";
+    var nextScreenId = "#txnProgressCoreDivId";
+    var nextScreenRenderFunction = renderDeployAddedNodesProgress;
+    submitDataAndProgressToNextScreen(url, requestData, submitButton, thisScreenId, nextScreenId, nextScreenRenderFunction);
 });

Added: incubator/ambari/branches/ambari-186/hmc/js/showDeployAddedNodesProgress.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/js/showDeployAddedNodesProgress.js?rev=1347356&view=auto
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/js/showDeployAddedNodesProgress.js (added)
+++ incubator/ambari/branches/ambari-186/hmc/js/showDeployAddedNodesProgress.js Thu Jun  7 03:29:18 2012
@@ -0,0 +1,2 @@
+/* Main() */
+executeStage( '../php/frontend/deployAddedNodes.php?clusterName=' + clusterName, renderDeployAddedNodesProgress );

Modified: incubator/ambari/branches/ambari-186/hmc/php/frontend/deployAddedNodes.php
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/php/frontend/deployAddedNodes.php?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/php/frontend/deployAddedNodes.php (original)
+++ incubator/ambari/branches/ambari-186/hmc/php/frontend/deployAddedNodes.php Thu Jun  7 03:29:18 2012
@@ -12,103 +12,102 @@ include_once "../orchestrator/HMC.php";
 include_once "../db/OrchestratorDB.php";
 include_once "../puppet/DBReader.php";
 include_once "../puppet/PuppetInvoker.php";
+include_once "../util/clusterState.php";
 
-/* Now comes in from Config.inc
-$GLOBALS["HMC_LOG_LEVEL"] = HMCLogger::DEBUG;
-$GLOBALS["HMC_LOG_FILE"] = "/tmp/orchestrator-test.log";
-$GLOBALS["BACKGROUND_EXECUTOR_PATH"] = "../util/BackgroundExecutor.php";
-$GLOBALS["PHP_EXEC_PATH"] = "/usr/bin/php";
-$GLOBALS["CLUSTERMAIN_PATH"] = "../orchestrator/ClusterMain.php";
-$GLOBALS["puppetManifestDir"] = "/etc/puppet/master/manifests/";
-$GLOBALS["puppetKickVersionFile"] = "/tmp/puppet_kick_version.txt";
-$GLOBALS["puppetReportsDir"] = "/usr/local/rvm/gems/ruby-1.8.7-p358/gems/puppet-2.7.9/lib/puppet/reports/";
-$GLOBALS["puppetKickTimeout"] = 60;
-$GLOBALS["puppetMaxParallelKicks"] = 10;
-$GLOBALS["DRYRUN"] = FALSE;
-*/
-
-/* vinodkv
-system("mkdir -p ".$GLOBALS["puppetManifestDir"]);
-system("mkdir -p ".$GLOBALS["puppetReportsDir"]);
-*/
+$dbPath = $GLOBALS["DB_PATH"];
+$clusterName = $_GET['clusterName'];
+
+/* For returning in our JSON at the very end. */
+$result = 0;
+$error = "";
 
+$txnId = -1;
 
 $logger = new HMCLogger("deployAddedNodes");
-$dbHandle = new HMCDBAccessor($GLOBALS["DB_PATH"]);
 
-$dbPath = $GLOBALS["DB_PATH"];
-$clusterName = $_GET['clusterName'];
-$readFromFile = getHostsFilePath($clusterName);
+$dbAccessor = new HMCDBAccessor($dbPath);
+$clusterStateResponse = $dbAccessor->getClusterState($clusterName);
+
+if ($clusterStateResponse['result'] != 0) {
+  print json_encode($clusterStateResponse);
+  return;
+}
+
+$clusterState = json_decode($clusterStateResponse['state'], true);
+
+/* Perform the actual addition of nodes only if this cluster is in a 
+ * deployed state (regardless of whether the deploy was a success or failure). 
+ */
+if ($clusterState['state'] == 'DEPLOYED') {
+
+  $readFromFile = getHostsFilePath($clusterName);
+
+  $requestData = file_get_contents('php://input');
+  $components = json_decode($requestData, true);
 
-$requestData = file_get_contents('php://input');
-$components = json_decode($requestData, true);
+  $logger->log_debug("Components are ".json_encode($components));
 
-$logger->log_debug("Components are ".json_encode($components));
+  $hmc = new HMC($dbPath, $clusterName);
 
-$startTime = time();
-$hmc = new HMC($dbPath, $clusterName);
-
-// Get info about all nodes from hosts file 
-// the host file has been pruned by the previous stage of addNodes
-$goodHosts = readHostsFile($readFromFile);
-$goodHosts = convertToLowerCase($goodHosts);
-
-$logger->log_debug("goodHosts: ".json_encode($goodHosts));
-
-/////// Insert roles for these nodes ////////
-foreach ($components as $componentName) {
-  $addHostsToComponentResult = $dbHandle->addHostsToComponent($clusterName, $componentName, $goodHosts, "UNKNOWN", "UNKNOWN");
-  if ($addHostsToComponentResult["result"] != 0 ) {
-    $logger->log_error("Got error adding component $componentName :" .$addHostsToComponentResult["error"]);
-    print json_encode($addHostsToComponentResult);
-    return false;
+  // Get info about all nodes from hosts file 
+  // the host file has been pruned by the previous stage of addNodes
+  $goodHosts = readHostsFile($readFromFile);
+  $goodHosts = convertToLowerCase($goodHosts);
+
+  $logger->log_debug("goodHosts: ".json_encode($goodHosts));
+
+  /////// Insert roles for these nodes ////////
+  foreach ($components as $componentName) {
+    $addHostsToComponentResult = $dbAccessor->addHostsToComponent($clusterName, $componentName, $goodHosts, "UNKNOWN", "UNKNOWN");
+    if ($addHostsToComponentResult["result"] != 0 ) {
+      $logger->log_error("Got error adding component $componentName :" .$addHostsToComponentResult["error"]);
+      print json_encode($addHostsToComponentResult);
+      return;
+    }
   }
-}
 
-$result = $hmc->deployNodes($goodHosts);
-//print_r($result);
+  $deployAddedNodesResult = $hmc->deployNodes($goodHosts);
 
-//assert($result["result"] == 0);
-assert(isset($result["txnId"]));
+  $txnId = $deployAddedNodesResult["txnId"];
+
+  /* (And when we kick off the node addition is the only time to update the 
+   * state of the cluster). 
+   */
+  $state = "NODE_ADDITION_IN_PROGRESS";
+  $displayName = "Node addition in progress";
+  $context = array (
+    'txnId' => $txnId,
+    /* We've come here only if the cluster is in the "DEPLOYED" state, so the 
+     * state we stash is the state at the end of the deploy - we'll restore 
+     * this state at the end of the service management action.
+     */
+    'stashedDeployState' => $clusterState
+  );
+
+  $retval = updateClusterState($clusterName, $state, $displayName, $context);
+  if ($retval['result'] != 0) {
+    $result = $retval['result'];
+    $error = $retval['error'];
+  }
+}
+/* In case a node addition is already running, just return the txnId 
+ * from the DB instead of kicking off a fresh action - this is so 
+ * we can try and preclude multiple additions occurring in parallel.
+ */
+elseif ($clusterState['state'] == 'NODE_ADDITION_IN_PROGRESS') {
 
-$txnId = $result["txnId"];
+  $txnId = $clusterState['context']['txnId'];
+}
 
 /* Create the output data... */
 $jsonOutput = array(
     'clusterName' => $clusterName,
-    'txnId' => $txnId );
+    'txnId' => $txnId
+  );
 
 /* ...and spit it out. */
 header("Content-type: application/json");
 
-print (json_encode($jsonOutput));
-
-/*
-do {
-  $curTime = time();
-  $progress = $hmc->getProgress($txnId);
-
-  print "Elapsed: " . ($curTime - $startTime) . " seconds \n";
-  print "Progress: \n";
-  print_r($progress);
-
-  print "======================";
-  print(file_get_contents($GLOBALS["puppetManifestDir"]."site.pp"));
-  print "======================";
-
-  if (!is_array($progress)
-      || $progress["result"] != 0
-      || !$progress["processRunning"]) {
-    print "Breaking loop now. Action completed \n";
-    break;
-  }
-} while ( 1 );
-
-print "======================\n";
-print "Getting puppet logs\n";
-print "======================\n";
-$logs = $hmc->getLogs($txnId);
-print_r($logs);
-*/
+print (json_encode(array("result" => $result, "error" => $error, "response" => $jsonOutput)));
 
 ?>

Modified: incubator/ambari/branches/ambari-186/hmc/php/frontend/fetchTxnProgress.php
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/php/frontend/fetchTxnProgress.php?rev=1347356&r1=1347355&r2=1347356&view=diff
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/php/frontend/fetchTxnProgress.php (original)
+++ incubator/ambari/branches/ambari-186/hmc/php/frontend/fetchTxnProgress.php Thu Jun  7 03:29:18 2012
@@ -7,7 +7,7 @@ include_once '../util/clusterState.php';
 include_once "uninstallCleanup.php";
 include_once "deployPostProcess.php";
 include_once "uninstallCleanup.php";
-include_once "manageServicesPostProcess.php";
+include_once "restoreDeployedStatePostProcess.php";
 
 $dbPath = $GLOBALS["DB_PATH"];
 
@@ -21,23 +21,26 @@ $map = array(
   "HMC::deployHDP" => array (
       "deployPostProcess"
   ),
+  "HMC::deployNodes" => array (
+      "restoreDeployedStatePostProcess"
+  ),
   "HMC::uninstallHDP" => array (
       "deBootStrap"
   ),
   "HMC::startAllServices" => array (
-      "manageServicesPostProcess"
+      "restoreDeployedStatePostProcess"
   ),
   "HMC::stopAllServices" => array (
-      "manageServicesPostProcess"
+      "restoreDeployedStatePostProcess"
   ),
   "HMC::startServices" => array (
-      "manageServicesPostProcess"
+      "restoreDeployedStatePostProcess"
   ),
   "HMC::stopServices" => array (
-      "manageServicesPostProcess"
+      "restoreDeployedStatePostProcess"
   ),
   "HMC::reconfigureServices" => array (
-      "manageServicesPostProcess"
+      "restoreDeployedStatePostProcess"
   )
 );
 

Added: incubator/ambari/branches/ambari-186/hmc/php/frontend/restoreDeployedStatePostProcess.php
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/ambari-186/hmc/php/frontend/restoreDeployedStatePostProcess.php?rev=1347356&view=auto
==============================================================================
--- incubator/ambari/branches/ambari-186/hmc/php/frontend/restoreDeployedStatePostProcess.php (added)
+++ incubator/ambari/branches/ambari-186/hmc/php/frontend/restoreDeployedStatePostProcess.php Thu Jun  7 03:29:18 2012
@@ -0,0 +1,67 @@
+<?php
+
+include_once '../util/Logger.php';
+include_once '../conf/Config.inc';
+include_once 'localDirs.php';
+include_once "../util/lock.php";
+include_once '../db/HMCDBAccessor.php';
+include_once '../util/clusterState.php';
+
+include_once 'commandUtils.php';
+include_once "../util/HMCTxnUtils.php";
+
+// common post process function for manage services, post deploy add nodes
+// Updates state back to DEPLOYED and associated success/failure
+function restoreDeployedStatePostProcess($clusterName, $user, $txnId, $progress)
+{
+  $logger = new HMCLogger("ManageServicesPostProcess");
+  $dbAccessor = new HMCDBAccessor($GLOBALS["DB_PATH"]);
+
+  $result = 0;
+  $error = "";
+
+  /* Safe fallbacks, in case the call to getClusterState() below fails. */
+  $state = "DEPLOYED";
+  $displayName = "Deployed successfully";
+  $context = array (
+    'status' => TRUE
+  );
+
+
+  LockAcquire(HMC_CLUSTER_STATE_LOCK_FILE_SUFFIX);
+  $clusterStateResponse = $dbAccessor->getClusterState($clusterName);
+  LockRelease(HMC_CLUSTER_STATE_LOCK_FILE_SUFFIX);
+
+  if ($clusterStateResponse['result'] != 0) {
+    $logger->log_error("Failed to fetch cluster state (for restoration of stashed state)");
+
+    $result = $clusterStateResponse["result"];
+    $error = $clusterStateResponse["error"];
+  }
+  else {
+    $clusterState = json_decode($clusterStateResponse['state'], true);
+
+    $stashedDeployState = $clusterState["context"]["stashedDeployState"]; 
+    /* Restore the cluster's state to that stashed at the time of beginning the
+     * service management. 
+     */
+    $state = $stashedDeployState["state"];
+    $displayName = $stashedDeployState["displayName"];
+    $context = $stashedDeployState["context"];
+  }
+
+  // update state of the cluster 
+  LockAcquire(HMC_CLUSTER_STATE_LOCK_FILE_SUFFIX);
+  $retval = updateClusterState($clusterName, $state, $displayName, $context);
+  LockRelease(HMC_CLUSTER_STATE_LOCK_FILE_SUFFIX);
+
+  if ($retval['result'] != 0) {
+    $logger->log_error("Update cluster state failed");
+    $result = $retval['result'];
+    $error = $retval['error'];
+  }
+
+  return (array("result" => $result, "error" => $error));
+}
+
+?>