Skip to content

ForceMergeResponse should make ShardStatistics as a nullable field #880

Closed
@Priyadarshanvijay

Description

@Priyadarshanvijay

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area: SpecificationRelated to the API spec used to generate client codeCategory: BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions