Skip to content

Commit 4ac2db5

Browse files
jbaierapuppylpgelasticmachine
authored
Show concrete error when enrich index not exist rather than NPE (#99604) (#100107)
There should be NullPointerException check and throw index not found exception to the response so the user can understand what happens with the enrich index --------- Co-authored-by: puppylpg <[email protected]> Co-authored-by: Elastic Machine <[email protected]>
1 parent 21bdab1 commit 4ac2db5

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

docs/changelog/99604.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 99604
2+
summary: Show concrete error when enrich index not exist rather than NPE
3+
area: Ingest Node
4+
type: enhancement
5+
issues: []

x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichCache.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.elasticsearch.common.cache.Cache;
1515
import org.elasticsearch.common.cache.CacheBuilder;
1616
import org.elasticsearch.common.util.Maps;
17+
import org.elasticsearch.index.IndexNotFoundException;
1718
import org.elasticsearch.search.SearchHit;
1819
import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction;
1920

@@ -88,6 +89,9 @@ public EnrichStatsAction.Response.CacheStats getStats(String localNodeId) {
8889
private String getEnrichIndexKey(SearchRequest searchRequest) {
8990
String alias = searchRequest.indices()[0];
9091
IndexAbstraction ia = metadata.getIndicesLookup().get(alias);
92+
if (ia == null) {
93+
throw new IndexNotFoundException("no generated enrich index [" + alias + "]");
94+
}
9195
return ia.getIndices().get(0).getName();
9296
}
9397

x-pack/plugin/enrich/src/test/java/org/elasticsearch/xpack/enrich/EnrichCacheTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.elasticsearch.cluster.metadata.AliasMetadata;
1111
import org.elasticsearch.cluster.metadata.IndexMetadata;
1212
import org.elasticsearch.cluster.metadata.Metadata;
13+
import org.elasticsearch.index.IndexNotFoundException;
1314
import org.elasticsearch.index.IndexVersion;
1415
import org.elasticsearch.index.query.MatchQueryBuilder;
1516
import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -21,6 +22,7 @@
2122
import java.util.List;
2223
import java.util.Map;
2324

25+
import static org.hamcrest.Matchers.containsString;
2426
import static org.hamcrest.Matchers.equalTo;
2527
import static org.hamcrest.Matchers.not;
2628
import static org.hamcrest.Matchers.notNullValue;
@@ -183,4 +185,22 @@ public void testDeepCopy() {
183185
assertArrayEquals(new byte[] { 1, 2, 3 }, (byte[]) result.get("embedded_object"));
184186
}
185187

188+
public void testEnrichIndexNotExist() {
189+
// Emulate cluster metadata:
190+
var metadata = Metadata.builder().build();
191+
192+
// Emulated search request on a non-exist enrich index that an enrich processor could generate
193+
var searchRequest = new SearchRequest(EnrichPolicy.getBaseName("policy-enrich-index-not-generated")).source(
194+
new SearchSourceBuilder().query(new MatchQueryBuilder("test", "query"))
195+
);
196+
// Emulated search response (content doesn't matter, since it isn't used, it just a cache entry)
197+
List<Map<?, ?>> searchResponse = List.of(Map.of("test", "entry"));
198+
199+
EnrichCache enrichCache = new EnrichCache(1);
200+
enrichCache.setMetadata(metadata);
201+
202+
IndexNotFoundException e = expectThrows(IndexNotFoundException.class, () -> enrichCache.put(searchRequest, searchResponse));
203+
assertThat(e.getMessage(), containsString("no generated enrich index [.enrich-policy-enrich-index-not-generated]"));
204+
}
205+
186206
}

0 commit comments

Comments
 (0)