From 6ba7f51d92aba72cf3cb949bcddbf7a1a960727d Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Fri, 13 Mar 2026 16:29:06 +0100 Subject: [PATCH] Check if sniffer was able to determine the version before testing if it's a 2.x --- .../sniffer/ElasticsearchNodesSniffer.java | 2 +- .../ElasticsearchNodesSnifferParseTests.java | 8 +++++ .../sniffer/no_version_nodes_http.json | 35 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 rest5-client/src/test/resources/co/elastic/clients/transport/rest5_client/low_level/sniffer/no_version_nodes_http.json diff --git a/rest5-client/src/main/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSniffer.java b/rest5-client/src/main/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSniffer.java index 6e9d88ef7f..d02dc0fcc4 100644 --- a/rest5-client/src/main/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSniffer.java +++ b/rest5-client/src/main/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSniffer.java @@ -252,7 +252,7 @@ else if (fieldName != null) { // it's an unknown object that needs to be skipped realAttributes.put(entry.getKey(), singletonList(entry.getValue())); } - if (version.startsWith("2.")) { + if (version != null && version.startsWith("2.")) { /* * 2.x doesn't send roles, instead we try to read them from * attributes. diff --git a/rest5-client/src/test/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSnifferParseTests.java b/rest5-client/src/test/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSnifferParseTests.java index b1b9f841be..752f050aa0 100644 --- a/rest5-client/src/test/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSnifferParseTests.java +++ b/rest5-client/src/test/java/co/elastic/clients/transport/rest5_client/low_level/sniffer/ElasticsearchNodesSnifferParseTests.java @@ -132,6 +132,14 @@ public void test7x() throws IOException { ); } + @Test + public void testNoVersion() throws IOException { + checkFile( + "no_version_nodes_http.json", + node(9200, "m1", null, "master", "ingest") + ); + } + @Test public void testParsingPublishAddressWithPreES7Format() throws IOException { InputStream in = this.getClass().getResourceAsStream("es6_nodes_publication_address_format.json"); diff --git a/rest5-client/src/test/resources/co/elastic/clients/transport/rest5_client/low_level/sniffer/no_version_nodes_http.json b/rest5-client/src/test/resources/co/elastic/clients/transport/rest5_client/low_level/sniffer/no_version_nodes_http.json new file mode 100644 index 0000000000..a9c4b264d1 --- /dev/null +++ b/rest5-client/src/test/resources/co/elastic/clients/transport/rest5_client/low_level/sniffer/no_version_nodes_http.json @@ -0,0 +1,35 @@ +{ + "_nodes": { + "total": 1, + "successful": 1, + "failed": 0 + }, + "cluster_name": "elasticsearch", + "nodes": { + "ikXK_skVTfWkhONhldnbkw": { + "name": "m1", + "transport_address": "127.0.0.1:9300", + "host": "127.0.0.1", + "ip": "127.0.0.1", + "build_hash": "8f0685b", + "roles": [ + "master", + "ingest" + ], + "attributes": { + "dummy": "everyone_has_me", + "number": "1", + "array.0": "m", + "array.1": "1" + }, + "http": { + "bound_address": [ + "[::1]:9200", + "127.0.0.1:9200" + ], + "publish_address": "127.0.0.1:9200", + "max_content_length_in_bytes": 104857600 + } + } + } +}