Эх сурвалжийг харах

HUE-7585 [core] Properly detect if Solr is kerberized but not Sentry protected

Romain Rigaux 8 жил өмнө
parent
commit
4598fc71ac

+ 17 - 2
desktop/libs/indexer/src/indexer/solr_client.py

@@ -44,6 +44,7 @@ _IS_SOLR_CLOUD = None
 _IS_SOLR_6_OR_MORE = None
 _IS_SOLR_WITH_HDFS = None
 _ZOOKEEPER_HOST = None
+_IS_SENTRY_PROTECTED = None
 
 
 class SolrClientException(Exception):
@@ -224,6 +225,15 @@ class SolrClient(object):
     return _IS_SOLR_WITH_HDFS
 
 
+  def is_sentry_protected(self):
+    global _IS_SENTRY_PROTECTED
+
+    if _IS_SENTRY_PROTECTED is None:
+      self._fillup_properties()
+
+    return _IS_SENTRY_PROTECTED
+
+
   def get_zookeeper_host(self):
     global _ZOOKEEPER_HOST
 
@@ -241,7 +251,8 @@ class SolrClient(object):
           df=df,
           solr_cloud_mode=True,
           is_solr_six_or_more=self.is_solr_six_or_more(),
-          is_solr_hdfs_mode=self.is_solr_with_hdfs()
+          is_solr_hdfs_mode=self.is_solr_with_hdfs(),
+          is_sentry_protected=self.is_sentry_protected()
       )
 
       try:
@@ -286,6 +297,7 @@ class SolrClient(object):
     global _IS_SOLR_6_OR_MORE
     global _IS_SOLR_WITH_HDFS
     global _ZOOKEEPER_HOST
+    global _IS_SENTRY_PROTECTED
 
     properties = self.api.info_system()
 
@@ -300,6 +312,8 @@ class SolrClient(object):
         _IS_SOLR_WITH_HDFS = True
       if '-DzkHost=' in command_line_arg:
         _ZOOKEEPER_HOST = command_line_arg.split('-DzkHost=', 1)[1]
+      if '-Dsolr.authorization.sentry.site' in command_line_arg:
+        _IS_SENTRY_PROTECTED = True
 
 
   def _reset_properties(self):
@@ -307,8 +321,9 @@ class SolrClient(object):
     global _IS_SOLR_6_OR_MORE
     global _IS_SOLR_WITH_HDFS
     global _ZOOKEEPER_HOST
+    global _IS_SENTRY_PROTECTED
 
-    _IS_SOLR_CLOUD = _IS_SOLR_6_OR_MORE = _IS_SOLR_6_OR_MORE = _IS_SOLR_WITH_HDFS = _ZOOKEEPER_HOST = None
+    _IS_SOLR_CLOUD = _IS_SOLR_6_OR_MORE = _IS_SOLR_6_OR_MORE = _IS_SOLR_WITH_HDFS = _ZOOKEEPER_HOST = _IS_SENTRY_PROTECTED = None
 
 
   # Used by morphline indexer

+ 2 - 3
desktop/libs/indexer/src/indexer/utils.py

@@ -32,7 +32,6 @@ from django.conf import settings
 from django.utils.translation import ugettext as _
 
 from desktop.lib.i18n import force_unicode, smart_str
-from libsentry.conf import is_enabled as is_sentry_enabled
 
 from indexer import conf
 from indexer.models import DATE_FIELD_TYPES, TEXT_FIELD_TYPES, INTEGER_FIELD_TYPES, DECIMAL_FIELD_TYPES, BOOLEAN_FIELD_TYPES
@@ -88,7 +87,7 @@ class SolrConfigXml(object):
     self.xml = force_unicode(force_unicode(self.xml).replace(u'<str name="df">text</str>', u'<str name="df">%s</str>' % force_unicode(df) if df is not None else ''))
 
 
-def copy_configs(fields, unique_key_field, df, solr_cloud_mode=True, is_solr_six_or_more=False, is_solr_hdfs_mode=True):
+def copy_configs(fields, unique_key_field, df, solr_cloud_mode=True, is_solr_six_or_more=False, is_solr_hdfs_mode=True, is_sentry_protected=False):
   # Create temporary copy of solr configs
   tmp_path = tempfile.mkdtemp()
 
@@ -118,7 +117,7 @@ def copy_configs(fields, unique_key_field, df, solr_cloud_mode=True, is_solr_six
       else:
         solr_config_name = 'solrconfig.xml.solr6NonHdfs'
 
-    if is_sentry_enabled():
+    if is_sentry_protected:
       solr_config_name += '.secure'
 
     solrconfig = 'conf/%s' % solr_config_name