diff --git a/src/main/java/org/elasticsearch/alerts/AlertsStore.java b/src/main/java/org/elasticsearch/alerts/AlertsStore.java index 7d9e5cf85b7..874eedbd4c4 100644 --- a/src/main/java/org/elasticsearch/alerts/AlertsStore.java +++ b/src/main/java/org/elasticsearch/alerts/AlertsStore.java @@ -157,6 +157,7 @@ public class AlertsStore extends AbstractComponent { loadAlerts(); } catch (Exception e) { logger.warn("Failed to load alerts", e); + return false; } templateHelper.checkAndUploadIndexTemplate(state, "alerts"); started.set(true); @@ -192,8 +193,8 @@ public class AlertsStore extends AbstractComponent { } private void loadAlerts() { + assert alertMap.isEmpty() : "No alerts should reside, but there are " + alertMap.size() + " alerts."; client.admin().indices().refresh(new RefreshRequest(ALERT_INDEX)).actionGet(); - SearchResponse response = client.prepareSearch(ALERT_INDEX) .setTypes(ALERT_TYPE) .setSearchType(SearchType.SCAN) @@ -202,6 +203,10 @@ public class AlertsStore extends AbstractComponent { .setVersion(true) .get(); try { + if (response.getTotalShards() != response.getSuccessfulShards()) { + throw new ElasticsearchException("Partial response while loading alerts"); + } + if (response.getHits().getTotalHits() > 0) { response = client.prepareSearchScroll(response.getScrollId()).setScroll(scrollTimeout).get(); while (response.getHits().hits().length != 0) { diff --git a/src/main/java/org/elasticsearch/alerts/actions/AlertActionManager.java b/src/main/java/org/elasticsearch/alerts/actions/AlertActionManager.java index f3f9adbb450..326e79b67cd 100644 --- a/src/main/java/org/elasticsearch/alerts/actions/AlertActionManager.java +++ b/src/main/java/org/elasticsearch/alerts/actions/AlertActionManager.java @@ -123,7 +123,7 @@ public class AlertActionManager extends AbstractComponent { loadQueue(); } catch (Exception e) { logger.error("Unable to load unfinished jobs into the job queue", e); - actionsToBeProcessed.clear(); + return false; } templateHelper.checkAndUploadIndexTemplate(state, "alerthistory"); doStart(); @@ -158,7 +158,6 @@ public class AlertActionManager extends AbstractComponent { public void loadQueue() { assert actionsToBeProcessed.isEmpty() : "Queue should be empty, but contains " + actionsToBeProcessed.size() + " elements."; client.admin().indices().refresh(new RefreshRequest(ALERT_HISTORY_INDEX_PREFIX + "*")).actionGet(); - SearchResponse response = client.prepareSearch(ALERT_HISTORY_INDEX_PREFIX + "*") .setQuery(QueryBuilders.termQuery(STATE, AlertActionState.SEARCH_NEEDED.toString())) .setSearchType(SearchType.SCAN) @@ -167,6 +166,10 @@ public class AlertActionManager extends AbstractComponent { .setTypes(ALERT_HISTORY_TYPE) .get(); try { + if (response.getTotalShards() != response.getSuccessfulShards()) { + throw new ElasticsearchException("Partial response while loading alert actions"); + } + if (response.getHits().getTotalHits() > 0) { response = client.prepareSearchScroll(response.getScrollId()).setScroll(scrollTimeout).get(); while (response.getHits().hits().length != 0) {