microsoft / microsoft/durabletask-java
Wrap gRPC StatusRuntimeException across all client and worker gRPC calls
@bachuv arbeitet bereits daran.
Seit 07.4.2026.
- #278 von @copilot-swe-agent — ohne Merge geschlossen
- Vorherrschende Sprache
- Java
- Sterne
- 29
- Forks
- 18
- Ø Merge
- 1 T. 10 Std.
- Gemergte PRs (30 T.)
- 2
Beschreibung
Summary
Most gRPC calls in the Java SDK let raw io.grpc.StatusRuntimeException escape to callers. The .NET SDK wraps RpcException (at minimum StatusCode.Cancelled → OperationCanceledException) for all entity client methods. The Java SDK should provide consistent domain-level exception wrapping so callers don't need to depend on gRPC types and so we can have .NET feature parity.
Current Behavior
The majority of gRPC methods across DurableTaskGrpcClient, GrpcDurableEntityClient, and DurableTaskGrpcWorker let StatusRuntimeException propagate unwrapped:
DurableTaskGrpcClient — no wrapping:
suspendInstance()resumeInstance()terminate()raiseEvent()createInstanceWithRaise()getInstanceMetadata()
DurableTaskGrpcClient — wraps specific codes only:
waitForInstanceStart()—DEADLINE_EXCEEDED→TimeoutExceptionwaitForInstanceCompletion()—DEADLINE_EXCEEDED→TimeoutExceptionpurgeInstances()—DEADLINE_EXCEEDED→TimeoutExceptionrewindInstance()—NOT_FOUND→IllegalArgumentException,FAILED_PRECONDITION→IllegalStateException
GrpcDurableEntityClient — no wrapping:
signalEntity()getEntityMetadata()queryEntities()cleanEntityStorage()
DurableTaskGrpcWorker — no wrapping:
completeActivityTask()completeOrchestratorTask()completeEntityTask()
Expected Behavior
gRPC transport exceptions should be translated into SDK-level exceptions. At minimum:
CANCELLED→CancellationException(closest Java equivalent to .NET'sOperationCanceledException)NOT_FOUND→IllegalArgumentExceptionor a dedicated not-found exceptionDEADLINE_EXCEEDED→TimeoutException(already done for some methods)
.NET SDK Reference
The .NET GrpcDurableEntityClient wraps RpcException for every entity method:
catch (RpcException e) when (e.StatusCode == StatusCode.Cancelled)
{
throw new OperationCanceledException(
$"The {nameof(this.SignalEntityAsync)} operation was canceled.", e, cancellation);
}
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.