Selaa lähdekoodia

AMBARI-2734. ambari-agent is logging too much status check details every minute. (Andrew Onischuk via smohanty)

Sumit Mohanty 12 vuotta sitten
vanhempi
commit
c48c649f27

+ 6 - 4
ambari-agent/src/main/python/ambari_agent/StatusCheck.py

@@ -31,6 +31,7 @@ logger = logging.getLogger()
 class StatusCheck:
     
   USER_PATTERN='{USER}'
+  firstInit = True
 
   def listFiles(self, dir):
     basedir = dir
@@ -79,9 +80,6 @@ class StatusCheck:
     for pidPath in self.pidPathes:
       self.listFiles(pidPath)
 
-    logger.info('serToPidDict:')
-    logger.info(self.serToPidDict.items())
-
     for service, pid in self.serToPidDict.items():
       if self.servicesToLinuxUser.has_key(service):
         linuxUserKey = self.servicesToLinuxUser[service]
@@ -92,7 +90,11 @@ class StatusCheck:
         if self.USER_PATTERN in pid:
           logger.error('There is no linux user mapping for component: ' + service)
 
-    logger.debug('Service to pid dictionary: ' + str(self.serToPidDict))
+    if StatusCheck.firstInit:
+      logger.info('Service to pid dictionary: ' + str(self.serToPidDict))
+      StatusCheck.firstInit = False
+    else:
+      logger.debug('Service to pid dictionary: ' + str(self.serToPidDict))
 
   def getIsLive(self, pidPath):
 

+ 20 - 0
ambari-agent/src/test/python/TestStatusCheck.py

@@ -93,6 +93,26 @@ class TestStatusCheck(TestCase):
     
     status = statusCheck.getStatus(COMPONENT_LIVE)
     self.assertEqual(status, True)
+    
+  @patch.object(logger, 'info')
+  def test_dont_relog_serToPidDict(self, logger_info_mock):
+    TestStatusCheck.timesLogged = 0
+    
+    def my_side_effect(*args, **kwargs):
+      TestStatusCheck.timesLogged += args[0].find('Service to pid dictionary: ')+1
+      
+
+    logger_info_mock.side_effect = my_side_effect
+    
+    # call this three times
+    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathesVars,
+      self.globalConfig, self.servicesToLinuxUser)
+    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathesVars,
+      self.globalConfig, self.servicesToLinuxUser)
+    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathesVars,
+      self.globalConfig, self.servicesToLinuxUser)
+    # and really only once logged        
+    self.assertEqual(TestStatusCheck.timesLogged, 1)
 
   # Ensure that status checker return True for running process even if multiple
   # pids for a service component exist