Quellcode durchsuchen

AMBARI-6808. Make getting AmbariConfigs properties more robust when called by DataCleaner.py (Alejandro Fernandez via ncole)

Nate Cole vor 10 Jahren
Ursprung
Commit
62fb70e150

+ 7 - 2
ambari-agent/src/main/python/ambari_agent/AmbariConfig.py

@@ -237,8 +237,13 @@ class AmbariConfig:
     self.net = NetUtil()
     self.config.readfp(StringIO.StringIO(content))
 
-  def get(self, section, value):
-    return self.config.get(section, value)
+  def get(self, section, value, default=None):
+    try:
+      return self.config.get(section, value)
+    except ConfigParser.Error, err:
+      if default:
+        return default
+      raise err
 
   def set(self, section, option, value):
     self.config.set(section, option, value)

+ 3 - 3
ambari-agent/src/main/python/ambari_agent/DataCleaner.py

@@ -36,21 +36,21 @@ class DataCleaner(threading.Thread):
     logger.info('Data cleanup thread started')
     self.config = config
 
-    self.file_max_age = config.get('agent','data_cleanup_max_age')
+    self.file_max_age = config.get('agent', 'data_cleanup_max_age', 86400)
     self.file_max_age = int(self.file_max_age) if self.file_max_age else None
     if self.file_max_age is None or self.file_max_age < 86400:       # keep for at least 24h
       logger.warn('The minimum value allowed for data_cleanup_max_age is 1 '
                   'day. Setting data_cleanup_max_age to 86400.')
       self.file_max_age = 86400
 
-    self.cleanup_interval = config.get('agent','data_cleanup_interval')
+    self.cleanup_interval = config.get('agent', 'data_cleanup_interval', 3600)
     self.cleanup_interval = int(self.cleanup_interval) if self.cleanup_interval else None
     if self.cleanup_interval is None or self.cleanup_interval < 3600:    # wait at least 1 hour between runs
       logger.warn('The minimum value allowed for data_cleanup_interval is 1 '
                   'hour. Setting data_cleanup_interval to 3600.')
       self.cleanup_interval = 3600
 
-    self.cleanup_max_size_MB = config.get('agent', 'data_cleanup_max_size_MB')
+    self.cleanup_max_size_MB = config.get('agent', 'data_cleanup_max_size_MB', 10000)
     self.cleanup_max_size_MB = int(self.cleanup_max_size_MB) if self.cleanup_max_size_MB else None
     if self.cleanup_max_size_MB is None or self.cleanup_max_size_MB > 10000:  # no more than 10 GBs
       logger.warn('The maximum value allowed for cleanup_max_size_MB is 10000 MB (10 GB). '

+ 15 - 0
ambari-agent/src/test/python/ambari_agent/TestDataCleaner.py

@@ -22,6 +22,7 @@ limitations under the License.
 import unittest
 from mock.mock import patch, MagicMock, call, Mock
 from ambari_agent import DataCleaner
+import AmbariConfig
 
 
 class TestDataCleaner(unittest.TestCase):
@@ -41,6 +42,20 @@ class TestDataCleaner(unittest.TestCase):
     cleaner = DataCleaner.DataCleaner(config)
     self.assertFalse(DataCleaner.logger.warn.called)
 
+  def test_config(self):
+    """
+    Verify that if the config does not have a property, default values are used.
+    """
+    DataCleaner.logger.reset_mock()
+    config = AmbariConfig.AmbariConfig()
+    config.remove_option('agent', 'data_cleanup_max_age')
+    config.remove_option('agent', 'data_cleanup_interval')
+    config.remove_option('agent', 'data_cleanup_max_size_MB')
+    cleaner = DataCleaner.DataCleaner(config)
+
+    self.assertEqual(cleaner.file_max_age, 86400)
+    self.assertEqual(cleaner.cleanup_interval, 3600)
+    self.assertEqual(cleaner.cleanup_max_size_MB, 10000)
 
   def test_init_warn(self):
     config = MagicMock()