Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ForceMergeResponse should make ShardStatistics as a nullable field #880

Open
Priyadarshanvijay opened this issue Sep 16, 2024 · 0 comments

Comments

@Priyadarshanvijay
Copy link

Java API client version

8.15.1

Java version

17

Elasticsearch Version

8.15.1

Problem description

Hey! I'm running into a MissingRequiredPropertyException when trying to execute a ForceMerge request with wait_for_completion set to false.
This code execution:

ElasticsearchClient esClient = new ElasticsearchClient(transport);
ForcemergeResponse forcemergeResponse = esClient.indices().forcemerge(fmr -> fmr
        .index("index1")
        .maxNumSegments(1L)
        .waitForCompletion(false));
throws with this detailed stack trace:
co.elastic.clients.transport.TransportException: node: https://localhost:9200/, status: 200, [es/indices.forcemerge] 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.performRequest(ElasticsearchTransportBase.java:147)
	at co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient.forcemerge(ElasticsearchIndicesClient.java:937)
	at co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient.forcemerge(ElasticsearchIndicesClient.java:953)
	at ElasticsearchClientServer.main(ElasticsearchClientServer.java:98)
Caused by: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'ForcemergeResponse.shards'
	at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
	at co.elastic.clients.elasticsearch._types.ShardsOperationResponseBase.<init>(ShardsOperationResponseBase.java:68)
	at co.elastic.clients.elasticsearch.indices.forcemerge.ForceMergeResponseBody.<init>(ForceMergeResponseBody.java:66)
	at co.elastic.clients.elasticsearch.indices.ForcemergeResponse.<init>(ForcemergeResponse.java:59)
	at co.elastic.clients.elasticsearch.indices.ForcemergeResponse.<init>(ForcemergeResponse.java:55)
	at co.elastic.clients.elasticsearch.indices.ForcemergeResponse$Builder.build(ForcemergeResponse.java:90)
	at co.elastic.clients.elasticsearch.indices.ForcemergeResponse$Builder.build(ForcemergeResponse.java:73)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:80)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
	at co.elastic.clients.transport.ElasticsearchTransportBase.decodeTransportResponse(ElasticsearchTransportBase.java:399)
	... 5 more

whereas if I set waitForCompletion to true, the java client is able to parse the response back from server correctly:

ForcemergeResponse: {"_shards":{"failed":0.0,"successful":2.0,"total":2.0}}

This might be happening because based on the API spec, ForcemergeResponse extends ShardsOperationResponseBase which requires _shard to always be present in raw JSON response, which is not the case when wait_for_completion is set to true. In that case, we receive the optional parameter task as pointed in the docs as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant