Daml 1.18 introduced new (or more detailed) Error Codes from the gRPC api. I assume that we should be able to see some of these on the completion API and in particular the CompletionStreamResponse. But I can’t figure out how to access them from these Java functions. Is this information in a different place?
There are improvements to be made in terms of usability, but if I understand correctly the error codes consist of information added to the gRPC Status, so you should be able to use the getStatus method on the completions returned by getCompletions and see the error details in there.
Indeed @stefanobaghino-da .
All the error code details are packed in the status payload of the Completion. There you can inspect the human-readable error message via getMessage. The machine-readable information is packed in the error details (see getDetailsList) from which you can extract programatically by checking the contents of the returned list:
- the
ErrorInfocontains the self-service error code id (ErrorInfo#getReason) and additional failure key-value metadata (ErrorInfo#getMetadataMap). - the
RequestInfo#getRequestIdis the error correlation-id (submission-id) if available. - the
RetryInfo#getRetryDelayinstructs the client when to retry if the error is retryable. - the
ResourceInfo, if present, contains the resource name and the value to which the failure pertains (e.g. forCONTRACT_KEY_NOT_FOUND, the status will contain aResourceInfoexpanding toCONTRACT_KEY→<the-key-which-was-not-found>)
An explicit example on how to extract these with the Java gRPC API is available here
@tudor_voicu Thank you for the detailed answer! I did not realize that Status was an object and not just an integer ( I was confused by the logs which just showed the statusCode).