Bläddra i källkod

[libzookeeper] Move namespace children data retrieval to libzookeeper

HiveServer2 HA uses similar logic
Romain Rigaux 10 år sedan
förälder
incheckning
c692538

+ 5 - 19
desktop/libs/libsentry/src/libsentry/api.py

@@ -21,11 +21,11 @@ import random
 import threading
 import time
 
-from kazoo.client import KazooClient
+from django.utils.translation import ugettext as _
 
 from desktop.lib.exceptions_renderable import PopupException
-from django.utils.translation import ugettext as _
-from libzookeper.conf import PRINCIPAL_NAME
+from libzookeeper.conf import PRINCIPAL_NAME
+from libzookeeper.models import get_children_data
 
 from libsentry.client import SentryClient
 from libsentry.conf import HOSTNAME, PORT
@@ -254,27 +254,13 @@ def _get_server_properties():
     try:
       if not _api_cache:
 
-        if get_sentry_server_ha_has_security():
-          sasl_server_principal = PRINCIPAL_NAME.get()
-          LOG.info("Using %s for ZooKeeper  principal name" % sasl_server_principal)
-        else:
-          sasl_server_principal = None
-
-        zk = KazooClient(hosts=get_sentry_server_ha_zookeeper_quorum(), read_only=True, sasl_server_principal=sasl_server_principal)
-
-        zk.start()
-
         servers = []
-        namespace = get_sentry_server_ha_zookeeper_namespace()
+        sentry_servers = get_children_data(ensemble=get_sentry_server_ha_zookeeper_quorum(), namespace=get_sentry_server_ha_zookeeper_namespace())
 
-        children = zk.get_children("/%s/sentry-service/sentry-service/" % namespace)
-        for node in children:
-          data, stat = zk.get("/%s/sentry-service/sentry-service/%s" % (namespace, node))
+        for data in sentry_servers:
           server = json.loads(data.decode("utf-8"))
           servers.append({'hostname': server['address'], 'port': server['sslPort'] if server['sslPort'] else server['port']})
 
-        zk.stop()
-
         _api_cache = servers
     finally:
       _api_cache_lock.release()

+ 23 - 0
desktop/libs/libzookeeper/src/libzookeeper/models.py

@@ -14,3 +14,26 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
+import json
+
+from kazoo.client import KazooClient
+from libzookeeper.conf import PRINCIPAL_NAME
+
+
+def get_children_data(ensemble, namespace, read_only=True):
+  zk = KazooClient(hosts=ensemble, read_only=read_only, sasl_server_principal=PRINCIPAL_NAME.get())
+
+  zk.start()
+
+  children_data = []
+
+  children = zk.get_children(namespace)
+
+  for node in children:
+    data, stat = zk.get("%s/%s" % (namespace, node))
+    children_data.append(data)
+
+  zk.stop()
+  
+  return children_data