Repository: ambari Updated Branches: refs/heads/trunk 95157fadb -> b21f48299
AMBARI-8768 Ambari agent Heartbeat lost when df hangs (NFS gateway), also prevents proper re-initialization of agent upon restart (dsen) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b21f4829 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b21f4829 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b21f4829 Branch: refs/heads/trunk Commit: b21f48299ccaa46f9a092d56d728221d8814f6c3 Parents: 95157fa Author: Dmytro Sen <d...@apache.org> Authored: Wed May 20 19:23:33 2015 +0300 Committer: Dmytro Sen <d...@apache.org> Committed: Wed May 20 19:24:09 2015 +0300 ---------------------------------------------------------------------- .../src/main/python/ambari_agent/Hardware.py | 10 +++++++++- .../src/test/python/ambari_agent/TestHardware.py | 15 ++++++++++----- .../ambari/server/configuration/Configuration.java | 4 ++++ .../ambari/server/agent/TestHeartbeatHandler.java | 2 ++ 4 files changed, 25 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b21f4829/ambari-agent/src/main/python/ambari_agent/Hardware.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/python/ambari_agent/Hardware.py b/ambari-agent/src/main/python/ambari_agent/Hardware.py index 439803d..957fc60 100644 --- a/ambari-agent/src/main/python/ambari_agent/Hardware.py +++ b/ambari-agent/src/main/python/ambari_agent/Hardware.py @@ -33,6 +33,7 @@ class Hardware: SSH_KEY_PATTERN = 'ssh.*key' WINDOWS_GET_DRIVES_CMD = "foreach ($drive in [System.IO.DriveInfo]::getdrives()){$available = $drive.TotalFreeSpace;$used = $drive.TotalSize-$drive.TotalFreeSpace;$percent = ($used*100)/$drive.TotalSize;$size = $drive.TotalSize;$type = $drive.DriveFormat;$mountpoint = $drive.RootDirectory.FullName;echo \"$available $used $percent% $size $type $mountpoint\"}" CHECK_REMOTE_MOUNTS_KEY = 'agent.check.remote.mounts' + CHECK_REMOTE_MOUNTS_TIMEOUT_KEY = 'agent.check.mounts.timeout' def __init__(self): self.hardware = {} @@ -68,7 +69,14 @@ class Hardware: platforms. Note that this parser ignores any filesystems with spaces and any mounts with spaces. """ mounts = [] - command = ["df", "-kPT"] + command = [] + if config and \ + config.has_option(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY) and \ + config.get(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY) != "0": + command.append("timeout") + command.append(config.get(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY)) + command.append("df") + command.append("-kPT") if config and \ config.has_option(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY) and \ config.get(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY).lower() == "false": http://git-wip-us.apache.org/repos/asf/ambari/blob/b21f4829/ambari-agent/src/test/python/ambari_agent/TestHardware.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/ambari_agent/TestHardware.py b/ambari-agent/src/test/python/ambari_agent/TestHardware.py index 4c9b490..61456c5 100644 --- a/ambari-agent/src/test/python/ambari_agent/TestHardware.py +++ b/ambari-agent/src/test/python/ambari_agent/TestHardware.py @@ -69,13 +69,8 @@ class TestHardware(TestCase): @patch.object(OSCheck, "get_os_version") @patch("subprocess.Popen") @patch("subprocess.Popen.communicate") - - # @patch.object(AmbariConfig, "get") - # @patch.object(AmbariConfig, "has_option") def test_osdisks_remote(self, communicate_mock, popen_mock, get_os_version_mock, get_os_type_mock): - # has_option_mock.return_value = True - # get_mock.return_value = "true" get_os_type_mock.return_value = "suse" get_os_version_mock.return_value = "11" Hardware.osdisks() @@ -90,6 +85,16 @@ class TestHardware(TestCase): config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY, "false") Hardware.osdisks(config) popen_mock.assert_called_with(["df","-kPT", "-l"], stdout=-1) + config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "0") + Hardware.osdisks(config) + popen_mock.assert_called_with(["df","-kPT","-l"], stdout=-1) + config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "1") + Hardware.osdisks(config) + popen_mock.assert_called_with(["timeout","1","df","-kPT","-l"], stdout=-1) + config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "2") + Hardware.osdisks(config) + popen_mock.assert_called_with(["timeout","2","df","-kPT","-l"], stdout=-1) + def test_extractMountInfo(self): outputLine = "device type size used available percent mountpoint" http://git-wip-us.apache.org/repos/asf/ambari/blob/b21f4829/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index c2cf2c0..34ad7eb 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -118,6 +118,8 @@ public class Configuration { public static final String CLIENT_API_SSL_KEY_NAME_KEY = "client.api.ssl.key_name"; public static final String CHECK_REMOTE_MOUNTS_KEY = "agent.check.remote.mounts"; public static final String CHECK_REMOTE_MOUNTS_DEFAULT = "true"; + public static final String CHECK_MOUNTS_TIMEOUT_KEY = "agent.check.mounts.timeout"; + public static final String CHECK_MOUNTS_TIMEOUT_DEFAULT = "0"; public static final String SERVER_DB_NAME_KEY = "server.jdbc.database_name"; public static final String SERVER_DB_NAME_DEFAULT = "ambari"; public static final String REQUEST_READ_TIMEOUT = "views.request.read.timeout.millis"; @@ -491,6 +493,8 @@ public class Configuration { agentConfigsMap = new HashMap<String, String>(); agentConfigsMap.put(CHECK_REMOTE_MOUNTS_KEY, properties.getProperty( CHECK_REMOTE_MOUNTS_KEY, CHECK_REMOTE_MOUNTS_DEFAULT)); + agentConfigsMap.put(CHECK_MOUNTS_TIMEOUT_KEY, properties.getProperty( + CHECK_MOUNTS_TIMEOUT_KEY, CHECK_MOUNTS_TIMEOUT_DEFAULT)); configsMap = new HashMap<String, String>(); configsMap.putAll(agentConfigsMap); http://git-wip-us.apache.org/repos/asf/ambari/blob/b21f4829/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java index 2b1c355..ca1a5a0 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java @@ -903,6 +903,8 @@ public class TestHeartbeatHandler { assertFalse(config.isEmpty()); assertTrue(config.containsKey(Configuration.CHECK_REMOTE_MOUNTS_KEY)); assertTrue("true".equals(config.get(Configuration.CHECK_REMOTE_MOUNTS_KEY))); + assertTrue(config.containsKey(Configuration.CHECK_MOUNTS_TIMEOUT_KEY)); + assertTrue("0".equals(config.get(Configuration.CHECK_MOUNTS_TIMEOUT_KEY))); } @Test