You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2017/08/16 21:10:42 UTC
lucene-solr:branch_6_6: SOLR-10721: Provide a way to know when Core
Discovery is finished and when all async cores are done loading
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6_6 8547474c8 -> 02c1b75d4
SOLR-10721: Provide a way to know when Core Discovery is finished and when all async cores are done loading
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/02c1b75d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/02c1b75d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/02c1b75d
Branch: refs/heads/branch_6_6
Commit: 02c1b75d44ecd4d17a71fe48978b79bc04d872be
Parents: 8547474
Author: Erick <er...@apache.org>
Authored: Wed Aug 16 14:10:35 2017 -0700
Committer: Erick <er...@apache.org>
Committed: Wed Aug 16 14:10:35 2017 -0700
----------------------------------------------------------------------
.../org/apache/solr/core/CoreContainer.java | 14 ++++++++++++++
.../org/apache/solr/core/TestCoreDiscovery.java | 20 ++++++++++++++++----
2 files changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02c1b75d/solr/core/src/java/org/apache/solr/core/CoreContainer.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 3ffea88..57d777c 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -176,6 +176,12 @@ public class CoreContainer {
protected MetricsHandler metricsHandler;
+ // Bits for the state variable.
+ public final static long LOAD_COMPLETE = 0x1L;
+ public final static long CORE_DISCOVERY_COMPLETE = 0x2L;
+ public final static long INITIAL_CORE_LOAD_COMPLETE = 0x4L;
+ private volatile long status = 0L;
+
private enum CoreInitFailedAction { fromleader, none }
/**
@@ -539,6 +545,7 @@ public class CoreContainer {
Collections.sort(cds, coreComparator::compare);
}
checkForDuplicateCoreNames(cds);
+ status |= CORE_DISCOVERY_COMPLETE;
for (final CoreDescriptor cd : cds) {
if (cd.isTransient() || !cd.isLoadOnStartup()) {
@@ -601,8 +608,11 @@ public class CoreContainer {
if (isZooKeeperAware()) {
zkSys.getZkController().checkOverseerDesignate();
}
+ // This is a bit redundant but these are two distinct concepts for all they're accomplished at the same time.
+ status |= LOAD_COMPLETE | INITIAL_CORE_LOAD_COMPLETE;
}
+
public void securityNodeChanged() {
log.info("Security node changed, reloading security.json");
reloadSecurityProperties();
@@ -1477,6 +1487,10 @@ public class CoreContainer {
return cfg;
}
+ public long getStatus() {
+ return status;
+ }
+
}
class CloserThread extends Thread {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/02c1b75d/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java b/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
index 552f1cb..bf0568f 100644
--- a/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
+++ b/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
@@ -34,6 +34,9 @@ import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
+import static org.apache.solr.core.CoreContainer.CORE_DISCOVERY_COMPLETE;
+import static org.apache.solr.core.CoreContainer.INITIAL_CORE_LOAD_COMPLETE;
+import static org.apache.solr.core.CoreContainer.LOAD_COMPLETE;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.internal.matchers.StringContains.containsString;
@@ -108,14 +111,23 @@ public class TestCoreDiscovery extends SolrTestCaseJ4 {
}
private CoreContainer init() throws Exception {
- final CoreContainer cores = new CoreContainer();
+ final CoreContainer container = new CoreContainer();
try {
- cores.load();
+ container.load();
} catch (Exception e) {
- cores.shutdown();
+ container.shutdown();
throw e;
}
- return cores;
+
+ long status = container.getStatus();
+
+ assertTrue("Load complete flag should be set",
+ (status & LOAD_COMPLETE) == LOAD_COMPLETE);
+ assertTrue("Core discovery should be complete",
+ (status & CORE_DISCOVERY_COMPLETE) == CORE_DISCOVERY_COMPLETE);
+ assertTrue("Initial core loading should be complete",
+ (status & INITIAL_CORE_LOAD_COMPLETE) == INITIAL_CORE_LOAD_COMPLETE);
+ return container;
}
@After