Repository: ambari Updated Branches: refs/heads/trunk 028f996a5 -> c0ff6adb4
AMBARI-5973. Usability: Add checks for THP to the Ambari pre-req check for Linux (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c0ff6adb Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c0ff6adb Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c0ff6adb Branch: refs/heads/trunk Commit: c0ff6adb4e7d295e15aa662c01991b0945ca1461 Parents: 028f996 Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Mon Jul 7 19:55:39 2014 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Mon Jul 7 19:55:39 2014 +0300 ---------------------------------------------------------------------- .../src/main/python/ambari_agent/HostInfo.py | 13 +++++++++++ .../test/python/ambari_agent/TestHostInfo.py | 24 +++++++++++++++++++- .../apache/ambari/server/agent/AgentEnv.java | 10 ++++++++ .../ambari/server/agent/AgentResourceTest.java | 3 ++- 4 files changed, 48 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ff6adb/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 940305a..69e3cae 100644 --- a/ambari-agent/src/main/python/ambari_agent/HostInfo.py +++ b/ambari-agent/src/main/python/ambari_agent/HostInfo.py @@ -119,6 +119,8 @@ class 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" + event = threading.Event() current_umask = -1 @@ -279,6 +281,16 @@ class HostInfo: else: return self.current_umask + 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_content = f.read() + return re.search(thp_regex, file_content).groups()[0] + else: + return "" + def getFirewallObject(self): if OS_TYPE == OSConst.OS_UBUNTU: return UbuntuFirewallChecks() @@ -316,6 +328,7 @@ class HostInfo: dict['umask'] = str(self.getUMask()) + dict['transparentHugePage'] = self.getTransparentHugePage() dict['iptablesIsRunning'] = self.checkIptables() dict['reverseLookup'] = self.checkReverseLookup() # If commands are in progress or components are already mapped to this host http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ff6adb/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 75704ef..ba827ae 100644 --- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py +++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py @@ -297,7 +297,8 @@ class TestHostInfo(TestCase): @patch.object(HostInfo, 'hadoopVarRunCount') @patch.object(HostInfo, 'hadoopVarLogCount') @patch.object(HostInfo, 'checkIptables') - def test_hostinfo_register(self, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, + @patch.object(HostInfo, 'getTransparentHugePage') + def test_hostinfo_register(self, get_transparentHuge_page_mock, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock): cit_mock.return_value = True @@ -577,5 +578,26 @@ class TestHostInfo(TestCase): run_os_command_mock.return_value = firewall.get_stopped_result() self.assertFalse(firewall.check_iptables()) + @patch("os.path.isfile") + @patch('__builtin__.open') + def test_transparent_huge_page(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 = HostInfo() + + 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/c0ff6adb/ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java index eed901c..c3e9c53 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java @@ -58,6 +58,8 @@ public class AgentEnv { private Integer umask; + private String transparentHugePage; + private Boolean iptablesIsRunning; private Boolean reverseLookup; @@ -78,6 +80,14 @@ public class AgentEnv { this.umask = umask; } + public String getTransparentHugePage() { + return transparentHugePage; + } + + public void setTransparentHugePage(String transparentHugePage) { + this.transparentHugePage = transparentHugePage; + } + public Directory[] getStackFoldersAndFiles() { return stackFoldersAndFiles; } http://git-wip-us.apache.org/repos/asf/ambari/blob/c0ff6adb/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java index aba2f62..7a23293 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java @@ -182,7 +182,7 @@ public class AgentResourceTest extends JerseyTest { ", \"existingUsers\": "+ ExistingUserJSON + ", \"umask\": \"18\", \"installedPackages\": "+ PackageDetailJSON +", \"stackFoldersAndFiles\": "+ DirectoryJSON + - ", \"iptablesIsRunning\": \"true\" }"; + ", \"iptablesIsRunning\": \"true\", \"transparentHugePage\": \"never\"}"; AgentEnv.Directory[] dirs = getJsonFormString( DirectoryJSON, AgentEnv.Directory[].class); Assert.assertEquals("/var/lib", dirs[0].getName()); @@ -217,6 +217,7 @@ public class AgentResourceTest extends JerseyTest { AgentEnv agentEnv = getJsonFormString( AgentEnvJSON, AgentEnv.class); Assert.assertTrue(18 == agentEnv.getUmask()); + Assert.assertEquals("never", agentEnv.getTransparentHugePage()); Assert.assertTrue(Boolean.TRUE == agentEnv.getIptablesIsRunning()); Assert.assertEquals("/etc/alternatives/hdfs-conf", agentEnv.getAlternatives()[0].getName()); Assert.assertEquals("/etc/hadoop/conf.dist", agentEnv.getAlternatives()[0].getTarget());