Skip to content

Commit 8a0e5f7

Browse files
authored
Deprecate support for first line empty in msearch API (#41442)
In order to support 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 #41011
1 parent 906f880 commit 8a0e5f7

File tree

6 files changed

+61
-4
lines changed

6 files changed

+61
-4
lines changed

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.http.client.methods.HttpPut;
2828
import org.apache.http.nio.entity.NByteArrayEntity;
2929
import org.apache.http.util.EntityUtils;
30+
import org.apache.logging.log4j.LogManager;
3031
import org.elasticsearch.action.DocWriteRequest;
3132
import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
3233
import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
@@ -62,6 +63,7 @@
6263
import org.elasticsearch.common.bytes.BytesReference;
6364
import org.elasticsearch.common.collect.Tuple;
6465
import org.elasticsearch.common.io.Streams;
66+
import org.elasticsearch.common.logging.DeprecationLogger;
6567
import org.elasticsearch.common.lucene.uid.Versions;
6668
import org.elasticsearch.common.unit.TimeValue;
6769
import org.elasticsearch.common.xcontent.ToXContent;
@@ -132,6 +134,10 @@
132134
import static org.hamcrest.Matchers.nullValue;
133135

134136
public class RequestConvertersTests extends ESTestCase {
137+
138+
private static final DeprecationLogger deprecationLogger = new DeprecationLogger(
139+
LogManager.getLogger(RequestConvertersTests.class));
140+
135141
public void testPing() {
136142
Request request = RequestConverters.ping();
137143
assertEquals("/", request.getEndpoint());
@@ -1256,7 +1262,7 @@ public void testMultiSearch() throws IOException {
12561262
};
12571263
MultiSearchRequest.readMultiLineFormat(new BytesArray(EntityUtils.toByteArray(request.getEntity())),
12581264
REQUEST_BODY_CONTENT_TYPE.xContent(), consumer, null, multiSearchRequest.indicesOptions(), null, null, null, null,
1259-
xContentRegistry(), true);
1265+
xContentRegistry(), true, deprecationLogger);
12601266
assertEquals(requests, multiSearchRequest.requests());
12611267
}
12621268

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

+5-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,8 @@ 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 before any action metadata in msearch API is deprecated and " +
192+
"will be removed in the next major version");
189193
continue;
190194
}
191195

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

+30-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,28 @@ 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 before any action metadata in msearch API is deprecated and will be removed " +
198+
"in the next major version");
199+
}
200+
201+
public void testEmptyFirstLine2() throws Exception {
202+
MultiSearchRequest request = parseMultiSearchRequest("/org/elasticsearch/action/search/msearch-empty-first-line2.json");
203+
assertThat(request.requests().size(), equalTo(4));
204+
for (SearchRequest searchRequest : request.requests()) {
205+
assertThat(searchRequest.indices().length, equalTo(0));
206+
assertThat(searchRequest.source().query(), instanceOf(MatchAllQueryBuilder.class));
207+
}
208+
assertWarnings("support for empty first line before any action metadata in msearch API is deprecated and will be removed " +
209+
"in the next major version");
210+
}
211+
183212
public void testResponseErrorToXContent() {
184213
long tookInMillis = randomIntBetween(1, 1000);
185214
MultiSearchResponse response = new MultiSearchResponse(
@@ -262,7 +291,7 @@ public void testMultiLineSerialization() throws IOException {
262291
parsedRequest.add(r);
263292
};
264293
MultiSearchRequest.readMultiLineFormat(new BytesArray(originalBytes), xContentType.xContent(),
265-
consumer, null, null, null, null, null, null, xContentRegistry(), true);
294+
consumer, null, null, null, null, null, null, xContentRegistry(), true, deprecationLogger);
266295
assertEquals(originalRequest, parsedRequest);
267296
}
268297
}
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)