Skip to content

Commit 19afc5c

Browse files
maciejdudkocarlydf
authored andcommitted
Include failure details in query failure. Improved gRPC message too large detection. Fix flaky TestGrpcMessageTooLarge. (#2078)
1 parent c865944 commit 19afc5c

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

internal/common/retry/interceptor.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,11 @@ func isGrpcMessageTooLargeStatus(status *status.Status) bool {
191191
return false
192192
}
193193
message := status.Message()
194+
// Source: https://github.com/search?q=repo%3Agrpc%2Fgrpc-go+ResourceExhausted&type=code
194195
return strings.HasPrefix(message, "grpc: received message larger than max") ||
195196
strings.HasPrefix(message, "grpc: message after decompression larger than max") ||
196-
strings.HasPrefix(message, "grpc: received message after decompression larger than max")
197+
strings.HasPrefix(message, "grpc: received message after decompression larger than max") ||
198+
strings.HasPrefix(message, "grpc: trying to send message larger than max") ||
199+
strings.HasPrefix(message, "grpc: message too large") ||
200+
strings.HasPrefix(message, "trying to send message larger than max")
197201
}

internal/internal_task_handlers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,7 @@ func (wth *workflowTaskHandlerImpl) completeWorkflow(
18421842
if err != nil {
18431843
queryCompletedRequest.CompletedType = enumspb.QUERY_RESULT_TYPE_FAILED
18441844
queryCompletedRequest.ErrorMessage = err.Error()
1845+
queryCompletedRequest.Failure = wth.failureConverter.ErrorToFailure(err)
18451846
} else {
18461847
queryCompletedRequest.CompletedType = enumspb.QUERY_RESULT_TYPE_ANSWERED
18471848
queryCompletedRequest.QueryResult = result

test/integration_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7786,7 +7786,7 @@ func (ts *IntegrationTestSuite) TestGrpcMessageTooLarge() {
77867786
ts.Fail("Workflow task failed event not found in history")
77877787
}
77887788

7789-
veryLargeData := strings.Repeat("Very Large Data ", 500_000) // circa 8MB, double the default 4MB limit
7789+
veryLargeData := slices.Repeat([]byte{1}, 8_000_000) // double the default 4MB limit
77907790

77917791
ctx, cancel := context.WithCancel(context.Background())
77927792
defer cancel()
@@ -7799,16 +7799,16 @@ func (ts *IntegrationTestSuite) TestGrpcMessageTooLarge() {
77997799
if success {
78007800
return workflow.ExecuteActivity(ctx, activityFn, veryLargeData).Get(ctx, nil)
78017801
} else {
7802-
return errors.New(veryLargeData)
7802+
return temporal.NewApplicationError("We should not see this error", "", veryLargeData)
78037803
}
78047804
}
78057805

78067806
failureInQueryTaskWorkflowFn := func(ctx workflow.Context) error {
7807-
return workflow.SetQueryHandler(ctx, "too-large-query", func(success bool) (string, error) {
7807+
return workflow.SetQueryHandler(ctx, "too-large-query", func(success bool) ([]byte, error) {
78087808
if success {
78097809
return veryLargeData, nil
78107810
} else {
7811-
return "", errors.New(veryLargeData)
7811+
return nil, temporal.NewApplicationError("We should not see this error", "", veryLargeData)
78127812
}
78137813
})
78147814
}
@@ -7843,6 +7843,6 @@ func (ts *IntegrationTestSuite) TestGrpcMessageTooLarge() {
78437843
ts.NoError(run.Get(ctx, nil))
78447844
_, err = ts.client.QueryWorkflow(ctx, run.GetID(), run.GetRunID(), "too-large-query", false)
78457845
ts.Error(err)
7846-
ts.Contains(err.Error(), "grpc: received message larger than max")
7846+
ts.Contains(err.Error(), "message larger than max")
78477847
})
78487848
}

0 commit comments

Comments
 (0)