From f93beb1e2b400ad136a4332b565496e512f55616 Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Thu, 14 Feb 2019 11:43:22 +0100 Subject: [PATCH 1/2] Fix NPE on Stale Index in IndicesService * We should treat a `null` return for the metadata as equal to an error and break out * Added the check at this level even though it required nested `throw`, because adding it further downstream would impact other functionality * Closes #38845 --- .../main/java/org/elasticsearch/indices/IndicesService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/indices/IndicesService.java b/server/src/main/java/org/elasticsearch/indices/IndicesService.java index 32cbc4f70212b..0082cd03ba963 100644 --- a/server/src/main/java/org/elasticsearch/indices/IndicesService.java +++ b/server/src/main/java/org/elasticsearch/indices/IndicesService.java @@ -874,6 +874,9 @@ public IndexMetaData verifyIndexIsDeleted(final Index index, final ClusterState final IndexMetaData metaData; try { metaData = metaStateService.loadIndexState(index); + if (metaData == null) { + throw new IllegalStateException("Index state does not exist."); + } } catch (Exception e) { logger.warn(() -> new ParameterizedMessage("[{}] failed to load state file from a stale deleted index, " + "folders will be left on disk", index), e); From b8f52246c815b95e9892434d17cd4f9c429b1838 Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Thu, 14 Feb 2019 15:12:43 +0100 Subject: [PATCH 2/2] CR: remove warning --- .../src/main/java/org/elasticsearch/indices/IndicesService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/indices/IndicesService.java b/server/src/main/java/org/elasticsearch/indices/IndicesService.java index 0082cd03ba963..6bacc17b2886d 100644 --- a/server/src/main/java/org/elasticsearch/indices/IndicesService.java +++ b/server/src/main/java/org/elasticsearch/indices/IndicesService.java @@ -875,7 +875,7 @@ public IndexMetaData verifyIndexIsDeleted(final Index index, final ClusterState try { metaData = metaStateService.loadIndexState(index); if (metaData == null) { - throw new IllegalStateException("Index state does not exist."); + return null; } } catch (Exception e) { logger.warn(() -> new ParameterizedMessage("[{}] failed to load state file from a stale deleted index, " +