diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
index 64c86bed66b96695f744c86d8976105bcb162f30..6eefb360d16f502ca712f6c7418e1a5f4c2904ce 100644
--- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
+++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
@@ -653,31 +653,45 @@ public class FessEsClient implements Client {
int count = 0;
String scrollId = response.getScrollId();
- while (scrollId != null) {
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- scrollId = null;
- break;
- }
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
+ }
- final BulkRequestBuilder bulkRequest = client.prepareBulk();
- for (final SearchHit hit : hits) {
- bulkRequest.add(client.prepareDelete().setIndex(index).setId(hit.getId()));
- count++;
- }
- final BulkResponse bulkResponse = bulkRequest.execute().actionGet(fessConfig.getIndexBulkTimeout());
- if (bulkResponse.hasFailures()) {
- throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
- }
+ final BulkRequestBuilder bulkRequest = client.prepareBulk();
+ for (final SearchHit hit : hits) {
+ bulkRequest.add(client.prepareDelete().setIndex(index).setId(hit.getId()));
+ count++;
+ }
+ final BulkResponse bulkResponse = bulkRequest.execute().actionGet(fessConfig.getIndexBulkTimeout());
+ if (bulkResponse.hasFailures()) {
+ throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
+ }
- response =
- client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(fessConfig.getIndexBulkTimeout());
- scrollId = response.getScrollId();
+ response =
+ client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute()
+ .actionGet(fessConfig.getIndexBulkTimeout());
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
+ }
+ scrollId = response.getScrollId();
+ }
+ } finally {
+ deleteScrollContext(scrollId);
}
return count;
}
+ protected void deleteScrollContext(final String scrollId) {
+ if (scrollId != null) {
+ client.prepareClearScroll().addScrollId(scrollId)
+ .execute(ActionListener.wrap(res -> {}, e -> logger.warn("Failed to clear the scroll context.", e)));
+ }
+ }
+
protected <T> T get(final String index, final String type, final String id, final SearchCondition<GetRequestBuilder> condition,
final SearchResult<T, GetRequestBuilder, GetResponse> searchResult) {
final long startTime = System.currentTimeMillis();
diff --git a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
index 6fd8e8bd10a7b90c5005f6c934037c800b9ecd89..71f0fb13d06848a220539662d408b16fa320eb08 100644
--- a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
@@ -227,32 +227,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
}
protected void delegateBulkRequest(final ConditionBean cb, Function<SearchHits, Boolean> handler) {
- SearchResponse response = null;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- builder.setPreference(esCb.getPreference());
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ builder.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
+ }
+
+ if (!handler.apply(searchHits)) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- if (!handler.apply(searchHits)) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- break;
+ scrollId = response.getScrollId();
}
+ } finally {
+ deleteScrollContext(scrollId);
+ }
+ }
+
+ protected void deleteScrollContext(final String scrollId) {
+ if (scrollId != null) {
+ client.prepareClearScroll().addScrollId(scrollId).execute(ActionListener.wrap(() -> {}));
}
}
@@ -356,39 +364,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
@Override
protected int delegateQueryDelete(final ConditionBean cb, final DeleteOption<? extends ConditionBean> option) {
- SearchResponse response = null;
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ esCb.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
int count = 0;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- esCb.setPreference(esCb.getPreference());
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- final BulkRequestBuilder bulkRequest = client.prepareBulk();
- for (final SearchHit hit : hits) {
- bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
- }
- count += hits.length;
- final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
- if (bulkResponse.hasFailures()) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ final BulkRequestBuilder bulkRequest = client.prepareBulk();
+ for (final SearchHit hit : hits) {
+ bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
+ }
+ count += hits.length;
+ final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
+ if (bulkResponse.hasFailures()) {
+ throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
+ }
+
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
}
+ } finally {
+ deleteScrollContext(scrollId);
}
return count;
}
diff --git a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
index f63ec1aa1a71fd5f7de62eb43bd5b9494ccbbdcf..16dd78fcf15330f7413a0d6fb2e0e7cdf7144ea0 100644
--- a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
@@ -227,32 +227,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
}
protected void delegateBulkRequest(final ConditionBean cb, Function<SearchHits, Boolean> handler) {
- SearchResponse response = null;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- builder.setPreference(esCb.getPreference());
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ builder.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
+ }
+
+ if (!handler.apply(searchHits)) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- if (!handler.apply(searchHits)) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- break;
+ scrollId = response.getScrollId();
}
+ } finally {
+ deleteScrollContext(scrollId);
+ }
+ }
+
+ protected void deleteScrollContext(final String scrollId) {
+ if (scrollId != null) {
+ client.prepareClearScroll().addScrollId(scrollId).execute(ActionListener.wrap(() -> {}));
}
}
@@ -356,39 +364,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
@Override
protected int delegateQueryDelete(final ConditionBean cb, final DeleteOption<? extends ConditionBean> option) {
- SearchResponse response = null;
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ esCb.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
int count = 0;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- esCb.setPreference(esCb.getPreference());
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- final BulkRequestBuilder bulkRequest = client.prepareBulk();
- for (final SearchHit hit : hits) {
- bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
- }
- count += hits.length;
- final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
- if (bulkResponse.hasFailures()) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ final BulkRequestBuilder bulkRequest = client.prepareBulk();
+ for (final SearchHit hit : hits) {
+ bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
+ }
+ count += hits.length;
+ final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
+ if (bulkResponse.hasFailures()) {
+ throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
+ }
+
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
}
+ } finally {
+ deleteScrollContext(scrollId);
}
return count;
}
diff --git a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
index 3dbf64e139a3d6b59e4aa1d99cb6f1f2230435db..13027c638a314aea31da472530dca1a32c2994a2 100644
--- a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
@@ -227,32 +227,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
}
protected void delegateBulkRequest(final ConditionBean cb, Function<SearchHits, Boolean> handler) {
- SearchResponse response = null;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- builder.setPreference(esCb.getPreference());
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForCursor).setSize(sizeForCursor);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ builder.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
+ }
+
+ if (!handler.apply(searchHits)) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- if (!handler.apply(searchHits)) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- break;
+ scrollId = response.getScrollId();
}
+ } finally {
+ deleteScrollContext(scrollId);
+ }
+ }
+
+ protected void deleteScrollContext(final String scrollId) {
+ if (scrollId != null) {
+ client.prepareClearScroll().addScrollId(scrollId).execute(ActionListener.wrap(() -> {}));
}
}
@@ -356,39 +364,40 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
@Override
protected int delegateQueryDelete(final ConditionBean cb, final DeleteOption<? extends ConditionBean> option) {
- SearchResponse response = null;
+ final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
+ final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
+ if (esCb.getPreference() != null) {
+ esCb.setPreference(esCb.getPreference());
+ }
+ esCb.request().build(builder);
+ SearchResponse response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
+ String scrollId = response.getScrollId();
int count = 0;
- while (true) {
- if (response == null) {
- final SearchRequestBuilder builder = client.prepareSearch(asEsIndex()).setScroll(scrollForDelete).setSize(sizeForDelete);
- final EsAbstractConditionBean esCb = (EsAbstractConditionBean) cb;
- if (esCb.getPreference() != null) {
- esCb.setPreference(esCb.getPreference());
+ try {
+ while (scrollId != null) {
+ final SearchHits searchHits = response.getHits();
+ final SearchHit[] hits = searchHits.getHits();
+ if (hits.length == 0) {
+ break;
}
- esCb.request().build(builder);
- response = esCb.build(builder).execute().actionGet(scrollSearchTimeout);
- } else {
- final String scrollId = response.getScrollId();
- response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
- }
- final SearchHits searchHits = response.getHits();
- final SearchHit[] hits = searchHits.getHits();
- if (hits.length == 0) {
- break;
- }
- final BulkRequestBuilder bulkRequest = client.prepareBulk();
- for (final SearchHit hit : hits) {
- bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
- }
- count += hits.length;
- final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
- if (bulkResponse.hasFailures()) {
- if (response.getScrollId() != null) {
- client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+ final BulkRequestBuilder bulkRequest = client.prepareBulk();
+ for (final SearchHit hit : hits) {
+ bulkRequest.add(client.prepareDelete().setIndex(asEsIndex()).setId(hit.getId()));
+ }
+ count += hits.length;
+ final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
+ if (bulkResponse.hasFailures()) {
+ throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
+ }
+
+ response = client.prepareSearchScroll(scrollId).setScroll(scrollForDelete).execute().actionGet(scrollSearchTimeout);
+ if (!scrollId.equals(response.getScrollId())) {
+ deleteScrollContext(scrollId);
}
- throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
}
+ } finally {
+ deleteScrollContext(scrollId);
}
return count;
}