Bläddra i källkod

HUE-6160 [libsentry] Parse host and port from sentry-site rpc-addresses

Jenny Kim 8 år sedan
förälder
incheckning
ab7be70f6e

+ 9 - 2
desktop/libs/libsentry/src/libsentry/sentry_site.py

@@ -129,8 +129,15 @@ def _get_server_properties(exempt_host=None):
     servers = []
     sentry_servers = get_sentry_server_rpc_addresses()
     for server in sentry_servers:
-      if server != exempt_host:
-        servers.append({'hostname': server, 'port': get_sentry_server_rpc_port()})
+      host = server
+      if ':' in server:
+        host, port = server.split(':')
+      elif get_sentry_server_rpc_port():
+        port = get_sentry_server_rpc_port()
+      else:
+        port = PORT.get()
+      if host != exempt_host:
+        servers.append({'hostname': host, 'port': int(port)})
   except Exception, e:
     raise PopupException(_('Error in retrieving Sentry server properties.'), detail=e)
 

+ 14 - 10
desktop/libs/libsentry/src/libsentry/tests.py

@@ -63,6 +63,7 @@ class TestWithSentry(object):
     self.rpc_addresses = ''
     if sentry_site.get_sentry_server_rpc_addresses() is not None:
       self.rpc_addresses = ','.join(sentry_site.get_sentry_server_rpc_addresses())
+    self.rpc_port = sentry_site.get_sentry_server_rpc_port() or '8038'
 
     self.tmpdir = tempfile.mkdtemp()
     self.resets = [
@@ -92,12 +93,12 @@ class TestWithSentry(object):
 
   def test_ha_failover_good_bad_bad(self):
     # Test with good-host,bad-host-1,bad-host-2
-    xml = self._sentry_site_xml(rpc_addresses='%s,bad-host-1,bad-host-2' % self.rpc_addresses)
+    xml = self._sentry_site_xml(rpc_addresses='%s,bad-host-1:8039,bad-host-2' % self.rpc_addresses, rpc_port=self.rpc_port)
     file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
     sentry_site.reset()
 
     api = get_api(self.user)
-    assert_equal('%s,bad-host-1,bad-host-2' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
+    assert_equal('%s,bad-host-1:8039,bad-host-2' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
     resp = api.list_sentry_roles_by_group(groupName='*')
     assert_true(isinstance(resp, list))
 
@@ -108,12 +109,12 @@ class TestWithSentry(object):
 
   def test_ha_failover_bad_bad_good(self):
     # Test with bad-host-1,bad-host-2,good-host
-    xml = self._sentry_site_xml(rpc_addresses='bad-host-1,bad-host-2,%s' % self.rpc_addresses)
+    xml = self._sentry_site_xml(rpc_addresses='bad-host-1:8039,bad-host-2,%s' % self.rpc_addresses, rpc_port=self.rpc_port)
     file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
     sentry_site.reset()
 
     api = get_api(self.user)
-    assert_equal('bad-host-1,bad-host-2,%s' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
+    assert_equal('bad-host-1:8039,bad-host-2,%s' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
     resp = api.list_sentry_roles_by_group(groupName='*')
     assert_true(isinstance(resp, list))
 
@@ -124,12 +125,12 @@ class TestWithSentry(object):
 
   def test_ha_failover_bad_good_bad(self):
     # Test with bad-host-1,good-host,bad-host-2
-    xml = self._sentry_site_xml(rpc_addresses='bad-host-1,%s,bad-host-2' % self.rpc_addresses)
+    xml = self._sentry_site_xml(rpc_addresses='bad-host-1:8039,%s,bad-host-2' % self.rpc_addresses, rpc_port=self.rpc_port)
     file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
     sentry_site.reset()
 
     api = get_api(self.user)
-    assert_equal('bad-host-1,%s,bad-host-2' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
+    assert_equal('bad-host-1:8039,%s,bad-host-2' % self.rpc_addresses, ','.join(sentry_site.get_sentry_server_rpc_addresses()))
     resp = api.list_sentry_roles_by_group(groupName='*')
     assert_true(isinstance(resp, list))
 
@@ -140,12 +141,12 @@ class TestWithSentry(object):
 
   def test_ha_failover_all_bad(self):
     # Test with all bad hosts
-    xml = self._sentry_site_xml(rpc_addresses='bad-host-1,bad-host-2')
+    xml = self._sentry_site_xml(rpc_addresses='bad-host-1:8039,bad-host-2', rpc_port=self.rpc_port)
     file(os.path.join(self.tmpdir, 'sentry-site.xml'), 'w').write(xml)
     sentry_site.reset()
 
     api = get_api(self.user)
-    assert_equal('bad-host-1,bad-host-2', ','.join(sentry_site.get_sentry_server_rpc_addresses()))
+    assert_equal('bad-host-1:8039,bad-host-2', ','.join(sentry_site.get_sentry_server_rpc_addresses()))
     assert_raises(PopupException, api.list_sentry_roles_by_group, '*')
 
     api2 = get_api2(self.user, 'solr')
@@ -169,7 +170,7 @@ class TestWithSentry(object):
     assert_true(isinstance(resp, list))
 
 
-  def _sentry_site_xml(self, rpc_addresses):
+  def _sentry_site_xml(self, rpc_addresses, rpc_port='8038'):
     config = lxml.etree.parse(self.config_path)
     root = config.getroot()
     properties = config.findall('property')
@@ -178,4 +179,7 @@ class TestWithSentry(object):
       if name.text == 'sentry.service.client.server.rpc-address':
         value = prop.find('value')
         value.text = rpc_addresses
-        return lxml.etree.tostring(root)
+      elif name.text == 'sentry.service.client.server.rpc-port':
+        value = prop.find('value')
+        value.text = rpc_port
+    return lxml.etree.tostring(root)