mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
Add asserting searcher to track searcher references
This assertion module also injects an AssertingIndexSearcher that checks if our queries are all compliant with the lucene specification which is improtant for future updates and changes in the upstream project.
This commit is contained in:
parent
bb4f30c76c
commit
04deb80634
@ -36,6 +36,7 @@ public class IndexEngineModule extends AbstractModule implements SpawnModules {
|
||||
|
||||
public static final class EngineSettings {
|
||||
public static final String ENGINE_TYPE = "index.engine.type";
|
||||
public static final String INDEX_ENGINE_TYPE = "index.index_engine.type";
|
||||
public static final Class<? extends Module> DEFAULT_INDEX_ENGINE = RobinIndexEngineModule.class;
|
||||
public static final Class<? extends Module> DEFAULT_ENGINE = RobinEngineModule.class;
|
||||
}
|
||||
@ -48,7 +49,7 @@ public class IndexEngineModule extends AbstractModule implements SpawnModules {
|
||||
|
||||
@Override
|
||||
public Iterable<? extends Module> spawnModules() {
|
||||
return ImmutableList.of(createModule(settings.getAsClass(EngineSettings.ENGINE_TYPE, EngineSettings.DEFAULT_INDEX_ENGINE, "org.elasticsearch.index.engine.", "IndexEngineModule"), settings));
|
||||
return ImmutableList.of(createModule(settings.getAsClass(EngineSettings.INDEX_ENGINE_TYPE, EngineSettings.DEFAULT_INDEX_ENGINE, "org.elasticsearch.index.engine.", "IndexEngineModule"), settings));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -676,16 +676,20 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Searcher searcher() throws EngineException {
|
||||
public final Searcher searcher() throws EngineException {
|
||||
SearcherManager manager = this.searcherManager;
|
||||
try {
|
||||
IndexSearcher searcher = manager.acquire();
|
||||
return new RobinSearcher(searcher, manager);
|
||||
return newSearcher(searcher, manager);
|
||||
} catch (IOException ex) {
|
||||
logger.error("failed to accquire searcher for shard [{}]", ex, shardId);
|
||||
throw new EngineException(shardId, ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
protected Searcher newSearcher(IndexSearcher searcher, SearcherManager manager) {
|
||||
return new RobinSearcher(searcher, manager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean refreshNeeded() {
|
||||
|
@ -19,7 +19,10 @@
|
||||
|
||||
package org.apache.lucene.util;
|
||||
|
||||
import com.carrotsearch.randomizedtesting.*;
|
||||
import com.carrotsearch.randomizedtesting.JUnit4MethodProvider;
|
||||
import com.carrotsearch.randomizedtesting.LifecycleScope;
|
||||
import com.carrotsearch.randomizedtesting.RandomizedContext;
|
||||
import com.carrotsearch.randomizedtesting.RandomizedTest;
|
||||
import com.carrotsearch.randomizedtesting.annotations.Listeners;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TestGroup;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TestMethodProviders;
|
||||
@ -59,7 +62,6 @@ import java.util.logging.Logger;
|
||||
// NOTE: this class is in o.a.lucene.util since it uses some classes that are related
|
||||
// to the test framework that didn't make sense to copy but are package private access
|
||||
public abstract class AbstractRandomizedTest extends RandomizedTest {
|
||||
|
||||
/**
|
||||
* Annotation for integration tests
|
||||
*/
|
||||
@ -305,7 +307,6 @@ public abstract class AbstractRandomizedTest extends RandomizedTest {
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
parentChainCallRule.setupCalled = true;
|
||||
currentSeed = SeedUtils.parseSeed(getContext().getRunnerSeedAsString());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -314,7 +315,6 @@ public abstract class AbstractRandomizedTest extends RandomizedTest {
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
parentChainCallRule.teardownCalled = true;
|
||||
currentSeed = null;
|
||||
}
|
||||
|
||||
|
||||
@ -355,10 +355,4 @@ public abstract class AbstractRandomizedTest extends RandomizedTest {
|
||||
public String getTestName() {
|
||||
return threadAndTestNameRule.testMethodName;
|
||||
}
|
||||
|
||||
private static volatile Long currentSeed;
|
||||
|
||||
public static Long getCurrentSeed() {
|
||||
return currentSeed;
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +103,7 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
||||
cluster.beforeTest(getRandom());
|
||||
wipeIndices();
|
||||
wipeTemplates();
|
||||
randomIndexTemplate();
|
||||
logger.info("[{}#{}]: before test", getTestClass().getSimpleName(), getTestName());
|
||||
}
|
||||
|
||||
@ -116,6 +117,7 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
||||
.persistentSettings().getAsMap().size(), equalTo(0));
|
||||
wipeIndices(); // wipe after to make sure we fail in the test that didn't ack the delete
|
||||
wipeTemplates();
|
||||
ensureAllSearchersClosed();
|
||||
ensureAllFilesClosed();
|
||||
logger.info("[{}#{}]: cleaned up after test", getTestClass().getSimpleName(), getTestName());
|
||||
}
|
||||
@ -135,6 +137,15 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
||||
public static Client client() {
|
||||
return cluster().client();
|
||||
}
|
||||
|
||||
private static void randomIndexTemplate() {
|
||||
client().admin().indices().preparePutTemplate("random_index_template")
|
||||
.setTemplate("*")
|
||||
.setOrder(0)
|
||||
.setSettings(ImmutableSettings.builder()
|
||||
.put(INDEX_SEED_SETTING, getRandom().nextLong()))
|
||||
.execute().actionGet();
|
||||
}
|
||||
|
||||
public static Iterable<Client> clients() {
|
||||
return cluster().clients();
|
||||
|
@ -29,12 +29,14 @@ import org.elasticsearch.common.logging.ESLogger;
|
||||
import org.elasticsearch.common.logging.Loggers;
|
||||
import org.elasticsearch.index.store.mock.MockDirectoryHelper;
|
||||
import org.elasticsearch.junit.listeners.LoggingListener;
|
||||
import org.elasticsearch.test.engine.MockRobinEngine;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@ -49,6 +51,7 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest {
|
||||
public static final String CHILD_VM_ID = System.getProperty("junit4.childvm.id", "" + System.currentTimeMillis());
|
||||
|
||||
public static final long SHARED_CLUSTER_SEED = clusterSeed();
|
||||
public static final String INDEX_SEED_SETTING = "index.tests.seed";
|
||||
|
||||
private static long clusterSeed() {
|
||||
String property = System.getProperty("tests.cluster_seed");
|
||||
@ -111,6 +114,24 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest {
|
||||
}
|
||||
}
|
||||
|
||||
public static void ensureAllSearchersClosed() {
|
||||
if (MockRobinEngine.INFLIGHT_ENGINE_SEARCHERS.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
RuntimeException ex = null;
|
||||
StringBuilder builder = new StringBuilder("Unclosed Searchers instance for shards: [");
|
||||
for (Entry<MockRobinEngine.AssertingSearcher, RuntimeException> entry : MockRobinEngine.INFLIGHT_ENGINE_SEARCHERS.entrySet()) {
|
||||
ex = entry.getValue();
|
||||
builder.append(entry.getKey().shardId()).append(",");
|
||||
}
|
||||
builder.append("]");
|
||||
throw new RuntimeException(builder.toString(), ex);
|
||||
} finally {
|
||||
MockRobinEngine.INFLIGHT_ENGINE_SEARCHERS.clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static void forceClearMockWrappers() {
|
||||
MockDirectoryHelper.wrappers.clear();
|
||||
}
|
||||
@ -133,5 +154,12 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest {
|
||||
ensureAllFilesClosed();
|
||||
}
|
||||
});
|
||||
|
||||
closeAfterSuite(new Closeable() {
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
ensureAllSearchersClosed();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -40,9 +40,11 @@ import org.elasticsearch.common.settings.ImmutableSettings;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.transport.TransportAddress;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.index.engine.IndexEngineModule;
|
||||
import org.elasticsearch.index.store.mock.MockFSIndexStoreModule;
|
||||
import org.elasticsearch.node.Node;
|
||||
import org.elasticsearch.node.internal.InternalNode;
|
||||
import org.elasticsearch.test.engine.MockEngineModule;
|
||||
import org.elasticsearch.transport.TransportService;
|
||||
|
||||
import java.io.Closeable;
|
||||
@ -114,6 +116,7 @@ public class TestCluster {
|
||||
/* use RAM directories in 10% of the runs */
|
||||
// .put("index.store.type", random.nextInt(10) == 0 ? MockRamIndexStoreModule.class.getName() : MockFSIndexStoreModule.class.getName())
|
||||
.put("index.store.type", MockFSIndexStoreModule.class.getName()) // no RAM dir for now!
|
||||
.put(IndexEngineModule.EngineSettings.ENGINE_TYPE, MockEngineModule.class.getName())
|
||||
.put(defaultSettings)
|
||||
.put("cluster.name", clusterName).build();
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public class DeleteByQueryTests extends AbstractSharedClusterTest {
|
||||
public void testDeleteAllNoIndices() {
|
||||
client().admin().indices().prepareDelete().execute().actionGet();
|
||||
client().admin().indices().prepareRefresh().execute().actionGet();
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = new DeleteByQueryRequestBuilder(client());
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = client().prepareDeleteByQuery();
|
||||
deleteByQueryRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
|
||||
DeleteByQueryResponse actionGet = deleteByQueryRequestBuilder.execute().actionGet();
|
||||
assertThat(actionGet.getIndices().size(), equalTo(0));
|
||||
@ -55,7 +55,7 @@ public class DeleteByQueryTests extends AbstractSharedClusterTest {
|
||||
|
||||
SearchResponse search = client().prepareSearch().setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
|
||||
assertThat(search.getHits().totalHits(), equalTo(1l));
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = new DeleteByQueryRequestBuilder(client());
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = client().prepareDeleteByQuery();
|
||||
deleteByQueryRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
|
||||
|
||||
DeleteByQueryResponse actionGet = deleteByQueryRequestBuilder.execute().actionGet();
|
||||
@ -78,7 +78,7 @@ public class DeleteByQueryTests extends AbstractSharedClusterTest {
|
||||
|
||||
SearchResponse search = client().prepareSearch().setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
|
||||
assertThat(search.getHits().totalHits(), equalTo(1l));
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = new DeleteByQueryRequestBuilder(client());
|
||||
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = client().prepareDeleteByQuery();
|
||||
deleteByQueryRequestBuilder.setIndices("twitter", "missing");
|
||||
deleteByQueryRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
|
||||
|
||||
|
@ -27,6 +27,7 @@ import org.apache.lucene.document.TextField;
|
||||
import org.apache.lucene.index.IndexDeletionPolicy;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.elasticsearch.ElasticsearchTestCase;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
@ -39,6 +40,7 @@ import org.elasticsearch.index.codec.CodecService;
|
||||
import org.elasticsearch.index.deletionpolicy.KeepOnlyLastDeletionPolicy;
|
||||
import org.elasticsearch.index.deletionpolicy.SnapshotDeletionPolicy;
|
||||
import org.elasticsearch.index.deletionpolicy.SnapshotIndexCommit;
|
||||
import org.elasticsearch.index.deletionpolicy.SnapshotIndexCommitExistsMatcher;
|
||||
import org.elasticsearch.index.engine.*;
|
||||
import org.elasticsearch.index.indexing.ShardIndexingService;
|
||||
import org.elasticsearch.index.indexing.slowlog.ShardSlowLogIndexingService;
|
||||
@ -57,11 +59,8 @@ import org.elasticsearch.index.store.Store;
|
||||
import org.elasticsearch.index.store.distributor.LeastUsedDistributor;
|
||||
import org.elasticsearch.index.store.ram.RamDirectoryService;
|
||||
import org.elasticsearch.index.translog.Translog;
|
||||
import org.elasticsearch.index.translog.fs.FsTranslog;
|
||||
import org.elasticsearch.ElasticsearchTestCase;
|
||||
import org.elasticsearch.index.deletionpolicy.SnapshotIndexCommitExistsMatcher;
|
||||
import org.elasticsearch.index.engine.EngineSearcherTotalHitsMatcher;
|
||||
import org.elasticsearch.index.translog.TranslogSizeMatcher;
|
||||
import org.elasticsearch.index.translog.fs.FsTranslog;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.hamcrest.MatcherAssert;
|
||||
import org.junit.After;
|
||||
@ -321,11 +320,12 @@ public class RobinEngineTests extends ElasticsearchTestCase {
|
||||
assertThat(getResult.exists(), equalTo(true));
|
||||
assertThat(getResult.source().source.toBytesArray(), equalTo(B_1.toBytesArray()));
|
||||
assertThat(getResult.docIdAndVersion(), nullValue());
|
||||
|
||||
getResult.release();
|
||||
|
||||
// but, not there non realtime
|
||||
getResult = engine.get(new Engine.Get(false, newUid("1")));
|
||||
assertThat(getResult.exists(), equalTo(false));
|
||||
|
||||
getResult.release();
|
||||
// refresh and it should be there
|
||||
engine.refresh(new Engine.Refresh().force(false));
|
||||
|
||||
@ -339,7 +339,8 @@ public class RobinEngineTests extends ElasticsearchTestCase {
|
||||
getResult = engine.get(new Engine.Get(false, newUid("1")));
|
||||
assertThat(getResult.exists(), equalTo(true));
|
||||
assertThat(getResult.docIdAndVersion(), notNullValue());
|
||||
|
||||
getResult.release();
|
||||
|
||||
// now do an update
|
||||
document = testDocument();
|
||||
document.add(new TextField("value", "test1", Field.Store.YES));
|
||||
@ -359,7 +360,8 @@ public class RobinEngineTests extends ElasticsearchTestCase {
|
||||
assertThat(getResult.exists(), equalTo(true));
|
||||
assertThat(getResult.source().source.toBytesArray(), equalTo(B_2.toBytesArray()));
|
||||
assertThat(getResult.docIdAndVersion(), nullValue());
|
||||
|
||||
getResult.release();
|
||||
|
||||
// refresh and it should be updated
|
||||
engine.refresh(new Engine.Refresh().force(false));
|
||||
|
||||
@ -382,7 +384,8 @@ public class RobinEngineTests extends ElasticsearchTestCase {
|
||||
// but, get should not see it (in realtime)
|
||||
getResult = engine.get(new Engine.Get(true, newUid("1")));
|
||||
assertThat(getResult.exists(), equalTo(false));
|
||||
|
||||
getResult.release();
|
||||
|
||||
// refresh and it should be deleted
|
||||
engine.refresh(new Engine.Refresh().force(false));
|
||||
|
||||
@ -423,7 +426,7 @@ public class RobinEngineTests extends ElasticsearchTestCase {
|
||||
assertThat(getResult.exists(), equalTo(true));
|
||||
assertThat(getResult.source(), nullValue());
|
||||
assertThat(getResult.docIdAndVersion(), notNullValue());
|
||||
|
||||
getResult.release();
|
||||
|
||||
// make sure we can still work with the engine
|
||||
// now do an update
|
||||
|
@ -22,8 +22,8 @@ package org.elasticsearch.index.store.mock;
|
||||
import com.carrotsearch.randomizedtesting.SeedUtils;
|
||||
import org.apache.lucene.store.*;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper.Throttling;
|
||||
import org.apache.lucene.util.AbstractRandomizedTest;
|
||||
import org.apache.lucene.util.Constants;
|
||||
import org.elasticsearch.ElasticsearchTestCase;
|
||||
import org.elasticsearch.cache.memory.ByteBufferCache;
|
||||
import org.elasticsearch.common.logging.ESLogger;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
@ -44,7 +44,6 @@ import java.util.Set;
|
||||
public class MockDirectoryHelper {
|
||||
public static final String RANDOM_IO_EXCEPTION_RATE = "index.store.mock.random.io_exception_rate";
|
||||
public static final String RANDOM_IO_EXCEPTION_RATE_ON_OPEN = "index.store.mock.random.io_exception_rate_on_open";
|
||||
public static final String RANDOM_SEED = "index.store.mock.random.seed";
|
||||
public static final String RANDOM_THROTTLE = "index.store.mock.random.throttle";
|
||||
public static final String CHECK_INDEX_ON_CLOSE = "index.store.mock.check_index_on_close";
|
||||
public static final Set<MockDirectoryWrapper> wrappers = ConcurrentCollections.newConcurrentSet();
|
||||
@ -59,9 +58,7 @@ public class MockDirectoryHelper {
|
||||
public MockDirectoryHelper(ShardId shardId, Settings indexSettings, ESLogger logger) {
|
||||
randomIOExceptionRate = indexSettings.getAsDouble(RANDOM_IO_EXCEPTION_RATE, 0.0d);
|
||||
randomIOExceptionRateOnOpen = indexSettings.getAsDouble(RANDOM_IO_EXCEPTION_RATE_ON_OPEN, 0.0d);
|
||||
final Long currentSeed = AbstractRandomizedTest.getCurrentSeed();
|
||||
assert currentSeed != null;
|
||||
final long seed = indexSettings.getAsLong(RANDOM_SEED, currentSeed);
|
||||
final long seed = indexSettings.getAsLong(ElasticsearchTestCase.INDEX_SEED_SETTING, 0l);
|
||||
random = new Random(seed);
|
||||
random.nextInt(shardId.getId() + 1); // some randomness per shard
|
||||
throttle = Throttling.valueOf(indexSettings.get(RANDOM_THROTTLE, random.nextDouble() < 0.1 ? "SOMETIMES" : "NEVER"));
|
||||
|
@ -116,6 +116,7 @@ public class SimpleIndexTemplateTests extends AbstractSharedClusterTest {
|
||||
|
||||
@Test
|
||||
public void testDeleteIndexTemplate() throws Exception {
|
||||
final int existingTemplates = admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().size();
|
||||
logger.info("--> put template_1 and template_2");
|
||||
client().admin().indices().preparePutTemplate("template_1")
|
||||
.setTemplate("te*")
|
||||
@ -136,8 +137,10 @@ public class SimpleIndexTemplateTests extends AbstractSharedClusterTest {
|
||||
|
||||
logger.info("--> explicitly delete template_1");
|
||||
admin().indices().prepareDeleteTemplate("template_1").execute().actionGet();
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().size(), equalTo(1));
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().size(), equalTo(1+existingTemplates));
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().containsKey("template_2"), equalTo(true));
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().containsKey("template_1"), equalTo(false));
|
||||
|
||||
|
||||
logger.info("--> put template_1 back");
|
||||
client().admin().indices().preparePutTemplate("template_1")
|
||||
@ -151,7 +154,7 @@ public class SimpleIndexTemplateTests extends AbstractSharedClusterTest {
|
||||
|
||||
logger.info("--> delete template*");
|
||||
admin().indices().prepareDeleteTemplate("template*").execute().actionGet();
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().size(), equalTo(0));
|
||||
assertThat(admin().cluster().prepareState().execute().actionGet().getState().metaData().templates().size(), equalTo(existingTemplates));
|
||||
|
||||
logger.info("--> delete * with no templates, make sure we don't get a failure");
|
||||
admin().indices().prepareDeleteTemplate("*").execute().actionGet();
|
||||
@ -224,7 +227,7 @@ public class SimpleIndexTemplateTests extends AbstractSharedClusterTest {
|
||||
assertThat(templateNames, containsInAnyOrder("template_1", "template_2"));
|
||||
|
||||
logger.info("--> get all templates");
|
||||
getTemplate1Response = client().admin().indices().prepareGetTemplates().execute().actionGet();
|
||||
getTemplate1Response = client().admin().indices().prepareGetTemplates("template*").execute().actionGet();
|
||||
assertThat(getTemplate1Response.getIndexTemplates(), hasSize(3));
|
||||
|
||||
templateNames = Lists.newArrayList();
|
||||
|
@ -66,10 +66,7 @@ public class SearchWhileRelocatingTests extends AbstractSharedClusterTest {
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
final int numDocs = between(10, 20);
|
||||
for (int i = 0; i < numDocs; i++) {
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
.setType("type")
|
||||
.setId(Integer.toString(i))
|
||||
.setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex("test", "type", Integer.toString(i))
|
||||
.setSource(
|
||||
jsonBuilder().startObject().field("test", "value").startObject("loc").field("lat", 11).field("lon", 21)
|
||||
.endObject().endObject()));
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.elasticsearch.search.child;
|
||||
|
||||
import org.elasticsearch.AbstractSharedClusterTest;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
|
||||
import org.elasticsearch.action.count.CountResponse;
|
||||
@ -33,7 +34,6 @@ import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.search.facet.terms.TermsFacet;
|
||||
import org.elasticsearch.search.sort.SortBuilders;
|
||||
import org.elasticsearch.search.sort.SortOrder;
|
||||
import org.elasticsearch.AbstractSharedClusterTest;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Test;
|
||||
|
||||
@ -1107,54 +1107,54 @@ public class SimpleChildQuerySearchTests extends AbstractSharedClusterTest {
|
||||
List<IndexRequestBuilder> createDocBuilders() {
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
// Parent 1 and its children
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("parent").setId("1").setIndex("test").setSource("p_field", "p_value1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("1").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("parent").setId("1").setIndex("test").setSource("p_field", "p_value1"));
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("1").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 0).setParent("1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("2").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("2").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 0).setParent("1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("3").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("3").setIndex("test")
|
||||
.setSource("c_field1", 2, "c_field2", 0).setParent("1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("4").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("4").setIndex("test")
|
||||
.setSource("c_field1", 2, "c_field2", 0).setParent("1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("5").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("5").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1).setParent("1"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("6").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("6").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2).setParent("1"));
|
||||
|
||||
// Parent 2 and its children
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("parent").setId("2").setIndex("test").setSource("p_field", "p_value2"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("7").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("parent").setId("2").setIndex("test").setSource("p_field", "p_value2"));
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("7").setIndex("test")
|
||||
.setSource("c_field1", 3, "c_field2", 0).setParent("2"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("8").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("8").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1).setParent("2"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("9").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("9").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1).setParent("p")); // why
|
||||
// "p"????
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("10").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("10").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1).setParent("2"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("11").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("11").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1).setParent("2"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("12").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("12").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2).setParent("2"));
|
||||
|
||||
// Parent 3 and its children
|
||||
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("parent").setId("3").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("parent").setId("3").setIndex("test")
|
||||
.setSource("p_field1", "p_value3", "p_field2", 5));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("13").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("13").setIndex("test")
|
||||
.setSource("c_field1", 4, "c_field2", 0, "c_field3", 0).setParent("3"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("14").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("14").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 1, "c_field3", 1).setParent("3"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("15").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("15").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2, "c_field3", 2).setParent("3")); // why
|
||||
// "p"????
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("16").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("16").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2, "c_field3", 3).setParent("3"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("17").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("17").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2, "c_field3", 4).setParent("3"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child").setId("18").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child").setId("18").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2, "c_field3", 5).setParent("3"));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("child1").setId("1").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("child1").setId("1").setIndex("test")
|
||||
.setSource("c_field1", 1, "c_field2", 2, "c_field3", 6).setParent("3"));
|
||||
|
||||
return indexBuilders;
|
||||
|
@ -61,14 +61,14 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
ensureYellow();
|
||||
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId("1")
|
||||
.setIndex("test")
|
||||
.setSource(
|
||||
jsonBuilder().startObject().field("test", "value").startObject("loc").field("lat", 10).field("lon", 20).endObject()
|
||||
.endObject()));
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId("2")
|
||||
.setIndex("test")
|
||||
@ -78,7 +78,7 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
|
||||
int numDummyDocs = 20;
|
||||
for (int i = 1; i <= numDummyDocs; i++) {
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId(Integer.toString(i + 3))
|
||||
.setIndex("test")
|
||||
@ -163,15 +163,15 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
|
||||
// add tw docs within offset
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("type1").setId("1").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("type1").setId("1").setIndex("test")
|
||||
.setSource(jsonBuilder().startObject().field("test", "value").field("num", 0.5).endObject()));
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("type1").setId("2").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("type1").setId("2").setIndex("test")
|
||||
.setSource(jsonBuilder().startObject().field("test", "value").field("num", 1.7).endObject()));
|
||||
|
||||
// add docs outside offset
|
||||
int numDummyDocs = 20;
|
||||
for (int i = 0; i < numDummyDocs; i++) {
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("type1").setId(Integer.toString(i + 3)).setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("type1").setId(Integer.toString(i + 3)).setIndex("test")
|
||||
.setSource(jsonBuilder().startObject().field("test", "value").field("num", 3.0 + i).endObject()));
|
||||
}
|
||||
IndexRequestBuilder[] builders = indexBuilders.toArray(new IndexRequestBuilder[indexBuilders.size()]);
|
||||
@ -242,14 +242,14 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
ensureYellow();
|
||||
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId("1")
|
||||
.setIndex("test")
|
||||
.setSource(
|
||||
jsonBuilder().startObject().field("test", "value").startObject("loc").field("lat", 11).field("lon", 21).endObject()
|
||||
.endObject()));
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId("2")
|
||||
.setIndex("test")
|
||||
@ -300,7 +300,7 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
ensureYellow();
|
||||
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type1")
|
||||
.setId("1")
|
||||
.setIndex("test")
|
||||
@ -346,7 +346,7 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
ensureYellow();
|
||||
|
||||
List<IndexRequestBuilder> indexBuilders = new ArrayList<IndexRequestBuilder>();
|
||||
indexBuilders.add(new IndexRequestBuilder(client()).setType("type1").setId("1").setIndex("test")
|
||||
indexBuilders.add(client().prepareIndex().setType("type1").setId("1").setIndex("test")
|
||||
.setSource(jsonBuilder().startObject().field("test", "value").field("num", 1.0).endObject()));
|
||||
IndexRequestBuilder[] builders = indexBuilders.toArray(new IndexRequestBuilder[indexBuilders.size()]);
|
||||
|
||||
@ -579,7 +579,7 @@ public class DecayFunctionScoreTests extends AbstractSharedClusterTest {
|
||||
String dayString = day < 10 ? "0" + Integer.toString(day) : Integer.toString(day);
|
||||
String date = "2013-05-" + dayString;
|
||||
|
||||
indexBuilders.add(new IndexRequestBuilder(client())
|
||||
indexBuilders.add(client().prepareIndex()
|
||||
.setType("type")
|
||||
.setId(Integer.toString(i))
|
||||
.setIndex("test")
|
||||
|
@ -214,11 +214,6 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
|
||||
@Test
|
||||
public void testSimpleScrollQueryThenFetch_clearScrollIds() throws Exception {
|
||||
try {
|
||||
client().admin().indices().prepareDelete("test").execute().actionGet();
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
client().admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 3)).execute().actionGet();
|
||||
client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForGreenStatus().execute().actionGet();
|
||||
|
||||
@ -234,6 +229,7 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
.setQuery(matchAllQuery())
|
||||
.setSize(35)
|
||||
.setScroll(TimeValue.timeValueMinutes(2))
|
||||
.setSearchType(SearchType.QUERY_THEN_FETCH)
|
||||
.addSort("field", SortOrder.ASC)
|
||||
.execute().actionGet();
|
||||
|
||||
@ -241,6 +237,7 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
.setQuery(matchAllQuery())
|
||||
.setSize(35)
|
||||
.setScroll(TimeValue.timeValueMinutes(2))
|
||||
.setSearchType(SearchType.QUERY_THEN_FETCH)
|
||||
.addSort("field", SortOrder.ASC)
|
||||
.execute().actionGet();
|
||||
|
||||
@ -302,11 +299,6 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
|
||||
@Test
|
||||
public void testSimpleScrollQueryThenFetch_clearAllScrollIds() throws Exception {
|
||||
try {
|
||||
client().admin().indices().prepareDelete("test").execute().actionGet();
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
client().admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 3)).execute().actionGet();
|
||||
client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForGreenStatus().execute().actionGet();
|
||||
|
||||
@ -322,6 +314,7 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
.setQuery(matchAllQuery())
|
||||
.setSize(35)
|
||||
.setScroll(TimeValue.timeValueMinutes(2))
|
||||
.setSearchType(SearchType.QUERY_THEN_FETCH)
|
||||
.addSort("field", SortOrder.ASC)
|
||||
.execute().actionGet();
|
||||
|
||||
@ -329,6 +322,7 @@ public class SearchScrollTests extends AbstractSharedClusterTest {
|
||||
.setQuery(matchAllQuery())
|
||||
.setSize(35)
|
||||
.setScroll(TimeValue.timeValueMinutes(2))
|
||||
.setSearchType(SearchType.QUERY_THEN_FETCH)
|
||||
.addSort("field", SortOrder.ASC)
|
||||
.execute().actionGet();
|
||||
|
||||
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Licensed to ElasticSearch and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. ElasticSearch licenses this
|
||||
* file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.test.engine;
|
||||
|
||||
import org.elasticsearch.common.inject.AbstractModule;
|
||||
import org.elasticsearch.index.engine.Engine;
|
||||
|
||||
public class MockEngineModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Engine.class).to(MockRobinEngine.class).asEagerSingleton();
|
||||
}
|
||||
}
|
125
src/test/java/org/elasticsearch/test/engine/MockRobinEngine.java
Normal file
125
src/test/java/org/elasticsearch/test/engine/MockRobinEngine.java
Normal file
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Licensed to ElasticSearch and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. ElasticSearch licenses this
|
||||
* file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.test.engine;
|
||||
|
||||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.search.AssertingIndexSearcher;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.SearcherManager;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.ElasticsearchTestCase;
|
||||
import org.elasticsearch.common.Nullable;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.codec.CodecService;
|
||||
import org.elasticsearch.index.deletionpolicy.SnapshotDeletionPolicy;
|
||||
import org.elasticsearch.index.engine.Engine;
|
||||
import org.elasticsearch.index.engine.EngineException;
|
||||
import org.elasticsearch.index.engine.robin.RobinEngine;
|
||||
import org.elasticsearch.index.indexing.ShardIndexingService;
|
||||
import org.elasticsearch.index.merge.policy.MergePolicyProvider;
|
||||
import org.elasticsearch.index.merge.scheduler.MergeSchedulerProvider;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.index.settings.IndexSettingsService;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.index.store.Store;
|
||||
import org.elasticsearch.index.translog.Translog;
|
||||
import org.elasticsearch.indices.warmer.IndicesWarmer;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
public final class MockRobinEngine extends RobinEngine implements Engine {
|
||||
public static final ConcurrentMap<AssertingSearcher, RuntimeException> INFLIGHT_ENGINE_SEARCHERS = new ConcurrentHashMap<AssertingSearcher, RuntimeException>();
|
||||
private final Random random;
|
||||
@Inject
|
||||
public MockRobinEngine(ShardId shardId, @IndexSettings Settings indexSettings, ThreadPool threadPool,
|
||||
IndexSettingsService indexSettingsService, ShardIndexingService indexingService, @Nullable IndicesWarmer warmer, Store store,
|
||||
SnapshotDeletionPolicy deletionPolicy, Translog translog, MergePolicyProvider mergePolicyProvider,
|
||||
MergeSchedulerProvider mergeScheduler, AnalysisService analysisService, SimilarityService similarityService,
|
||||
CodecService codecService) throws EngineException {
|
||||
super(shardId, indexSettings, threadPool, indexSettingsService, indexingService, warmer, store,
|
||||
deletionPolicy, translog, mergePolicyProvider, mergeScheduler, analysisService, similarityService, codecService);
|
||||
final long seed = indexSettings.getAsLong(ElasticsearchTestCase.INDEX_SEED_SETTING, 0l);
|
||||
if (logger.isTraceEnabled()){
|
||||
logger.trace("Using [{}] for shard [{}] seed: [{}]", this.getClass().getName(), shardId, seed);
|
||||
}
|
||||
random = new Random(seed);
|
||||
}
|
||||
|
||||
|
||||
public void close() throws ElasticSearchException {
|
||||
try {
|
||||
super.close();
|
||||
} finally {
|
||||
if (logger.isDebugEnabled()) {
|
||||
// log debug if we have pending searchers
|
||||
for (Entry<MockRobinEngine.AssertingSearcher, RuntimeException> entry : MockRobinEngine.INFLIGHT_ENGINE_SEARCHERS.entrySet()) {
|
||||
logger.debug("Unreleased Searchers instance for shard [{}]", entry.getValue(), entry.getKey().shardId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Searcher newSearcher(IndexSearcher searcher, SearcherManager manager) throws EngineException {
|
||||
// this executes basic query checks and asserts that weights are normalized only once etc.
|
||||
final AssertingIndexSearcher assertingIndexSearcher = new AssertingIndexSearcher(random, searcher.getTopReaderContext());
|
||||
assertingIndexSearcher.setSimilarity(searcher.getSimilarity());
|
||||
return new AssertingSearcher(super.newSearcher(assertingIndexSearcher, manager), shardId);
|
||||
}
|
||||
|
||||
public static final class AssertingSearcher implements Searcher {
|
||||
private final Searcher searcher;
|
||||
private final ShardId shardId;
|
||||
|
||||
public AssertingSearcher(Searcher searcher, ShardId shardId) {
|
||||
this.searcher = searcher;
|
||||
this.shardId = shardId;
|
||||
INFLIGHT_ENGINE_SEARCHERS.put(this, new RuntimeException("Unreleased Searcher"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean release() throws ElasticSearchException {
|
||||
RuntimeException remove = INFLIGHT_ENGINE_SEARCHERS.remove(this);
|
||||
assert remove != null : "Released Searcher more than once";
|
||||
return searcher.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IndexReader reader() {
|
||||
return searcher.reader();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IndexSearcher searcher() {
|
||||
return searcher.searcher();
|
||||
}
|
||||
|
||||
public ShardId shardId() {
|
||||
return shardId;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user