temporalio/temporal · error
missing RespondQueryTaskCompletedRequest
Error message
missing RespondQueryTaskCompletedRequest
What it means
Returned by the test task poller when a RespondQueryTaskCompletedRequest is absent after a query task handler runs. The poller requires a completion (possibly an error completion) to forward back to the matching/history service.
Source
Thrown at common/testing/taskpoller/taskpoller.go:483
return resp, nil
}
func (p *workflowTaskPoller) respondQueryTaskCompleted(
ctx context.Context,
task *workflowservice.PollWorkflowTaskQueueResponse,
reply *workflowservice.RespondQueryTaskCompletedRequest,
err error,
) (*workflowservice.RespondQueryTaskCompletedResponse, error) {
p.t.Helper()
if task == nil {
return nil, errors.New("missing PollWorkflowTaskQueueResponse")
}
if task.Query == nil {
return nil, errors.New("missing Legacy Query in PollWorkflowTaskQueueResponse")
}
if reply == nil {
return nil, errors.New("missing RespondQueryTaskCompletedRequest")
}
// setting the fields for RespondQueryTaskCompletedResponse
if reply.Namespace == "" {
reply.Namespace = p.namespace
}
if reply.TaskToken == nil {
reply.TaskToken = task.TaskToken
}
if err != nil {
reply.ErrorMessage = err.Error()
reply.Failure = &failurepb.Failure{
Message: err.Error(),
}
reply.CompletedType = enumspb.QUERY_RESULT_TYPE_FAILED
} else {
reply.CompletedType = enumspb.QUERY_RESULT_TYPE_ANSWEREDView on GitHub (pinned to bde624efd1)
Solutions
- Return an initialized &workflowservice.RespondQueryTaskCompletedRequest{} (set QueryResult or ErrorMessage as appropriate)
- Use the request's ErrorMessage/Completed flag to signal query failure instead of returning a nil request
- Ensure the poll-and-handle helper always forwards a constructed reply
Example fix
// before
return nil, errors.New("query failed")
// after
return &workflowservice.RespondQueryTaskCompletedRequest{
ErrorMessage: "query failed",
Completed: false,
}, nil Defensive patterns
Strategy: validation
Validate before calling
if reply == nil {
reply = &workflowservice.RespondQueryTaskCompletedRequest{}
} Try / catch
resp, err := poller.HandleQuery(ctx, task, reply) require.ErrorContains(t, err, "missing RespondQueryTaskCompletedRequest") // fail fast in tests
Prevention
- Always build a RespondQueryTaskCompletedRequest, using ErrorMessage for failures
- Avoid nil, nil returns in reply callbacks
- Assert reply non-nil in helper functions
When it happens
Trigger: handleQuery invoked with reply == nil for *workflowservice.RespondQueryTaskCompletedRequest.
Common situations: Test callback returns nil, nil for the reply; refactoring removed reply construction; failure-path branches that skip building the response.
Related errors
- missing PollWorkflowTaskQueueResponse
- missing Legacy Query in PollWorkflowTaskQueueResponse
- missing RespondWorkflowTaskCompletedRequest return
- history is nil
- missing RespondActivityTaskCompletedRequest return
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/15f3e006d1b7acc9.
Report an issue: GitHub.