|
|
@@ -35,6 +35,8 @@ import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
|
|
import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
|
|
+import org.elasticsearch.common.xcontent.XContentHelper;
|
|
|
+import org.elasticsearch.common.xcontent.XContentType;
|
|
|
import org.elasticsearch.index.cache.request.ShardRequestCache;
|
|
|
import org.elasticsearch.index.query.TermQueryBuilder;
|
|
|
import org.elasticsearch.index.shard.ShardId;
|
|
|
@@ -57,12 +59,13 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer),
|
|
|
new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
AtomicBoolean indexShard = new AtomicBoolean(true);
|
|
|
|
|
|
// initial cache
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
- BytesReference value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(0, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(1, requestCacheStats.stats().getMissCount());
|
|
|
@@ -73,7 +76,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
// cache hit
|
|
|
entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(reader, 0);
|
|
|
- value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(1, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(1, requestCacheStats.stats().getMissCount());
|
|
|
@@ -112,6 +115,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
writer.addDocument(newDoc(0, "foo"));
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
|
|
|
writer.updateDocument(new Term("id", "0"), newDoc(0, "bar"));
|
|
|
DirectoryReader secondReader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "bar", 1));
|
|
|
@@ -119,7 +123,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
// initial cache
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
- BytesReference value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(0, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(1, requestCacheStats.stats().getMissCount());
|
|
|
@@ -133,7 +137,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
// cache the second
|
|
|
TestEntity secondEntity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(secondReader, 0);
|
|
|
- value = cache.getOrCompute(entity, loader, secondReader, termQuery.buildAsBytes());
|
|
|
+ value = cache.getOrCompute(entity, loader, secondReader, termBytes);
|
|
|
assertEquals("bar", value.streamInput().readString());
|
|
|
assertEquals(0, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(2, requestCacheStats.stats().getMissCount());
|
|
|
@@ -145,7 +149,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
|
|
|
secondEntity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(secondReader, 0);
|
|
|
- value = cache.getOrCompute(secondEntity, loader, secondReader, termQuery.buildAsBytes());
|
|
|
+ value = cache.getOrCompute(secondEntity, loader, secondReader, termBytes);
|
|
|
assertEquals("bar", value.streamInput().readString());
|
|
|
assertEquals(1, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(2, requestCacheStats.stats().getMissCount());
|
|
|
@@ -155,7 +159,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
|
|
|
entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(reader, 0);
|
|
|
- value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(2, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(2, requestCacheStats.stats().getMissCount());
|
|
|
@@ -205,6 +209,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer),
|
|
|
new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
|
|
|
@@ -214,9 +219,9 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
TestEntity secondEntity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader secondLoader = new Loader(secondReader, 0);
|
|
|
|
|
|
- BytesReference value1 = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value1 = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value1.streamInput().readString());
|
|
|
- BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termBytes);
|
|
|
assertEquals("bar", value2.streamInput().readString());
|
|
|
size = requestCacheStats.stats().getMemorySize();
|
|
|
IOUtils.close(reader, secondReader, writer, dir, cache);
|
|
|
@@ -233,6 +238,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer),
|
|
|
new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
|
|
|
@@ -248,12 +254,12 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
TestEntity thirddEntity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader thirdLoader = new Loader(thirdReader, 0);
|
|
|
|
|
|
- BytesReference value1 = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value1 = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value1.streamInput().readString());
|
|
|
- BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termBytes);
|
|
|
assertEquals("bar", value2.streamInput().readString());
|
|
|
logger.info("Memory size: {}", requestCacheStats.stats().getMemorySize());
|
|
|
- BytesReference value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termBytes);
|
|
|
assertEquals("baz", value3.streamInput().readString());
|
|
|
assertEquals(2, cache.count());
|
|
|
assertEquals(1, requestCacheStats.stats().getEvictions());
|
|
|
@@ -272,6 +278,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer),
|
|
|
new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
|
|
|
@@ -288,12 +295,12 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
TestEntity thirddEntity = new TestEntity(requestCacheStats, differentIdentity);
|
|
|
Loader thirdLoader = new Loader(thirdReader, 0);
|
|
|
|
|
|
- BytesReference value1 = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value1 = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value1.streamInput().readString());
|
|
|
- BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value2 = cache.getOrCompute(secondEntity, secondLoader, secondReader, termBytes);
|
|
|
assertEquals("bar", value2.streamInput().readString());
|
|
|
logger.info("Memory size: {}", requestCacheStats.stats().getMemorySize());
|
|
|
- BytesReference value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termBytes);
|
|
|
assertEquals("baz", value3.streamInput().readString());
|
|
|
assertEquals(3, cache.count());
|
|
|
final long hitCount = requestCacheStats.stats().getHitCount();
|
|
|
@@ -302,7 +309,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
cache.cleanCache();
|
|
|
assertEquals(1, cache.count());
|
|
|
// third has not been validated since it's a different identity
|
|
|
- value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termQuery.buildAsBytes());
|
|
|
+ value3 = cache.getOrCompute(thirddEntity, thirdLoader, thirdReader, termBytes);
|
|
|
assertEquals(hitCount + 1, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals("baz", value3.streamInput().readString());
|
|
|
|
|
|
@@ -355,12 +362,13 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
DirectoryReader reader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer),
|
|
|
new ShardId("foo", "bar", 1));
|
|
|
TermQueryBuilder termQuery = new TermQueryBuilder("id", "0");
|
|
|
+ BytesReference termBytes = XContentHelper.toXContent(termQuery, XContentType.JSON, false);
|
|
|
AtomicBoolean indexShard = new AtomicBoolean(true);
|
|
|
|
|
|
// initial cache
|
|
|
TestEntity entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
Loader loader = new Loader(reader, 0);
|
|
|
- BytesReference value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ BytesReference value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(0, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(1, requestCacheStats.stats().getMissCount());
|
|
|
@@ -371,7 +379,7 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
// cache hit
|
|
|
entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(reader, 0);
|
|
|
- value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(1, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(1, requestCacheStats.stats().getMissCount());
|
|
|
@@ -384,8 +392,8 @@ public class IndicesRequestCacheTests extends ESTestCase {
|
|
|
// load again after invalidate
|
|
|
entity = new TestEntity(requestCacheStats, indexShard);
|
|
|
loader = new Loader(reader, 0);
|
|
|
- cache.invalidate(entity, reader, termQuery.buildAsBytes());
|
|
|
- value = cache.getOrCompute(entity, loader, reader, termQuery.buildAsBytes());
|
|
|
+ cache.invalidate(entity, reader, termBytes);
|
|
|
+ value = cache.getOrCompute(entity, loader, reader, termBytes);
|
|
|
assertEquals("foo", value.streamInput().readString());
|
|
|
assertEquals(1, requestCacheStats.stats().getHitCount());
|
|
|
assertEquals(2, requestCacheStats.stats().getMissCount());
|