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

Reply via email to