You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/06/24 18:19:44 UTC
[2/2] ambari git commit: AMBARI-12125. If agent is not restarted
after upgrade,
it reads new version file and registers as a new version (dlysnichenko)
AMBARI-12125. If agent is not restarted after upgrade, it reads new version file and registers as a new version (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d998d056
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d998d056
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d998d056
Branch: refs/heads/trunk
Commit: d998d056fcfc3de56eb9b905eb2a84075b28e291
Parents: d687832
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Wed Jun 24 19:17:48 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Jun 24 19:19:24 2015 +0300
----------------------------------------------------------------------
.../src/main/python/ambari_agent/Controller.py | 12 +++++++++-
.../src/main/python/ambari_agent/Register.py | 11 +---------
.../test/python/ambari_agent/TestController.py | 23 ++++++++++++++++++--
.../python/ambari_agent/TestRegistration.py | 11 ++++------
4 files changed, 37 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/d998d056/ambari-agent/src/main/python/ambari_agent/Controller.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Controller.py b/ambari-agent/src/main/python/ambari_agent/Controller.py
index 572768a..801b85a 100644
--- a/ambari-agent/src/main/python/ambari_agent/Controller.py
+++ b/ambari-agent/src/main/python/ambari_agent/Controller.py
@@ -57,6 +57,7 @@ class Controller(threading.Thread):
if heartbeat_stop_callback is None:
heartbeat_stop_callback = HeartbeatStopHandlers()
+ self.version = self.read_agent_version(config)
self.lock = threading.Lock()
self.safeMode = True
self.credential = None
@@ -102,6 +103,15 @@ class Controller(threading.Thread):
self.alert_scheduler_handler.start()
+ def read_agent_version(self, config):
+ data_dir = config.get('agent', 'prefix')
+ ver_file = os.path.join(data_dir, 'version')
+ f = open(ver_file, "r")
+ version = f.read().strip()
+ f.close()
+ return version
+
+
def __del__(self):
logger.info("Server connection disconnected.")
@@ -117,7 +127,7 @@ class Controller(threading.Thread):
while not self.isRegistered:
try:
- data = json.dumps(self.register.build())
+ data = json.dumps(self.register.build(self.version))
prettyData = pprint.pformat(data)
try:
http://git-wip-us.apache.org/repos/asf/ambari/blob/d998d056/ambari-agent/src/main/python/ambari_agent/Register.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Register.py b/ambari-agent/src/main/python/ambari_agent/Register.py
index 21aa8ec..2d85b03 100644
--- a/ambari-agent/src/main/python/ambari_agent/Register.py
+++ b/ambari-agent/src/main/python/ambari_agent/Register.py
@@ -34,7 +34,7 @@ class Register:
self.hardware = Hardware()
self.config = config
- def build(self, id='-1'):
+ def build(self, version, id='-1'):
global clusterId, clusterDefinitionRevision, firstContact
timestamp = int(time.time()*1000)
@@ -42,7 +42,6 @@ class Register:
agentEnv = { }
hostInfo.register(agentEnv, False, False)
- version = self.read_agent_version()
current_ping_port = self.config.get('agent','current_ping_port')
register = { 'responseId' : int(id),
@@ -56,11 +55,3 @@ class Register:
'prefix' : self.config.get('agent', 'prefix')
}
return register
-
- def read_agent_version(self):
- data_dir = self.config.get('agent', 'prefix')
- ver_file = os.path.join(data_dir, 'version')
- f = open(ver_file, "r")
- version = f.read().strip()
- f.close()
- return version
http://git-wip-us.apache.org/repos/asf/ambari/blob/d998d056/ambari-agent/src/test/python/ambari_agent/TestController.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestController.py b/ambari-agent/src/test/python/ambari_agent/TestController.py
index 4559331..ba6e6c8 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestController.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestController.py
@@ -20,7 +20,9 @@ limitations under the License.
'''
import StringIO
+import os
import ssl
+import tempfile
import unittest, threading
import sys
from mock.mock import patch, MagicMock, call, Mock
@@ -36,6 +38,7 @@ from ambari_agent.Controller import AGENT_AUTO_RESTART_EXIT_CODE
from ambari_commons import OSCheck
from ambari_agent.Hardware import Hardware
from ambari_agent.ExitHelper import ExitHelper
+from ambari_agent.AmbariConfig import AmbariConfig
import ambari_commons
OPERATING_SYSTEM_DISTRO = ('Suse','11','Final')
@@ -48,15 +51,16 @@ class TestController(unittest.TestCase):
@patch.object(Controller, "NetUtil", MagicMock())
@patch.object(Controller, "AlertSchedulerHandler", MagicMock())
+ @patch.object(Controller.Controller, "read_agent_version")
@patch("threading.Thread")
@patch("threading.Lock")
@patch.object(hostname, "hostname")
- def setUp(self, hostname_method, lockMock, threadMock):
+ def setUp(self, hostname_method, lockMock, threadMock, read_agent_versionMock):
Controller.logger = MagicMock()
lockMock.return_value = MagicMock()
hostname_method.return_value = "test_hostname"
-
+ read_agent_versionMock.return_value = '2.1.0'
config = MagicMock()
#config.get.return_value = "something"
@@ -66,6 +70,21 @@ class TestController(unittest.TestCase):
self.controller.netutil.MINIMUM_INTERVAL_BETWEEN_HEARTBEATS = 0.1
self.controller.netutil.HEARTBEAT_NOT_IDDLE_INTERVAL_SEC = 0.1
+ @patch.object(OSCheck, "get_os_type")
+ @patch.object(OSCheck, "get_os_version")
+ def test_read_agent_version(self, get_os_version_mock, get_os_type_mock):
+ config = AmbariConfig().getConfig()
+ tmpdir = tempfile.gettempdir()
+ config.set('agent', 'prefix', tmpdir)
+ config.set('agent', 'current_ping_port', '33777')
+ ver_file = os.path.join(tmpdir, "version")
+ reference_version = "1.3.0"
+ with open(ver_file, "w") as text_file:
+ text_file.write(reference_version)
+ version = self.controller.read_agent_version(config)
+ os.remove(ver_file)
+ self.assertEqual(reference_version, version)
+
@patch("ambari_simplejson.dumps")
@patch("time.sleep")
http://git-wip-us.apache.org/repos/asf/ambari/blob/d998d056/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
index d2c75ed..c6aa019 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestRegistration.py
@@ -44,12 +44,9 @@ class TestRegistration(TestCase):
get_os_type_mock.return_value = "suse"
get_os_version_mock.return_value = "11"
run_os_cmd_mock.return_value = (3, "", "")
- ver_file = os.path.join(tmpdir, "version")
- with open(ver_file, "w") as text_file:
- text_file.write("1.3.0")
-
register = Register(config)
- data = register.build(1)
+ reference_version = '2.1.0'
+ data = register.build(reference_version, 1)
#print ("Register: " + pprint.pformat(data))
self.assertEquals(len(data['hardwareProfile']) > 0, True, "hardwareProfile should contain content")
self.assertEquals(data['hostname'] != "", True, "hostname should not be empty")
@@ -57,11 +54,11 @@ class TestRegistration(TestCase):
self.assertEquals(data['responseId'], 1)
self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty")
self.assertEquals(len(data['agentEnv']) > 0, True, "agentEnv should not be empty")
- self.assertEquals(data['agentVersion'], '1.3.0', "agentVersion should not be empty")
+ self.assertEquals(data['agentVersion'], reference_version, "agentVersion should not be empty")
print data['agentEnv']['umask']
self.assertEquals(not data['agentEnv']['umask']== "", True, "agents umask should not be empty")
self.assertEquals(data['currentPingPort'] == 33777, True, "current ping port should be 33777")
self.assertEquals(data['prefix'], config.get('agent', 'prefix'), 'The prefix path does not match')
self.assertEquals(len(data), 9)
- os.remove(ver_file)
+