Repository: ambari
Updated Branches:
  refs/heads/trunk 173a54efe -> b0740f535


AMBARI-2475. Ambari bootstrap actions report success even if a failure 
happened. (Ximo Guanter via mahadev)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b0740f53
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b0740f53
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b0740f53

Branch: refs/heads/trunk
Commit: b0740f535e4dee688468e29fc2b70a5572595d31
Parents: 173a54e
Author: Mahadev Konar <[email protected]>
Authored: Sun Mar 2 17:24:16 2014 -0800
Committer: Mahadev Konar <[email protected]>
Committed: Sun Mar 2 17:24:16 2014 -0800

----------------------------------------------------------------------
 .../ambari/server/bootstrap/BSRunner.java       |  6 +++
 .../ambari/server/bootstrap/BootStrapTest.java  | 52 ++++++++++++++++++++
 2 files changed, 58 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b0740f53/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java 
b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
index 6ddcaf1..f4ccbca 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
@@ -302,6 +302,12 @@ class BSRunner extends Thread {
     finally {
       /* get the bstatus */
       BootStrapStatus tmpStatus = bsImpl.getStatus(requestId);
+      for (BSHostStatus hostStatus : tmpStatus.getHostsStatus()) {
+        if ("FAILED".equals(hostStatus.getStatus())) {
+          stat = BSStat.ERROR;
+          break;
+        }
+      }
       tmpStatus.setLog(scriptlog);
       tmpStatus.setStatus(stat);
       bsImpl.updateStatus(requestId, tmpStatus);

http://git-wip-us.apache.org/repos/asf/ambari/blob/b0740f53/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
index c049d89..9116b9d 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
@@ -103,6 +103,58 @@ public class BootStrapTest extends TestCase {
     Assert.assertFalse(new File(bootdir + File.separator + "1" + 
File.separator + "host_pass").exists());
   }
 
+    @Test
+    public void testHostFailure() throws Exception {
+        Properties properties = new Properties();
+        String bootdir =  temp.newFolder("bootdir").toString();
+        String metadetadir =  temp.newFolder("metadetadir").toString();
+        String serverVersionFilePath =  
temp.newFolder("serverVersionFilePath").toString();
+        LOG.info("Bootdir is " + bootdir);
+        LOG.info("Metadetadir is " + metadetadir);
+        LOG.info("ServerVersionFilePath is " + serverVersionFilePath);
+        properties.setProperty(Configuration.BOOTSTRAP_DIR,
+                bootdir);
+        properties.setProperty(Configuration.BOOTSTRAP_SCRIPT, "echo");
+        properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, "target" + 
File.separator + "classes");
+        properties.setProperty(Configuration.METADETA_DIR_PATH, metadetadir);
+        properties.setProperty(Configuration.SERVER_VERSION_FILE, 
serverVersionFilePath);
+        Configuration conf = new Configuration(properties);
+        AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(conf);
+        BootStrapImpl impl = new BootStrapImpl(conf, ambariMetaInfo);
+        impl.init();
+        SshHostInfo info = new SshHostInfo();
+        info.setSshKey("xyz");
+        ArrayList<String> hosts = new ArrayList<String>();
+        hosts.add("host1");
+        hosts.add("host2");
+        info.setHosts(hosts);
+        info.setUser("user");
+        info.setPassword("passwd");
+        BSResponse response = impl.runBootStrap(info);
+        long requestId = response.getRequestId();
+        LOG.info("Response id from bootstrap " + requestId);
+    /* create failed done file for host1 */
+        File requestDir = new File(bootdir, Long.toString(requestId));
+        FileUtils.writeStringToFile(new File(requestDir, "host1.done"), "0");
+        FileUtils.writeStringToFile(new File(requestDir, "host2.done"), "1");
+    /* do a query */
+        BootStrapStatus status = impl.getStatus(response.getRequestId());
+        LOG.info("Status " + status.getStatus());
+        int num = 0;
+        while ((status.getStatus() != BSStat.ERROR) && (num < 10000)) {
+            status = impl.getStatus(response.getRequestId());
+            Thread.sleep(100);
+            num++;
+        }
+        LOG.info("Status: log " + status.getLog() + " status=" + 
status.getStatus()
+        );
+    /* Note its an echo command so it should echo host1,host2 */
+        Assert.assertTrue(status.getLog().contains("host1,host2"));
+        Assert.assertEquals(BSStat.ERROR, status.getStatus());
+        Assert.assertEquals("DONE", 
status.getHostsStatus().get(0).getStatus());
+        Assert.assertEquals("FAILED", 
status.getHostsStatus().get(1).getStatus());
+    }
+
 
   @Test
   public void testPolling() throws Exception {

Reply via email to