Hi all and sorry for my poor english
I'm calling an updateAsync with an action listener bind.
So I 'm calling a delete Async onResponse AND onFailure of previous async update but delete async is not excecuted correctly.
I got exception
`Request cannot be executed i/o reactor status stopped
Thnx in advance for your help
It'd be useful if you could provide the request you are making, as well as the complete response you received.
I can post you my code implementation
public void updateByQueryRequestFinal(
final long fromMillis,
final String indexName, String dateFormat) throws IOException {
String dateFormatted = DateHelper.format(new Date(fromMillis), dateFormat);
log.debug("BEGIN updateByQueryRequestFinal from date {} on index:{}",
dateFormatted, indexName);
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(indexName);
updateByQueryRequest.setScript(
new Script(
ScriptType.INLINE, "painless",
"if (ctx._source.activities!=null) \n" +
" { \n" +
" ArrayList activities=ctx._source.activities;\n" +
" for (int i=activities.length-1; i>=0; i--) {\n" +
" if (activities[i].creationDate.compareTo('"+dateFormatted+"')<=0) {\n" +
" activities.remove(i);\n" +
" \n" +
" }\n" +
" \n" +
" }\n" +
" \n" +
" \n" +
" ctx._source.activities=activities;\n" +
" \n" +
" }",
Collections.emptyMap()));
final ActionListener actionListener = new ActionListener() {
@SneakyThrows
@Override
public void onResponse(final Object o) {
log.debug("The Old {} correctly updated", indexName);
deleteByQueryRequestActivitiesEmpty(indexName);
}
@Override
public void onFailure(final Exception e) {
log.warn("The update of old {} raised an exception:{} ", indexName, e.getCause().toString());
deleteByQueryRequestActivitiesEmpty(indexName);
}
};
//client.updateByQuery(updateByQueryRequest, RequestOptions.DEFAULT);//,actionListener);
client.updateByQueryAsync(updateByQueryRequest, RequestOptions.DEFAULT,actionListener);
log.debug("END updateByQueryRequestFinal on index:{}", indexName);
and onFailure or onResponse I call
public void deleteByQueryRequestActivitiesEmpty(
final String indexName ) {
log.debug("BEGIN deleteByQueryRequestActivitiesEmpty on index:{}",
indexName);
final DeleteByQueryRequest request =
new DeleteByQueryRequest(indexName);
request.setTimeout(TimeValue.timeValueMinutes(60));
request.setRefresh(true);
final QueryBuilder boolQueryBuilder = new BoolQueryBuilder()
.mustNot(nestedQuery("activities",existsQuery("activities"), ScoreMode.Total));
request.setQuery(boolQueryBuilder);
log.debug("BEGIN deleteByQuery deleting");
final ActionListener actionListener = new ActionListener() {
@Override
public void onResponse(final Object o) {
log.debug("The Old {} correctly deleted", indexName);
}
@Override
public void onFailure(final Exception e) {
log.warn("The Deletion of old {} raised an exception:{} ", indexName, e.getCause().toString());
}
};
//client.deleteByQuery(request, RequestOptions.DEFAULT);
client.deleteByQueryAsync(request, RequestOptions.DEFAULT,actionListener);
log.debug("END deleteByQueryRequestActivitiesEmpty on index:{}", indexName);
}
The strange thing is that if I excecute them separately, they do their job correctly. It looks something related to RestHighLevelClient (may concurrent usage?)