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_ANSWERED

View on GitHub (pinned to bde624efd1)

Solutions

  1. Return an initialized &workflowservice.RespondQueryTaskCompletedRequest{} (set QueryResult or ErrorMessage as appropriate)
  2. Use the request's ErrorMessage/Completed flag to signal query failure instead of returning a nil request
  3. 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

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


AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01). Data as JSON: /api/errors/15f3e006d1b7acc9. Report an issue: GitHub.