in src/main/java/com/uber/cadence/internal/compatibility/thrift/ErrorMapper.java [37:100]
public static TException Error(StatusRuntimeException ex) {
String details = getErrorDetails(ex);
switch (ex.getStatus().getCode()) {
case PERMISSION_DENIED:
return new AccessDeniedError(ex.getMessage());
case INTERNAL:
return new InternalServiceError(ex.getMessage());
case NOT_FOUND:
{
if ("EntityNotExistsError".equals(details)
&& ex.getMessage().contains("already completed.")) {
return new WorkflowExecutionAlreadyCompletedError(ex.getMessage());
} else {
// TODO add cluster info
return new EntityNotExistsError(ex.getMessage());
}
}
case ALREADY_EXISTS:
{
switch (details) {
case "CancellationAlreadyRequestedError":
return new CancellationAlreadyRequestedError(ex.getMessage());
case "DomainAlreadyExistsError":
return new DomainAlreadyExistsError(ex.getMessage());
case "WorkflowExecutionAlreadyStartedError":
{
// TODO add started wf info
WorkflowExecutionAlreadyStartedError e = new WorkflowExecutionAlreadyStartedError();
e.setMessage(ex.getMessage());
return e;
}
}
}
case DATA_LOSS:
return new InternalDataInconsistencyError(ex.getMessage());
case FAILED_PRECONDITION:
switch (details) {
// TODO add infos
case "ClientVersionNotSupportedError":
return new ClientVersionNotSupportedError();
case "FeatureNotEnabledError":
return new FeatureNotEnabledError();
case "DomainNotActiveError":
{
DomainNotActiveError e = new DomainNotActiveError();
e.setMessage(ex.getMessage());
return e;
}
}
case RESOURCE_EXHAUSTED:
switch (details) {
case "LimitExceededError":
return new LimitExceededError(ex.getMessage());
case "ServiceBusyError":
return new ServiceBusyError(ex.getMessage());
}
case UNKNOWN:
return new TException(ex);
default:
// If error does not match anything, return raw grpc status error
// There are some code that casts error to grpc status to check for deadline exceeded status
return new TException(ex);
}
}