From 2fc641f92c4afdcb40682eee848518208a7afcb4 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 1 Jun 2017 13:35:59 -0400 Subject: [PATCH] SEARCH-403: Fully integrated DB_ID_RANGE shard method --- .../solr/tracker/DocRouterFactory.java | 19 +++++++------- .../solr/AbstractAlfrescoDistributedTest.java | 26 ++++++++++++++----- ...butedDbidRangeAlfrescoSolrTrackerTest.java | 1 - 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/alfresco-search/src/main/java/org/alfresco/solr/tracker/DocRouterFactory.java b/alfresco-search/src/main/java/org/alfresco/solr/tracker/DocRouterFactory.java index fc56f7913..7cc98d731 100644 --- a/alfresco-search/src/main/java/org/alfresco/solr/tracker/DocRouterFactory.java +++ b/alfresco-search/src/main/java/org/alfresco/solr/tracker/DocRouterFactory.java @@ -21,6 +21,7 @@ package org.alfresco.solr.tracker; import org.alfresco.repo.index.shard.ShardMethodEnum; import java.util.Properties; +import java.util.Set; /* * @author Joel @@ -29,9 +30,16 @@ import java.util.Properties; public class DocRouterFactory { public static DocRouter getRouter(Properties properties, ShardMethodEnum method) { + switch(method) { case DB_ID: return new DBIDRouter(); + case DB_ID_RANGE: + String range = properties.getProperty("shard.range"); + String[] rangeParts = range.split("-"); + long startRange = Long.parseLong(rangeParts[0].trim()); + long endRange = Long.parseLong(rangeParts[1].trim()); + return new DBIDRangeRouter(startRange, endRange); case ACL_ID: return new ACLIDMurmurRouter(); case MOD_ACL_ID: @@ -41,15 +49,8 @@ public class DocRouterFactory case PROPERTY: return new PropertyRouter(properties.getProperty("shard.regex", "")); default: - if(properties.containsKey("shard.range")) { - String range = properties.getProperty("shard.range"); - String[] rangeParts = range.split("-"); - long startRange = Long.parseLong(rangeParts[0].trim()); - long endRange = Long.parseLong(rangeParts[1].trim()); - return new DBIDRangeRouter(startRange, endRange); - } else { - return new DBIDRouter(); - } + return new DBIDRouter(); } } + } \ No newline at end of file diff --git a/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java b/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java index cfd0d06e7..93762d0d5 100644 --- a/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java +++ b/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java @@ -589,9 +589,16 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 JettySolrRunner jsr = createJetty(jettyKey); jettyContainers.put(jettyKey, jsr); + Properties properties = new Properties(); + + if(additionalProperties != null) { + properties.putAll(additionalProperties); + properties.remove("shard.method"); + } + for (int i = 0; i < coreNames.length; i++) { - addCoreToJetty(jettyKey, coreNames[i], coreNames[i], additionalProperties); + addCoreToJetty(jettyKey, coreNames[i], coreNames[i], properties); } //Now start jetty @@ -608,25 +615,30 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 shardsArr = new String[numShards]; StringBuilder sb = new StringBuilder(); + if (additionalProperties == null) { + additionalProperties = new Properties(); + } + String[] ranges = {"0-100", "100-200", "200-300", "300-400"}; for (int i = 0; i < numShards; i++) { + Properties props = new Properties(); + props.putAll(additionalProperties); if (sb.length() > 0) sb.append(','); final String shardname = "shard" + i; - if (additionalProperties == null) additionalProperties = new Properties(); - additionalProperties.put("shard.instance", Integer.toString(i)); - additionalProperties.put("shard.count", Integer.toString(numShards)); + props.put("shard.instance", Integer.toString(i)); + props.put("shard.count", Integer.toString(numShards)); - if(additionalProperties.getProperty("shard.method").equals("DB_ID_RANGE")) { + if("DB_ID_RANGE".equalsIgnoreCase(props.getProperty("shard.method"))) { //Add - additionalProperties.put("shard.range", ranges[i]); + props.put("shard.range", ranges[i]); } String shardKey = jettyKey+"_shard_"+i; JettySolrRunner j = createJetty(shardKey); //use the first corename specified as the Share template - addCoreToJetty(shardKey, coreNames[0], shardname, additionalProperties); + addCoreToJetty(shardKey, coreNames[0], shardname, props); jettyShards.add(j); startJetty(j); String shardStr = buildUrl(j.getLocalPort()) + "/" + shardname; diff --git a/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedDbidRangeAlfrescoSolrTrackerTest.java b/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedDbidRangeAlfrescoSolrTrackerTest.java index 1a12d1426..a3c9e392f 100644 --- a/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedDbidRangeAlfrescoSolrTrackerTest.java +++ b/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedDbidRangeAlfrescoSolrTrackerTest.java @@ -65,7 +65,6 @@ public class DistributedDbidRangeAlfrescoSolrTrackerTest extends AbstractAlfresc @Test public void testDbIdRange() throws Exception { - Thread.sleep(25000); putHandleDefaults(); int numAcls = 250;