You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2015/02/15 09:21:57 UTC

svn commit: r1659894 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/core/ solr/core/src/java/org/apache/solr/handler/ solr/core/src/test/org/apache/solr/core/ solr/core/src/test/org/apache/solr/handler/

Author: shalin
Date: Sun Feb 15 08:21:56 2015
New Revision: 1659894

URL: http://svn.apache.org/r1659894
Log:
SOLR-6917: TestDynamicLoading should wait for .system collection to recover and JarRepository should always choose an active replica

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JarRepository.java
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestDynamicLoading.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JarRepository.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JarRepository.java?rev=1659894&r1=1659893&r2=1659894&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JarRepository.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JarRepository.java Sun Feb 15 08:21:56 2015
@@ -24,8 +24,10 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
@@ -41,6 +43,8 @@ import org.apache.solr.common.cloud.Clus
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.ZkCoreNodeProps;
+import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.handler.admin.CollectionsHandler;
 import org.apache.solr.util.SimplePostTool;
 import org.slf4j.Logger;
@@ -81,16 +85,28 @@ public class JarRepository {
     JarContent jar = jars.get(key);
     if (jar == null) {
       if (this.coreContainer.isZooKeeperAware()) {
-        ClusterState cs = this.coreContainer.getZkController().getZkStateReader().getClusterState();
+        ZkStateReader zkStateReader = this.coreContainer.getZkController().getZkStateReader();
+        ClusterState cs = zkStateReader.getClusterState();
         DocCollection coll = cs.getCollectionOrNull(CollectionsHandler.SYSTEM_COLL);
         if (coll == null) throw new SolrException(SERVICE_UNAVAILABLE, ".system collection not available");
         ArrayList<Slice> slices = new ArrayList<>(coll.getActiveSlices());
-        if (slices.isEmpty()) throw new SolrException(SERVICE_UNAVAILABLE, ".no active slices for .system collection");
+        if (slices.isEmpty()) throw new SolrException(SERVICE_UNAVAILABLE, "No active slices for .system collection");
         Collections.shuffle(slices, RANDOM); //do load balancing
-        Slice slice = slices.get(0);
-        Replica replica = slice.getReplicas().iterator().next();
-        if (replica == null)
+
+        Replica replica = null;
+        for (Slice slice : slices)  {
+          List<Replica> replicas = new ArrayList<>(slice.getReplicasMap().values());
+          Collections.shuffle(replicas, RANDOM);
+          for (Replica r : replicas) {
+            if (ZkStateReader.ACTIVE.equals(r.getStr(ZkStateReader.STATE_PROP))) {
+              replica = r;
+              break;
+            }
+          }
+        }
+        if (replica == null) {
           throw new SolrException(SERVICE_UNAVAILABLE, ".no active replica available for .system collection");
+        }
         String url = replica.getStr(BASE_URL_PROP) + "/.system/blob/" + key + "?wt=filestream";
 
         HttpClient httpClient = coreContainer.getUpdateShardHandler().getHttpClient();
@@ -108,10 +124,8 @@ public class JarRepository {
         }
         jars.put(key, jar = new JarContent(key, b));
       } else {
-
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Jar loading is not supported in non-cloud mode");
         // todo
-
       }
 
     }

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java?rev=1659894&r1=1659893&r2=1659894&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/BlobHandler.java Sun Feb 15 08:21:56 2015
@@ -233,10 +233,11 @@ public class BlobHandler extends Request
     UpdateRequestProcessor processor = processorChain.createProcessor(req, rsp);
     AddUpdateCommand cmd = new AddUpdateCommand(req);
     cmd.solrDoc = solrDoc;
-    log.info("Adding doc "+doc);
+    log.info("Adding doc: "+doc);
     processor.processAdd(cmd);
-    log.info("committing doc"+doc);
+    log.info("committing doc: "+doc);
     processor.processCommit(new CommitUpdateCommand(req, false));
+    processor.finish();
   }
 
   @Override

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestDynamicLoading.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestDynamicLoading.java?rev=1659894&r1=1659893&r2=1659894&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestDynamicLoading.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestDynamicLoading.java Sun Feb 15 08:21:56 2015
@@ -30,7 +30,6 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
@@ -88,7 +87,9 @@ public class TestDynamicLoading extends
     HttpSolrClient randomClient = (HttpSolrClient) clients.get(random().nextInt(clients.size()));
     String baseURL = randomClient.getBaseURL();
     baseURL = baseURL.substring(0, baseURL.lastIndexOf('/'));
-    TestBlobHandler.createSysColl(new HttpSolrClient(baseURL,randomClient.getHttpClient()));
+    TestBlobHandler.createSystemCollection(new HttpSolrClient(baseURL, randomClient.getHttpClient()));
+    waitForRecoveriesToFinish(".system", true);
+
     map = TestSolrConfigHandler.getRespMap("/test1?wt=json", client);
 
     assertNotNull(map = (Map) map.get("error"));

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java?rev=1659894&r1=1659893&r2=1659894&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java Sun Feb 15 08:21:56 2015
@@ -102,7 +102,7 @@ public class TestBlobHandler extends Abs
     }
   }
 
-  public static  void createSysColl(SolrClient client) throws SolrServerException, IOException {
+  public static void createSystemCollection(SolrClient client) throws SolrServerException, IOException {
     CollectionAdminResponse response1;
     CollectionAdminRequest.Create createCollectionRequest = new CollectionAdminRequest.Create();
     createCollectionRequest.setCollectionName(".system");
@@ -131,7 +131,7 @@ public class TestBlobHandler extends Abs
     List l;
     long start = System.currentTimeMillis();
     int i=0;
-    for(;i<150;i++) {//10secs
+    for(;i<150;i++) {//15 secs
       url = baseUrl + "/.system/blob/test";
       map = TestSolrConfigHandlerConcurrent.getAsMap(url, cloudClient);
       String numFound = String.valueOf(ConfigOverlay.getObjectByPath(map, false, Arrays.asList("response", "numFound")));