Selaa lähdekoodia

AMBARI-10819 Ambari bootstrap: Premature Agent shutdown may lead to Agent stall

Removed the agent stop invocation. The agent restarts now only after all the bits have been deployed.
Florian Barca 10 vuotta sitten
vanhempi
commit
2be054d180

+ 4 - 2
ambari-agent/conf/unix/ambari-agent

@@ -220,8 +220,10 @@ case "$1" in
         ;;
   restart)
         echo -e "Restarting $AMBARI_AGENT"
-        $0 stop
-        $0 start "$@"
+        scriptpath=$0
+        $scriptpath stop
+        shift
+        $scriptpath start "$@"
         retcode=$?
         ;;
   reset)

+ 8 - 7
ambari-server/src/main/python/setupAgent.py

@@ -182,21 +182,22 @@ def runAgent(passPhrase, expected_hostname, user_run_as, verbose, ret=None):
   return {"exitstatus": agent_retcode, "log": log}
 
 @OsFamilyFuncImpl(OSConst.WINSRV_FAMILY)
-def tryStopAgent():
+def checkVerbose():
   verbose = False
   if os.path.exists(AMBARI_AGENT_INSTALL_SYMLINK):
-    agentStopCmd = ["cmd", "/c", "ambari-agent.cmd", "stop"]
-    execOsCommand(agentStopCmd, tries=3, try_sleep=10, cwd=AMBARI_AGENT_INSTALL_SYMLINK)
+    agentStatusCmd = ["cmd", "/c", "ambari-agent.cmd", "status"]
+    ret = execOsCommand(agentStatusCmd, tries=3, try_sleep=10, cwd=AMBARI_AGENT_INSTALL_SYMLINK)
+    if ret["exitstatus"] == 0 and ret["log"][0].find("running") != -1:
+      verbose = True
   return verbose
 
 @OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
-def tryStopAgent():
+def checkVerbose():
   verbose = False
   cmds = ["bash", "-c", "ps aux | grep 'AmbariAgent.py' | grep ' \-v'"]
   cmdl = ["bash", "-c", "ps aux | grep 'AmbariAgent.py' | grep ' \--verbose'"]
   if execOsCommand(cmds)["exitstatus"] == 0 or execOsCommand(cmdl)["exitstatus"] == 0:
     verbose = True
-  subprocess.call("/usr/sbin/ambari-agent stop", shell=True)
   return verbose
 
 @OsFamilyFuncImpl(OSConst.WINSRV_FAMILY)
@@ -362,9 +363,9 @@ def run_setup(argv=None):
   return runAgent(passPhrase, expected_hostname, user_run_as, verbose)
 
 def main(argv=None):
-  #Try stop agent and check --verbose option if agent already run
+  #Check --verbose option if agent already running
   global verbose
-  verbose = tryStopAgent()
+  verbose = checkVerbose()
   if verbose:
     exitcode = run_setup(argv)
   else:

+ 3 - 3
ambari-server/src/test/python/TestSetupAgent.py

@@ -252,7 +252,7 @@ class TestSetupAgent(TestCase):
     self.assertFalse(setup_agent.execOsCommand("hostname -f") == None)
 
   @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch.object(setup_agent, 'tryStopAgent')
+  @patch.object(setup_agent, 'checkVerbose')
   @patch.object(setup_agent, 'isAgentPackageAlreadyInstalled')
   @patch.object(setup_agent, 'runAgent')
   @patch.object(setup_agent, 'configureAgent')
@@ -267,14 +267,14 @@ class TestSetupAgent(TestCase):
   def test_setup_agent_main(self, dirname_mock, realpath_mock, exit_mock, checkServerReachability_mock,
                             getOptimalVersion_mock, is_ubuntu_family_mock, is_suse_family_mock,
                             installAgent_mock, configureAgent_mock, runAgent_mock,
-                            isAgentPackageAlreadyInstalled_mock, tryStopAgent_mock):
+                            isAgentPackageAlreadyInstalled_mock, checkVerbose_mock):
     checkServerReachability_mock.return_value = {'log': 'log', 'exitstatus': 0}
     installAgent_mock.return_value = {'log': 'log', 'exitstatus': 0}
     configureAgent_mock.return_value = {'log': 'log', 'exitstatus': 0}
     runAgent_mock.return_value = {'log': 'log', 'exitstatus': 0}
     getOptimalVersion_mock.return_value = {'log': '1.1.2, 1.1.3, ', 'exitstatus': 1}
     ret = setup_agent.main(("setupAgent.py","agents_host","password", "server_hostname","1.1.1","8080"))
-    self.assertTrue(tryStopAgent_mock.called)
+    self.assertTrue(checkVerbose_mock.called)
     self.assertFalse(exit_mock.called)
     self.assertTrue("exitstatus" in ret)
     self.assertEqual(ret["exitstatus"], 1)