Open marcreichman-pfi opened 1 week ago
I just want to follow up to indicate, that this happened with (docker run):
-e xpack.security.enabled=false
When I explicitly added this:
-e xpack.security.http.ssl.enabled=false
It worked again for the first problem.
The second problem seems to be related to having the anonymous realm created.
We also were able to get past both using the approach I found in #891:
try (ApiTypeHelper.DisabledChecksHandle h = ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(true)) {
This seems like not the best idea moving forward, though.
Hello! Thanks for reporting this. These are both errors in our API specification definition, I have already provided a fix for both of them, then we'll regenerate the client to fix the issues. The next patch has already been built, so this will probably end up in the next minor.
Hi @l-trotta ,
Thanks for your fix! I saw your PR for this: https://github.com/elastic/elasticsearch-specification/pull/2998
My impression is that this would fix the second of my error messages, but not the first. I do not believe it should be required to set xpack.security.http.ssl.enabled=false
if xpack.security.enabled=false
is already set.
I think this line should also have http?
, unless I'm misunderstanding something.
https://github.com/elastic/elasticsearch-specification/blob/06c57215ac9fa483f138994ccf6bf4fae78c3a49/specification/nodes/info/types.ts#L247
Thanks for your help to fix this!
There's another PR for that :D
Hi I have a very similar issue (on the same version of the client (8.15.2) and the same call (to es/nodes.info)
I get this
Exception in thread "Thread-4" java.util.concurrent.ExecutionException: co.elastic.clients.transport.TransportException: node: http://localhost:9201/, status: 200, [es/nodes.info] Failed to decode response
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073)
...
$0(TestRunnerService.kt:80)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: co.elastic.clients.transport.TransportException: node: http://localhost:9201/, status: 200, [es/nodes.info] Failed to decode response
at co.elastic.clients.transport.ElasticsearchTransportBase.decodeTransportResponse(ElasticsearchTransportBase.java:404)
at co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:363)
at co.elastic.clients.transport.ElasticsearchTransportBase.lambda$performRequestAsync$0(ElasticsearchTransportBase.java:211)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
at co.elastic.clients.transport.rest_client.RestClientHttpClient$1.onSuccess(RestClientHttpClient.java:115)
at org.elasticsearch.client.RestClient$FailureTrackingResponseListener.onSuccess(RestClient.java:680)
at org.elasticsearch.client.RestClient$1.completed(RestClient.java:403)
at org.elasticsearch.client.RestClient$1.completed(RestClient.java:397)
at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:122)
at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:182)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:448)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:338)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:87)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:40)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
... 1 more
Caused by: co.elastic.clients.json.JsonpMappingException: Error deserializing co.elastic.clients.elasticsearch.nodes.info.NodeInfoSettingsNetwork: co.elastic.clients.json.UnexpectedJsonEventException: Unexpected JSON event 'START_ARRAY' instead of '[KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_TRUE, VALUE_FALSE]' (JSON path: nodes['6lgrxgYTTzeiKZCXyzOLYw'].settings.network.host) (line no=1, column no=1829, offset=-1)
at co.elastic.clients.json.JsonpMappingException.from0(JsonpMappingException.java:134)
at co.elastic.clients.json.JsonpMappingException.from(JsonpMappingException.java:121)
at co.elastic.clients.json.ObjectDeserializer.deserializeInner(ObjectDeserializer.java:236)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:166)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:157)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)
at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:78)
at co.elastic.clients.json.ObjectDeserializer.deserializeInner(ObjectDeserializer.java:214)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:166)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:157)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)
at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:78)
at co.elastic.clients.json.ObjectDeserializer.deserializeInner(ObjectDeserializer.java:214)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:166)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:157)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)
at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:349)
at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:333)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)
at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:78)
at co.elastic.clients.json.ObjectDeserializer.deserializeInner(ObjectDeserializer.java:214)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:166)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:157)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)
at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
at co.elastic.clients.transport.ElasticsearchTransportBase.decodeTransportResponse(ElasticsearchTransportBase.java:399)
... 25 more
Caused by: co.elastic.clients.json.UnexpectedJsonEventException: Unexpected JSON event 'START_ARRAY' instead of '[KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_TRUE, VALUE_FALSE]'
at co.elastic.clients.json.JsonpUtils.ensureAccepts(JsonpUtils.java:117)
at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:76)
at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:78)
at co.elastic.clients.json.ObjectDeserializer.deserializeInner(ObjectDeserializer.java:214)
... 55 more
I can report this as a separate bug also, but they look very similar
hey @karlney, this seems to be another issue, looks like the host
field in NodeInfoSettingsNetwork
can also be an array. No need to create another issue, I'll fix this asap!
@l-trotta Thanks for all your prompt attention on these fixes. I am curious, is the server's configuration and API generated from these specifications as well, or does the spec just do its best to track and catch up with the actual server mechanics?
The workaround you've posted with the suppression of the field validation has been a lifesaver, but I've always been curious why this new client has been subject to so many of these types of problems.
@marcreichman-pfi
or does the spec just do its best to track and catch up with the actual server mechanics
this one ^^" I didn't get to work on in so I'm not sure, but I think the older client didn't try to replicate the server requests/responses as closely as we're doing now, especially not with the requires or nullable fields. So while it was harder to incur in errors like these ones, it was also much easier to craft a query that the server would not accept.
I wonder if the server tests are robust enough that someone could experiment with generating the server-side API or config parsing from the same specifications.
I appreciate that the HLRC and TransportClient before that brought it all kinds of heavy dependencies, but at least there wasn't a worry about being in sync with the server. Fundamentally this is a better choice, and I assume politics are involved, but the server should come from the same spec too. Some day.
Java API client version
8.15.2
Java version
21
Elasticsearch Version
8.15.2
Problem description
When running the following Java code, this error happens, and it seems to depend on the state of the various xpack security settings. We've seen different combinations based on if security is off, or if it's on and there are no added users, etc.. -- We have not tried every combination of server settings. There are some scenarios where it works fine as well, but where it does not, there is not any way to work around this since we cannot enforce a specific security configuration to every installation.
Java code to reproduce
Either
Example stack traces (they vary..):