You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2017/10/03 13:16:56 UTC

ambari git commit: AMBARI-20634. Cleanup unused files and data in ambari-agent code (aonishuk)

Repository: ambari
Updated Branches:
  refs/heads/trunk 5b36cdfd8 -> c28b797d2


AMBARI-20634. Cleanup unused files and data in ambari-agent code (aonishuk)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c28b797d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c28b797d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c28b797d

Branch: refs/heads/trunk
Commit: c28b797d2723ee11725db2b68c7ae0cabda5bc25
Parents: 5b36cdf
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Oct 3 16:14:20 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Oct 3 16:14:20 2017 +0300

----------------------------------------------------------------------
 .../main/python/ambari_agent/AmbariConfig.py    |  74 +-------
 .../main/python/ambari_agent/ProcessHelper.py   |  71 --------
 .../src/main/python/ambari_agent/StatusCheck.py | 142 ---------------
 .../src/main/python/ambari_agent/main.py        |  12 +-
 .../src/test/python/ambari_agent/TestMain.py    |   8 +-
 .../python/ambari_agent/TestProcessHelper.py    |  70 --------
 .../test/python/ambari_agent/TestStatusCheck.py | 180 -------------------
 7 files changed, 14 insertions(+), 543 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py b/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
index 95e4712..fcbc21c 100644
--- a/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
+++ b/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
@@ -30,6 +30,9 @@ from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 
 logger = logging.getLogger(__name__)
 
+"""
+The below config is necessary only for unit tests.
+"""
 content = """
 
 [server]
@@ -75,77 +78,6 @@ log_command_executes = 0
 
 """.format(ps=os.sep)
 
-servicesToPidNames = {
-  'GLUSTERFS': 'glusterd.pid$',
-  'NAMENODE': 'hadoop-{USER}-namenode.pid$',
-  'SECONDARY_NAMENODE': 'hadoop-{USER}-secondarynamenode.pid$',
-  'DATANODE': 'hadoop-{USER}-datanode.pid$',
-  'JOBTRACKER': 'hadoop-{USER}-jobtracker.pid$',
-  'TASKTRACKER': 'hadoop-{USER}-tasktracker.pid$',
-  'RESOURCEMANAGER': 'yarn-{USER}-resourcemanager.pid$',
-  'NODEMANAGER': 'yarn-{USER}-nodemanager.pid$',
-  'HISTORYSERVER': 'mapred-{USER}-historyserver.pid$',
-  'JOURNALNODE': 'hadoop-{USER}-journalnode.pid$',
-  'ZKFC': 'hadoop-{USER}-zkfc.pid$',
-  'OOZIE_SERVER': 'oozie.pid',
-  'ZOOKEEPER_SERVER': 'zookeeper_server.pid',
-  'FLUME_SERVER': 'flume-node.pid',
-  'TEMPLETON_SERVER': 'templeton.pid',
-  'HBASE_MASTER': 'hbase-{USER}-master.pid',
-  'HBASE_REGIONSERVER': 'hbase-{USER}-regionserver.pid',
-  'HCATALOG_SERVER': 'webhcat.pid',
-  'KERBEROS_SERVER': 'kadmind.pid',
-  'HIVE_SERVER': 'hive-server.pid',
-  'HIVE_METASTORE': 'hive.pid',
-  'HIVE_SERVER_INTERACTIVE': 'hive-interactive.pid',
-  'MYSQL_SERVER': 'mysqld.pid',
-  'HUE_SERVER': '/var/run/hue/supervisor.pid',
-  'WEBHCAT_SERVER': 'webhcat.pid',
-}
-
-# Each service, which's pid depends on user should provide user mapping
-servicesToLinuxUser = {
-  'NAMENODE': 'hdfs_user',
-  'SECONDARY_NAMENODE': 'hdfs_user',
-  'DATANODE': 'hdfs_user',
-  'JOURNALNODE': 'hdfs_user',
-  'ZKFC': 'hdfs_user',
-  'JOBTRACKER': 'mapred_user',
-  'TASKTRACKER': 'mapred_user',
-  'RESOURCEMANAGER': 'yarn_user',
-  'NODEMANAGER': 'yarn_user',
-  'HISTORYSERVER': 'mapred_user',
-  'HBASE_MASTER': 'hbase_user',
-  'HBASE_REGIONSERVER': 'hbase_user',
-}
-
-pidPathVars = [
-  {'var': 'glusterfs_pid_dir_prefix',
-   'defaultValue': '/var/run'},
-  {'var': 'hadoop_pid_dir_prefix',
-   'defaultValue': '/var/run/hadoop'},
-  {'var': 'hadoop_pid_dir_prefix',
-   'defaultValue': '/var/run/hadoop'},
-  {'var': 'hbase_pid_dir',
-   'defaultValue': '/var/run/hbase'},
-  {'var': 'zk_pid_dir',
-   'defaultValue': '/var/run/zookeeper'},
-  {'var': 'oozie_pid_dir',
-   'defaultValue': '/var/run/oozie'},
-  {'var': 'hcat_pid_dir',
-   'defaultValue': '/var/run/webhcat'},
-  {'var': 'hive_pid_dir',
-   'defaultValue': '/var/run/hive'},
-  {'var': 'mysqld_pid_dir',
-   'defaultValue': '/var/run/mysqld'},
-  {'var': 'hcat_pid_dir',
-   'defaultValue': '/var/run/webhcat'},
-  {'var': 'yarn_pid_dir_prefix',
-   'defaultValue': '/var/run/hadoop-yarn'},
-  {'var': 'mapred_pid_dir_prefix',
-   'defaultValue': '/var/run/hadoop-mapreduce'},
-]
-
 
 class AmbariConfig:
   TWO_WAY_SSL_PROPERTY = "security.server.two_way_ssl"

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/main/python/ambari_agent/ProcessHelper.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/ProcessHelper.py b/ambari-agent/src/main/python/ambari_agent/ProcessHelper.py
deleted file mode 100644
index bc2f827..0000000
--- a/ambari-agent/src/main/python/ambari_agent/ProcessHelper.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python
-
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
-
-import os
-import logging
-import traceback
-import sys
-from ambari_commons.shell import getTempFiles
-
-logger = logging.getLogger()
-
-if 'AMBARI_PID_DIR' in os.environ:
-    piddir = os.environ['AMBARI_PID_DIR']
-else:
-    piddir = "/var/run/ambari-agent"
-
-pidfile = os.path.join(piddir, "ambari-agent.pid")
-
-
-def _clean():
-  logger.info("Removing pid file")
-  try:
-    os.unlink(pidfile)
-  except Exception as ex:
-    traceback.print_exc()
-    logger.warn("Unable to remove pid file: %s", ex)
-
-  logger.info("Removing temp files")
-  for f in getTempFiles():
-    if os.path.exists(f):
-      try:
-        os.unlink(f)
-      except Exception as ex:
-        traceback.print_exc()
-        logger.warn("Unable to remove: %s, %s", f, ex)
-
-
-def stopAgent():
-  _clean()
-  sys.exit(0)
-
-
-def restartAgent():
-  _clean()
-
-  executable = sys.executable
-  args = sys.argv[:]
-  args.insert(0, executable)
-
-  logger.info("Restarting self: %s %s", executable, args)
-
-  os.execvp(executable, args)
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/main/python/ambari_agent/StatusCheck.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/StatusCheck.py b/ambari-agent/src/main/python/ambari_agent/StatusCheck.py
deleted file mode 100644
index 5231f72..0000000
--- a/ambari-agent/src/main/python/ambari_agent/StatusCheck.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env python
-
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
-
-import logging
-import os
-import re
-import string
-from ambari_commons.shell import shellRunner
-
-
-logger = logging.getLogger()
-
-
-class StatusCheck:
-    
-  USER_PATTERN='{USER}'
-  firstInit = True
-
-  def listFiles(self, dir):
-    basedir = dir
-    logger.debug("Files in " + os.path.abspath(dir) + ": ")
-    subdirlist = []
-    try:
-      if os.path.isdir(dir):
-        for item in os.listdir(dir):
-            if os.path.isfile(item) and item.endswith('.pid'):
-              self.pidFilesDict[item.split(os.sep).pop()] = os.getcwd() + os.sep + item
-            else:
-              subdirlist.append(os.path.join(basedir, item))
-        for subdir in subdirlist:
-            self.listFiles(subdir)
-      else:
-        if dir.endswith('.pid'):
-          self.pidFilesDict[dir.split(os.sep).pop()] = dir
-    except OSError as e:
-      logger.info(e.strerror + ' to ' + e.filename)
-      
-  def fillDirValues(self):
-    try:
-      for pidVar in self.pidPathVars:
-        pidVarName = pidVar['var']
-        pidDefaultvalue = pidVar['defaultValue']
-        if self.globalConfig.has_key(pidVarName):
-          self.pidPathes.append(self.globalConfig[pidVarName])
-        else:
-          self.pidPathes.append(pidDefaultvalue)
-    except Exception as e:
-        logger.error("Error while filling directories values " + str(e))
-        
-  def __init__(self, serviceToPidDict, pidPathVars, globalConfig,
-    servicesToLinuxUser):
-    
-    self.serToPidDict = serviceToPidDict.copy()
-    self.pidPathVars = pidPathVars
-    self.pidPathes = []
-    self.sh = shellRunner()
-    self.pidFilesDict = {}
-    self.globalConfig = globalConfig
-    self.servicesToLinuxUser = servicesToLinuxUser
-    
-    self.fillDirValues()
-    
-    for pidPath in self.pidPathes:
-      self.listFiles(pidPath)
-
-    for service, pid in self.serToPidDict.items():
-      if self.servicesToLinuxUser.has_key(service):
-        linuxUserKey = self.servicesToLinuxUser[service]
-        if self.globalConfig.has_key(linuxUserKey):
-          self.serToPidDict[service] = string.replace(pid, self.USER_PATTERN,
-            self.globalConfig[linuxUserKey])
-      else:
-        if self.USER_PATTERN in pid:
-          logger.error('There is no linux user mapping for component: ' + service)
-
-    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):
-
-    if not pidPath:
-      return False
-
-    isLive = False
-    pid = -1
-    try:
-      pidFile = open(pidPath, 'r')
-      pid = int(pidFile.readline())
-    except IOError, e:
-      logger.warn("Can not open file " + str(pidPath) + " due to " + str(e))
-      return isLive
-    res = self.sh.run(['ps -p', str(pid), '-f'])
-    lines = res['output'].strip().split(os.linesep)
-    try:
-      procInfo = lines[1]
-      isLive = not procInfo == None
-    except IndexError:
-      logger.info("Process is dead. Checking " + str(pidPath))
-    return isLive
-
-  def getStatus(self, serviceCode):
-    try:
-      pidPath = None
-      pidPattern = self.serToPidDict[serviceCode]
-      logger.debug('pidPattern: ' + pidPattern)
-    except KeyError as e:
-      logger.warn('There is no mapping for ' + serviceCode)
-      return None
-    try:
-      for pidFile in self.pidFilesDict.keys():
-        if re.match(pidPattern, pidFile):
-          pidPath = self.pidFilesDict[pidFile]          
-      logger.debug('pidPath: ' + str(pidPath))
-      result = self.getIsLive(pidPath)
-      return result
-    except KeyError:
-      logger.info('Pid file was not found')
-      return False
-
-  def getSerToPidDict(self):
-    return self.serToPidDict
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/main/python/ambari_agent/main.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/main.py b/ambari-agent/src/main/python/ambari_agent/main.py
index 19c92b0..5fcd051 100644
--- a/ambari-agent/src/main/python/ambari_agent/main.py
+++ b/ambari-agent/src/main/python/ambari_agent/main.py
@@ -89,7 +89,6 @@ import time
 import locale
 import platform
 import ConfigParser
-import ProcessHelper
 import resource
 from logging.handlers import SysLogHandler
 from Controller import Controller
@@ -118,6 +117,9 @@ agentPid = os.getpid()
 # Global variables to be set later.
 home_dir = ""
 
+agent_piddir = os.environ['AMBARI_PID_DIR'] if 'AMBARI_PID_DIR' in os.environ else "/var/run/ambari-agent"
+agent_pidfile = os.path.join(agent_piddir, "ambari-agent.pid")
+
 config = AmbariConfig.AmbariConfig()
 
 # TODO AMBARI-18733, remove this global variable and calculate it based on home_dir once it is set.
@@ -260,8 +262,8 @@ def perform_prestart_checks(expected_hostname):
       logger.error(msg)
       sys.exit(1)
   # Check if there is another instance running
-  if os.path.isfile(ProcessHelper.pidfile) and not OSCheck.get_os_family() == OSConst.WINSRV_FAMILY:
-    print("%s already exists, exiting" % ProcessHelper.pidfile)
+  if os.path.isfile(agent_pidfile) and not OSCheck.get_os_family() == OSConst.WINSRV_FAMILY:
+    print("%s already exists, exiting" % agent_pidfile)
     sys.exit(1)
   # check if ambari prefix exists
   elif config.has_option('agent', 'prefix') and not os.path.isdir(os.path.abspath(config.get('agent', 'prefix'))):
@@ -281,14 +283,14 @@ def perform_prestart_checks(expected_hostname):
 
 def daemonize():
   pid = str(os.getpid())
-  file(ProcessHelper.pidfile, 'w').write(pid)
+  file(agent_pidfile, 'w').write(pid)
 
 def stop_agent():
 # stop existing Ambari agent
   pid = -1
   runner = shellRunner()
   try:
-    with open(ProcessHelper.pidfile, 'r') as f:
+    with open(agent_pidfile, 'r') as f:
       pid = f.read()
     pid = int(pid)
     

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/test/python/ambari_agent/TestMain.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestMain.py b/ambari-agent/src/test/python/ambari_agent/TestMain.py
index a04b85d..504ca08 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestMain.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestMain.py
@@ -224,14 +224,14 @@ class TestMain(unittest.TestCase):
   def test_daemonize_and_stop(self, exists_mock, sleep_mock):
     from ambari_commons.shell import shellRunnerLinux
 
-    oldpid = ProcessHelper.pidfile
+    oldpid = main.agent_pidfile
     pid = str(os.getpid())
     _, tmpoutfile = tempfile.mkstemp()
-    ProcessHelper.pidfile = tmpoutfile
+    main.agent_pidfile = tmpoutfile
 
     # Test daemonization
     main.daemonize()
-    saved = open(ProcessHelper.pidfile, 'r').read()
+    saved = open(main.agent_pidfile, 'r').read()
     self.assertEqual(pid, saved)
 
     main.GRACEFUL_STOP_TRIES = 1
@@ -269,7 +269,7 @@ class TestMain(unittest.TestCase):
                                   call(['ambari-sudo.sh', 'kill', '-9', pid])])
 
     # Restore
-    ProcessHelper.pidfile = oldpid
+    main.pidfile = oldpid
     os.remove(tmpoutfile)
 
   @patch("os.rmdir")

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py b/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
deleted file mode 100644
index f30d45d..0000000
--- a/ambari-agent/src/test/python/ambari_agent/TestProcessHelper.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
-
-import os
-import tempfile
-import unittest
-from mock.mock import patch, MagicMock
-from ambari_agent import ProcessHelper
-
-from only_for_platform import not_for_platform, PLATFORM_WINDOWS
-
-@not_for_platform(PLATFORM_WINDOWS)
-class TestProcessHelper(unittest.TestCase):
-
-  @patch.object(ProcessHelper, "getTempFiles")
-  def test_clean(self, getTempFilesMock):
-
-    tf1 = tempfile.NamedTemporaryFile(delete=False)
-    tf2 = tempfile.NamedTemporaryFile(delete=False)
-    tf3 = tempfile.NamedTemporaryFile(delete=False)
-
-    getTempFilesMock.return_value = [tf2.name, tf3.name]
-    ProcessHelper.pidfile = tf1.name
-    ProcessHelper.logger = MagicMock()
-
-    ProcessHelper._clean()
-
-    self.assertFalse(os.path.exists(tf1.name))
-    self.assertFalse(os.path.exists(tf2.name))
-    self.assertFalse(os.path.exists(tf3.name))
-
-
-  @patch("sys.exit")
-  @patch.object(ProcessHelper, "_clean")
-  def test_stopAgent(self, _clean_mock, sys_exit_mock):
-
-    ProcessHelper.stopAgent()
-    self.assertTrue(_clean_mock.called)
-    self.assertTrue(sys_exit_mock.called)
-
-
-  @patch("os.execvp")
-  @patch.object(ProcessHelper, "_clean")
-  def test_restartAgent(self, _clean_mock, execMock):
-
-    ProcessHelper.logger = MagicMock()
-    ProcessHelper.restartAgent()
-
-    self.assertTrue(_clean_mock.called)
-    self.assertTrue(execMock.called)
-    self.assertEqual(2, len(execMock.call_args_list[0]))
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/c28b797d/ambari-agent/src/test/python/ambari_agent/TestStatusCheck.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestStatusCheck.py b/ambari-agent/src/test/python/ambari_agent/TestStatusCheck.py
deleted file mode 100644
index 34c57cc..0000000
--- a/ambari-agent/src/test/python/ambari_agent/TestStatusCheck.py
+++ /dev/null
@@ -1,180 +0,0 @@
-#!/usr/bin/env python
-
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
-import string
-import random
-import os
-from unittest import TestCase
-from ambari_commons import OSCheck
-from ambari_agent.StatusCheck import StatusCheck
-import logging
-
-from mock.mock import patch
-from mock.mock import MagicMock
-
-from only_for_platform import os_distro_value
-
-USERNAME_LENGTH=10
-USERNAME_CHARS=string.ascii_uppercase +string.ascii_lowercase + string.digits + '-_'
-
-PID_DIR='/pids_dir'
-
-COMPONENT_LIVE = 'LIVE_COMPONENT'
-COMPONENT_LIVE_PID = 'live_' + StatusCheck.USER_PATTERN + '_comp.pid'
-
-COMPONENT_DEAD = 'DEAD_COMPONENT'
-COMPONENT_DEAD_PID = 'dead_' + StatusCheck.USER_PATTERN + '_comp.pid'
-
-class TestStatusCheck(TestCase):
-
-  logger = logging.getLogger()
-
-  def generateUserName(self):
-    return ''.join(random.choice(USERNAME_CHARS) for x in range(USERNAME_LENGTH))
-
-  def setUp(self):
-
-    self.pidPathVars = [
-      {'var' : '',
-      'defaultValue' : PID_DIR}
-    ]
-
-    self.serviceToPidDict = {
-      COMPONENT_LIVE : COMPONENT_LIVE_PID,
-      COMPONENT_DEAD : COMPONENT_DEAD_PID
-    }
-
-    live_user = self.generateUserName()
-    self.logger.info('Live user: ' + live_user)
-    self.live_pid_file_name = string.replace(COMPONENT_LIVE_PID, StatusCheck.USER_PATTERN, live_user)
-    self.live_pid_full_path = PID_DIR + os.sep + self.live_pid_file_name
-
-    dead_user = self.generateUserName()
-    self.logger.info('Dead user: ' + live_user)
-    self.dead_pid_file_name = string.replace(COMPONENT_DEAD_PID, StatusCheck.USER_PATTERN, dead_user)
-    self.dead_pid_full_path = PID_DIR + os.sep + self.dead_pid_file_name
-
-    self.pidFilesDict = {self.live_pid_file_name : self.live_pid_full_path,
-                         self.dead_pid_file_name : self.dead_pid_full_path}
-
-    self.is_live_values = {self.live_pid_full_path : True,
-                      self.dead_pid_full_path : False}
-    
-    self.servicesToLinuxUser = {COMPONENT_LIVE : 'live_user',
-                                COMPONENT_DEAD : 'dead_user'}
-
-    self.globalConfig = {'live_user' : live_user,
-                         'dead_user' : dead_user}
-
-    
-  # Ensure that status checker return True for running process
-  @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch.object(StatusCheck, 'getIsLive')
-  def test_live(self, get_is_live_mock):
-
-    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-
-    self.assertTrue(StatusCheck.USER_PATTERN in self.serviceToPidDict[COMPONENT_LIVE])
-    self.assertTrue(StatusCheck.USER_PATTERN in self.serviceToPidDict[COMPONENT_DEAD])
-
-    statusCheck.pidFilesDict = self.pidFilesDict
-    
-    get_is_live_mock.side_effect = lambda pid_path : self.is_live_values[pid_path]
-    
-    status = statusCheck.getStatus(COMPONENT_LIVE)
-    self.assertEqual(status, True)
-
-  @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @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.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-    # logged not more then once
-    self.assert_(TestStatusCheck.timesLogged <= 1, "test_dont_relog_serToPidDict logged more then once")
-
-  # Ensure that status checker return True for running process even if multiple
-  # pids for a service component exist
-  @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch.object(StatusCheck, 'getIsLive')
-  def test_live_if_multiple_pids(self, get_is_live_mock):
-
-    one_more_pid_file_name = string.replace(COMPONENT_LIVE_PID, StatusCheck.USER_PATTERN,
-      'any_other_linux_user')
-    one_more_pid_full_path = PID_DIR + os.sep + one_more_pid_file_name
-
-    self.pidFilesDict[one_more_pid_file_name] = one_more_pid_full_path
-    self.is_live_values[one_more_pid_full_path] = False
-
-    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-
-    statusCheck.pidFilesDict = self.pidFilesDict
-
-    get_is_live_mock.side_effect = lambda pid_path : self.is_live_values[pid_path]
-
-    status = statusCheck.getStatus(COMPONENT_LIVE)
-    self.assertEqual(status, True)
-    
-  # Ensure that status checker prints error message if there is no linux user
-  # for service, which pid depends on user
-  @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch.object(StatusCheck, 'getIsLive')
-  @patch.object(logger, "error")
-  def test_no_user_mapping(self, error_mock, get_is_live_mock):
-
-    
-    badServiceToPidDict = self.serviceToPidDict.copy()
-    badServiceToPidDict['BAD_COMPONENT'] = 'prefix' + StatusCheck.USER_PATTERN
-
-    statusCheck = StatusCheck(badServiceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-
-    statusCheck.pidFilesDict = self.pidFilesDict
-
-    get_is_live_mock.side_effect = lambda pid_path : self.is_live_values[pid_path]
-
-    status = statusCheck.getStatus(COMPONENT_LIVE)
-    self.assertTrue(error_mock.called)
-
-  # Ensure that status checker return False for dead process
-  @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
-  @patch.object(StatusCheck, 'getIsLive')
-  def test_dead(self, get_is_live_mock):
-    statusCheck = StatusCheck(self.serviceToPidDict, self.pidPathVars,
-      self.globalConfig, self.servicesToLinuxUser)
-
-    statusCheck.pidFilesDict = self.pidFilesDict
-    
-    get_is_live_mock.side_effect = lambda pid_path : self.is_live_values[pid_path]
-    status = statusCheck.getStatus(COMPONENT_DEAD)
-    self.assertEqual(status, False)