Skip to content

Commit 28c4a54

Browse files
Fix OpenPIT with older versions
1 parent a7d26f8 commit 28c4a54

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-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: 29 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,33 @@ 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+
try {
150+
pitId = r.getPointInTimeId();
151+
runnable.run();
152+
} catch (Exception e) {
153+
onFailure(e);
154+
}
155+
}
156+
157+
@Override
158+
public void onFailure(Exception e) {
159+
if (allowPartialSearchResults
160+
&& e instanceof ElasticsearchStatusException
161+
&& e.getMessage()
162+
.contains("The [allow_partial_search_results] parameter cannot be used while the cluster is still upgrading.")) {
163+
// This is for pre-8.16
164+
// We cannot use allow_partial_search_results during upgrades, so let's try without and hope to get no shard failures,
165+
// it's the best we can do, the query would fail anyway
166+
openPIT(listener, runnable, false);
167+
} else {
168+
listener.onFailure(e);
169+
}
170+
}
171+
});
147172
}
148173

149174
@Override

0 commit comments

Comments
 (0)