This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new e986ea6  RANGER-2377 : Make solr bootstrapping configurable
e986ea6 is described below

commit e986ea6c799b365bf2122d48a894cc7e4aa1c45a
Author: Bhavik Patel <[email protected]>
AuthorDate: Mon Apr 8 11:24:22 2019 +0530

    RANGER-2377 : Make solr bootstrapping configurable
    
    Signed-off-by: Pradeep <[email protected]>
---
 .../ranger/server/tomcat/EmbeddedServer.java       | 26 +++++++++++++---------
 .../server/tomcat/SolrCollectionBoostrapper.java   | 24 +++++++++++++++-----
 .../conf.dist/ranger-admin-default-site.xml        |  9 ++++++++
 .../main/resources/conf.dist/ranger-admin-site.xml |  9 ++++++++
 4 files changed, 52 insertions(+), 16 deletions(-)

diff --git 
a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
 
b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
index 8633e00..3963df1 100644
--- 
a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
+++ 
b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
@@ -57,6 +57,7 @@ public class EmbeddedServer {
        private static final String AUTH_TYPE_KERBEROS = "kerberos";
     private static final String AUTHENTICATION_TYPE = 
"hadoop.security.authentication";
     private static final String ADMIN_USER_PRINCIPAL = 
"ranger.admin.kerberos.principal";
+    private static final String SOLR_BOOTSTRAP_ENABLED = 
"ranger.audit.solr.bootstrap.enabled";
     private static final String ADMIN_USER_KEYTAB = 
"ranger.admin.kerberos.keytab";
 
        private static final String ADMIN_NAME_RULES = 
"hadoop.security.auth_to_local";
@@ -269,16 +270,21 @@ public class EmbeddedServer {
        private void startServer(final Tomcat server) {
                try {
 
-                        try {
-                                String servername = getConfig("servername");
-                                LOG.info("Server Name : " + servername);
-                                if 
(servername.equalsIgnoreCase(ADMIN_SERVER_NAME)) {
-                                        SolrCollectionBoostrapper solrSetup = 
new SolrCollectionBoostrapper();
-                                        solrSetup.start();
-                                }
-                        } catch (Exception e) {
-                                LOG.severe("Error while setting solr " + e);
-                        }
+                       try {
+                               boolean solrBootstrapEnabled = 
Boolean.valueOf(getConfig(
+                                               SOLR_BOOTSTRAP_ENABLED, 
"true"));
+                               if (solrBootstrapEnabled) {
+                                       String servername = 
getConfig("servername");
+                                       LOG.info("Server Name : " + servername);
+                                       if 
(servername.equalsIgnoreCase(ADMIN_SERVER_NAME)) {
+                                               SolrCollectionBoostrapper 
solrSetup = new SolrCollectionBoostrapper();
+                                               solrSetup.start();
+                                       }
+                               }
+                       } catch (Exception e) {
+                               LOG.severe("Error while setting solr " + e);
+                       }
+
                        server.start();
                        server.getServer().await();
                        shutdownServer();
diff --git 
a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/SolrCollectionBoostrapper.java
 
b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/SolrCollectionBoostrapper.java
index 0d85e91..8a417a0 100644
--- 
a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/SolrCollectionBoostrapper.java
+++ 
b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/SolrCollectionBoostrapper.java
@@ -68,12 +68,14 @@ public class SolrCollectionBoostrapper extends Thread {
        final static String SOLR_MAX_SHARD_PER_NODE = 
"ranger.audit.solr.max.shards.per.node";
        final static String SOLR_NO_REPLICA = "ranger.audit.solr.no.replica";
        final static String SOLR_TIME_INTERVAL = 
"ranger.audit.solr.time.interval";
+       final static String SOLR_BOOTSTRP_MAX_RETRY = 
"ranger.audit.solr.max.retry";
        final static String SOLR_ACL_USER_LIST_SASL = 
"ranger.audit.solr.acl.user.list.sasl";
        final static String PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG = 
"java.security.auth.login.config";
        public static final String DEFAULT_COLLECTION_NAME = "ranger_audits";
        public static final String DEFAULT_CONFIG_NAME = "ranger_audits";
        public static final String DEFAULT_SERVICE_NAME = "rangeradmin";
        public static final long DEFAULT_SOLR_TIME_INTERVAL_MS = 60000L;
+       public static final int DEFAULT_SOLR_BOOTSTRP_MAX_RETRY  = 30;
        private static final String CONFIG_FILE = "ranger-admin-site.xml";
        private static final String CORE_SITE_CONFIG_FILENAME = "core-site.xml";
        private static final String DEFAULT_CONFIG_FILENAME = 
"ranger-admin-default-site.xml";
@@ -101,6 +103,8 @@ public class SolrCollectionBoostrapper extends Thread {
        int no_of_replicas;
        int no_of_shards;
        int max_node_per_shards;
+       int max_retry;
+       int retry_counter = 0;
        Long time_interval;
        SolrClient solrClient = null;
        CloudSolrClient solrCloudClient = null;
@@ -148,6 +152,8 @@ public class SolrCollectionBoostrapper extends Thread {
                time_interval = getLongConfig(SOLR_TIME_INTERVAL,
                                DEFAULT_SOLR_TIME_INTERVAL_MS);
                logger.info("Solr time interval provided is : " + 
time_interval);
+               
+               max_retry = getIntConfig(SOLR_BOOTSTRP_MAX_RETRY, 
DEFAULT_SOLR_BOOTSTRP_MAX_RETRY);
                if (System.getProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG) == 
null) {
                        System.setProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG,
                                        "/dev/null");
@@ -178,7 +184,7 @@ public class SolrCollectionBoostrapper extends Thread {
                                                h -> 
h.equalsIgnoreCase("none"))) {
                        logger.info("Solr zkHosts=" + zkHosts + ", 
collectionName="
                                        + solr_collection_name);
-                       while (!is_completed) {
+                       while (!is_completed && retry_counter < max_retry) {
                                try {
                                        if (connect(zookeeperHosts)) {
                                                if (solr_cloud_mode) {
@@ -356,13 +362,19 @@ public class SolrCollectionBoostrapper extends Thread {
        }
 
        private void logErrorMessageAndWait(String msg, Exception exception) {
+               retry_counter++;
+               String attempMessage = (retry_counter == max_retry) ? ("Maximum 
attempts reached for setting up Solr.")
+                               : ("[retrying after " + time_interval
+                                               + " ms]. No. of attempts left : 
"
+                                               + (max_retry - retry_counter)
+                                               + " . Maximum attempts : " + 
max_retry);
+               StringBuilder errorBuilder = new StringBuilder();
+               errorBuilder.append(msg);
                if (exception != null) {
-                       logger.severe(msg + " [retrying after " + time_interval
-                                       + " ms]. Error : " + exception);
-               } else {
-                       logger.severe(msg + " [retrying after " + time_interval 
+ " ms]");
+                       errorBuilder.append("Error : 
".concat(exception.getMessage() + ". "));
                }
-
+               errorBuilder.append(attempMessage);
+               logger.severe(errorBuilder.toString());
                try {
                        Thread.sleep(time_interval);
                } catch (InterruptedException ex) {
diff --git 
a/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml 
b/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
index 189f7b8..8ebeeb5 100644
--- a/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
+++ b/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
@@ -441,6 +441,15 @@
                <description>Time in milliseconds</description>
        </property>
        <property>
+        <name>ranger.audit.solr.bootstrap.enabled</name>
+        <value>true</value>
+    </property>
+       <property>
+               <name>ranger.audit.solr.max.retry</name>
+               <value>30</value>
+               <description>Maximum no. of retry to setup solr</description>
+       </property>
+       <property>
                <name>ranger.sha256Password.update.disable</name>
                <value>true</value>
                <description></description>
diff --git a/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml 
b/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
index 26a9d64..2e584a7 100644
--- a/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
+++ b/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
@@ -319,4 +319,13 @@
                 <name>ranger.audit.solr.acl.user.list.sasl</name>
                 <value></value>
         </property>
+        <property>
+                <name>ranger.audit.solr.bootstrap.enabled</name>
+                <value></value>
+        </property>
+        <property>
+                               <name>ranger.audit.solr.max.retry</name>
+                               <value></value>
+                               <description>Maximum no. of retry to setup 
solr</description>
+               </property>
 </configuration>

Reply via email to