Explorar o código

AMBARI-11174. Modify rolling upgrade process to support both ranger admin HA and ranger-kms components. (Selvamohan Neethiraj via yusaku)

Yusaku Sako %!s(int64=10) %!d(string=hai) anos
pai
achega
7fba253156

+ 32 - 2
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py

@@ -25,9 +25,12 @@ from resource_management.core.logger import Logger
 from resource_management.core import shell
 from ranger_service import ranger_service
 import upgrade
+import os, errno
 
 class RangerAdmin(Script):
 
+  upgrade_marker_file = '/tmp/rangeradmin_ru.inprogress'
+
   def get_stack_to_component(self):
     return {"HDP": "ranger-admin"}
 
@@ -51,11 +54,17 @@ class RangerAdmin(Script):
     env.set_params(params)
     Execute(format('{params.ranger_stop}'), user=params.unix_user)
 
+
   def pre_rolling_restart(self, env):
     import params
     env.set_params(params)
+    self.set_ru_rangeradmin_in_progress()
     upgrade.prestart(env, "ranger-admin")
 
+  def post_rolling_restart(self,env):
+     if os.path.isfile(RangerAdmin.upgrade_marker_file):
+        os.remove(RangerAdmin.upgrade_marker_file) 
+
   def start(self, env, rolling_restart=False):
     import params
     env.set_params(params)
@@ -68,8 +77,11 @@ class RangerAdmin(Script):
     code, output = shell.call(cmd, timeout=20)
 
     if code != 0:
-      Logger.debug('Ranger admin process not running')
-      raise ComponentIsNotRunning()
+      if self.is_ru_rangeradmin_in_progress():
+         Logger.info('Ranger admin process not running - skipping as rolling upgrade is in progress')
+      else:
+         Logger.debug('Ranger admin process not running')
+         raise ComponentIsNotRunning()
     pass
 
   def configure(self, env):
@@ -82,6 +94,24 @@ class RangerAdmin(Script):
 
     ranger('ranger_admin')
 
+  def set_ru_rangeradmin_in_progress(self):
+    config_dir = os.path.dirname(RangerAdmin.upgrade_marker_file)
+    try:
+       msg = "Starting RU"
+       if (not os.path.exists(config_dir)):
+          os.makedirs(config_dir)
+       ofp = open(RangerAdmin.upgrade_marker_file, 'w')
+       ofp.write(msg)
+       ofp.close()
+    except OSError as exc:
+       if exc.errno == errno.EEXIST and os.path.isdir(config_dir): 
+          pass
+       else:
+          raise
+
+  def is_ru_rangeradmin_in_progress(self):
+    return os.path.isfile(RangerAdmin.upgrade_marker_file)
 
 if __name__ == "__main__":
   RangerAdmin().execute()
+

+ 11 - 4
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/service_check.py

@@ -18,9 +18,13 @@ limitations under the License.
 """
 
 from resource_management import *
+import os
 
 
 class RangerServiceCheck(Script):
+
+  upgrade_marker_file = '/tmp/rangeradmin_ru.inprogress'
+
   def service_check(self, env):
     import params
 
@@ -34,9 +38,11 @@ class RangerServiceCheck(Script):
     if code == 0:
       Logger.info('Ranger admin process up and running')
     else:
-      Logger.debug('Ranger admin process not running')
-      raise ComponentIsNotRunning()
-
+      if (self.is_ru_rangeradmin_in_progress()):
+         Logger.info('Ranger admin process not running - skipping as rolling upgrade is in progress')
+      else
+         Logger.debug('Ranger admin process not running')
+         raise ComponentIsNotRunning()
   pass
 
 
@@ -48,9 +54,10 @@ class RangerServiceCheck(Script):
     else:
       Logger.debug('Ranger usersync process not running')
       raise ComponentIsNotRunning()
-
   pass
 
+  def is_ru_rangeradmin_in_progress(self):
+    return os.path.isfile(RangerServiceCheck.upgrade_marker_file)
 
 if __name__ == "__main__":
   RangerServiceCheck().execute()

+ 5 - 0
ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py

@@ -54,5 +54,10 @@ class KmsServer(Script):
     env.set_params(params)
     kms()
 
+  def pre_rolling_restart(self, env):
+    import params
+    env.set_params(params)
+    upgrade.prestart(env, "ranger-kms-server")
+
 if __name__ == "__main__":
   KmsServer().execute()

+ 20 - 1
ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml

@@ -50,7 +50,11 @@
         </task>
       </execute-stage>
 
-      <execute-stage service="RANGER" component="RANGER_ADMIN" title="Pre Upgrade Ranger">
+      <execute-stage service="RANGER" component="RANGER_ADMIN" title="Pre Upgrade Ranger Admin">
+        <task xsi:type="execute" hosts="master">
+            <script>scripts/ranger_admin.py</script>
+            <function>pre_rolling_restart</function>
+        </task>
         <task xsi:type="manual">
           <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database</message>
         </task>
@@ -72,6 +76,13 @@
       </service>
     </group>
 
+    <group name="RANGER_KMS" title="Ranger_KMS">
+      <skippable>true</skippable>
+      <service name="RANGER_KMS">
+        <component>RANGER_KMS_SERVER</component>
+      </service>
+    </group>
+
     <group name="CORE_MASTER" title="Core Masters">
       <service-check>false</service-check>
       <service name="HDFS">
@@ -324,6 +335,14 @@
       </component>
     </service>
 
+    <service name="RANGER_KMS">
+      <component name="RANGER_KMS_SERVER">
+        <upgrade>
+          <task xsi:type="restart" />
+        </upgrade>
+      </component>
+    </service>
+
     <service name="HDFS">
       <component name="NAMENODE">
         <upgrade>