Add simple tests to ensure we can load and unload global ordinal with a wrapped reader
This commit is contained in:
parent
e3f00e302c
commit
1dca0e8f9b
|
@ -236,7 +236,7 @@ public interface IndexFieldData<FD extends AtomicFieldData> extends IndexCompone
|
||||||
CircuitBreakerService breakerService, MapperService mapperService);
|
CircuitBreakerService breakerService, MapperService mapperService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static interface Global<FD extends AtomicFieldData> extends IndexFieldData<FD> {
|
interface Global<FD extends AtomicFieldData> extends IndexFieldData<FD> {
|
||||||
|
|
||||||
IndexFieldData<FD> loadGlobal(DirectoryReader indexReader);
|
IndexFieldData<FD> loadGlobal(DirectoryReader indexReader);
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.apache.lucene.store.LockObtainFailedException;
|
||||||
import org.apache.lucene.util.Constants;
|
import org.apache.lucene.util.Constants;
|
||||||
import org.apache.lucene.util.IOUtils;
|
import org.apache.lucene.util.IOUtils;
|
||||||
import org.elasticsearch.Version;
|
import org.elasticsearch.Version;
|
||||||
|
import org.elasticsearch.action.admin.indices.flush.FlushRequest;
|
||||||
import org.elasticsearch.action.admin.indices.stats.CommonStats;
|
import org.elasticsearch.action.admin.indices.stats.CommonStats;
|
||||||
import org.elasticsearch.action.admin.indices.stats.CommonStatsFlags;
|
import org.elasticsearch.action.admin.indices.stats.CommonStatsFlags;
|
||||||
import org.elasticsearch.action.admin.indices.stats.IndexStats;
|
import org.elasticsearch.action.admin.indices.stats.IndexStats;
|
||||||
|
@ -62,13 +63,12 @@ import org.elasticsearch.index.IndexServicesProvider;
|
||||||
import org.elasticsearch.index.engine.Engine;
|
import org.elasticsearch.index.engine.Engine;
|
||||||
import org.elasticsearch.index.engine.EngineConfig;
|
import org.elasticsearch.index.engine.EngineConfig;
|
||||||
import org.elasticsearch.index.engine.EngineException;
|
import org.elasticsearch.index.engine.EngineException;
|
||||||
|
import org.elasticsearch.index.fielddata.FieldDataStats;
|
||||||
|
import org.elasticsearch.index.fielddata.IndexFieldData;
|
||||||
import org.elasticsearch.index.flush.FlushStats;
|
import org.elasticsearch.index.flush.FlushStats;
|
||||||
import org.elasticsearch.index.indexing.IndexingOperationListener;
|
import org.elasticsearch.index.indexing.IndexingOperationListener;
|
||||||
import org.elasticsearch.index.indexing.ShardIndexingService;
|
import org.elasticsearch.index.indexing.ShardIndexingService;
|
||||||
import org.elasticsearch.index.mapper.Mapping;
|
import org.elasticsearch.index.mapper.*;
|
||||||
import org.elasticsearch.index.mapper.ParseContext;
|
|
||||||
import org.elasticsearch.index.mapper.ParsedDocument;
|
|
||||||
import org.elasticsearch.index.mapper.Uid;
|
|
||||||
import org.elasticsearch.index.mapper.internal.UidFieldMapper;
|
import org.elasticsearch.index.mapper.internal.UidFieldMapper;
|
||||||
import org.elasticsearch.index.settings.IndexSettingsService;
|
import org.elasticsearch.index.settings.IndexSettingsService;
|
||||||
import org.elasticsearch.index.snapshots.IndexShardRepository;
|
import org.elasticsearch.index.snapshots.IndexShardRepository;
|
||||||
|
@ -897,7 +897,7 @@ public class IndexShardTests extends ESSingleNodeTestCase {
|
||||||
IndicesService indicesService = getInstanceFromNode(IndicesService.class);
|
IndicesService indicesService = getInstanceFromNode(IndicesService.class);
|
||||||
IndexService indexService = indicesService.indexService("test");
|
IndexService indexService = indicesService.indexService("test");
|
||||||
IndexShard shard = indexService.getShardOrNull(0);
|
IndexShard shard = indexService.getShardOrNull(0);
|
||||||
client().prepareIndex("test", "test", "0").setSource("{\"foo\" : \"bar\"}").setRefresh(randomBoolean()).get();
|
client().prepareIndex("test", "test", "0").setSource("{\"foo\" : \"bar\"}").setRefresh(true).get();
|
||||||
client().prepareIndex("test", "test", "1").setSource("{\"foobar\" : \"bar\"}").setRefresh(true).get();
|
client().prepareIndex("test", "test", "1").setSource("{\"foobar\" : \"bar\"}").setRefresh(true).get();
|
||||||
|
|
||||||
Engine.GetResult getResult = shard.get(new Engine.Get(false, new Term(UidFieldMapper.NAME, Uid.createUid("test", "1"))));
|
Engine.GetResult getResult = shard.get(new Engine.Get(false, new Term(UidFieldMapper.NAME, Uid.createUid("test", "1"))));
|
||||||
|
@ -946,11 +946,33 @@ public class IndexShardTests extends ESSingleNodeTestCase {
|
||||||
assertTrue(getResult.exists());
|
assertTrue(getResult.exists());
|
||||||
assertNotNull(getResult.searcher()); // make sure get uses the wrapped reader
|
assertNotNull(getResult.searcher()); // make sure get uses the wrapped reader
|
||||||
assertTrue(getResult.searcher().reader() instanceof FilterDirectoryReader);
|
assertTrue(getResult.searcher().reader() instanceof FilterDirectoryReader);
|
||||||
assertTrue(((FilterDirectoryReader)getResult.searcher().reader()).getDelegate() instanceof FieldMaskingReader);
|
assertTrue(((FilterDirectoryReader) getResult.searcher().reader()).getDelegate() instanceof FieldMaskingReader);
|
||||||
getResult.release();
|
getResult.release();
|
||||||
|
try {
|
||||||
|
// test global ordinals are evicted
|
||||||
|
MappedFieldType foo = newShard.mapperService().indexName("foo");
|
||||||
|
IndexFieldData.Global ifd = shard.indexFieldDataService().getForField(foo);
|
||||||
|
FieldDataStats before = shard.fieldData().stats("foo");
|
||||||
|
FieldDataStats after = null;
|
||||||
|
try (Engine.Searcher searcher = newShard.acquireSearcher("test")) {
|
||||||
|
assumeTrue("we have to have more than one segment", searcher.getDirectoryReader().leaves().size() > 1);
|
||||||
|
IndexFieldData indexFieldData = ifd.loadGlobal(searcher.getDirectoryReader());
|
||||||
|
after = shard.fieldData().stats("foo");
|
||||||
|
assertEquals(after.getEvictions(), before.getEvictions());
|
||||||
|
assertTrue(indexFieldData.toString(), after.getMemorySizeInBytes() > before.getMemorySizeInBytes());
|
||||||
|
}
|
||||||
|
assertEquals(shard.fieldData().stats("foo").getEvictions(), before.getEvictions());
|
||||||
|
assertEquals(shard.fieldData().stats("foo").getMemorySizeInBytes(), after.getMemorySizeInBytes());
|
||||||
|
newShard.flush(new FlushRequest().force(true).waitIfOngoing(true));
|
||||||
|
newShard.refresh("test");
|
||||||
|
assertEquals(shard.fieldData().stats("foo").getMemorySizeInBytes(), before.getMemorySizeInBytes());
|
||||||
|
assertEquals(shard.fieldData().stats("foo").getEvictions(), before.getEvictions());
|
||||||
|
} finally {
|
||||||
newShard.close("just do it", randomBoolean());
|
newShard.close("just do it", randomBoolean());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static class FieldMaskingReader extends FilterDirectoryReader {
|
private static class FieldMaskingReader extends FilterDirectoryReader {
|
||||||
|
|
||||||
private final String field;
|
private final String field;
|
||||||
|
|
Loading…
Reference in New Issue