@Override public void clearScroll(String scrollId) { ClearScrollRequest request = new ClearScrollRequest(); request.addScrollId(scrollId); try { // TODO: Something useful with the response. ClearScrollResponse response = client.clearScroll(request); } catch (IOException e) { throw new ElasticsearchException("Error for search request with scroll: " + request.toString(), e); } }
@Override public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { String scrollIds = request.param("scroll_id"); ClearScrollRequest clearRequest = new ClearScrollRequest(); clearRequest.setScrollIds(Arrays.asList(Strings.splitStringByCommaToArray(scrollIds))); request.withContentOrSourceParamParserOrNull((xContentParser -> { if (xContentParser != null) { // NOTE: if rest request with xcontent body has request parameters, values parsed from request body have the precedence try { clearRequest.fromXContent(xContentParser); } catch (IOException e) { throw new IllegalArgumentException("Failed to parse request body", e); } } })); return channel -> client.clearScroll(clearRequest, new RestStatusToXContentListener<>(channel)); }
private Publisher<?> cleanupScroll(HttpHeaders headers, ScrollState state) { if (state.getScrollIds().isEmpty()) { return Mono.empty(); } ClearScrollRequest clearScrollRequest = new ClearScrollRequest(); clearScrollRequest.scrollIds(state.getScrollIds()); // just send the request, resources get cleaned up anyways after scrollTimeout has been reached. return sendRequest(clearScrollRequest, RequestCreator.clearScroll(), ClearScrollResponse.class, headers); }
public ClearScrollRequestBuilder addScrollId(String cursorId) { request.addScrollId(cursorId); return this; } }
public ClearScrollRequestBuilder(ElasticsearchClient client, ClearScrollAction action) { super(client, action, new ClearScrollRequest()); }
@Override public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) { String scrollIds = request.param("scroll_id"); ClearScrollRequest clearRequest = new ClearScrollRequest(); clearRequest.setScrollIds(Arrays.asList(splitScrollIds(scrollIds))); if (RestActions.hasBodyContent(request)) { XContentType type = RestActions.guessBodyContentType(request); if (type == null) { scrollIds = RestActions.getRestContent(request).toUtf8(); clearRequest.setScrollIds(Arrays.asList(splitScrollIds(scrollIds))); } else { // NOTE: if rest request with xcontent body has request parameters, these parameters does not override xcontent value clearRequest.setScrollIds(null); buildFromContent(RestActions.getRestContent(request), clearRequest); } } client.clearScroll(clearRequest, new RestStatusToXContentListener<ClearScrollResponse>(channel)); }
ClearScrollController(ClearScrollRequest request, ActionListener<ClearScrollResponse> listener, DiscoveryNodes nodes, Logger logger, SearchTransportService searchTransportService) { this.nodes = nodes; this.logger = logger; this.searchTransportService = searchTransportService; this.listener = listener; List<String> scrollIds = request.getScrollIds(); final int expectedOps; if (scrollIds.size() == 1 && "_all".equals(scrollIds.get(0))) { expectedOps = nodes.getSize(); runner = this::cleanAllScrolls; } else { List<ScrollIdForNode> parsedScrollIds = new ArrayList<>(); for (String parsedScrollId : request.getScrollIds()) { ScrollIdForNode[] context = parseScrollId(parsedScrollId).getContext(); for (ScrollIdForNode id : context) { parsedScrollIds.add(id); } } if (parsedScrollIds.isEmpty()) { expectedOps = 0; runner = () -> listener.onResponse(new ClearScrollResponse(true, 0)); } else { expectedOps = parsedScrollIds.size(); runner = () -> cleanScrollIds(parsedScrollIds); } } this.expectedOps = new CountDown(expectedOps); }
public ClearScrollRequestBuilder setScrollIds(List<String> cursorIds) { request.setScrollIds(cursorIds); return this; }
throw new IllegalArgumentException("scroll_id array element should only contain scroll_id"); addScrollId(parser.text()); throw new IllegalArgumentException("scroll_id element should only contain scroll_id"); addScrollId(parser.text());
public ClearScrollRequestBuilder(ElasticsearchClient client, ClearScrollAction action) { super(client, action, new ClearScrollRequest()); }
private Async(ClearScrollRequest request, ActionListener<ClearScrollResponse> listener, ClusterState clusterState) { int expectedOps = 0; this.nodes = clusterState.nodes(); if (request.getScrollIds().size() == 1 && "_all".equals(request.getScrollIds().get(0))) { expectedOps = nodes.size(); } else { for (String parsedScrollId : request.getScrollIds()) { ScrollIdForNode[] context = parseScrollId(parsedScrollId).getContext(); expectedOps += context.length; this.contexts.add(context); } } this.request = request; this.listener = listener; this.expHolder = new AtomicReference<>(); this.expectedOps = new CountDown(expectedOps); }
public ClearScrollRequestBuilder setScrollIds(List<String> cursorIds) { request.setScrollIds(cursorIds); return this; }
@Override public void clearScroll(String scrollId, Runnable onCompletion) { ClearScrollRequest clearScrollRequest = new ClearScrollRequest(); clearScrollRequest.addScrollId(scrollId); /* * Unwrap the client so we don't set our task as the parent. If we *did* set our ID then the clear scroll would be cancelled as * if this task is cancelled. But we want to clear the scroll regardless of whether or not the main request was cancelled. */ client.unwrap().clearScroll(clearScrollRequest, new ActionListener<ClearScrollResponse>() { @Override public void onResponse(ClearScrollResponse response) { logger.debug("Freed [{}] contexts", response.getNumFreed()); onCompletion.run(); } @Override public void onFailure(Exception e) { logger.warn(() -> new ParameterizedMessage("Failed to clear scroll [{}]", scrollId), e); onCompletion.run(); } }); }
public ClearScrollRequestBuilder addScrollId(String cursorId) { request.addScrollId(cursorId); return this; } }
@Override public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { String scrollIds = request.param("scroll_id"); ClearScrollRequest clearRequest = new ClearScrollRequest(); clearRequest.setScrollIds(Arrays.asList(splitScrollIds(scrollIds))); request.withContentOrSourceParamParserOrNull((xContentParser -> { if (xContentParser != null) { // NOTE: if rest request with xcontent body has request parameters, values parsed from request body have the precedence try { clearRequest.fromXContent(xContentParser); } catch (IOException e) { throw new IllegalArgumentException("Failed to parse request body", e); } } })); return channel -> client.clearScroll(clearRequest, new RestStatusToXContentListener<>(channel)); }
public ClearScrollRequestBuilder(ElasticsearchClient client, ClearScrollAction action) { super(client, action, new ClearScrollRequest()); }
private Async(ClearScrollRequest request, ActionListener<ClearScrollResponse> listener, ClusterState clusterState) { int expectedOps = 0; this.nodes = clusterState.nodes(); if (request.getScrollIds().size() == 1 && "_all".equals(request.getScrollIds().get(0))) { expectedOps = nodes.getSize(); } else { for (String parsedScrollId : request.getScrollIds()) { ScrollIdForNode[] context = parseScrollId(parsedScrollId).getContext(); expectedOps += context.length; this.contexts.add(context); } } this.listener = listener; this.expHolder = new AtomicReference<>(); this.expectedOps = new CountDown(expectedOps); }
public ClearScrollRequestBuilder setScrollIds(List<String> cursorIds) { request.setScrollIds(cursorIds); return this; }
@Override public void close() { ClearScrollRequest request = new ClearScrollRequest(); request.addScrollId(scrollId); esClient.clearScroll(request); end = true; // Call super close to clear cursor super.close(); }
public ClearScrollRequestBuilder addScrollId(String cursorId) { request.addScrollId(cursorId); return this; } }