Skip to content

Commit 27f7907

Browse files
Fix OpenPIT with older versions
1 parent a7d26f8 commit 27f7907

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

x-pack/plugin/eql/qa/mixed-node/src/javaRestTest/java/org/elasticsearch/xpack/eql/qa/mixed_node/EqlSearchIT.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,16 @@ private void assertSequncesQueryOnNodes(List<TestNode> nodesList) throws Excepti
294294
String filter = "{\"range\":{\"@timestamp\":{\"gte\":\"1970-05-01\"}}}";
295295

296296
Request request = new Request("POST", index + "/_eql/search?" + filterPath);
297-
request.setJsonEntity("{\"query\":\"" + query + "\",\"filter\":" + filter + "}");
297+
298+
StringBuilder payload = new StringBuilder("{\"query\":\"" + query + "\",\"filter\":" + filter);
299+
if (randomBoolean()) {
300+
payload.append(", \"allow_partial_search_results\": " + randomBoolean());
301+
}
302+
if (randomBoolean()) {
303+
payload.append(", \"allow_partial_sequence_results\": " + randomBoolean());
304+
}
305+
payload.append("}");
306+
request.setJsonEntity(payload.toString());
298307
assertBusy(() -> { assertResponse(expectedResponse, runEql(client, request)); });
299308
}
300309
}

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/execution/search/PITAwareQueryClient.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77

88
package org.elasticsearch.xpack.eql.execution.search;
99

10+
import org.elasticsearch.ElasticsearchStatusException;
1011
import org.elasticsearch.action.ActionListener;
1112
import org.elasticsearch.action.search.ClosePointInTimeRequest;
1213
import org.elasticsearch.action.search.ClosePointInTimeResponse;
1314
import org.elasticsearch.action.search.MultiSearchRequest;
1415
import org.elasticsearch.action.search.MultiSearchResponse;
1516
import org.elasticsearch.action.search.OpenPointInTimeRequest;
17+
import org.elasticsearch.action.search.OpenPointInTimeResponse;
1618
import org.elasticsearch.action.search.SearchRequest;
1719
import org.elasticsearch.action.search.SearchResponse;
1820
import org.elasticsearch.action.search.TransportClosePointInTimeAction;
@@ -140,10 +142,29 @@ private <Response> void openPIT(ActionListener<Response> listener, Runnable runn
140142
.keepAlive(keepAlive)
141143
.allowPartialSearchResults(allowPartialSearchResults);
142144
request.indexFilter(filter);
143-
client.execute(TransportOpenPointInTimeAction.TYPE, request, listener.delegateFailureAndWrap((l, r) -> {
144-
pitId = r.getPointInTimeId();
145-
runnable.run();
146-
}));
145+
146+
client.execute(TransportOpenPointInTimeAction.TYPE, request, new ActionListener<>() {
147+
@Override
148+
public void onResponse(OpenPointInTimeResponse r) {
149+
pitId = r.getPointInTimeId();
150+
runnable.run();
151+
}
152+
153+
@Override
154+
public void onFailure(Exception e) {
155+
if (allowPartialSearchResults
156+
&& e instanceof ElasticsearchStatusException
157+
&& e.getMessage()
158+
.contains("The [allow_partial_search_results] parameter cannot be used while the cluster is still upgrading.")) {
159+
// This is for pre-8.16
160+
// We cannot use allow_partial_search_results during upgrades, so let's try without and hope to get no shard failures,
161+
// it's the best we can do, the query would fail anyway
162+
openPIT(listener, runnable, false);
163+
} else {
164+
listener.onFailure(e);
165+
}
166+
}
167+
});
147168
}
148169

149170
@Override

0 commit comments

Comments
 (0)