-
Notifications
You must be signed in to change notification settings - Fork 24.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add async_search get and delete APIs to HLRC #53828
Changes from 5 commits
e98a619
017fb83
28b307a
9266287
69de26a
5c98d6b
1844cd9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,7 +21,10 @@ | |
|
||
import org.elasticsearch.action.ActionListener; | ||
import org.elasticsearch.client.asyncsearch.AsyncSearchResponse; | ||
import org.elasticsearch.client.asyncsearch.DeleteAsyncSearchRequest; | ||
import org.elasticsearch.client.asyncsearch.GetAsyncSearchRequest; | ||
import org.elasticsearch.client.asyncsearch.SubmitAsyncSearchRequest; | ||
import org.elasticsearch.client.core.AcknowledgedResponse; | ||
|
||
import java.io.IOException; | ||
|
||
|
@@ -63,4 +66,55 @@ public Cancellable submitAsyncSearchAsync(SubmitAsyncSearchRequest request, Requ | |
AsyncSearchResponse::fromXContent, listener, emptySet()); | ||
} | ||
|
||
/** | ||
* Get an async search request. | ||
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/async-search.html"> the docs</a> for more. | ||
* | ||
*/ | ||
public AsyncSearchResponse getAsyncSearch(GetAsyncSearchRequest request, RequestOptions options) throws IOException { | ||
return restHighLevelClient.performRequestAndParseEntity(request, AsyncSearchRequestConverters::getAsyncSearch, options, | ||
AsyncSearchResponse::fromXContent, emptySet()); | ||
} | ||
|
||
/** | ||
* Asynchronously get an async search request. | ||
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/async-search.html"> the docs</a> for more. | ||
* @param request the request | ||
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized | ||
* @param listener the listener to be notified upon request completion | ||
* @return cancellable that may be used to cancel the request | ||
*/ | ||
public Cancellable getAsyncSearchAsync(GetAsyncSearchRequest request, RequestOptions options, | ||
ActionListener<AsyncSearchResponse> listener) { | ||
return restHighLevelClient.performRequestAsyncAndParseEntity(request, AsyncSearchRequestConverters::getAsyncSearch, options, | ||
AsyncSearchResponse::fromXContent, listener, emptySet()); | ||
} | ||
|
||
/** | ||
* Delete an async search request. | ||
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/async-search.html"> the docs</a> for more. | ||
* @param request the request | ||
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized | ||
* @return the response | ||
* @throws IOException in case there is a problem sending the request or parsing back the response | ||
*/ | ||
public AcknowledgedResponse deleteAsyncSearch(DeleteAsyncSearchRequest request, RequestOptions options) throws IOException { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here, |
||
return restHighLevelClient.performRequestAndParseEntity(request, AsyncSearchRequestConverters::deleteAsyncSearch, options, | ||
AcknowledgedResponse::fromXContent, emptySet()); | ||
} | ||
|
||
/** | ||
* Asynchronously delete an async search request. | ||
* See <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/async-search.html"> the docs</a> for more. | ||
* @param request the request | ||
* @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized | ||
* @param listener the listener to be notified upon request completion | ||
* @return cancellable that may be used to cancel the request | ||
*/ | ||
public Cancellable deleteAsyncSearchAsync(DeleteAsyncSearchRequest request, RequestOptions options, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
ActionListener<AcknowledgedResponse> listener) { | ||
return restHighLevelClient.performRequestAsyncAndParseEntity(request, AsyncSearchRequestConverters::deleteAsyncSearch, options, | ||
AcknowledgedResponse::fromXContent, listener, emptySet()); | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could also rename |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* Licensed to Elasticsearch under one or more contributor | ||
* license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright | ||
* ownership. Elasticsearch licenses this file to you under | ||
* the Apache License, Version 2.0 (the "License"); you may | ||
* not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
|
||
package org.elasticsearch.client.asyncsearch; | ||
|
||
import org.elasticsearch.client.Validatable; | ||
|
||
import java.util.Objects; | ||
|
||
public class DeleteAsyncSearchRequest implements Validatable { | ||
|
||
private final String id; | ||
|
||
public DeleteAsyncSearchRequest(String id) { | ||
this.id = id; | ||
} | ||
|
||
public String getId() { | ||
return this.id; | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || getClass() != o.getClass()) { | ||
return false; | ||
} | ||
DeleteAsyncSearchRequest request = (DeleteAsyncSearchRequest) o; | ||
return Objects.equals(getId(), request.getId()); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(getId()); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/* | ||
* Licensed to Elasticsearch under one or more contributor | ||
* license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright | ||
* ownership. Elasticsearch licenses this file to you under | ||
* the Apache License, Version 2.0 (the "License"); you may | ||
* not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
|
||
package org.elasticsearch.client.asyncsearch; | ||
|
||
import org.elasticsearch.client.Validatable; | ||
import org.elasticsearch.client.ValidationException; | ||
import org.elasticsearch.common.unit.TimeValue; | ||
|
||
import java.util.Objects; | ||
import java.util.Optional; | ||
|
||
public class GetAsyncSearchRequest implements Validatable { | ||
|
||
private TimeValue waitForCompletion; | ||
jimczi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
private TimeValue keepAlive; | ||
jimczi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
public static final long MIN_KEEPALIVE = TimeValue.timeValueMinutes(1).millis(); | ||
|
||
private final String id; | ||
|
||
public GetAsyncSearchRequest(String id) { | ||
this.id = id; | ||
} | ||
|
||
public String getId() { | ||
return this.id; | ||
} | ||
|
||
public TimeValue getWaitForCompletion() { | ||
return waitForCompletion; | ||
} | ||
|
||
public void setWaitForCompletion(TimeValue waitForCompletion) { | ||
this.waitForCompletion = waitForCompletion; | ||
} | ||
|
||
public TimeValue getKeepAlive() { | ||
return keepAlive; | ||
} | ||
|
||
public void setKeepAlive(TimeValue keepAlive) { | ||
this.keepAlive = keepAlive; | ||
} | ||
|
||
@Override | ||
public Optional<ValidationException> validate() { | ||
final ValidationException validationException = new ValidationException(); | ||
if (keepAlive != null && keepAlive.getMillis() < MIN_KEEPALIVE) { | ||
validationException.addValidationError("keep_alive must be greater than 1 minute, got: " + keepAlive.toString()); | ||
} | ||
if (validationException.validationErrors().isEmpty()) { | ||
return Optional.empty(); | ||
} | ||
return Optional.of(validationException); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || getClass() != o.getClass()) { | ||
return false; | ||
} | ||
GetAsyncSearchRequest request = (GetAsyncSearchRequest) o; | ||
return Objects.equals(getId(), request.getId()) | ||
&& Objects.equals(getKeepAlive(), request.getKeepAlive()) | ||
&& Objects.equals(getWaitForCompletion(), request.getWaitForCompletion()); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(getId(), getKeepAlive(), getWaitForCompletion()); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if we can rename into
get
andgetAsync
since we're already inside theAsyncSearchClient
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good, no problem with that...