You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by fb...@apache.org on 2015/01/29 22:31:40 UTC

ambari git commit: AMBARI-9390 Ambari Server Setup issues on Windows

Repository: ambari
Updated Branches:
  refs/heads/trunk 79aced639 -> a4f16b954


AMBARI-9390 Ambari Server Setup issues on Windows

Fixed SQL Server database attribute retrieval at setup
Fixed Metrics msi installation check


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a4f16b95
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a4f16b95
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a4f16b95

Branch: refs/heads/trunk
Commit: a4f16b954759145f7cf5a0e5c492e3e9ba6c6312
Parents: 79aced6
Author: Florian Barca <fb...@hortonworks.com>
Authored: Thu Jan 29 13:31:02 2015 -0800
Committer: Florian Barca <fb...@hortonworks.com>
Committed: Thu Jan 29 13:31:02 2015 -0800

----------------------------------------------------------------------
 .../libraries/functions/install_hdp_msi.py      |  2 +-
 .../libraries/functions/reload_windows_env.py   |  6 +--
 .../ambari_server/dbConfiguration_windows.py    | 10 ++---
 .../AMS/0.1.0/package/scripts/ams.py            |  8 +++-
 .../0.1.0/package/scripts/metric_collector.py   | 47 ++++++++++----------
 .../AMS/0.1.0/package/scripts/metric_monitor.py |  3 +-
 .../AMS/0.1.0/package/scripts/service_check.py  | 42 +++++++++++++----
 7 files changed, 71 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
index d20dd42..8f32378 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
@@ -144,7 +144,7 @@ def _is_msi_installed():
 # check if msi was installed correctly and raise Fail in case of broken install
 def _validate_msi_install():
   if not _is_msi_installed() and os.path.exists(os.path.join(_working_dir, INSTALL_MARKER_FAILED)):
-    Fail("Current or previous hdp.msi install failed. Check hdp.msi install logs")
+    raise Fail("Current or previous hdp.msi install failed. Check hdp.msi install logs")
   return _is_msi_installed()
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py b/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
index 49cb812..eaa2582 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
@@ -29,9 +29,9 @@ default_whitelist = ["FALCON_CONF_DIR", "FALCON_DATA_DIR", "FALCON_HOME", "FALCO
                      "HDFS_AUDIT_LOGGER", "HDFS_DATA_DIR", "HIVE_CONF_DIR", "HIVE_HOME", "HIVE_LIB_DIR", "HIVE_LOG_DIR",
                      "HIVE_OPTS", "KNOX_CONF_DIR", "KNOX_HOME", "KNOX_LOG_DIR", "MAHOUT_HOME", "OOZIE_DATA",
                      "OOZIE_HOME", "OOZIE_LOG", "OOZIE_ROOT", "PIG_HOME", "SQOOP_HOME", "STORM_CONF_DIR", "STORM_HOME",
-                     "STORM_LOG_DIR", "WEBHCAT_CONF_DIR", "YARN_LOG_DIR", "ZOOKEEPER_CONF_DIR", "ZOOKEEPER_HOME",
-                     "ZOOKEEPER_LIB_DIR", "ZOO_LOG_DIR", "COLLECTOR_CONF_DIR", "COLLECTOR_HOME", "MONITOR_CONF_DIR",
-                     "MONITOR_HOME", "SINK_HOME"]
+                     "STORM_LOG_DIR", "TEZ_HOME", "WEBHCAT_CONF_DIR", "YARN_LOG_DIR", "ZOOKEEPER_CONF_DIR",
+                     "ZOOKEEPER_HOME", "ZOOKEEPER_LIB_DIR", "ZOO_LOG_DIR", "COLLECTOR_CONF_DIR", "COLLECTOR_HOME",
+                     "MONITOR_CONF_DIR", "MONITOR_HOME", "SINK_HOME"]
 def reload_windows_env(keys_white_list=default_whitelist):
   root = HKEY_LOCAL_MACHINE
   subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
index 742fa8b..60308a0 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
@@ -65,10 +65,9 @@ class SQLServerConfig(DBMSConfig):
     self.JDBC_DRIVER_INSTALL_MSG = 'Before starting Ambari Server, you must install the SQL Server JDBC driver.'
 
     # The values from options supersede the values from properties
-    self.database_host = options.database_host if options.database_host is not None and options.database_host is not "" else \
-        properties.get_property(self.dbPropKeys.server_key)
+    self.database_host = DBMSConfig._init_member_with_prop_default(options, "database_host", properties, self.dbPropKeys.server_key, "")
     try:
-      if self.database_host is None or self.database_host is "":
+      if not self.database_host:
         self.database_host = options.default_database_host
       else:
         self.database_host = compress_backslashes(self.database_host)
@@ -81,11 +80,10 @@ class SQLServerConfig(DBMSConfig):
                                                                    properties, self.dbPropKeys.db_name_key, configDefaults.DEFAULT_DB_NAME)
 
     self.use_windows_authentication = DBMSConfig._init_member_with_prop_default(options, "database_windows_auth",
-        properties, self.dbAuthKeys.integrated_auth_key, False)
+        properties, self.dbAuthKeys.integrated_auth_key, "False")
     self.database_username = DBMSConfig._init_member_with_prop_default(options, "database_username",
                                                                        properties, self.dbAuthKeys.user_name_key, DEFAULT_USERNAME)
-    self.database_password = options.database_password if options.database_password is not None and options.database_password is not "" \
-      else ""
+    self.database_password = DBMSConfig._init_member_with_default(options, "database_password", "")
     if not self.database_password:
       self.database_password = DBMSConfig._read_password_from_properties(properties)
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
index f8d357e..20c4223 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
@@ -22,6 +22,7 @@ from resource_management import *
 from ambari_commons import OSConst
 from service_mapping import *
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+from ambari_commons.str_utils import compress_backslashes
 import glob
 
 @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
@@ -81,8 +82,11 @@ def ams(name=None):
     ]
     for link_pair in links_pairs:
       link, target = link_pair
-      target = glob.glob(os.path.expandvars(target))[0].replace("\\\\", "\\")
-      Execute('cmd /c mklink "{0}" "{1}"'.format(link, target))
+      real_link = os.path.expandvars(link)
+      target = compress_backslashes(glob.glob(os.path.expandvars(target))[0])
+      if not os.path.exists(real_link):
+        #TODO check the symlink destination too. Broken in Python 2.x on Windows.
+        Execute('cmd /c mklink "{0}" "{1}"'.format(real_link, target))
 
     Directory(params.ams_monitor_conf_dir,
               owner=params.ams_user,

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
index 2926bb9..addfc33 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
@@ -25,37 +25,36 @@ from hbase import hbase
 from status import check_service_status
 
 class AmsCollector(Script):
-    def install(self, env):
-        self.install_packages(env)
+  def install(self, env):
+    self.install_packages(env)
+    self.configure(env) # for security
 
 
-    def configure(self, env):
-        import params
-        env.set_params(params)
-        hbase('master')
-        hbase('regionserver')
-        ams(name='collector')
+  def configure(self, env):
+    import params
+    env.set_params(params)
+    hbase('master')
+    hbase('regionserver')
+    ams(name='collector')
 
-    def start(self, env):
-        import params
-        env.set_params(params)
-        self.configure(env) # for security
+  def start(self, env):
+    self.configure(env) # for security
 
-        ams_service( 'collector',
-                       action = 'start'
-        )
+    ams_service( 'collector',
+                   action = 'start'
+    )
 
-    def stop(self, env):
-        import params
-        env.set_params(params)
+  def stop(self, env):
+    import params
+    env.set_params(params)
 
-        ams_service( 'collector', action = 'stop')
+    ams_service( 'collector', action = 'stop')
 
-    def status(self, env):
-        import status_params
-        env.set_params(status_params)
-        check_service_status(name='collector')
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+    check_service_status(name='collector')
 
 
 if __name__ == "__main__":
-    AmsCollector().execute()
+  AmsCollector().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
index d53a834..f6cce8f 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
@@ -26,6 +26,7 @@ from status import check_service_status
 class AmsMonitor(Script):
   def install(self, env):
     self.install_packages(env)
+    self.configure(env) # for security
 
   def configure(self, env):
     import params
@@ -33,8 +34,6 @@ class AmsMonitor(Script):
     ams(name='monitor')
 
   def start(self, env):
-    import params
-    env.set_params(params)
     self.configure(env) # for security
 
     ams_service( 'monitor',

http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
index 8e8be0e..46eba89 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
@@ -22,21 +22,45 @@ from resource_management.core.logger import Logger
 from resource_management.core.base import Fail
 from resource_management import Script
 from resource_management import Template
+
+from ambari_commons import OSConst
+from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+
 import httplib
 import urllib
 import json
+import os
 import random
 import time
 import socket
 
 
 class AMSServiceCheck(Script):
-
   AMS_METRICS_POST_URL = "/ws/v1/timeline/metrics/"
   AMS_METRICS_GET_URL = "/ws/v1/timeline/metrics?%s"
   AMS_CONNECT_TRIES = 3
   AMS_CONNECT_TIMEOUT = 10
 
+  @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
+  def service_check(self, env):
+    from resource_management.libraries.functions.windows_service_utils import check_windows_service_exists
+    from service_mapping import collector_win_service_name, monitor_win_service_name
+    import params
+
+    env.set_params(params)
+
+    #Just check that the services were correctly installed
+    #Check the monitor on all hosts
+    Logger.info("AMS Monitor service check was started.")
+    if not check_windows_service_exists(monitor_win_service_name):
+      raise Fail("AMS Monitor service was not properly installed. Check the logs and retry the installation.")
+    #Check the collector only where installed
+    if params.ams_collector_home_dir and os.path.isdir(params.ams_collector_home_dir):
+      Logger.info("AMS Collector service check was started.")
+      if not check_windows_service_exists(collector_win_service_name):
+        raise Fail("AMS Collector service was not properly installed. Check the logs and retry the installation.")
+
+  @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
   def service_check(self, env):
     import params
 
@@ -51,7 +75,7 @@ class AMSServiceCheck(Script):
 
     headers = {"Content-type": "application/json"}
 
-    for i in xrange(1,self.AMS_CONNECT_TRIES):
+    for i in xrange(0, self.AMS_CONNECT_TRIES):
       try:
         Logger.info("Connecting (POST) to %s:%s%s" % (params.ams_collector_host_single,
                                                       params.metric_collector_port,
@@ -61,13 +85,13 @@ class AMSServiceCheck(Script):
         conn.request("POST", self.AMS_METRICS_POST_URL, metric_json, headers)
         break
       except (httplib.HTTPException, socket.error) as ex:
-        if i < self.AMS_CONNECT_TRIES:
-          time.sleep(self.AMS_CONNECT_TIMEOUT)
-          Logger.info("Connection failed. Next retry in %s seconds."
-                      % (self.AMS_CONNECT_TIMEOUT))
-        else:
-          Fail("AMS metrics were not saved. Service check has failed. "
-               "\nConnection failed.")
+        time.sleep(self.AMS_CONNECT_TIMEOUT)
+        Logger.info("Connection failed. Next retry in %s seconds."
+                    % (self.AMS_CONNECT_TIMEOUT))
+
+    if i == self.AMS_CONNECT_TRIES:
+      raise Fail("AMS metrics were not saved. Service check has failed. "
+           "\nConnection failed.")
 
     response = conn.getresponse()
     Logger.info("Http response: %s %s" % (response.status, response.reason))