Переглянути джерело

HUE-7299 [solr] Use the proper LISTALIAS API in Solr 6+ to list aliases

Romain Rigaux 8 роки тому
батько
коміт
e05e9a9

+ 1 - 1
desktop/libs/indexer/src/indexer/controller.py

@@ -292,6 +292,6 @@ class CollectionManagerController(object):
 
         ROW_COUNT += len(dataset)
     except Exception, e:
-      raise PopupException(_('Could not update index.'), detail=e)
+      raise PopupException(_('Could not update index: %s') % e)
 
     return ROW_COUNT

+ 4 - 1
desktop/libs/indexer/src/indexer/solr_client.py

@@ -68,7 +68,10 @@ class SolrClient(object):
 
       if self.is_solr_cloud_mode():
         try:
-          solr_aliases = self.api.aliases()
+          if self.is_solr_six_or_more():
+            solr_aliases = self.api.list_aliases()
+          else:
+            solr_aliases = self.api.aliases()
           for name in solr_aliases:
             collections = solr_aliases[name].split()
             indexes.append({'name': name, 'type': 'alias', 'collections': collections})

+ 18 - 6
desktop/libs/libsolr/src/libsolr/api.py

@@ -358,14 +358,13 @@ class SolrApi(object):
       raise PopupException(e, title=_('Error while accessing Solr'))
 
 
-  def aliases(self):
+  def list_aliases(self):
     try:
-      params = self._get_params() + ( # Waiting for SOLR-4968
-          ('detail', 'true'),
-          ('path', '/aliases.json'),
+      params = self._get_params() + (
+          ('action', 'LISTALIASES'),
+          ('wt', 'json'),
       )
-      response = self._root.get('zookeeper', params=params)
-      return json.loads(response['znode'].get('data', '{}')).get('collection', {})
+      return self._root.get('admin/collections', params=params)['aliases']
     except RestException, e:
       raise PopupException(e, title=_('Error while accessing Solr'))
 
@@ -730,6 +729,19 @@ class SolrApi(object):
     return self._get_json(response)
 
 
+  # Deprecated
+  def aliases(self):
+    try:
+      params = self._get_params() + ( # Waiting for SOLR-4968
+          ('detail', 'true'),
+          ('path', '/aliases.json'),
+      )
+      response = self._root.get('zookeeper', params=params)
+      return json.loads(response['znode'].get('data', '{}')).get('collection', {})
+    except RestException, e:
+      raise PopupException(e, title=_('Error while accessing Solr'))
+
+
   # Deprecated
   def create_collection(self, name, shards=1, replication=1):
     try: