Просмотр исходного кода

AMBARI-17524. Falcon start fails rarely (aonishuk)

Andrew Onishuk 9 лет назад
Родитель
Сommit
0f04bb0870

+ 7 - 1
ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py

@@ -31,6 +31,7 @@ from resource_management.libraries.script import Script
 from resource_management.libraries.resources import PropertiesFile
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions.show_logs import show_logs
+from resource_management.libraries.functions import get_user_call_output
 from resource_management.core.logger import Logger
 
 from ambari_commons import OSConst
@@ -186,12 +187,17 @@ def falcon(type, action = None, upgrade_type=None):
     # hadoop home directory to use
     environment_dictionary = { "HADOOP_HOME" : params.hadoop_home_dir }
 
+    pid = get_user_call_output.get_user_call_output(format("cat {server_pid_file}"), user=params.falcon_user, is_checked_call=False)[1]
+    process_exists = format("ls {server_pid_file} && ps -p {pid}")
+
     if action == 'start':
       try:
         Execute(format('{falcon_home}/bin/falcon-start -port {falcon_port}'),
           user = params.falcon_user,
           path = params.hadoop_bin_dir,
-          environment=environment_dictionary)
+          environment=environment_dictionary,
+          not_if = process_exists,
+        )
       except:
         show_logs(params.falcon_log_dir, params.falcon_user)
         raise

+ 4 - 1
ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py

@@ -46,7 +46,9 @@ class TestFalconServer(RMFTestCase):
     self.assertResourceCalled('Execute', '/usr/lib/falcon/bin/falcon-start -port 15000',
       path = ['/usr/bin'],
       user = 'falcon',
-      environment = {'HADOOP_HOME': '/usr/lib/hadoop'})
+      environment = {'HADOOP_HOME': '/usr/lib/hadoop'},
+      not_if = 'ls /var/run/falcon/falcon.pid && ps -p ',
+    )
 
     self.assertNoMoreResources()
 
@@ -370,6 +372,7 @@ class TestFalconServer(RMFTestCase):
         environment = {'HADOOP_HOME': '/usr/hdp/current/hadoop-client'},
         path = ['/usr/hdp/current/hadoop-client/bin'],
         user = 'falcon',
+        not_if = 'ls /var/run/falcon/falcon.pid && ps -p ',
     )
     self.assertNoMoreResources()