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)
+