Skip to content

Commit a05ea53

Browse files
committed
percolator: Make sure that start time is serialized on the mpercolate shard requests
Closes #15908
1 parent 871b38a commit a05ea53

File tree

4 files changed

+43
-31
lines changed

4 files changed

+43
-31
lines changed

core/src/main/java/org/elasticsearch/action/percolate/PercolateShardRequest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ public PercolateShardRequest() {
5252
this.startTime = request.startTime;
5353
}
5454

55-
public PercolateShardRequest(ShardId shardId, OriginalIndices originalIndices) {
56-
super(shardId, originalIndices);
57-
}
58-
5955
PercolateShardRequest(ShardId shardId, PercolateRequest request) {
6056
super(shardId, request);
6157
this.documentType = request.documentType();

core/src/main/java/org/elasticsearch/action/percolate/TransportShardMultiPercolateAction.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,8 @@ public void readFrom(StreamInput in) throws IOException {
160160
items = new ArrayList<>(size);
161161
for (int i = 0; i < size; i++) {
162162
int slot = in.readVInt();
163-
OriginalIndices originalIndices = OriginalIndices.readOriginalIndices(in);
164-
PercolateShardRequest shardRequest = new PercolateShardRequest(new ShardId(index, shardId), originalIndices);
165-
shardRequest.documentType(in.readString());
166-
shardRequest.source(in.readBytesReference());
167-
shardRequest.docSource(in.readBytesReference());
168-
shardRequest.onlyCount(in.readBoolean());
163+
PercolateShardRequest shardRequest = new PercolateShardRequest();
164+
shardRequest.readFrom(in);
169165
Item item = new Item(slot, shardRequest);
170166
items.add(item);
171167
}
@@ -179,11 +175,7 @@ public void writeTo(StreamOutput out) throws IOException {
179175
out.writeVInt(items.size());
180176
for (Item item : items) {
181177
out.writeVInt(item.slot);
182-
OriginalIndices.writeOriginalIndices(item.request.originalIndices(), out);
183-
out.writeString(item.request.documentType());
184-
out.writeBytesReference(item.request.source());
185-
out.writeBytesReference(item.request.docSource());
186-
out.writeBoolean(item.request.onlyCount());
178+
item.request.writeTo(out);
187179
}
188180
}
189181

core/src/test/java/org/elasticsearch/percolator/MultiPercolatorIT.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@
3333
import java.io.IOException;
3434

3535
import static org.elasticsearch.action.percolate.PercolateSourceBuilder.docBuilder;
36+
import static org.elasticsearch.common.settings.Settings.settingsBuilder;
3637
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
3738
import static org.elasticsearch.common.xcontent.XContentFactory.smileBuilder;
3839
import static org.elasticsearch.common.xcontent.XContentFactory.yamlBuilder;
3940
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
4041
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
4142
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
43+
import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
4244
import static org.elasticsearch.percolator.PercolatorTestUtil.convertFromTextArray;
4345
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
4446
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertMatchCount;
@@ -363,6 +365,33 @@ public void testNestedMultiPercolation() throws IOException {
363365
assertEquals(response.getItems()[1].getResponse().getMatches()[0].getId().string(), "Q");
364366
}
365367

368+
public void testStartTimeIsPropagatedToShardRequests() throws Exception {
369+
// See: https://github.com/elastic/elasticsearch/issues/15908
370+
internalCluster().ensureAtLeastNumDataNodes(2);
371+
client().admin().indices().prepareCreate("test")
372+
.setSettings(settingsBuilder()
373+
.put("index.number_of_shards", 1)
374+
.put("index.number_of_replicas", 1)
375+
)
376+
.addMapping("type", "date_field", "type=date,format=strict_date_optional_time||epoch_millis")
377+
.get();
378+
ensureGreen();
379+
380+
client().prepareIndex("test", ".percolator", "1")
381+
.setSource(jsonBuilder().startObject().field("query", rangeQuery("date_field").lt("now+90d")).endObject())
382+
.setRefresh(true)
383+
.get();
384+
385+
for (int i = 0; i < 32; i++) {
386+
MultiPercolateResponse response = client().prepareMultiPercolate()
387+
.add(client().preparePercolate().setDocumentType("type").setIndices("test")
388+
.setPercolateDoc(new PercolateSourceBuilder.DocBuilder().setDoc("date_field", "2015-07-21T10:28:01-07:00")))
389+
.get();
390+
assertThat(response.getItems()[0].getResponse().getCount(), equalTo(1L));
391+
assertThat(response.getItems()[0].getResponse().getMatches()[0].getId().string(), equalTo("1"));
392+
}
393+
}
394+
366395
void initNestedIndexAndPercolation() throws IOException {
367396
XContentBuilder mapping = XContentFactory.jsonBuilder();
368397
mapping.startObject().startObject("properties").startObject("companyname").field("type", "string").endObject()

core/src/test/java/org/elasticsearch/percolator/PercolateDocumentParserTests.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,13 @@
6666

6767
public class PercolateDocumentParserTests extends ESTestCase {
6868

69-
private Index index;
7069
private MapperService mapperService;
7170
private PercolateDocumentParser parser;
7271
private QueryShardContext queryShardContext;
72+
private PercolateShardRequest request;
7373

7474
@Before
7575
public void init() {
76-
index = new Index("_index");
7776
IndexSettings indexSettings = new IndexSettings(new IndexMetaData.Builder("_index").settings(
7877
Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
7978
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
@@ -97,6 +96,10 @@ public void init() {
9796
parser = new PercolateDocumentParser(
9897
highlightPhase, new SortParseElement(), aggregationPhase, mappingUpdatedAction
9998
);
99+
100+
request = Mockito.mock(PercolateShardRequest.class);
101+
Mockito.when(request.shardId()).thenReturn(new ShardId(new Index("_index"), 0));
102+
Mockito.when(request.documentType()).thenReturn("type");
100103
}
101104

102105
public void testParseDoc() throws Exception {
@@ -105,9 +108,7 @@ public void testParseDoc() throws Exception {
105108
.field("field1", "value1")
106109
.endObject()
107110
.endObject();
108-
PercolateShardRequest request = new PercolateShardRequest(new ShardId(index, 0), null);
109-
request.documentType("type");
110-
request.source(source.bytes());
111+
Mockito.when(request.source()).thenReturn(source.bytes());
111112

112113
PercolateContext context = new PercolateContext(request, new SearchShardTarget("_node", "_index", 0), mapperService);
113114
ParsedDocument parsedDocument = parser.parse(request, context, mapperService, queryShardContext);
@@ -126,9 +127,7 @@ public void testParseDocAndOtherOptions() throws Exception {
126127
.field("size", 123)
127128
.startObject("sort").startObject("_score").endObject().endObject()
128129
.endObject();
129-
PercolateShardRequest request = new PercolateShardRequest(new ShardId(index, 0), null);
130-
request.documentType("type");
131-
request.source(source.bytes());
130+
Mockito.when(request.source()).thenReturn(source.bytes());
132131

133132
PercolateContext context = new PercolateContext(request, new SearchShardTarget("_node", "_index", 0), mapperService);
134133
ParsedDocument parsedDocument = parser.parse(request, context, mapperService, queryShardContext);
@@ -151,10 +150,8 @@ public void testParseDocSource() throws Exception {
151150
XContentBuilder docSource = jsonBuilder().startObject()
152151
.field("field1", "value1")
153152
.endObject();
154-
PercolateShardRequest request = new PercolateShardRequest(new ShardId(index, 0), null);
155-
request.documentType("type");
156-
request.source(source.bytes());
157-
request.docSource(docSource.bytes());
153+
Mockito.when(request.source()).thenReturn(source.bytes());
154+
Mockito.when(request.docSource()).thenReturn(docSource.bytes());
158155

159156
PercolateContext context = new PercolateContext(request, new SearchShardTarget("_node", "_index", 0), mapperService);
160157
ParsedDocument parsedDocument = parser.parse(request, context, mapperService, queryShardContext);
@@ -180,10 +177,8 @@ public void testParseDocSourceAndSource() throws Exception {
180177
XContentBuilder docSource = jsonBuilder().startObject()
181178
.field("field1", "value1")
182179
.endObject();
183-
PercolateShardRequest request = new PercolateShardRequest(new ShardId(index, 0), null);
184-
request.documentType("type");
185-
request.source(source.bytes());
186-
request.docSource(docSource.bytes());
180+
Mockito.when(request.source()).thenReturn(source.bytes());
181+
Mockito.when(request.docSource()).thenReturn(docSource.bytes());
187182

188183
PercolateContext context = new PercolateContext(request, new SearchShardTarget("_node", "_index", 0), mapperService);
189184
try {

0 commit comments

Comments
 (0)