public void deleteResponse()

in src/main/java/org/opensearch/search/asynchronous/service/AsynchronousSearchPersistenceService.java [162:216]


    public void deleteResponse(String id, User user, ActionListener<Boolean> listener) {
        if (indexExists() == false) {
            logger.debug("Async search index [{}] doesn't exists", ASYNC_SEARCH_RESPONSE_INDEX);
            listener.onFailure(new ResourceNotFoundException(id));
            return;
        }
        Consumer<Exception> onFailure = e -> {
            final Throwable cause = ExceptionsHelper.unwrapCause(e);
            if (cause instanceof DocumentMissingException) {
                logger.debug(() -> new ParameterizedMessage("Async search response doc already deleted {}", id), e);
                listener.onFailure(new ResourceNotFoundException(id));
            } else {
                logger.debug(() -> new ParameterizedMessage("Failed to delete asynchronous search for id {}", id), e);
                listener.onFailure(cause instanceof Exception ? (Exception) cause : new NotSerializableExceptionWrapper(cause));
            }
        };
        if (user == null) {
            client.delete(new DeleteRequest(ASYNC_SEARCH_RESPONSE_INDEX, id), ActionListener.wrap(deleteResponse -> {
                if (deleteResponse.getResult() == DocWriteResponse.Result.DELETED) {
                    logger.debug("Delete asynchronous search {} successful. Returned result {}", id, deleteResponse.getResult());
                    listener.onResponse(true);
                } else {
                    logger.debug("Delete asynchronous search {} unsuccessful. Returned result {}", id, deleteResponse.getResult());
                    listener.onFailure(new ResourceNotFoundException(id));
                }
            }, onFailure));
        } else {
            UpdateRequest updateRequest = new UpdateRequest(ASYNC_SEARCH_RESPONSE_INDEX, id);
            String scriptCode = "if (ctx._source.user == null || ctx._source.user.backend_roles == null || " +
                    "( params.backend_roles!=null && params.backend_roles.containsAll(ctx._source.user.backend_roles))) " +
                    "{ ctx.op = 'delete' } else { ctx.op = 'none' }";
            Map<String, Object> params = new HashMap<>();
            params.put("backend_roles", user.getBackendRoles());
            Script deleteConditionallyScript = new Script(ScriptType.INLINE, "painless", scriptCode, params);
            updateRequest.script(deleteConditionallyScript);
            client.update(updateRequest, ActionListener.wrap(deleteResponse -> {
                switch (deleteResponse.getResult()) {
                    case UPDATED:
                        listener.onFailure(new IllegalStateException("Document updated when requesting delete for asynchronous search id "
                                + id));
                        break;
                    case NOOP:
                        listener.onFailure(new OpenSearchSecurityException(
                                "User doesn't have necessary roles to access the asynchronous search with id " + id, RestStatus.FORBIDDEN));
                        break;
                    case NOT_FOUND:
                        listener.onFailure(new ResourceNotFoundException(id));
                        break;
                    case DELETED:
                        listener.onResponse(true);
                        break;
                }
            }, onFailure));
        }
    }