瀏覽代碼

AMBARI-12890: Ambari Server and Agent should be more resilent when disk full (Nahappan Somasundaram via jluniya)

Jayush Luniya 10 年之前
父節點
當前提交
c472279bf6

+ 8 - 1
ambari-common/src/main/python/resource_management/libraries/script/script.py

@@ -95,6 +95,7 @@ class Script(object):
   basedir = ""
   stroutfile = ""
   logging_level = ""
+  logger = None
 
   # Class variable
   tmp_dir = ""
@@ -110,7 +111,12 @@ class Script(object):
     Script.structuredOut = {}
     if os.path.exists(self.stroutfile):
       with open(self.stroutfile, 'r') as fp:
-        Script.structuredOut = json.load(fp)
+        try:
+          Script.structuredOut = json.load(fp)
+        except Exception:
+          errMsg = 'Unable to read structured output from ' + self.stroutfile
+          self.logger.warn(errMsg)
+          pass
 
     # version is only set in a specific way and should not be carried 
     if "version" in Script.structuredOut:
@@ -178,6 +184,7 @@ class Script(object):
      print USAGE.format(os.path.basename(sys.argv[0])) # print to stdout
      sys.exit(1)
 
+    self.logger = logger
     self.command_name = str.lower(sys.argv[1])
     self.command_data_file = sys.argv[2]
     self.basedir = sys.argv[3]

+ 15 - 0
ambari-server/src/test/python/stacks/2.0.6/FLUME/test_flume.py

@@ -163,6 +163,21 @@ class TestFlumeHandler(RMFTestCase):
 
    self.assertFalse("version" in script.structuredOut)
 
+  @patch("resource_management.libraries.script.Script.logger", autospec = True)
+  def test_bad_struct_out(self, logger_mock):
+      from resource_management.libraries.script import Script
+
+      logger_mock.warn = MagicMock()
+
+      configs_path = os.path.join(RMFTestCase.get_src_folder(),
+                                  "test/python/stacks", self.STACK_VERSION, "configs")
+
+      script = Script()
+      script.stroutfile = os.path.join(configs_path, "structured-out-status-bad.json")
+      script.load_structured_out()
+
+      self.assertTrue(logger_mock.warn.called)
+      self.assertTrue(script.structuredOut == {})
 
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("glob.glob")

+ 1 - 0
ambari-server/src/test/python/stacks/2.0.6/configs/structured-out-status-bad.json

@@ -0,0 +1 @@
+{"securityState" : "UNKNOWN