RANGER-602: Solr client in SolrCloud mode should work with zookeeper settings also
Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/428afbce Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/428afbce Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/428afbce Branch: refs/heads/tag-policy Commit: 428afbce3b80d0bbcdb079ee7b0f9ed072fe8919 Parents: ad45c55 Author: Don Bosco Durai <[email protected]> Authored: Tue Nov 24 05:20:14 2015 -0800 Committer: Don Bosco Durai <[email protected]> Committed: Tue Nov 24 05:20:14 2015 -0800 ---------------------------------------------------------------------- .../java/org/apache/ranger/solr/SolrMgr.java | 100 ++++++++++++++----- 1 file changed, 74 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428afbce/security-admin/src/main/java/org/apache/ranger/solr/SolrMgr.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/solr/SolrMgr.java b/security-admin/src/main/java/org/apache/ranger/solr/SolrMgr.java index 2a57fa1..603e46a 100644 --- a/security-admin/src/main/java/org/apache/ranger/solr/SolrMgr.java +++ b/security-admin/src/main/java/org/apache/ranger/solr/SolrMgr.java @@ -26,6 +26,7 @@ import org.apache.ranger.biz.RangerBizUtil; import org.apache.ranger.common.PropertiesUtil; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.BinaryRequestWriter; +import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -49,6 +50,9 @@ public class SolrMgr { volatile boolean initDone = false; final static String SOLR_URLS_PROP = "ranger.audit.solr.urls"; + final static String SOLR_ZK_HOSTS = "ranger.audit.solr.zookeepers"; + final static String SOLR_COLLECTION_NAME = "ranger.audit.solr.collection.name"; + public static final String DEFAULT_COLLECTION_NAME = "ranger_audits"; public SolrMgr() { @@ -59,6 +63,17 @@ public class SolrMgr { synchronized (lock) { if (!initDone) { if (rangerBizUtil.getAuditDBType().equalsIgnoreCase("solr")) { + String zkHosts = PropertiesUtil + .getProperty(SOLR_ZK_HOSTS); + if (zkHosts == null) { + zkHosts = PropertiesUtil + .getProperty("ranger.audit.solr.zookeeper"); + } + if (zkHosts == null) { + zkHosts = PropertiesUtil + .getProperty("ranger.solr.zookeeper"); + } + String solrURL = PropertiesUtil .getProperty(SOLR_URLS_PROP); @@ -72,38 +87,71 @@ public class SolrMgr { solrURL = PropertiesUtil .getProperty("ranger.solr.url"); } - if (solrURL == null || solrURL.isEmpty() - || solrURL.equalsIgnoreCase("none")) { - logger.fatal("Solr URL for Audit is empty. Please set property " - + SOLR_URLS_PROP); - } else { - try { - solrClient = new HttpSolrClient(solrURL); - if (solrClient == null) { - logger.fatal("Can't connect to Solr. URL=" - + solrURL); - } else { - if (solrClient instanceof HttpSolrClient) { - HttpSolrClient httpSolrClient = (HttpSolrClient) solrClient; - httpSolrClient - .setAllowCompression(true); - httpSolrClient - .setConnectionTimeout(1000); - // httpSolrClient.setSoTimeout(10000); - httpSolrClient.setMaxRetries(1); - httpSolrClient - .setRequestWriter(new BinaryRequestWriter()); - } - initDone = true; - } + if (zkHosts != null && !zkHosts.trim().equals("") + && !zkHosts.trim().equals("none")) { + zkHosts = zkHosts.trim(); + String collectionName = PropertiesUtil + .getProperty(SOLR_COLLECTION_NAME); + if (collectionName == null + || collectionName.equalsIgnoreCase("none")) { + collectionName = DEFAULT_COLLECTION_NAME; + } + + logger.info("Solr zkHosts=" + zkHosts + + ", collectionName=" + collectionName); + + try { + // Instantiate + CloudSolrClient solrCloudClient = new CloudSolrClient( + zkHosts); + solrCloudClient + .setDefaultCollection(collectionName); + solrClient = solrCloudClient; } catch (Throwable t) { logger.fatal( - "Can't connect to Solr server. URL=" - + solrURL, t); + "Can't connect to Solr server. ZooKeepers=" + + zkHosts + ", collection=" + + collectionName, t); + } + + } else { + if (solrURL == null || solrURL.isEmpty() + || solrURL.equalsIgnoreCase("none")) { + logger.fatal("Solr ZKHosts and URL for Audit are empty. Please set property " + + SOLR_ZK_HOSTS + + " or " + + SOLR_URLS_PROP); + } else { + try { + solrClient = new HttpSolrClient(solrURL); + if (solrClient == null) { + logger.fatal("Can't connect to Solr. URL=" + + solrURL); + } else { + if (solrClient instanceof HttpSolrClient) { + HttpSolrClient httpSolrClient = (HttpSolrClient) solrClient; + httpSolrClient + .setAllowCompression(true); + httpSolrClient + .setConnectionTimeout(1000); + // httpSolrClient.setSoTimeout(10000); + httpSolrClient.setMaxRetries(1); + httpSolrClient + .setRequestWriter(new BinaryRequestWriter()); + } + initDone = true; + } + + } catch (Throwable t) { + logger.fatal( + "Can't connect to Solr server. URL=" + + solrURL, t); + } } } } + } } }
