Skip to content

Commit fcd06ee

Browse files
committed
Deprecate support for first line empty in msearch API
In order to support for empty action metadata in the first msearch item, we need to remove support for prepending msearch request body with an empty line, which prevents us from parsing the empty line as action metadata for the first search item. Relates to elastic#41011
1 parent 31c609d commit fcd06ee

File tree

5 files changed

+51
-3
lines changed

5 files changed

+51
-3
lines changed

server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.elasticsearch.common.bytes.BytesReference;
2828
import org.elasticsearch.common.io.stream.StreamInput;
2929
import org.elasticsearch.common.io.stream.StreamOutput;
30+
import org.elasticsearch.common.logging.DeprecationLogger;
3031
import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
3132
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
3233
import org.elasticsearch.common.xcontent.ToXContent;
@@ -175,7 +176,8 @@ public static void readMultiLineFormat(BytesReference data,
175176
String searchType,
176177
Boolean ccsMinimizeRoundtrips,
177178
NamedXContentRegistry registry,
178-
boolean allowExplicitIndex) throws IOException {
179+
boolean allowExplicitIndex,
180+
DeprecationLogger deprecationLogger) throws IOException {
179181
int from = 0;
180182
byte marker = xContent.streamSeparator();
181183
while (true) {
@@ -186,6 +188,7 @@ public static void readMultiLineFormat(BytesReference data,
186188
// support first line with \n
187189
if (nextMarker == 0) {
188190
from = nextMarker + 1;
191+
deprecationLogger.deprecated("support for empty first line in msearch API is deprecated and will be removed");
189192
continue;
190193
}
191194

server/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public static void parseMultiLineRequest(RestRequest request, IndicesOptions ind
154154
final XContent xContent = sourceTuple.v1().xContent();
155155
final BytesReference data = sourceTuple.v2();
156156
MultiSearchRequest.readMultiLineFormat(data, xContent, consumer, indices, indicesOptions, types, routing,
157-
searchType, ccsMinimizeRoundtrips, request.getXContentRegistry(), allowExplicitIndex);
157+
searchType, ccsMinimizeRoundtrips, request.getXContentRegistry(), allowExplicitIndex, deprecationLogger);
158158
}
159159

160160
@Override

server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java

+28-1
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919

2020
package org.elasticsearch.action.search;
2121

22+
import org.apache.logging.log4j.LogManager;
2223
import org.elasticsearch.action.support.IndicesOptions;
2324
import org.elasticsearch.common.CheckedBiConsumer;
2425
import org.elasticsearch.common.CheckedRunnable;
2526
import org.elasticsearch.common.ParseField;
2627
import org.elasticsearch.common.Strings;
2728
import org.elasticsearch.common.bytes.BytesArray;
29+
import org.elasticsearch.common.logging.DeprecationLogger;
2830
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
2931
import org.elasticsearch.common.xcontent.XContentParser;
3032
import org.elasticsearch.common.xcontent.XContentType;
@@ -48,10 +50,15 @@
4850
import static org.elasticsearch.search.RandomSearchRequestGenerator.randomSearchRequest;
4951
import static org.elasticsearch.test.EqualsHashCodeTestUtils.checkEqualsAndHashCode;
5052
import static org.hamcrest.Matchers.equalTo;
53+
import static org.hamcrest.Matchers.instanceOf;
5154
import static org.hamcrest.Matchers.is;
5255
import static org.hamcrest.Matchers.nullValue;
5356

5457
public class MultiSearchRequestTests extends ESTestCase {
58+
59+
private static final DeprecationLogger deprecationLogger = new DeprecationLogger(
60+
LogManager.getLogger(MultiSearchRequestTests.class));
61+
5562
public void testSimpleAdd() throws Exception {
5663
MultiSearchRequest request = parseMultiSearchRequest("/org/elasticsearch/action/search/simple-msearch1.json");
5764
assertThat(request.requests().size(),
@@ -180,6 +187,26 @@ public void testSimpleAdd4() throws Exception {
180187
assertThat(request.requests().get(2).routing(), equalTo("123"));
181188
}
182189

190+
public void testEmptyFirstLine1() throws Exception {
191+
MultiSearchRequest request = parseMultiSearchRequest("/org/elasticsearch/action/search/msearch-empty-first-line1.json");
192+
assertThat(request.requests().size(), equalTo(4));
193+
for (SearchRequest searchRequest : request.requests()) {
194+
assertThat(searchRequest.indices().length, equalTo(0));
195+
assertThat(searchRequest.source().query(), instanceOf(MatchAllQueryBuilder.class));
196+
}
197+
assertWarnings("support for empty first line in msearch API is deprecated and will be removed");
198+
}
199+
200+
public void testEmptyFirstLine2() throws Exception {
201+
MultiSearchRequest request = parseMultiSearchRequest("/org/elasticsearch/action/search/msearch-empty-first-line2.json");
202+
assertThat(request.requests().size(), equalTo(4));
203+
for (SearchRequest searchRequest : request.requests()) {
204+
assertThat(searchRequest.indices().length, equalTo(0));
205+
assertThat(searchRequest.source().query(), instanceOf(MatchAllQueryBuilder.class));
206+
}
207+
assertWarnings("support for empty first line in msearch API is deprecated and will be removed");
208+
}
209+
183210
public void testResponseErrorToXContent() {
184211
long tookInMillis = randomIntBetween(1, 1000);
185212
MultiSearchResponse response = new MultiSearchResponse(
@@ -262,7 +289,7 @@ public void testMultiLineSerialization() throws IOException {
262289
parsedRequest.add(r);
263290
};
264291
MultiSearchRequest.readMultiLineFormat(new BytesArray(originalBytes), xContentType.xContent(),
265-
consumer, null, null, null, null, null, null, xContentRegistry(), true);
292+
consumer, null, null, null, null, null, null, xContentRegistry(), true, deprecationLogger);
266293
assertEquals(originalRequest, parsedRequest);
267294
}
268295
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
3+
{ "query": {"match_all": {}}}
4+
{}
5+
{ "query": {"match_all": {}}}
6+
7+
{ "query": {"match_all": {}}}
8+
{}
9+
{ "query": {"match_all": {}}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
{}
3+
{ "query": {"match_all": {}}}
4+
5+
{ "query": {"match_all": {}}}
6+
{}
7+
{ "query": {"match_all": {}}}
8+
9+
{ "query": {"match_all": {}}}

0 commit comments

Comments
 (0)