You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2015/04/01 17:24:22 UTC
svn commit: r1670673 [1/2] - in /lucene/dev/branches/lucene6271: ./
dev-tools/ dev-tools/scripts/ lucene/ lucene/core/
lucene/core/src/java/org/apache/lucene/index/
lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/test/org/apache/lucene/i...
Author: rmuir
Date: Wed Apr 1 15:24:20 2015
New Revision: 1670673
URL: http://svn.apache.org/r1670673
Log:
merge trunk up to r1670672
Modified:
lucene/dev/branches/lucene6271/ (props changed)
lucene/dev/branches/lucene6271/dev-tools/ (props changed)
lucene/dev/branches/lucene6271/dev-tools/scripts/createPatch.py
lucene/dev/branches/lucene6271/lucene/ (props changed)
lucene/dev/branches/lucene6271/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene6271/lucene/core/ (props changed)
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterStallControl.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherFactory.java
lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterStallControl.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLRUQueryCache.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
lucene/dev/branches/lucene6271/lucene/facet/ (props changed)
lucene/dev/branches/lucene6271/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
lucene/dev/branches/lucene6271/lucene/suggest/ (props changed)
lucene/dev/branches/lucene6271/lucene/suggest/src/test/org/apache/lucene/search/suggest/document/SuggestFieldTest.java
lucene/dev/branches/lucene6271/solr/ (props changed)
lucene/dev/branches/lucene6271/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene6271/solr/core/ (props changed)
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/CloudDescriptor.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerAutoReplicaFailoverThread.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/ZkController.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/util/SolrCLI.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/CustomCollectionTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/handler/component/DistributedExpandComponentTest.java
lucene/dev/branches/lucene6271/solr/solrj/ (props changed)
lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/client/solrj/response/QueryResponse.java
lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java
lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
lucene/dev/branches/lucene6271/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
Modified: lucene/dev/branches/lucene6271/dev-tools/scripts/createPatch.py
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/dev-tools/scripts/createPatch.py?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/dev-tools/scripts/createPatch.py (original)
+++ lucene/dev/branches/lucene6271/dev-tools/scripts/createPatch.py Wed Apr 1 15:24:20 2015
@@ -90,7 +90,7 @@ def run_diff(from_dir, to_dir, skip_whit
flags += 'bBw'
args = ['diff', flags]
- for ignore in ('.svn', '.git', 'build', '.caches', '.idea', 'idea-build'):
+ for ignore in ('.svn', '.git', 'build', '.caches', '.idea', 'idea-build', 'eclipse-build'):
args.append('-x')
args.append(ignore)
args.append(from_dir)
Modified: lucene/dev/branches/lucene6271/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/CHANGES.txt?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene6271/lucene/CHANGES.txt Wed Apr 1 15:24:20 2015
@@ -52,6 +52,12 @@ Bug Fixes
* LUCENE-6378: Fix all RuntimeExceptions to throw the underlying root cause.
(Varun Thacker, Adrien Grand, Mike McCandless)
+
+API Changes
+
+* LUCENE-6377: SearcherFactory#newSearcher now accepts the previous reader
+ to simplify warming logic during opening new searchers. (Simon Willnauer)
+
======================= Lucene 5.1.0 =======================
New Features
@@ -109,6 +115,10 @@ Bug Fixes
toString method of IndexInputs confess when they are from a compound
file. (Robert Muir, Mike McCandless)
+* LUCENE-6381: Add defensive wait time limit in
+ DocumentsWriterStallControl to prevent hangs during indexing if we
+ miss a .notify/All somewhere (Mike McCandless)
+
Optimizations
* LUCENE-6183, LUCENE-5647: Avoid recompressing stored fields
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterStallControl.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterStallControl.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterStallControl.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterStallControl.java Wed Apr 1 15:24:20 2015
@@ -77,7 +77,9 @@ final class DocumentsWriterStallControl
// don't loop here, higher level logic will re-stall!
try {
incWaiters();
- wait();
+ // Defensive, in case we have a concurrency bug that fails to .notify/All our thread:
+ // just wait for up to 1 second here, and let caller re-stall if it's still needed:
+ wait(1000);
decrWaiters();
} catch (InterruptedException e) {
throw new ThreadInterruptedException(e);
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherFactory.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherFactory.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherFactory.java Wed Apr 1 15:24:20 2015
@@ -49,9 +49,15 @@ import org.apache.lucene.search.similari
*/
public class SearcherFactory {
/**
- * Returns a new IndexSearcher over the given reader.
+ * Returns a new IndexSearcher over the given reader.
+ * @param reader the reader to create a new searcher for
+ * @param previousReader the reader previously used to create a new searcher.
+ * This can be <code>null</code> if unknown or if the given reader is the initially opened reader.
+ * If this reader is non-null it can be used to find newly opened segments compared to the new reader to warm
+ * the searcher up before returning.
*/
- public IndexSearcher newSearcher(IndexReader reader) throws IOException {
+ public IndexSearcher newSearcher(IndexReader reader, IndexReader previousReader) throws IOException {
return new IndexSearcher(reader);
}
+
}
Modified: lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/java/org/apache/lucene/search/SearcherManager.java Wed Apr 1 15:24:20 2015
@@ -86,7 +86,7 @@ public final class SearcherManager exten
searcherFactory = new SearcherFactory();
}
this.searcherFactory = searcherFactory;
- current = getSearcher(searcherFactory, DirectoryReader.open(writer, applyAllDeletes));
+ current = getSearcher(searcherFactory, DirectoryReader.open(writer, applyAllDeletes), null);
}
/**
@@ -103,7 +103,7 @@ public final class SearcherManager exten
searcherFactory = new SearcherFactory();
}
this.searcherFactory = searcherFactory;
- current = getSearcher(searcherFactory, DirectoryReader.open(dir));
+ current = getSearcher(searcherFactory, DirectoryReader.open(dir), null);
}
/**
@@ -122,7 +122,7 @@ public final class SearcherManager exten
searcherFactory = new SearcherFactory();
}
this.searcherFactory = searcherFactory;
- this.current = getSearcher(searcherFactory, reader);
+ this.current = getSearcher(searcherFactory, reader, null);
}
@Override
@@ -138,7 +138,7 @@ public final class SearcherManager exten
if (newReader == null) {
return null;
} else {
- return getSearcher(searcherFactory, newReader);
+ return getSearcher(searcherFactory, newReader, r);
}
}
@@ -172,11 +172,11 @@ public final class SearcherManager exten
* IndexReader} using the provided {@link
* SearcherFactory}. NOTE: this decRefs incoming reader
* on throwing an exception. */
- public static IndexSearcher getSearcher(SearcherFactory searcherFactory, IndexReader reader) throws IOException {
+ public static IndexSearcher getSearcher(SearcherFactory searcherFactory, IndexReader reader, IndexReader previousReader) throws IOException {
boolean success = false;
final IndexSearcher searcher;
try {
- searcher = searcherFactory.newSearcher(reader);
+ searcher = searcherFactory.newSearcher(reader, previousReader);
if (searcher.getIndexReader() != reader) {
throw new IllegalStateException("SearcherFactory must wrap exactly the provided reader (got " + searcher.getIndexReader() + " but expected " + reader + ")");
}
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterStallControl.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterStallControl.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterStallControl.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterStallControl.java Wed Apr 1 15:24:20 2015
@@ -46,7 +46,7 @@ public class TestDocumentsWriterStallCon
ctrl.updateStalled(true);
waitThreads = waitThreads(atLeast(1), ctrl);
start(waitThreads);
- awaitState(Thread.State.WAITING, waitThreads);
+ awaitState(Thread.State.TIMED_WAITING, waitThreads);
assertTrue(ctrl.hasBlocked());
assertTrue(ctrl.anyStalledThreads());
ctrl.updateStalled(false);
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java Wed Apr 1 15:24:20 2015
@@ -219,7 +219,7 @@ public class TestControlledRealTimeReope
final SearcherFactory sf = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader r) throws IOException {
+ public IndexSearcher newSearcher(IndexReader r, IndexReader previous) throws IOException {
TestControlledRealTimeReopenThread.this.warmCalled = true;
IndexSearcher s = new IndexSearcher(r, es);
s.search(new TermQuery(new Term("body", "united")), 10);
@@ -413,7 +413,7 @@ public class TestControlledRealTimeReope
final SearcherFactory theEvilOne = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader ignored) {
+ public IndexSearcher newSearcher(IndexReader ignored, IndexReader previous) {
return LuceneTestCase.newSearcher(other);
}
};
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLRUQueryCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLRUQueryCache.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLRUQueryCache.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLRUQueryCache.java Wed Apr 1 15:24:20 2015
@@ -83,7 +83,7 @@ public class TestLRUQueryCache extends L
final RandomIndexWriter w = new RandomIndexWriter(random(), dir);
final SearcherFactory searcherFactory = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader reader) throws IOException {
+ public IndexSearcher newSearcher(IndexReader reader, IndexReader previous) throws IOException {
IndexSearcher searcher = new IndexSearcher(reader);
searcher.setQueryCachingPolicy(MAYBE_CACHE_POLICY);
searcher.setQueryCache(queryCache);
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java Wed Apr 1 15:24:20 2015
@@ -51,7 +51,7 @@ public class TestLiveFieldValues extends
final SearcherManager mgr = new SearcherManager(w, true, new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader r) {
+ public IndexSearcher newSearcher(IndexReader r, IndexReader previous) {
return new IndexSearcher(r);
}
});
Modified: lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java (original)
+++ lucene/dev/branches/lucene6271/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java Wed Apr 1 15:24:20 2015
@@ -78,7 +78,7 @@ public class TestSearcherManager extends
protected void doAfterWriter(final ExecutorService es) throws Exception {
final SearcherFactory factory = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader r) throws IOException {
+ public IndexSearcher newSearcher(IndexReader r, IndexReader previous) throws IOException {
IndexSearcher s = new IndexSearcher(r, es);
TestSearcherManager.this.warmCalled = true;
s.search(new TermQuery(new Term("body", "united")), 10);
@@ -217,7 +217,7 @@ public class TestSearcherManager extends
final ExecutorService es = random().nextBoolean() ? null : Executors.newCachedThreadPool(new NamedThreadFactory("testIntermediateClose"));
final SearcherFactory factory = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader r) {
+ public IndexSearcher newSearcher(IndexReader r, IndexReader previous) {
try {
if (triedReopen.get()) {
awaitEnterWarm.countDown();
@@ -400,7 +400,7 @@ public class TestSearcherManager extends
final SearcherFactory theEvilOne = new SearcherFactory() {
@Override
- public IndexSearcher newSearcher(IndexReader ignored) {
+ public IndexSearcher newSearcher(IndexReader ignored, IndexReader previous) {
return LuceneTestCase.newSearcher(other);
}
};
@@ -503,4 +503,47 @@ public class TestSearcherManager extends
w.close();
dir.close();
}
+
+ public void testPreviousReaderIsPassed() throws IOException {
+ final Directory dir = newDirectory();
+ final IndexWriter w = new IndexWriter(dir, newIndexWriterConfig());
+ w.addDocument(new Document());
+ class MySearcherFactory extends SearcherFactory {
+ IndexReader lastReader = null;
+ IndexReader lastPreviousReader = null;
+ int called = 0;
+ @Override
+ public IndexSearcher newSearcher(IndexReader reader, IndexReader previousReader) throws IOException {
+ called++;
+ lastReader = reader;
+ lastPreviousReader = previousReader;
+ return super.newSearcher(reader, previousReader);
+ }
+ }
+
+ MySearcherFactory factory = new MySearcherFactory();
+ final SearcherManager sm = new SearcherManager(w, random().nextBoolean(), factory);
+ assertEquals(1, factory.called);
+ assertNull(factory.lastPreviousReader);
+ assertNotNull(factory.lastReader);
+ IndexSearcher acquire = sm.acquire();
+ assertSame(factory.lastReader, acquire.getIndexReader());
+ sm.release(acquire);
+
+ final IndexReader lastReader = factory.lastReader;
+ // refresh
+ w.addDocument(new Document());
+ assertTrue(sm.maybeRefresh());
+
+ acquire = sm.acquire();
+ assertSame(factory.lastReader, acquire.getIndexReader());
+ sm.release(acquire);
+ assertNotNull(factory.lastPreviousReader);
+ assertSame(lastReader, factory.lastPreviousReader);
+ assertNotSame(factory.lastReader, lastReader);
+ assertEquals(2, factory.called);
+ w.close();
+ sm.close();
+ dir.close();
+ }
}
Modified: lucene/dev/branches/lucene6271/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java (original)
+++ lucene/dev/branches/lucene6271/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java Wed Apr 1 15:24:20 2015
@@ -70,7 +70,7 @@ public class SearcherTaxonomyManager ext
this.searcherFactory = searcherFactory;
this.taxoWriter = taxoWriter;
DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter);
- current = new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, DirectoryReader.open(writer, applyAllDeletes)), taxoReader);
+ current = new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, DirectoryReader.open(writer, applyAllDeletes), null), taxoReader);
this.taxoEpoch = taxoWriter.getTaxonomyEpoch();
}
@@ -88,7 +88,7 @@ public class SearcherTaxonomyManager ext
}
this.searcherFactory = searcherFactory;
DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir);
- current = new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, DirectoryReader.open(indexDir)), taxoReader);
+ current = new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, DirectoryReader.open(indexDir), null), taxoReader);
this.taxoWriter = null;
taxoEpoch = -1;
}
@@ -138,7 +138,7 @@ public class SearcherTaxonomyManager ext
throw new IllegalStateException("DirectoryTaxonomyWriter.replaceTaxonomy was called, which is not allowed when using SearcherTaxonomyManager");
}
- return new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, newReader), tr);
+ return new SearcherAndTaxonomy(SearcherManager.getSearcher(searcherFactory, newReader, r), tr);
}
}
Modified: lucene/dev/branches/lucene6271/lucene/suggest/src/test/org/apache/lucene/search/suggest/document/SuggestFieldTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/lucene/suggest/src/test/org/apache/lucene/search/suggest/document/SuggestFieldTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/lucene/suggest/src/test/org/apache/lucene/search/suggest/document/SuggestFieldTest.java (original)
+++ lucene/dev/branches/lucene6271/lucene/suggest/src/test/org/apache/lucene/search/suggest/document/SuggestFieldTest.java Wed Apr 1 15:24:20 2015
@@ -45,6 +45,7 @@ import org.apache.lucene.index.LeafReade
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.StorableField;
import org.apache.lucene.index.StoredDocument;
+import org.apache.lucene.index.Term;
import org.apache.lucene.queries.TermsQuery;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
@@ -56,9 +57,11 @@ import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.LineFileDocs;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.NumericUtils;
import org.apache.lucene.util.TestUtil;
import org.junit.After;
import org.junit.Before;
@@ -199,22 +202,9 @@ public class SuggestFieldTest extends Lu
document.clear();
}
- // get docIDs to delete
- DirectoryReader reader = DirectoryReader.open(iw, false);
- List<Integer> docIdsToDelete = new ArrayList<>();
- for (int i = 0; i < reader.maxDoc(); i++) {
- StoredDocument doc = reader.document(i);
- if ("delete".equals(doc.get("str_field"))) {
- docIdsToDelete.add(i);
- }
- }
-
- for (Integer docID : docIdsToDelete) {
- assertTrue(iw.tryDeleteDocument(reader, docID));
- }
- reader.close();
+ iw.deleteDocuments(new Term("str_field", "delete"));
- reader = DirectoryReader.open(iw, false);
+ DirectoryReader reader = DirectoryReader.open(iw, false);
SuggestIndexSearcher indexSearcher = new SuggestIndexSearcher(reader, analyzer);
TopSuggestDocs suggest = indexSearcher.suggest("suggest_field", "abc_", numLive);
assertSuggestions(suggest, expectedEntries.toArray(new Entry[expectedEntries.size()]));
@@ -256,17 +246,14 @@ public class SuggestFieldTest extends Lu
Document document = new Document();
for (int i = 0; i < num; i++) {
document.add(newSuggestField("suggest_field", "abc_" + i, i));
+ document.add(newStringField("delete", "delete", Field.Store.NO));
iw.addDocument(document);
document.clear();
}
- DirectoryReader reader = DirectoryReader.open(iw, false);
- for (int docID = 0; docID < reader.maxDoc(); docID++) {
- assertTrue(iw.tryDeleteDocument(reader, docID));
- }
- reader.close();
+ iw.deleteDocuments(new Term("delete", "delete"));
- reader = DirectoryReader.open(iw, false);
+ DirectoryReader reader = DirectoryReader.open(iw, false);
SuggestIndexSearcher indexSearcher = new SuggestIndexSearcher(reader, analyzer);
TopSuggestDocs suggest = indexSearcher.suggest("suggest_field", "abc_", num);
assertThat(suggest.totalHits, equalTo(0));
@@ -289,20 +276,9 @@ public class SuggestFieldTest extends Lu
document.clear();
}
- DirectoryReader reader = DirectoryReader.open(iw, false);
- // delete all but the lowest scored suggestion
- for (int docID = 0; docID < reader.maxDoc(); docID++) {
- StoredDocument doc = reader.document(docID);
- StorableField[] weights = doc.getFields("weight_fld");
- assertThat(weights.length, equalTo(1));
- int weight = (int) weights[0].numericValue();
- if (weight != 1) {
- assertTrue(iw.tryDeleteDocument(reader, docID));
- }
- }
- reader.close();
+ iw.deleteDocuments(NumericRangeQuery.newIntRange("weight_fld", 2, null, true, false));
- reader = DirectoryReader.open(iw, false);
+ DirectoryReader reader = DirectoryReader.open(iw, true);
SuggestIndexSearcher indexSearcher = new SuggestIndexSearcher(reader, analyzer);
TopSuggestDocs suggest = indexSearcher.suggest("suggest_field", "abc_", 1);
assertSuggestions(suggest, new Entry("abc_1", 1));
Modified: lucene/dev/branches/lucene6271/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/CHANGES.txt?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene6271/solr/CHANGES.txt Wed Apr 1 15:24:20 2015
@@ -59,7 +59,36 @@ Other Changes
* SOLR-6954: Deprecated SolrClient.shutdown() method removed (Alan Woodward)
================== 5.2.0 ==================
-(No Changes)
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
+
+Versions of Major Components
+---------------------
+
+Upgrading from Solr 5.1
+-----------------------
+
+* SOLR-7325: Slice.getState() now returns a State enum instead of a String. This helps
+ clarify the states a Slice can be in, as well comparing the state of a Slice.
+ (Shai Erera)
+
+Detailed Change List
+----------------------
+
+New Features
+----------------------
+
+Bug Fixes
+----------------------
+
+* SOLR-6709: Fix QueryResponse to deal with the "expanded" section when using the XMLResponseParser
+ (Varun Thacker, Joel Bernstein)
+
+Optimizations
+----------------------
+
+* SOLR-7324: IndexFetcher does not need to call isIndexStale if full copy is already needed
+ (Stephan Lagraulet via Varun Thacker)
================== 5.1.0 ==================
@@ -359,9 +388,6 @@ Optimizations
* SOLR-7239: improved performance of min & max in StatsComponent, as well as situations
where local params disable all stats (hossman)
- * SOLR-7324: IndexFetcher does not need to call isIndexStale if full copy is already needed
- (Stephan Lagraulet via Varun Thacker)
-
Other Changes
----------------------
@@ -446,6 +472,10 @@ Other Changes
* SOLR-7203: Remove buggy no-op retry code in HttpSolrClient (Alan Woodward,
Mark Miller, Greg Solovyev)
+* SOLR-7202: Remove deprecated string action types in Overseer and OverseerCollectionProcessor -
+ "deletecollection", "createcollection", "reloadcollection", "removecollection", "removeshard".
+ (Varun Thacker, shalin)
+
================== 5.0.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@ -1236,10 +1266,6 @@ Other Changes
* SOLR-6227: Avoid spurious failures of ChaosMonkeySafeLeaderTest by ensuring there's
at least one jetty to kill. (shalin)
-* SOLR-7202: Remove deprecated string action types in Overseer and OverseerCollectionProcessor -
- "deletecollection", "createcollection", "reloadcollection", "removecollection", "removeshard".
- (Varun Thacker, shalin)
-
================== 4.10.4 ==================
Bug Fixes
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/CloudDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/CloudDescriptor.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/CloudDescriptor.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/CloudDescriptor.java Wed Apr 1 15:24:20 2015
@@ -39,7 +39,7 @@ public class CloudDescriptor {
/* shardRange and shardState are used once-only during sub shard creation for shard splits
* Use the values from {@link Slice} instead */
volatile String shardRange = null;
- volatile String shardState = Slice.ACTIVE;
+ volatile Slice.State shardState = Slice.State.ACTIVE;
volatile String shardParent = null;
volatile boolean isLeader = false;
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerAutoReplicaFailoverThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerAutoReplicaFailoverThread.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerAutoReplicaFailoverThread.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerAutoReplicaFailoverThread.java Wed Apr 1 15:24:20 2015
@@ -175,7 +175,7 @@ public class OverseerAutoReplicaFailover
Collection<Slice> slices = docCollection.getSlices();
for (Slice slice : slices) {
- if (slice.getState().equals(Slice.ACTIVE)) {
+ if (slice.getState() == Slice.State.ACTIVE) {
final Collection<DownReplica> downReplicas = new ArrayList<DownReplica>();
@@ -318,7 +318,7 @@ public class OverseerAutoReplicaFailover
Collection<Slice> slices = docCollection.getSlices();
for (Slice slice : slices) {
// only look at active shards
- if (slice.getState().equals(Slice.ACTIVE)) {
+ if (slice.getState() == Slice.State.ACTIVE) {
log.debug("look at slice {} as possible create candidate", slice.getName());
Collection<Replica> replicas = slice.getReplicas();
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java Wed Apr 1 15:24:20 2015
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
*/
import com.google.common.collect.ImmutableSet;
+
import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
@@ -43,6 +44,7 @@ import org.apache.solr.common.cloud.Plai
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.RoutingRule;
import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.Slice.State;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkConfigManager;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
@@ -1072,7 +1074,7 @@ public class OverseerCollectionProcessor
log.warn("Exception trying to unload core " + sreq, e);
}
- collectShardResponses(!Slice.ACTIVE.equals(replica.getStr(Slice.STATE)) ? new NamedList() : results,
+ collectShardResponses(!ZkStateReader.ACTIVE.equals(replica.getStr(ZkStateReader.STATE_PROP)) ? new NamedList() : results,
false, null, shardHandler);
if (waitForCoreNodeGone(collectionName, shard, replicaName, 5000))
@@ -1495,9 +1497,10 @@ public class OverseerCollectionProcessor
Slice oSlice = clusterState.getSlice(collectionName, subSlice);
if (oSlice != null) {
- if (Slice.ACTIVE.equals(oSlice.getState())) {
+ final Slice.State state = oSlice.getState();
+ if (state == Slice.State.ACTIVE) {
throw new SolrException(ErrorCode.BAD_REQUEST, "Sub-shard: " + subSlice + " exists in active state. Aborting split shard.");
- } else if (Slice.CONSTRUCTION.equals(oSlice.getState()) || Slice.RECOVERY.equals(oSlice.getState())) {
+ } else if (state == Slice.State.CONSTRUCTION || state == Slice.State.RECOVERY) {
// delete the shards
for (String sub : subSlices) {
log.info("Sub-shard: {} already exists therefore requesting its deletion", sub);
@@ -1538,7 +1541,7 @@ public class OverseerCollectionProcessor
propMap.put(ZkStateReader.SHARD_ID_PROP, subSlice);
propMap.put(ZkStateReader.COLLECTION_PROP, collectionName);
propMap.put(ZkStateReader.SHARD_RANGE_PROP, subRange.toString());
- propMap.put(ZkStateReader.SHARD_STATE_PROP, Slice.CONSTRUCTION);
+ propMap.put(ZkStateReader.SHARD_STATE_PROP, Slice.State.CONSTRUCTION.toString());
propMap.put(ZkStateReader.SHARD_PARENT_PROP, parentSlice.getName());
DistributedQueue inQueue = Overseer.getInQueue(zkStateReader.getZkClient());
inQueue.offer(ZkStateReader.toJSON(new ZkNodeProps(propMap)));
@@ -1733,9 +1736,9 @@ public class OverseerCollectionProcessor
DistributedQueue inQueue = Overseer.getInQueue(zkStateReader.getZkClient());
Map<String, Object> propMap = new HashMap<>();
propMap.put(Overseer.QUEUE_OPERATION, OverseerAction.UPDATESHARDSTATE.toLower());
- propMap.put(slice, Slice.INACTIVE);
+ propMap.put(slice, Slice.State.INACTIVE.toString());
for (String subSlice : subSlices) {
- propMap.put(subSlice, Slice.ACTIVE);
+ propMap.put(subSlice, Slice.State.ACTIVE.toString());
}
propMap.put(ZkStateReader.COLLECTION_PROP, collectionName);
ZkNodeProps m = new ZkNodeProps(propMap);
@@ -1746,7 +1749,7 @@ public class OverseerCollectionProcessor
Map<String, Object> propMap = new HashMap<>();
propMap.put(Overseer.QUEUE_OPERATION, OverseerAction.UPDATESHARDSTATE.toLower());
for (String subSlice : subSlices) {
- propMap.put(subSlice, Slice.RECOVERY);
+ propMap.put(subSlice, Slice.State.RECOVERY.toString());
}
propMap.put(ZkStateReader.COLLECTION_PROP, collectionName);
ZkNodeProps m = new ZkNodeProps(propMap);
@@ -1887,11 +1890,12 @@ public class OverseerCollectionProcessor
}
// For now, only allow for deletions of Inactive slices or custom hashes (range==null).
// TODO: Add check for range gaps on Slice deletion
- if (!(slice.getRange() == null || slice.getState().equals(Slice.INACTIVE)
- || slice.getState().equals(Slice.RECOVERY) || slice.getState().equals(Slice.CONSTRUCTION))) {
+ final Slice.State state = slice.getState();
+ if (!(slice.getRange() == null || state == Slice.State.INACTIVE
+ || state == Slice.State.RECOVERY || state == Slice.State.CONSTRUCTION)) {
throw new SolrException(ErrorCode.BAD_REQUEST,
"The slice: " + slice.getName() + " is currently "
- + slice.getState() + ". Only non-active (or custom-hashed) slices can be deleted.");
+ + state + ". Only non-active (or custom-hashed) slices can be deleted.");
}
ShardHandler shardHandler = shardHandlerFactory.getShardHandler();
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java Wed Apr 1 15:24:20 2015
@@ -17,6 +17,14 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.store.Directory;
@@ -57,14 +65,6 @@ import org.apache.zookeeper.KeeperExcept
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
public class RecoveryStrategy extends Thread implements ClosableThread {
private static final int WAIT_FOR_UPDATES_WITH_STALE_STATE_PAUSE = Integer.getInteger("solr.cloud.wait-for-updates-with-stale-state-pause", 7000);
private static final int MAX_RETRIES = 500;
@@ -580,7 +580,8 @@ public class RecoveryStrategy extends Th
prepCmd.setState(ZkStateReader.RECOVERING);
prepCmd.setCheckLive(true);
prepCmd.setOnlyIfLeader(true);
- if (!Slice.CONSTRUCTION.equals(slice.getState()) && !Slice.RECOVERY.equals(slice.getState())) {
+ final Slice.State state = slice.getState();
+ if (state != Slice.State.CONSTRUCTION && state != Slice.State.RECOVERY) {
prepCmd.setOnlyIfLeaderActive(true);
}
HttpUriRequestResponse mrr = client.httpUriRequest(prepCmd);
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/ZkController.java Wed Apr 1 15:24:20 2015
@@ -17,6 +17,33 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import static org.apache.solr.common.cloud.ZkStateReader.*;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.URLEncoder;
+import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CoreAdminRequest.WaitForState;
@@ -69,40 +96,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.URLEncoder;
-import java.net.UnknownHostException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import static org.apache.solr.common.cloud.ZkStateReader.BASE_URL_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.ELECTION_NODE_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.NODE_NAME_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.REJOIN_AT_HEAD_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
-
/**
* Handle ZooKeeper interactions.
* <p>
@@ -895,9 +888,8 @@ public final class ZkController {
if (!core.isReloaded() && ulog != null) {
// disable recovery in case shard is in construction state (for shard splits)
Slice slice = getClusterState().getSlice(collection, shardId);
- if (!Slice.CONSTRUCTION.equals(slice.getState()) || !isLeader) {
- Future<UpdateLog.RecoveryInfo> recoveryFuture = core.getUpdateHandler()
- .getUpdateLog().recoverFromLog();
+ if (slice.getState() != Slice.State.CONSTRUCTION || !isLeader) {
+ Future<UpdateLog.RecoveryInfo> recoveryFuture = core.getUpdateHandler().getUpdateLog().recoverFromLog();
if (recoveryFuture != null) {
log.info("Replaying tlog for " + ourUrl + " during startup... NOTE: This can take a while.");
recoveryFuture.get(); // NOTE: this could potentially block for
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java Wed Apr 1 15:24:20 2015
@@ -53,7 +53,7 @@ public class CollectionMutator {
String shardState = message.getStr(ZkStateReader.SHARD_STATE_PROP);
String shardParent = message.getStr(ZkStateReader.SHARD_PARENT_PROP);
sliceProps.put(Slice.RANGE, shardRange);
- sliceProps.put(Slice.STATE, shardState);
+ sliceProps.put(ZkStateReader.STATE_PROP, shardState);
if (shardParent != null) {
sliceProps.put(Slice.PARENT, shardParent);
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java Wed Apr 1 15:24:20 2015
@@ -17,6 +17,9 @@ package org.apache.solr.cloud.overseer;
* limitations under the License.
*/
+import static org.apache.solr.cloud.OverseerCollectionProcessor.*;
+import static org.apache.solr.cloud.overseer.CollectionMutator.*;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -39,10 +42,6 @@ import org.apache.solr.common.cloud.ZkSt
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.solr.cloud.OverseerCollectionProcessor.COLL_PROP_PREFIX;
-import static org.apache.solr.cloud.overseer.CollectionMutator.checkCollectionKeyExistence;
-import static org.apache.solr.cloud.overseer.CollectionMutator.checkKeyExistence;
-
public class ReplicaMutator {
private static Logger log = LoggerFactory.getLogger(ReplicaMutator.class);
@@ -322,7 +321,7 @@ public class ReplicaMutator {
replicas = new HashMap<>(1);
sliceProps = new HashMap<>();
sliceProps.put(Slice.RANGE, shardRange);
- sliceProps.put(Slice.STATE, shardState);
+ sliceProps.put(ZkStateReader.STATE_PROP, shardState);
sliceProps.put(Slice.PARENT, shardParent);
}
@@ -357,8 +356,7 @@ public class ReplicaMutator {
private DocCollection checkAndCompleteShardSplit(ClusterState prevState, DocCollection collection, String coreNodeName, String sliceName, Map<String, Object> replicaProps) {
Slice slice = collection.getSlice(sliceName);
Map<String, Object> sliceProps = slice.getProperties();
- String sliceState = slice.getState();
- if (Slice.RECOVERY.equals(sliceState)) {
+ if (slice.getState() == Slice.State.RECOVERY) {
log.info("Shard: {} is in recovery state", sliceName);
// is this replica active?
if (ZkStateReader.ACTIVE.equals(replicaProps.get(ZkStateReader.STATE_PROP))) {
@@ -367,7 +365,7 @@ public class ReplicaMutator {
boolean allActive = true;
for (Map.Entry<String, Replica> entry : slice.getReplicasMap().entrySet()) {
if (coreNodeName.equals(entry.getKey())) continue;
- if (!Slice.ACTIVE.equals(entry.getValue().getStr(Slice.STATE))) {
+ if (!ZkStateReader.ACTIVE.equals(entry.getValue().getStr(ZkStateReader.STATE_PROP))) {
allActive = false;
break;
}
@@ -382,7 +380,7 @@ public class ReplicaMutator {
if (sliceName.equals(entry.getKey()))
continue;
Slice otherSlice = entry.getValue();
- if (Slice.RECOVERY.equals(otherSlice.getState())) {
+ if (otherSlice.getState() == Slice.State.RECOVERY) {
if (slice.getParent() != null && slice.getParent().equals(otherSlice.getParent())) {
log.info("Shard: {} - Fellow sub-shard: {} found", sliceName, otherSlice.getName());
// this is a fellow sub shard so check if all replicas are active
@@ -404,10 +402,10 @@ public class ReplicaMutator {
Map<String, Object> propMap = new HashMap<>();
propMap.put(Overseer.QUEUE_OPERATION, "updateshardstate");
- propMap.put(parentSliceName, Slice.INACTIVE);
- propMap.put(sliceName, Slice.ACTIVE);
+ propMap.put(parentSliceName, Slice.State.INACTIVE.toString());
+ propMap.put(sliceName, Slice.State.ACTIVE.toString());
for (Slice subShardSlice : subShardSlices) {
- propMap.put(subShardSlice.getName(), Slice.ACTIVE);
+ propMap.put(subShardSlice.getName(), Slice.State.ACTIVE.toString());
}
propMap.put(ZkStateReader.COLLECTION_PROP, collection.getName());
ZkNodeProps m = new ZkNodeProps(propMap);
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java Wed Apr 1 15:24:20 2015
@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
+
import org.apache.solr.cloud.Assign;
import org.apache.solr.cloud.Overseer;
import org.apache.solr.common.cloud.ClusterState;
@@ -187,10 +188,12 @@ public class SliceMutator {
}
log.info("Update shard state " + key + " to " + message.getStr(key));
Map<String, Object> props = slice.shallowCopy();
- if (Slice.RECOVERY.equals(props.get(Slice.STATE)) && Slice.ACTIVE.equals(message.getStr(key))) {
+
+ if (Slice.State.getState((String) props.get(ZkStateReader.STATE_PROP)) == Slice.State.RECOVERY
+ && Slice.State.getState(message.getStr(key)) == Slice.State.ACTIVE) {
props.remove(Slice.PARENT);
}
- props.put(Slice.STATE, message.getStr(key));
+ props.put(ZkStateReader.STATE_PROP, message.getStr(key));
Slice newSlice = new Slice(slice.getName(), slice.getReplicasCopy(), props);
slicesCopy.put(slice.getName(), newSlice);
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/core/SolrCore.java Wed Apr 1 15:24:20 2015
@@ -913,9 +913,9 @@ public final class SolrCore implements S
// ZK pre-Register would have already happened so we read slice properties now
ClusterState clusterState = cc.getZkController().getClusterState();
- Slice slice = clusterState.getSlice(cd.getCloudDescriptor().getCollectionName(),
+ Slice slice = clusterState.getSlice(cd.getCloudDescriptor().getCollectionName(),
cd.getCloudDescriptor().getShardId());
- if (Slice.CONSTRUCTION.equals(slice.getState())) {
+ if (slice.getState() == Slice.State.CONSTRUCTION) {
// set update log to buffer before publishing the core
getUpdateHandler().getUpdateLog().bufferUpdates();
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java Wed Apr 1 15:24:20 2015
@@ -27,6 +27,15 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import com.carrotsearch.hppc.IntObjectOpenHashMap;
+import com.carrotsearch.hppc.IntOpenHashSet;
+import com.carrotsearch.hppc.LongObjectMap;
+import com.carrotsearch.hppc.LongObjectOpenHashMap;
+import com.carrotsearch.hppc.LongOpenHashSet;
+import com.carrotsearch.hppc.cursors.IntObjectCursor;
+import com.carrotsearch.hppc.cursors.LongCursor;
+import com.carrotsearch.hppc.cursors.LongObjectCursor;
+import com.carrotsearch.hppc.cursors.ObjectCursor;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.DocValuesType;
import org.apache.lucene.index.FieldInfo;
@@ -62,6 +71,7 @@ import org.apache.solr.common.SolrDocume
import org.apache.solr.common.params.ExpandParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
@@ -82,16 +92,6 @@ import org.apache.solr.search.SolrIndexS
import org.apache.solr.util.plugin.PluginInfoInitialized;
import org.apache.solr.util.plugin.SolrCoreAware;
-import com.carrotsearch.hppc.IntObjectOpenHashMap;
-import com.carrotsearch.hppc.IntOpenHashSet;
-import com.carrotsearch.hppc.LongObjectMap;
-import com.carrotsearch.hppc.LongObjectOpenHashMap;
-import com.carrotsearch.hppc.LongOpenHashSet;
-import com.carrotsearch.hppc.cursors.IntObjectCursor;
-import com.carrotsearch.hppc.cursors.LongCursor;
-import com.carrotsearch.hppc.cursors.LongObjectCursor;
-import com.carrotsearch.hppc.cursors.ObjectCursor;
-
/**
* The ExpandComponent is designed to work with the CollapsingPostFilter.
* The CollapsingPostFilter collapses a result set on a field.
@@ -384,7 +384,7 @@ public class ExpandComponent extends Sea
searcher.search(new FilteredQuery(query, pfilter.filter), collector);
}
LongObjectMap groups = ((GroupCollector)groupExpandCollector).getGroups();
- Map<String, DocSlice> outMap = new HashMap<>();
+ NamedList outMap = new SimpleOrderedMap();
CharsRefBuilder charsRef = new CharsRefBuilder();
for (LongObjectCursor cursor : (Iterable<LongObjectCursor>) groups) {
long groupValue = cursor.key;
@@ -405,14 +405,14 @@ public class ExpandComponent extends Sea
final BytesRef bytesRef = ordBytes.get((int)groupValue);
fieldType.indexedToReadable(bytesRef, charsRef);
String group = charsRef.toString();
- outMap.put(group, slice);
+ outMap.add(group, slice);
} else {
if(fieldType instanceof TrieIntField || fieldType instanceof TrieLongField ) {
- outMap.put(Long.toString(groupValue), slice);
+ outMap.add(Long.toString(groupValue), slice);
} else if(fieldType instanceof TrieFloatField) {
- outMap.put(Float.toString(Float.intBitsToFloat((int)groupValue)), slice);
+ outMap.add(Float.toString(Float.intBitsToFloat((int) groupValue)), slice);
} else if(fieldType instanceof TrieDoubleField) {
- outMap.put(Double.toString(Double.longBitsToDouble(groupValue)), slice);
+ outMap.add(Double.toString(Double.longBitsToDouble(groupValue)), slice);
}
}
}
@@ -450,19 +450,19 @@ public class ExpandComponent extends Sea
if ((sreq.purpose & ShardRequest.PURPOSE_GET_FIELDS) != 0) {
SolrQueryRequest req = rb.req;
- Map expanded = (Map) req.getContext().get("expanded");
+ NamedList expanded = (NamedList) req.getContext().get("expanded");
if (expanded == null) {
- expanded = new HashMap();
+ expanded = new SimpleOrderedMap();
req.getContext().put("expanded", expanded);
}
for (ShardResponse srsp : sreq.responses) {
NamedList response = srsp.getSolrResponse().getResponse();
- Map ex = (Map) response.get("expanded");
- for (Map.Entry<String, SolrDocumentList> entry : (Iterable<Map.Entry<String, SolrDocumentList>>) ex.entrySet()) {
- String name = entry.getKey();
- SolrDocumentList val = entry.getValue();
- expanded.put(name, val);
+ NamedList ex = (NamedList) response.get("expanded");
+ for (int i=0; i<ex.size(); i++) {
+ String name = ex.getName(i);
+ SolrDocumentList val = (SolrDocumentList) ex.getVal(i);
+ expanded.add(name, val);
}
}
}
@@ -479,9 +479,9 @@ public class ExpandComponent extends Sea
return;
}
- Map expanded = (Map) rb.req.getContext().get("expanded");
+ NamedList expanded = (NamedList) rb.req.getContext().get("expanded");
if (expanded == null) {
- expanded = new HashMap();
+ expanded = new SimpleOrderedMap();
}
rb.rsp.add("expanded", expanded);
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/servlet/ZookeeperInfoServlet.java Wed Apr 1 15:24:20 2015
@@ -46,6 +46,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.cloud.OnReconnect;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
+import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.util.FastWriter;
@@ -166,12 +167,12 @@ public final class ZookeeperInfoServlet
// state can lie to you if the node is offline, so need to reconcile with live_nodes too
if (!liveNodes.contains(nodeName))
- coreState = "down"; // not on a live node, so must be down
+ coreState = ZkStateReader.DOWN; // not on a live node, so must be down
- if ("active".equals(coreState)) {
+ if (ZkStateReader.ACTIVE.equals(coreState)) {
hasActive = true; // assumed no replicas active and found one that is for this shard
} else {
- if ("recovering".equals(coreState)) {
+ if (ZkStateReader.RECOVERING.equals(coreState)) {
replicaInRecovery = true;
}
isHealthy = false; // assumed healthy and found one replica that is not
@@ -188,7 +189,7 @@ public final class ZookeeperInfoServlet
return !hasDownedShard && !isHealthy; // means no shards offline but not 100% healthy either
} else if ("downed_shard".equals(filter)) {
return hasDownedShard;
- } else if ("recovering".equals(filter)) {
+ } else if (ZkStateReader.RECOVERING.equals(filter)) {
return !isHealthy && replicaInRecovery;
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Wed Apr 1 15:24:20 2015
@@ -37,6 +37,7 @@ import org.apache.solr.common.cloud.DocR
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.RoutingRule;
import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.Slice.State;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -436,19 +437,18 @@ public class DistributedUpdateProcessor
private boolean couldIbeSubShardLeader(DocCollection coll) {
// Could I be the leader of a shard in "construction/recovery" state?
- String myShardId = req.getCore().getCoreDescriptor().getCloudDescriptor()
- .getShardId();
+ String myShardId = req.getCore().getCoreDescriptor().getCloudDescriptor().getShardId();
Slice mySlice = coll.getSlice(myShardId);
- String state = mySlice.getState();
- return (Slice.CONSTRUCTION.equals(state) || Slice.RECOVERY.equals(state));
+ State state = mySlice.getState();
+ return state == Slice.State.CONSTRUCTION || state == Slice.State.RECOVERY;
}
private boolean amISubShardLeader(DocCollection coll, Slice parentSlice, String id, SolrInputDocument doc) throws InterruptedException {
// Am I the leader of a shard in "construction/recovery" state?
String myShardId = req.getCore().getCoreDescriptor().getCloudDescriptor().getShardId();
Slice mySlice = coll.getSlice(myShardId);
- String state = mySlice.getState();
- if (Slice.CONSTRUCTION.equals(state) || Slice.RECOVERY.equals(state)) {
+ final State state = mySlice.getState();
+ if (state == Slice.State.CONSTRUCTION || state == Slice.State.RECOVERY) {
Replica myLeader = zkController.getZkStateReader().getLeaderRetry(collection, myShardId);
boolean amILeader = myLeader.getName().equals(
req.getCore().getCoreDescriptor().getCloudDescriptor()
@@ -473,7 +473,8 @@ public class DistributedUpdateProcessor
Collection<Slice> allSlices = coll.getSlices();
List<Node> nodes = null;
for (Slice aslice : allSlices) {
- if (Slice.CONSTRUCTION.equals(aslice.getState()) || Slice.RECOVERY.equals(aslice.getState())) {
+ final Slice.State state = aslice.getState();
+ if (state == Slice.State.CONSTRUCTION || state == Slice.State.RECOVERY) {
DocRouter.Range myRange = coll.getSlice(shardId).getRange();
if (myRange == null) myRange = new DocRouter.Range(Integer.MIN_VALUE, Integer.MAX_VALUE);
boolean isSubset = aslice.getRange() != null && aslice.getRange().isSubsetOf(myRange);
@@ -588,7 +589,7 @@ public class DistributedUpdateProcessor
if (DistribPhase.FROMLEADER == phase && localIsLeader && from != null) { // from will be null on log replay
String fromShard = req.getParams().get(DISTRIB_FROM_PARENT);
if (fromShard != null) {
- if (Slice.ACTIVE.equals(mySlice.getState())) {
+ if (mySlice.getState() == Slice.State.ACTIVE) {
throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE,
"Request says it is coming from parent shard leader but we are in active state");
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/util/SolrCLI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/util/SolrCLI.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/util/SolrCLI.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/java/org/apache/solr/util/SolrCLI.java Wed Apr 1 15:24:20 2015
@@ -864,7 +864,7 @@ public class SolrCLI {
if (replicaHealth.isLeader)
hasLeader = true;
- if (!"active".equals(replicaHealth.status)) {
+ if (!ZkStateReader.ACTIVE.equals(replicaHealth.status)) {
healthy = false;
} else {
atLeastOneActive = true;
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/CustomCollectionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/CustomCollectionTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/CustomCollectionTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/CustomCollectionTest.java Wed Apr 1 15:24:20 2015
@@ -282,7 +282,7 @@ public class CustomCollectionTest extend
attempts++;
int activeReplicaCount = 0;
for (Replica x : zkStateReader.getClusterState().getCollection(collectionName).getSlice("x").getReplicas()) {
- if("active".equals(x.getStr("state"))) activeReplicaCount++;
+ if(ZkStateReader.ACTIVE.equals(x.getStr(ZkStateReader.STATE_PROP))) activeReplicaCount++;
}
Thread.sleep(500);
if(activeReplicaCount >= replicationFactor) break;
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java Wed Apr 1 15:24:20 2015
@@ -17,6 +17,14 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import static org.apache.solr.cloud.CollectionsAPIDistributedZkTest.*;
+import static org.apache.solr.common.cloud.ZkNodeProps.*;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -31,16 +39,6 @@ import org.apache.solr.common.params.Map
import org.apache.solr.common.util.NamedList;
import org.junit.Test;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.solr.cloud.CollectionsAPIDistributedZkTest.setClusterProp;
-import static org.apache.solr.cloud.OverseerCollectionProcessor.NUM_SLICES;
-import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
-
public class DeleteInactiveReplicaTest extends AbstractFullDistribZkTestBase{
@Test
@@ -109,8 +107,8 @@ public class DeleteInactiveReplicaTest e
while (System.currentTimeMillis() < endAt) {
testcoll = client.getZkStateReader()
.getClusterState().getCollection(collectionName);
- if (!"active".equals(testcoll.getSlice(shard1.getName())
- .getReplica(replica1.getName()).getStr(Slice.STATE))) {
+ if (!ZkStateReader.ACTIVE.equals(testcoll.getSlice(shard1.getName())
+ .getReplica(replica1.getName()).getStr(ZkStateReader.STATE_PROP))) {
success = true;
}
if (success) break;
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java Wed Apr 1 15:24:20 2015
@@ -92,10 +92,10 @@ public class DeleteReplicaTest extends A
for (Slice slice : testcoll.getSlices()) {
if(replica1 != null)
break;
- if ("active".equals(slice.getStr("state"))) {
+ if (slice.getState() == Slice.State.ACTIVE) {
shard1 = slice;
for (Replica replica : shard1.getReplicas()) {
- if ("active".equals(replica.getStr("state"))) {
+ if (ZkStateReader.ACTIVE.equals(replica.getStr(ZkStateReader.STATE_PROP))) {
replica1 = replica;
break;
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java Wed Apr 1 15:24:20 2015
@@ -25,6 +25,7 @@ import org.apache.solr.cloud.overseer.Ov
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.Slice.State;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionParams;
@@ -69,8 +70,8 @@ public class DeleteShardTest extends Abs
assertNotNull("Shard1 not found", slice1);
assertNotNull("Shard2 not found", slice2);
- assertEquals("Shard1 is not active", Slice.ACTIVE, slice1.getState());
- assertEquals("Shard2 is not active", Slice.ACTIVE, slice2.getState());
+ assertSame("Shard1 is not active", Slice.State.ACTIVE, slice1.getState());
+ assertSame("Shard2 is not active", Slice.State.ACTIVE, slice2.getState());
try {
deleteShard(SHARD1);
@@ -79,19 +80,19 @@ public class DeleteShardTest extends Abs
// expected
}
- setSliceState(SHARD1, Slice.INACTIVE);
+ setSliceState(SHARD1, Slice.State.INACTIVE);
clusterState = cloudClient.getZkStateReader().getClusterState();
slice1 = clusterState.getSlice(AbstractDistribZkTestBase.DEFAULT_COLLECTION, SHARD1);
- assertEquals("Shard1 is not inactive yet.", Slice.INACTIVE, slice1.getState());
+ assertSame("Shard1 is not inactive yet.", Slice.State.INACTIVE, slice1.getState());
deleteShard(SHARD1);
confirmShardDeletion(SHARD1);
- setSliceState(SHARD2, Slice.CONSTRUCTION);
+ setSliceState(SHARD2, Slice.State.CONSTRUCTION);
deleteShard(SHARD2);
confirmShardDeletion(SHARD2);
}
@@ -135,12 +136,12 @@ public class DeleteShardTest extends Abs
}
}
- protected void setSliceState(String slice, String state) throws SolrServerException, IOException,
+ protected void setSliceState(String slice, State state) throws SolrServerException, IOException,
KeeperException, InterruptedException {
DistributedQueue inQueue = Overseer.getInQueue(cloudClient.getZkStateReader().getZkClient());
Map<String, Object> propMap = new HashMap<>();
propMap.put(Overseer.QUEUE_OPERATION, OverseerAction.UPDATESHARDSTATE.toLower());
- propMap.put(slice, state);
+ propMap.put(slice, state.toString());
propMap.put(ZkStateReader.COLLECTION_PROP, "collection1");
ZkNodeProps m = new ZkNodeProps(propMap);
ZkStateReader zkStateReader = cloudClient.getZkStateReader();
@@ -150,8 +151,8 @@ public class DeleteShardTest extends Abs
for (int counter = 10; counter > 0; counter--) {
zkStateReader.updateClusterState(true);
ClusterState clusterState = zkStateReader.getClusterState();
- String sliceState = clusterState.getSlice("collection1", slice).getState();
- if (sliceState.equals(state)) {
+ State sliceState = clusterState.getSlice("collection1", slice).getState();
+ if (sliceState == state) {
transition = true;
break;
}
@@ -164,4 +165,3 @@ public class DeleteShardTest extends Abs
}
}
-
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java Wed Apr 1 15:24:20 2015
@@ -22,6 +22,7 @@ import org.apache.solr.client.solrj.impl
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
+import org.apache.solr.common.cloud.ZkStateReader;
import org.junit.Test;
import java.io.File;
@@ -57,6 +58,7 @@ public class LeaderInitiatedRecoveryOnCo
}
}
+ @Override
@Test
public void test() throws Exception {
oneShardTest();
@@ -91,7 +93,7 @@ public class LeaderInitiatedRecoveryOnCo
cloudClient.getZkStateReader().updateClusterState(true); // get the latest state
leader = cloudClient.getZkStateReader().getLeaderRetry(testCollectionName, "shard1");
- assertEquals("Leader was not active", "active", leader.getStr("state"));
+ assertEquals("Leader was not active", ZkStateReader.ACTIVE, leader.getStr(ZkStateReader.STATE_PROP));
leaderProxy.reopen();
Thread.sleep(sleepMsBeforeHealPartition);
@@ -134,7 +136,7 @@ public class LeaderInitiatedRecoveryOnCo
cloudClient.getZkStateReader().updateClusterState(true); // get the latest state
leader = cloudClient.getZkStateReader().getLeaderRetry(testCollectionName, "shard1");
- assertEquals("Leader was not active", "active", leader.getStr("state"));
+ assertEquals("Leader was not active", ZkStateReader.ACTIVE, leader.getStr(ZkStateReader.STATE_PROP));
leaderProxy.reopen();
Thread.sleep(sleepMsBeforeHealPartition);
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java Wed Apr 1 15:24:20 2015
@@ -396,8 +396,9 @@ public class ShardSplitTest extends Basi
clusterState = zkStateReader.getClusterState();
slice1_0 = clusterState.getSlice(AbstractDistribZkTestBase.DEFAULT_COLLECTION, "shard1_0");
slice1_1 = clusterState.getSlice(AbstractDistribZkTestBase.DEFAULT_COLLECTION, "shard1_1");
- if (Slice.ACTIVE.equals(slice1_0.getState()) && Slice.ACTIVE.equals(slice1_1.getState()))
+ if (slice1_0.getState() == Slice.State.ACTIVE && slice1_1.getState() == Slice.State.ACTIVE) {
break;
+ }
Thread.sleep(500);
}
@@ -405,8 +406,8 @@ public class ShardSplitTest extends Basi
assertNotNull("Cluster state does not contain shard1_0", slice1_0);
assertNotNull("Cluster state does not contain shard1_0", slice1_1);
- assertEquals("shard1_0 is not active", Slice.ACTIVE, slice1_0.getState());
- assertEquals("shard1_1 is not active", Slice.ACTIVE, slice1_1.getState());
+ assertSame("shard1_0 is not active", Slice.State.ACTIVE, slice1_0.getState());
+ assertSame("shard1_1 is not active", Slice.State.ACTIVE, slice1_1.getState());
assertEquals("Wrong number of replicas created for shard1_0", numReplicas, slice1_0.getReplicas().size());
assertEquals("Wrong number of replicas created for shard1_1", numReplicas, slice1_1.getReplicas().size());
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java Wed Apr 1 15:24:20 2015
@@ -32,8 +32,9 @@ import java.util.Map;
import java.util.Set;
public class SliceStateTest extends SolrTestCaseJ4 {
+
@Test
- public void testDefaultSliceState() throws Exception {
+ public void testDefaultSliceState() {
Map<String, DocCollection> collectionStates = new HashMap<>();
Set<String> liveNodes = new HashSet<>();
liveNodes.add("node1");
@@ -45,15 +46,14 @@ public class SliceStateTest extends Solr
Replica replica = new Replica("node1", props);
sliceToProps.put("node1", replica);
Slice slice = new Slice("shard1", sliceToProps, null);
- assertEquals("Default state not set to active", Slice.ACTIVE, slice.getState());
+ assertSame("Default state not set to active", Slice.State.ACTIVE, slice.getState());
slices.put("shard1", slice);
collectionStates.put("collection1", new DocCollection("collection1", slices, null, DocRouter.DEFAULT));
- ZkStateReader mockZkStateReader = ClusterStateTest.getMockZkStateReader(collectionStates.keySet());
ClusterState clusterState = new ClusterState(-1,liveNodes, collectionStates);
byte[] bytes = ZkStateReader.toJSON(clusterState);
ClusterState loadedClusterState = ClusterState.load(-1, bytes, liveNodes);
- assertEquals("Default state not set to active", "active", loadedClusterState.getSlice("collection1", "shard1").getState());
+ assertSame("Default state not set to active", Slice.State.ACTIVE, loadedClusterState.getSlice("collection1", "shard1").getState());
}
}
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java Wed Apr 1 15:24:20 2015
@@ -24,6 +24,7 @@ import org.apache.solr.cloud.MockZkState
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.ImplicitDocRouter;
+import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkNodeProps;
public class TestClusterStateMutator extends SolrTestCaseJ4 {
@@ -60,8 +61,8 @@ public class TestClusterStateMutator ext
assertNotNull(collection.getSlicesMap().get("y"));
assertNull(collection.getSlicesMap().get("x").getRange());
assertNull(collection.getSlicesMap().get("y").getRange());
- assertEquals("active", collection.getSlicesMap().get("x").getState());
- assertEquals("active", collection.getSlicesMap().get("y").getState());
+ assertSame(Slice.State.ACTIVE, collection.getSlicesMap().get("x").getState());
+ assertSame(Slice.State.ACTIVE, collection.getSlicesMap().get("y").getState());
assertEquals(4, collection.getMaxShardsPerNode());
assertEquals(ImplicitDocRouter.class, collection.getRouter().getClass());
assertNotNull(state.getCollectionOrNull("xyz")); // we still have the old collection
Modified: lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/handler/component/DistributedExpandComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/handler/component/DistributedExpandComponentTest.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/handler/component/DistributedExpandComponentTest.java (original)
+++ lucene/dev/branches/lucene6271/solr/core/src/test/org/apache/solr/handler/component/DistributedExpandComponentTest.java Wed Apr 1 15:24:20 2015
@@ -78,6 +78,7 @@ public class DistributedExpandComponentT
handle.put("q", SKIP);
handle.put("maxScore", SKIPVAL);
handle.put("_version_", SKIP);
+ handle.put("expanded", UNORDERED);
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "fl","*,score");
query("q", "*:*", "fq", "{!collapse field="+group+"}", "defType", "edismax", "bf", "field(test_ti)", "expand", "true", "expand.sort", "test_tl desc", "fl","*,score");
Modified: lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/client/solrj/response/QueryResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/client/solrj/response/QueryResponse.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/client/solrj/response/QueryResponse.java (original)
+++ lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/client/solrj/response/QueryResponse.java Wed Apr 1 15:24:20 2015
@@ -17,13 +17,6 @@
package org.apache.solr.client.solrj.response;
-import org.apache.solr.client.solrj.SolrClient;
-import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
-import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.params.CursorMarkParams;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.SimpleOrderedMap;
-
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -32,6 +25,13 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.common.params.CursorMarkParams;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
+
/**
*
*
@@ -86,7 +86,7 @@ public class QueryResponse extends SolrR
// utility variable used for automatic binding -- it should not be serialized
private transient final SolrClient solrClient;
-
+
public QueryResponse(){
solrClient = null;
}
@@ -134,7 +134,8 @@ public class QueryResponse extends SolrR
extractGroupedInfo( _groupedInfo );
}
else if("expanded".equals(n)) {
- _expandedResults = (Map<String, SolrDocumentList>) res.getVal( i );
+ NamedList map = (NamedList) res.getVal(i);
+ _expandedResults = map.asMap(1);
}
else if( "highlighting".equals( n ) ) {
_highlightingInfo = (NamedList<Object>) res.getVal( i );
@@ -480,7 +481,13 @@ public class QueryResponse extends SolrR
return _facetQuery;
}
- public Map<String, SolrDocumentList> getExpandedResults(){
+ /**
+ *
+ * @return map with each group value as key and the expanded documents that belong to the group as value.
+ * There is no guarantee on the order of the keys obtained via an iterator.
+ *
+ */
+ public Map<String, SolrDocumentList> getExpandedResults() {
return this._expandedResults;
}
Modified: lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java (original)
+++ lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterStateUtil.java Wed Apr 1 15:24:20 2015
@@ -75,7 +75,7 @@ public class ClusterStateUtil {
Collection<Slice> slices = docCollection.getSlices();
for (Slice slice : slices) {
// only look at active shards
- if (slice.getState().equals(Slice.ACTIVE)) {
+ if (slice.getState() == Slice.State.ACTIVE) {
Collection<Replica> replicas = slice.getReplicas();
for (Replica replica : replicas) {
// on a live node?
@@ -135,7 +135,7 @@ public class ClusterStateUtil {
Collection<Slice> slices = docCollection.getSlices();
for (Slice slice : slices) {
// only look at active shards
- if (slice.getState().equals(Slice.ACTIVE)) {
+ if (slice.getState() == Slice.State.ACTIVE) {
Collection<Replica> replicas = slice.getReplicas();
for (Replica replica : replicas) {
// on a live node?
@@ -188,7 +188,7 @@ public class ClusterStateUtil {
Collection<Slice> slices = docCollection.getSlices();
for (Slice slice : slices) {
// only look at active shards
- if (slice.getState().equals(Slice.ACTIVE)) {
+ if (slice.getState() == Slice.State.ACTIVE) {
Collection<Replica> replicas = slice.getReplicas();
for (Replica replica : replicas) {
// on a live node?
Modified: lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java?rev=1670673&r1=1670672&r2=1670673&view=diff
==============================================================================
--- lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java (original)
+++ lucene/dev/branches/lucene6271/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java Wed Apr 1 15:24:20 2015
@@ -87,7 +87,7 @@ public class DocCollection extends ZkNod
while (iter.hasNext()) {
Map.Entry<String, Slice> slice = iter.next();
- if (slice.getValue().getState().equals(Slice.ACTIVE))
+ if (slice.getValue().getState() == Slice.State.ACTIVE)
this.activeSlices.put(slice.getKey(), slice.getValue());
}
this.router = router;