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();
+ }
}
}