Error while getting SLM Stats from the Java Client

Hi everyone.
I'm using the Java client to handle some functionalities in my cluster.
With the ElasticsearchSlmClient, I can create a policy and run it.

But when I try to run
slmClient.getStats();
I have the following error :

java.lang.RuntimeException: co.elastic.clients.transport.TransportException: node: https://my-cluster-address:9243/, status: 200, [es/slm.get_stats] Failed to decode response

	at com.adelean.eaas.services.SnapshotsManagement.getStats(SnapshotsManagement.java:70)
	at com.adelean.eaas.services.SnapshotsManagementTest.getStats(SnapshotsManagementTest.java:69)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: co.elastic.clients.transport.TransportException: node: https://my-cluster-address:9243/, status: 200, [es/slm.get_stats] Failed to decode response
	at co.elastic.clients.transport.ElasticsearchTransportBase.decodeTransportResponse(ElasticsearchTransportBase.java:417)
	at co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:375)
	at co.elastic.clients.transport.ElasticsearchTransportBase.performRequest(ElasticsearchTransportBase.java:141)
	at co.elastic.clients.elasticsearch.slm.ElasticsearchSlmClient.getStats(ElasticsearchSlmClient.java:300)
	at com.adelean.eaas.services.SnapshotsManagement.getStats(SnapshotsManagement.java:68)
	... 4 more
Caused by: co.elastic.clients.json.JsonpMappingException: Error deserializing co.elastic.clients.elasticsearch.slm.GetStatsResponse: co.elastic.clients.json.UnexpectedJsonEventException: Unexpected JSON event 'START_OBJECT' instead of '[KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_TRUE, VALUE_FALSE]' (JSON path: policy_stats[0]) (line no=1, column no=276, offset=-1)
	at co.elastic.clients.json.JsonpMappingException.from0(JsonpMappingException.java:134)
	at co.elastic.clients.json.JsonpMappingException.from(JsonpMappingException.java:125)
	at co.elastic.clients.json.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:322)
	at co.elastic.clients.json.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:280)
	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:412)
	... 8 more
Caused by: co.elastic.clients.json.UnexpectedJsonEventException: Unexpected JSON event 'START_OBJECT' 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.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:317)
	... 18 more

I'm working with the 8.18.1 client.

Hey @ltrotta

Could you check this please?

1 Like

Hello!
Thank you for reporting this, it's an api specification bug, so it's currently affecting all clients, Java included. We mapped policy_stats wrongly, as an array of strings while the correct type is an array of specific objects. We'll fix this asap and regenerate the client to fix the issue, if you'd like to track this effort you can open a new issue in the java client repo.
Thanks again!

I just created an issue to keep an eye on it.

Thanks for your answer.