You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rz...@apache.org on 2017/02/17 22:56:51 UTC
[13/51] [abbrv] ambari git commit: AMBARI-19816. Agent heartbeat lost
due to dead service check process - addendum fix (Attila Doroszlai via
smohanty)
AMBARI-19816. Agent heartbeat lost due to dead service check process - addendum fix (Attila Doroszlai via smohanty)
(cherry picked from commit 8832146e96be59ea117e155b46936b4d28e1d7e0)
Change-Id: If2f9cc2caefa6accf00b1e3ac00e280ecac695c2
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ffaa961f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ffaa961f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ffaa961f
Branch: refs/heads/branch-feature-BUG-74026
Commit: ffaa961f8c165af745b562c2d1c49e4cdee0bb8f
Parents: dc51287
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Feb 1 16:29:30 2017 -0800
Committer: Zuul <re...@hortonworks.com>
Committed: Mon Feb 6 22:04:02 2017 -0800
----------------------------------------------------------------------
.../src/main/python/ambari_agent/Hardware.py | 10 ++-
.../test/python/ambari_agent/TestHardware.py | 84 +++++++++-----------
2 files changed, 44 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ffaa961f/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 2233b0a..8cb8a28 100644
--- a/ambari-agent/src/main/python/ambari_agent/Hardware.py
+++ b/ambari-agent/src/main/python/ambari_agent/Hardware.py
@@ -21,6 +21,7 @@ limitations under the License.
import os.path
import logging
import subprocess
+from resource_management.core import shell
from resource_management.core.shell import call
from resource_management.core.exceptions import ExecuteTimeoutException, Fail
from ambari_commons.shell import shellRunner
@@ -136,8 +137,13 @@ class Hardware:
if not cls._check_remote_mounts(config):
command.append("-l")
- df = subprocess.Popen(command, stdout=subprocess.PIPE)
- dfdata = df.communicate()[0]
+ try:
+ code, out, err = shell.call(command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = int(timeout), quiet = True)
+ dfdata = out
+ except Exception as ex:
+ logger.warn("Checking disk usage failed: " + str(ex))
+ dfdata = ''
+
mounts = [cls._parse_df_line(line) for line in dfdata.splitlines() if line]
result_mounts = []
ignored_mounts = []
http://git-wip-us.apache.org/repos/asf/ambari/blob/ffaa961f/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 79205cf..d30020c 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHardware.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHardware.py
@@ -25,6 +25,7 @@ from mock.mock import patch, MagicMock, Mock
import unittest
import platform
import socket
+import subprocess
import os
from only_for_platform import not_for_platform, PLATFORM_WINDOWS
from ambari_agent import hostname
@@ -32,6 +33,7 @@ from ambari_agent.Hardware import Hardware
from ambari_agent.AmbariConfig import AmbariConfig
from ambari_agent.Facter import Facter, FacterLinux
from ambari_commons import OSCheck
+from resource_management.core import shell
@not_for_platform(PLATFORM_WINDOWS)
@@ -85,7 +87,8 @@ class TestHardware(TestCase):
@patch.object(Hardware, "_chk_writable_mount")
@patch("ambari_agent.Hardware.path_isfile")
- def test_osdisks_parsing(self, isfile_mock, chk_writable_mount_mock):
+ @patch("resource_management.core.shell.call")
+ def test_osdisks_parsing(self, shell_call_mock, isfile_mock, chk_writable_mount_mock):
df_output =\
"""Filesystem Type 1024-blocks Used Available Capacity Mounted on
/dev/mapper/docker-253:0-4980899-d45c264d37ab18c8ed14f890f4d59ac2b81e1c52919eb36a79419787209515f3 xfs 31447040 1282384 30164656 5% /
@@ -108,18 +111,9 @@ class TestHardware(TestCase):
isfile_mock.side_effect = isfile_side_effect
chk_writable_mount_mock.side_effect = chk_writable_mount_side_effect
+ shell_call_mock.return_value = (0, df_output, '')
- with patch("subprocess.Popen") as open_mock:
- proc_mock = Mock()
- attr = {
- 'communicate.return_value': [
- df_output
- ]
- }
- proc_mock.configure_mock(**attr)
- open_mock.return_value = proc_mock
-
- result = Hardware.osdisks()
+ result = Hardware.osdisks()
self.assertEquals(1, len(result))
@@ -130,39 +124,40 @@ class TestHardware(TestCase):
@patch.object(OSCheck, "get_os_type")
@patch.object(OSCheck, "get_os_version")
- @patch("subprocess.Popen")
- @patch("subprocess.Popen.communicate")
- def test_osdisks_remote(self, communicate_mock, popen_mock,
- get_os_version_mock, get_os_type_mock):
+ @patch("resource_management.core.shell.call")
+ def test_osdisks_remote(self, shell_call_mock, get_os_version_mock, get_os_type_mock):
get_os_type_mock.return_value = "suse"
get_os_version_mock.return_value = "11"
Hardware.osdisks()
- popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+ timeout = 10
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
config = AmbariConfig()
Hardware.osdisks(config)
- popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
config.add_section(AmbariConfig.AMBARI_PROPERTIES_CATEGORY)
config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY, "true")
Hardware.osdisks(config)
- popen_mock.assert_called_with(['timeout', '10', "df", "-kPT"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_KEY, "false")
Hardware.osdisks(config)
- popen_mock.assert_called_with(['timeout', '10', "df", "-kPT", "-l"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "0")
Hardware.osdisks(config)
- popen_mock.assert_called_with(['timeout', '10', "df", "-kPT", "-l"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
- config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "1")
+ timeout = 1
+ config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, str(timeout))
Hardware.osdisks(config)
- popen_mock.assert_called_with(["timeout", "1", "df", "-kPT", "-l"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
- config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, "2")
+ timeout = 2
+ config.set(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, Hardware.CHECK_REMOTE_MOUNTS_TIMEOUT_KEY, str(timeout))
Hardware.osdisks(config)
- popen_mock.assert_called_with(["timeout", "2", "df", "-kPT", "-l"], stdout=-1)
+ shell_call_mock.assert_called_with(['timeout', str(timeout), "df", "-kPT", "-l"], stdout = subprocess.PIPE, stderr = subprocess.PIPE, timeout = timeout, quiet = True)
def test_parse_df_line(self):
df_line_sample = "device type size used available percent mountpoint"
@@ -382,7 +377,8 @@ SwapFree: 1598676 kB
@patch.object(Hardware, "_chk_writable_mount")
@patch("ambari_agent.Hardware.path_isfile")
- def test_osdisks_blacklist(self, isfile_mock, chk_writable_mount_mock):
+ @patch("resource_management.core.shell.call")
+ def test_osdisks_blacklist(self, shell_call_mock, isfile_mock, chk_writable_mount_mock):
df_output = \
"""Filesystem Type 1024-blocks Used Available Capacity Mounted on
/dev/mapper/docker-253:0-4980899-d45c264d37ab18c8ed14f890f4d59ac2b81e1c52919eb36a79419787209515f3 xfs 31447040 1282384 30164656 5% /
@@ -414,33 +410,25 @@ SwapFree: 1598676 kB
}
}
- with patch("subprocess.Popen") as open_mock:
- proc_mock = Mock()
- attr = {
- 'communicate.return_value': [
- df_output
- ]
- }
- proc_mock.configure_mock(**attr)
- open_mock.return_value = proc_mock
+ shell_call_mock.return_value = (0, df_output, '')
- def conf_get(section, key, default=""):
- if section in config_dict and key in config_dict[section]:
- return config_dict[section][key]
+ def conf_get(section, key, default=""):
+ if section in config_dict and key in config_dict[section]:
+ return config_dict[section][key]
- return default
+ return default
- def has_option(section, key):
- return section in config_dict and key in config_dict[section]
+ def has_option(section, key):
+ return section in config_dict and key in config_dict[section]
- conf = Mock()
- attr = {
- 'get.side_effect': conf_get,
- 'has_option.side_effect': has_option
- }
- conf.configure_mock(**attr)
+ conf = Mock()
+ attr = {
+ 'get.side_effect': conf_get,
+ 'has_option.side_effect': has_option
+ }
+ conf.configure_mock(**attr)
- result = Hardware.osdisks(conf)
+ result = Hardware.osdisks(conf)
self.assertEquals(1, len(result))