Browse Source

AMBARI-5957. Bootstrap API call says bootstrap is running even though all agents have installed and registered (dlysnichenko)

Lisnichenko Dmitro 11 years ago
parent
commit
7360a79b7a

+ 10 - 16
ambari-server/src/main/python/setupAgent.py

@@ -66,23 +66,17 @@ def runAgent(passPhrase, expected_hostname):
   os.environ[AMBARI_PASSPHRASE_VAR] = passPhrase
   agent_retcode = subprocess.call("/usr/sbin/ambari-agent restart --expected-hostname=" +
                                   expected_hostname, shell=True)
-  # need this, because, very rarely,
-  # main.py(ambari-agent) starts a bit later then it should be started
-  time.sleep(1)
-  try:
+  for i in range(3):
+    time.sleep(1)
     ret = execOsCommand(["tail", "-20", "/var/log/ambari-agent/ambari-agent.log"])
-    try:
-      log = ret['log']
-    except Exception:
-      log = "Log not found"
-    print log
-    if not 0 == ret['exitstatus']:
-      return ret['exitstatus']
-
-    return agent_retcode
-  except (Exception):
-    return 1
-
+    if (not ret is None) and (0 == ret['exitstatus']):
+      try:
+        log = ret['log']
+      except Exception:
+        log = "Log not found"
+      print log
+      return agent_retcode
+  return agent_retcode
 
 def getOptimalVersion(initialProjectVersion):
   optimalVersion = initialProjectVersion

+ 7 - 1
ambari-server/src/test/python/TestSetupAgent.py

@@ -67,18 +67,24 @@ class TestSetupAgent(TestCase):
     self.assertTrue(expected_hostname in cmdStr)
     self.assertEqual(ret, 0)
     self.assertTrue(sleep_mock.called)
+    self.assertEqual(execOsCommand_mock.call_count, 1)
+    execOsCommand_mock.reset_mock()
     # Key 'log' not found
     execOsCommand_mock.return_value = None
     ret = setup_agent.runAgent(passphrase, expected_hostname)
     cmdStr = str(call_mock.call_args_list[0][0])
     self.assertTrue(expected_hostname in cmdStr)
-    self.assertEqual(ret, 1)
+    self.assertEqual(ret, 0)
+    self.assertEqual(execOsCommand_mock.call_count, 3)
+    execOsCommand_mock.reset_mock()
     # Retcode id not 0
+    call_mock.return_value = 2
     execOsCommand_mock.return_value = {'log': 'log', 'exitstatus': 2}
     ret = setup_agent.runAgent(passphrase, expected_hostname)
     cmdStr = str(call_mock.call_args_list[0][0])
     self.assertTrue(expected_hostname in cmdStr)
     self.assertEqual(ret, 2)
+    execOsCommand_mock.reset_mock()
 
   @patch.object(setup_agent, 'getAvaliableAgentPackageVersions')
   @patch('common_functions.OSCheck.is_suse_family')