Browse Source

AMBARI-11550 - [WinTP2] AMS Metrics Collector service cannot start Embedded HBASE service under hadoop credentials

Artem Baranchuk 10 years ago
parent
commit
f3d49fade0

+ 3 - 4
ambari-metrics/ambari-metrics-timelineservice/src/main/python/amc_service.py

@@ -25,7 +25,7 @@ import sys
 from ambari_commons.ambari_service import AmbariService
 from ambari_commons.exceptions import FatalException
 from ambari_commons.os_utils import remove_file
-from ambari_commons.os_windows import SvcStatusCallback, WinServiceController
+from ambari_commons.os_windows import SvcStatusCallback, WinServiceController, SERVICE_STATUS_RUNNING
 from ambari_metrics_collector.serviceConfiguration import get_properties, get_value_from_properties, DEBUG_MODE_KEY, \
   SUSPEND_START_MODE_KEY, PID_OUT_FILE, SERVER_OUT_FILE_KEY, SERVER_OUT_FILE, SERVICE_USERNAME_KEY, SERVICE_PASSWORD_KEY, \
   DEFAULT_CONF_DIR, EMBEDDED_HBASE_MASTER_SERVICE
@@ -166,7 +166,6 @@ def init_service_debug(options):
 
 
 def ensure_hdp_service_soft_dependencies():
-  ret = WinServiceController.EnsureServiceIsStarted(EMBEDDED_HBASE_MASTER_SERVICE)
-  if ret != 0:
-    err = 'ERROR: Cannot start service "{0}". Error = {1}'.format(EMBEDDED_HBASE_MASTER_SERVICE, ret)
+  if SERVICE_STATUS_RUNNING != WinServiceController.QueryStatus(EMBEDDED_HBASE_MASTER_SERVICE):
+    err = 'ERROR: Service "{0}" was not started.'.format(EMBEDDED_HBASE_MASTER_SERVICE)
     raise FatalException(1, err)

+ 1 - 0
ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams_service.py

@@ -27,6 +27,7 @@ from hbase_service import hbase_service
 def ams_service(name, action):
   import params
   if name == 'collector':
+    Service(params.ams_embedded_hbase_win_service_name, action=action)
     Service(params.ams_collector_win_service_name, action=action)
   elif name == 'monitor':
     Service(params.ams_monitor_win_service_name, action=action)

+ 13 - 6
ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_collector.py

@@ -26,12 +26,12 @@ from ams import ams
 from ams_service import ams_service
 from hbase import hbase
 from status import check_service_status
+from ambari_commons import OSConst
+from ambari_commons.os_family_impl import OsFamilyImpl
 
 class AmsCollector(Script):
   def install(self, env):
     self.install_packages(env)
-    # self.configure(env) # for security
-
 
   def configure(self, env, action = None):
     import params
@@ -42,16 +42,13 @@ class AmsCollector(Script):
 
   def start(self, env):
     self.configure(env, action = 'start') # for security
-
     ams_service('collector', action = 'start')
 
   def stop(self, env):
     import params
     env.set_params(params)
-
     # Sometimes, stop() may be called before start(), in case restart() is initiated right after installation
     self.configure(env, action = 'stop') # for security
-
     ams_service('collector', action = 'stop')
 
   def status(self, env):
@@ -59,6 +56,9 @@ class AmsCollector(Script):
     env.set_params(status_params)
     check_service_status(name='collector')
 
+
+@OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
+class AmsCollectorDefault(AmsCollector):
   def security_status(self, env):
     import status_params
 
@@ -71,7 +71,7 @@ class AmsCollector(Script):
                          "hbase.master.kerberos.principal",
                          "hbase.regionserver.keytab.file",
                          "hbase.regionserver.kerberos.principal"
-    ]
+                         ]
     props_read_check = ['hbase.master.keytab.file', 'hbase.regionserver.keytab.file']
     ams_hbase_site_expectations = build_expectations('hbase-site', props_value_check,
                                                      props_empty_check,
@@ -120,5 +120,12 @@ class AmsCollector(Script):
       self.put_structured_out({"securityIssuesFound": ". ".join(issues)})
       self.put_structured_out({"securityState": "UNSECURED"})
 
+
+@OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)
+class AmsCollectorWindows(AmsCollector):
+  def install(self, env):
+    self.install_packages(env)
+    self.configure(env) # for security
+
 if __name__ == "__main__":
   AmsCollector().execute()