You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2017/05/11 22:15:42 UTC

[1/2] lucene-solr:jira/solr-10233: Fixed Backup/Restore failure

Repository: lucene-solr
Updated Branches:
  refs/heads/jira/solr-10233 71e1149d4 -> 1c0e2f20d


Fixed Backup/Restore failure


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/88fa86c6
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/88fa86c6
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/88fa86c6

Branch: refs/heads/jira/solr-10233
Commit: 88fa86c6d813928866464202702dec86dc54e801
Parents: 71e1149
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Wed May 10 17:22:31 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Wed May 10 17:22:31 2017 -0700

----------------------------------------------------------------------
 .../solr/cloud/AbstractCloudBackupRestoreTestCase.java       | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/88fa86c6/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
index e9cebc9..d651e68 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
@@ -82,13 +82,15 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     boolean isImplicit = random().nextBoolean();
     boolean doSplitShardOperation = !isImplicit && random().nextBoolean();
     int replFactor = TestUtil.nextInt(random(), 1, 2);
-    // Split Shard not supported with replica types
     int numAppendReplicas = TestUtil.nextInt(random(), 0, 1);
     int numPassiveReplicas = TestUtil.nextInt(random(), 0, 1);
     CollectionAdminRequest.Create create =
         CollectionAdminRequest.createCollection(getCollectionName(), "conf1", NUM_SHARDS, replFactor, numAppendReplicas, numPassiveReplicas);
     if (NUM_SHARDS * (replFactor + numAppendReplicas + numPassiveReplicas) > cluster.getJettySolrRunners().size() || random().nextBoolean()) {
       create.setMaxShardsPerNode((int)Math.ceil(NUM_SHARDS * (replFactor + numAppendReplicas + numPassiveReplicas) / cluster.getJettySolrRunners().size()));//just to assert it survives the restoration
+      if (doSplitShardOperation) {
+        create.setMaxShardsPerNode(create.getMaxShardsPerNode() * 2);
+      }
     }
     if (random().nextBoolean()) {
       create.setAutoAddReplicas(true);//just to assert it survives the restoration
@@ -235,9 +237,9 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
       CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName)
           .setLocation(backupLocation).setRepositoryName(getBackupRepoName());
 
-      if (origShardToDocCount.size() > cluster.getJettySolrRunners().size()) {
+      if (backupCollection.getReplicas().size() > cluster.getJettySolrRunners().size()) {
         // may need to increase maxShardsPerNode (e.g. if it was shard split, then now we need more)
-        restore.setMaxShardsPerNode(origShardToDocCount.size());
+        restore.setMaxShardsPerNode((int)Math.ceil(backupCollection.getReplicas().size()/cluster.getJettySolrRunners().size()));
       }
       Properties props = new Properties();
       props.setProperty("customKey", "customVal");


[2/2] lucene-solr:jira/solr-10233: Prevent NPE in ReplicateFromLeader

Posted by tf...@apache.org.
Prevent NPE in ReplicateFromLeader


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1c0e2f20
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1c0e2f20
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1c0e2f20

Branch: refs/heads/jira/solr-10233
Commit: 1c0e2f20d5dd85cf26ff1a3df880f2e5f6e4d943
Parents: 88fa86c
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Thu May 11 15:09:47 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Thu May 11 15:09:47 2017 -0700

----------------------------------------------------------------------
 .../org/apache/solr/cloud/ReplicateFromLeader.java    |  4 +++-
 .../src/java/org/apache/solr/cloud/ZkController.java  | 14 +++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1c0e2f20/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
index 4441018..0800e0f 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
@@ -127,6 +127,8 @@ public class ReplicateFromLeader {
   }
 
   public void stopReplication() {
-    replicationProcess.close();
+    if (replicationProcess != null) {
+      replicationProcess.close();
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1c0e2f20/solr/core/src/java/org/apache/solr/cloud/ZkController.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 11fff1f..02133d6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -974,10 +974,12 @@ public class ZkController {
   public void startReplicationFromLeader(String coreName, boolean switchTransactionLog) throws InterruptedException {
     log.info("{} starting background replication from leader", coreName);
     ReplicateFromLeader replicateFromLeader = new ReplicateFromLeader(cc, coreName);
-    if (replicateFromLeaders.putIfAbsent(coreName, replicateFromLeader) == null) {
-      replicateFromLeader.startReplication(switchTransactionLog);
-    } else {
-      log.warn("A replicate from leader instance already exists for core {}", coreName);
+    synchronized (replicateFromLeader) { // synchronize to prevent any stop before we finish the start
+      if (replicateFromLeaders.putIfAbsent(coreName, replicateFromLeader) == null) {
+        replicateFromLeader.startReplication(switchTransactionLog);
+      } else {
+        log.warn("A replicate from leader instance already exists for core {}", coreName);
+      }
     }
   }
 
@@ -985,7 +987,9 @@ public class ZkController {
     log.info("{} stopping background replication from leader", coreName);
     ReplicateFromLeader replicateFromLeader = replicateFromLeaders.remove(coreName);
     if (replicateFromLeader != null) {
-      replicateFromLeader.stopReplication();
+      synchronized (replicateFromLeader) {
+        replicateFromLeader.stopReplication();
+      }
     }
   }