Explorar o código

AMBARI-11573. Add SecureBulkLoadEndpoint to hbase.coprocessor.region.classes even for un secure hbase cluster - Enabling testcase again

Srimanth Gunturi %!s(int64=10) %!d(string=hai) anos
pai
achega
43747102b5

+ 18 - 15
ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py

@@ -522,6 +522,15 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
       putHbaseEnvProperty('hbase_max_direct_memory_size', '')
 
     # Authorization
+    hbase_coprocessor_region_classes = None
+    if 'hbase.coprocessor.region.classes' in configurations["hbase-site"]["properties"]:
+      hbase_coprocessor_region_classes = configurations["hbase-site"]["properties"]["hbase.coprocessor.region.classes"].strip()
+    elif 'hbase.coprocessor.region.classes' in services['configurations']["hbase-site"]["properties"]:
+      hbase_coprocessor_region_classes = services['configurations']["hbase-site"]["properties"]["hbase.coprocessor.region.classes"].strip()
+    if hbase_coprocessor_region_classes:
+      coprocessorRegionClassList = hbase_coprocessor_region_classes.split(',')
+    else:
+      coprocessorRegionClassList = []
     # If configurations has it - it has priority as it is calculated. Then, the service's configurations will be used.
     hbase_security_authorization = None
     if 'hbase-site' in configurations and 'hbase.security.authorization' in configurations['hbase-site']['properties']:
@@ -531,38 +540,32 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
     if hbase_security_authorization:
       if 'true' == hbase_security_authorization.lower():
         putHbaseProperty('hbase.coprocessor.master.classes', "org.apache.hadoop.hbase.security.access.AccessController")
-        putHbaseProperty('hbase.coprocessor.region.classes', "org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint,org.apache.hadoop.hbase.security.access.AccessController")
+        coprocessorRegionClassList.append("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint")
+        coprocessorRegionClassList.append("org.apache.hadoop.hbase.security.access.AccessController")
         putHbaseProperty('hbase.coprocessor.regionserver.classes', "org.apache.hadoop.hbase.security.access.AccessController")
       else:
         putHbaseProperty('hbase.coprocessor.master.classes', "")
-        putHbaseProperty('hbase.coprocessor.region.classes', "org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint")
+        coprocessorRegionClassList.append("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint")
         putHbaseSitePropertyAttributes('hbase.coprocessor.regionserver.classes', 'delete', 'true')
     else:
-      putHbaseProperty('hbase.coprocessor.region.classes', "org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint")
+      coprocessorRegionClassList.append("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint")
       putHbaseSitePropertyAttributes('hbase.coprocessor.regionserver.classes', 'delete', 'true')
 
     # Authentication
     if 'hbase-site' in services['configurations'] and 'hbase.security.authentication' in services['configurations']['hbase-site']['properties']:
-      hbase_coprocessor_region_classes = None
-      if 'hbase.coprocessor.region.classes' in configurations["hbase-site"]["properties"]:
-        hbase_coprocessor_region_classes = configurations["hbase-site"]["properties"]["hbase.coprocessor.region.classes"].strip()
-      elif 'hbase.coprocessor.region.classes' in services['configurations']["hbase-site"]["properties"]:
-        hbase_coprocessor_region_classes = services['configurations']["hbase-site"]["properties"]["hbase.coprocessor.region.classes"].strip()
-      if hbase_coprocessor_region_classes:
-        coprocessorRegionClassList = hbase_coprocessor_region_classes.split(',')
-      else:
-        coprocessorRegionClassList = []
       if 'kerberos' == services['configurations']['hbase-site']['properties']['hbase.security.authentication'].lower():
         if 'org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint' not in coprocessorRegionClassList:
           coprocessorRegionClassList.append('org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint')
-          putHbaseProperty('hbase.coprocessor.region.classes', ','.join(coprocessorRegionClassList))
         if 'org.apache.hadoop.hbase.security.token.TokenProvider' not in coprocessorRegionClassList:
           coprocessorRegionClassList.append('org.apache.hadoop.hbase.security.token.TokenProvider')
-          putHbaseProperty('hbase.coprocessor.region.classes', ','.join(coprocessorRegionClassList))
       else:
         if 'org.apache.hadoop.hbase.security.token.TokenProvider' in coprocessorRegionClassList:
           coprocessorRegionClassList.remove('org.apache.hadoop.hbase.security.token.TokenProvider')
-          putHbaseProperty('hbase.coprocessor.region.classes', ','.join(coprocessorRegionClassList))
+
+    #Remove duplicates
+    uniqueCoprocessorRegionClassList = []
+    [uniqueCoprocessorRegionClassList.append(i) for i in coprocessorRegionClassList if not uniqueCoprocessorRegionClassList.count(i)]
+    putHbaseProperty('hbase.coprocessor.region.classes', ','.join(set(uniqueCoprocessorRegionClassList)))
 
 
   def recommendTezConfigurations(self, configurations, clusterData, services, hosts):

+ 5 - 4
ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py

@@ -1759,7 +1759,7 @@ class TestHDP22StackAdvisor(TestCase):
     self.stackAdvisor.recommendHbaseEnvConfigurations(configurations, clusterData, None, None)
     self.assertEquals(configurations, expected)
 
-  def disabled_test_recommendHbaseSiteConfigurations(self):
+  def test_recommendHbaseSiteConfigurations(self):
     servicesList = ["HBASE"]
     configurations = {}
     components = []
@@ -1872,7 +1872,7 @@ class TestHDP22StackAdvisor(TestCase):
 
     # Test when hbase.security.authentication = kerberos
     services['configurations']['hbase-site']['properties']['hbase.security.authentication'] = 'kerberos'
-    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint,org.apache.hadoop.hbase.security.token.TokenProvider'
+    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations, expected)
 
@@ -1886,16 +1886,17 @@ class TestHDP22StackAdvisor(TestCase):
     configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes', None)
     services['configurations']['hbase-site']['properties']['hbase.security.authentication'] = 'kerberos'
     services['configurations']['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'a.b.c.d'
-    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'a.b.c.d,org.apache.hadoop.hbase.security.token.TokenProvider'
+    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'a.b.c.d,org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations, expected)
 
     # Test when hbase.security.authentication = kerberos AND authorization = true
     configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes', None)
+    services['configurations']['hbase-site']['properties'].pop('hbase.coprocessor.region.classes', None)
     services['configurations']['hbase-site']['properties']['hbase.security.authentication'] = 'kerberos'
     services['configurations']['hbase-site']['properties']['hbase.security.authorization'] = 'true'
     expected['hbase-site']['properties']['hbase.coprocessor.master.classes'] = "org.apache.hadoop.hbase.security.access.AccessController"
-    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.token.TokenProvider'
+    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 'org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     expected['hbase-site']['properties']['hbase.coprocessor.regionserver.classes'] = "org.apache.hadoop.hbase.security.access.AccessController"
     self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations, expected)