@@ -69,7 +69,7 @@ func isDagConditionEvalErr(err error) bool {
6969}
7070
7171type dagEngineError struct {
72- errorType string
72+ errorType v1contracts. DurableTaskErrorType
7373 errorMessage string
7474}
7575
@@ -82,17 +82,30 @@ func isDagEngineErr(err error) bool {
8282 return errors .As (err , & e )
8383}
8484
85- // these errors can be returned to the client verbatim. everything else is an
86- // internal failure whose details stay in the engine logs.
87- func isUserFacingDagErr ( err error ) bool {
88- var nonDeterminismErr * repository. NonDeterminismError
85+ func clientErrorMessageForDagErr ( err error ) ( message string , ok bool ) {
86+ var childFailedErr * dagChildFailedError
87+ var cancelledErr * dagCancelledError
88+ var conditionEvalErr * dagConditionEvalError
8989 var celFailureErr * operator.DAGStepCELFailureError
90-
91- return isDagChildFailedErr (err ) ||
92- isDagConditionEvalErr (err ) ||
93- isDagEngineErr (err ) ||
94- errors .As (err , & celFailureErr ) ||
95- errors .As (err , & nonDeterminismErr )
90+ var nonDeterminismErr * repository.NonDeterminismError
91+ var engineErr * dagEngineError
92+
93+ switch {
94+ case errors .As (err , & childFailedErr ):
95+ return childFailedErr .Error (), true
96+ case errors .As (err , & cancelledErr ):
97+ return cancelledErr .Error (), true
98+ case errors .As (err , & conditionEvalErr ):
99+ return conditionEvalErr .Error (), true
100+ case errors .As (err , & celFailureErr ):
101+ return celFailureErr .Error (), true
102+ case errors .As (err , & nonDeterminismErr ):
103+ return nonDeterminismErr .Error (), true
104+ case errors .As (err , & engineErr ) && engineErr .errorType == v1contracts .DurableTaskErrorType_DURABLE_TASK_ERROR_TYPE_NONDETERMINISM :
105+ return engineErr .errorMessage , true
106+ default :
107+ return "" , false
108+ }
96109}
97110
98111func isDagNonRetryablePgErr (err error ) bool {
@@ -678,7 +691,7 @@ func (d *dag) taskConsumer(ctx context.Context, resp *v1contracts.DurableTaskRes
678691
679692 // Dropping this would leave the run waiting forever for an ack or completion that
680693 // will never arrive (e.g. a nondeterminism error means the wait was never committed).
681- d .err = & dagEngineError {errorType : m .Error .GetErrorType (). String () , errorMessage : m .Error .GetErrorMessage ()}
694+ d .err = & dagEngineError {errorType : m .Error .GetErrorType (), errorMessage : m .Error .GetErrorMessage ()}
682695 }
683696}
684697
0 commit comments