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

[BUG] deserializing the response of /_tasks endpoint fails because TaskExecutingNode.attributes is missing #356

Closed
ebcSly opened this issue Feb 2, 2023 · 3 comments · Fixed by #463
Assignees
Labels
bug Something isn't working

Comments

@ebcSly
Copy link

ebcSly commented Feb 2, 2023

opensearch-java client version

2.2.0

OpenSearch version

2.3 (Amazoon OpenSearch Service)

Java version

11

Problem description

In the response of the tasks endpoint the attribute TaskExecutingNode.attributes is missing. Since I didn't find any API specification I'm not sure if the attribute is missing in the response or if the client should not treat this attribute as mandatory.

Request

GET /_tasks?actions=reindex

Response

{
  "nodes": {
    "m5xFof7USZucap8drmTSkQ": {
      "name": "7abda77454688e5a695fc65aa63264b0",
      "roles": [
        "data",
        "ingest",
        "remote_cluster_client"
      ],
      "tasks": {
        "m5xFof7USZucap8drmTSkQ:4865054": {
          "node": "m5xFof7USZucap8drmTSkQ",
          "id": 4865054,
          "type": "transport",
          "action": "indices:data/write/reindex",
          "start_time_in_millis": 1675333077718,
          "running_time_in_nanos": 74025260228,
          "cancellable": true,
          "cancelled": false,
          "headers": {}
        }
      }
    }
  }
}

Error message

org.opensearch.client.util.MissingRequiredPropertyException: Missing required property 'TaskExecutingNode.attributes'
        at org.opensearch.client.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:88) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.util.ApiTypeHelper.unmodifiableRequired(ApiTypeHelper.java:206) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.opensearch._types.BaseNode.<init>(BaseNode.java:70) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.opensearch.tasks.TaskExecutingNode.<init>(TaskExecutingNode.java:62) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.opensearch.tasks.TaskExecutingNode$Builder.build(TaskExecutingNode.java:148) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.opensearch.tasks.TaskExecutingNode$Builder.build(TaskExecutingNode.java:102) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:93) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:56) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:378) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:364) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:88) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:85) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:189) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:150) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:88) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:92) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:56) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.transport.rest_client.RestClientTransport.decodeResponse(RestClientTransport.java:320) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.transport.rest_client.RestClientTransport.getHighLevelResponse(RestClientTransport.java:286) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.transport.rest_client.RestClientTransport.performRequest(RestClientTransport.java:143) ~[opensearch-java-2.2.0.jar!/:na]
        at org.opensearch.client.opensearch.tasks.OpenSearchTasksClient.list(OpenSearchTasksClient.java:153) ~[opensearch-java-2.2.0.jar!/:na]
        ...
@ebcSly ebcSly added bug Something isn't working untriaged labels Feb 2, 2023
@VachaShah
Copy link
Collaborator

VachaShah commented Feb 15, 2023

@ebcSly Thank you for pointing this issue!

I tried the ListRequest on OpenSearch and was able to get the values of the nodes (see my sample code):

ListRequest listRequest = new ListRequest.Builder().actions(Arrays.asList("reindex")).build();
ListResponse listResponse = client.tasks().list(listRequest);
for (TaskExecutingNode node : listResponse.nodes().values()) {
    System.out.println("Node values:");
    System.out.println(node.host());
    System.out.println(node.ip());
    System.out.println(node.attributes());
}

But the same request fails on Amazon OpenSearch Service as you mentioned. I also tried to make TaskExecutingNode.attributes as not required but then the request fails for host parameter.

org.opensearch.client.util.MissingRequiredPropertyException: Missing required property 'TaskExecutingNode.host'
    at org.opensearch.client.util.ApiTypeHelper.requireNonNull (ApiTypeHelper.java:88)
    at org.opensearch.client.opensearch._types.BaseNode.<init> (BaseNode.java:71)
    at org.opensearch.client.opensearch.tasks.TaskExecutingNode.<init> (TaskExecutingNode.java:62)
    at org.opensearch.client.opensearch.tasks.TaskExecutingNode$Builder.build (TaskExecutingNode.java:148)
    at org.opensearch.client.opensearch.tasks.TaskExecutingNode$Builder.build (TaskExecutingNode.java:102)
    at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize (ObjectBuilderDeserializer.java:93)
    at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize (DelegatingDeserializer.java:56)
    at org.opensearch.client.json.JsonpDeserializerBase$StringMapDeserializer.deserialize (JsonpDeserializerBase.java:378)
    at org.opensearch.client.json.JsonpDeserializerBase$StringMapDeserializer.deserialize (JsonpDeserializerBase.java:364)
    at org.opensearch.client.json.JsonpDeserializer.deserialize (JsonpDeserializer.java:88)
    at org.opensearch.client.json.ObjectDeserializer$FieldObjectDeserializer.deserialize (ObjectDeserializer.java:85)
    at org.opensearch.client.json.ObjectDeserializer.deserialize (ObjectDeserializer.java:189)
    at org.opensearch.client.json.ObjectDeserializer.deserialize (ObjectDeserializer.java:150)
    at org.opensearch.client.json.JsonpDeserializer.deserialize (JsonpDeserializer.java:88)
    at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize (ObjectBuilderDeserializer.java:92)
    at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize (DelegatingDeserializer.java:56)
    at org.opensearch.client.transport.aws.AwsSdk2Transport.parseResponse (AwsSdk2Transport.java:561)
    at org.opensearch.client.transport.aws.AwsSdk2Transport.executeSync (AwsSdk2Transport.java:438)
    at org.opensearch.client.transport.aws.AwsSdk2Transport.performRequest (AwsSdk2Transport.java:241)
    at org.opensearch.client.opensearch.tasks.OpenSearchTasksClient.list (OpenSearchTasksClient.java:177)

Looks like the server is not returning these values. On making all the values not required, this is the output:

Node values:
null
null
{}

@wbeckler
Copy link

Can we make the attribute not mandatory?

@VachaShah
Copy link
Collaborator

I think we can. I will take this up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants