AMBARI-13227. Debian 7. Host check does not show warning about THP enabled on hosts. (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b3d36fb5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b3d36fb5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b3d36fb5 Branch: refs/heads/branch-dev-patch-upgrade Commit: b3d36fb5c7dcd498bb48c629c810a74161c139f3 Parents: e203fae Author: Andrew Onishuk <[email protected]> Authored: Tue Sep 29 17:11:21 2015 +0300 Committer: Andrew Onishuk <[email protected]> Committed: Wed Sep 30 15:59:37 2015 +0300 ---------------------------------------------------------------------- .../src/main/python/ambari_agent/HostInfo.py | 14 +++++++++---- .../test/python/ambari_agent/TestHostInfo.py | 22 ++++++++++++++++++++ .../custom_actions/scripts/check_host.py | 13 ++++++++---- .../test/python/custom_actions/TestCheckHost.py | 1 + 4 files changed, 42 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b3d36fb5/ambari-agent/src/main/python/ambari_agent/HostInfo.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/python/ambari_agent/HostInfo.py b/ambari-agent/src/main/python/ambari_agent/HostInfo.py index 3d7125a..49f8417 100644 --- a/ambari-agent/src/main/python/ambari_agent/HostInfo.py +++ b/ambari-agent/src/main/python/ambari_agent/HostInfo.py @@ -157,7 +157,8 @@ class HostInfoLinux(HostInfo): DEFAULT_SERVICE_NAME = "ntpd" SERVICE_STATUS_CMD = "%s %s status" % (SERVICE_CMD, DEFAULT_SERVICE_NAME) - THP_FILE = "/sys/kernel/mm/redhat_transparent_hugepage/enabled" + THP_FILE_REDHAT = "/sys/kernel/mm/redhat_transparent_hugepage/enabled" + THP_FILE_UBUNTU = "/sys/kernel/mm/transparent_hugepage/enabled" def __init__(self, config=None): super(HostInfoLinux, self).__init__(config) @@ -216,10 +217,15 @@ class HostInfoLinux(HostInfo): pass def getTransparentHugePage(self): - # This file exist only on redhat 6 thp_regex = "\[(.+)\]" - if os.path.isfile(self.THP_FILE): - with open(self.THP_FILE) as f: + file_name = None + if OSCheck.is_ubuntu_family(): + file_name = self.THP_FILE_UBUNTU + elif OSCheck.is_redhat_family(): + file_name = self.THP_FILE_REDHAT + + if file_name: + with open(file_name) as f: file_content = f.read() return re.search(thp_regex, file_content).groups()[0] else: http://git-wip-us.apache.org/repos/asf/ambari/blob/b3d36fb5/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py index 57e4224..a982f5f 100644 --- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py +++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py @@ -537,5 +537,27 @@ class TestHostInfo(TestCase): os_path_isfile_mock.return_value = False self.assertEqual("", hostInfo.getTransparentHugePage()) + @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('debian','7','Final'))) + @patch("os.path.isfile") + @patch('__builtin__.open') + def test_transparent_huge_page_debian(self, open_mock, os_path_isfile_mock): + context_manager_mock = MagicMock() + open_mock.return_value = context_manager_mock + file_mock = MagicMock() + file_mock.read.return_value = "[never] always" + enter_mock = MagicMock() + enter_mock.return_value = file_mock + exit_mock = MagicMock() + setattr( context_manager_mock, '__enter__', enter_mock ) + setattr( context_manager_mock, '__exit__', exit_mock ) + + hostInfo = HostInfoLinux() + + os_path_isfile_mock.return_value = True + self.assertEqual("never", hostInfo.getTransparentHugePage()) + + os_path_isfile_mock.return_value = False + self.assertEqual("", hostInfo.getTransparentHugePage()) + if __name__ == "__main__": unittest.main() http://git-wip-us.apache.org/repos/asf/ambari/blob/b3d36fb5/ambari-server/src/main/resources/custom_actions/scripts/check_host.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/custom_actions/scripts/check_host.py b/ambari-server/src/main/resources/custom_actions/scripts/check_host.py index a1c93b1..9aa3afb 100644 --- a/ambari-server/src/main/resources/custom_actions/scripts/check_host.py +++ b/ambari-server/src/main/resources/custom_actions/scripts/check_host.py @@ -69,7 +69,8 @@ JARS_PATH_IN_ARCHIVE_SQLA = "/sqla-client-jdbc/java" LIBS_PATH_IN_ARCHIVE_SQLA = "/sqla-client-jdbc/native/lib64" JDBC_DRIVER_SQLA_JAR_PATH_IN_ARCHIVE = "/sqla-client-jdbc/java/" + JDBC_DRIVER_SQLA_JAR -THP_FILE = "/sys/kernel/mm/redhat_transparent_hugepage/enabled" +THP_FILE_REDHAT = "/sys/kernel/mm/redhat_transparent_hugepage/enabled" +THP_FILE_UBUNTU = "/sys/kernel/mm/transparent_hugepage/enabled" class CheckHost(Script): # Packages that are used to find repos (then repos are used to find other packages) @@ -165,10 +166,14 @@ class CheckHost(Script): # Here we are checking transparent huge page if CHECK_TRANSPARENT_HUGE_PAGE is in check_execute_list if CHECK_TRANSPARENT_HUGE_PAGE in check_execute_list: try : - # This file exist only on redhat 6 thp_regex = "\[(.+)\]" - if os.path.isfile(THP_FILE): - with open(THP_FILE) as f: + file_name = None + if OSCheck.is_ubuntu_family(): + file_name = THP_FILE_UBUNTU + elif OSCheck.is_redhat_family(): + file_name = THP_FILE_REDHAT + if os.path.isfile(file_name): + with open(file_name) as f: file_content = f.read() structured_output[CHECK_TRANSPARENT_HUGE_PAGE] = {"exit_code" : 0, "message": str(re.search(thp_regex, file_content).groups()[0])} http://git-wip-us.apache.org/repos/asf/ambari/blob/b3d36fb5/ambari-server/src/test/python/custom_actions/TestCheckHost.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/custom_actions/TestCheckHost.py b/ambari-server/src/test/python/custom_actions/TestCheckHost.py index b21254a..1e45927 100644 --- a/ambari-server/src/test/python/custom_actions/TestCheckHost.py +++ b/ambari-server/src/test/python/custom_actions/TestCheckHost.py @@ -344,6 +344,7 @@ class TestCheckHost(TestCase): pass + @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = ('debian','7','Final'))) @patch.object(HostCheckReportFileHandler, "resolve_ambari_config") @patch("resource_management.libraries.script.Script.put_structured_out") @patch.object(Script, 'get_tmp_dir')
