temporalio/temporal · error
error describing task queue with name %s: %s
Error message
error describing task queue with name %s: %s
What it means
CheckIfTaskQueuesHavePollers calls DescribeTaskQueue for each task queue of a worker deployment version to see if any poller is attached. A transport/RPC failure while describing a queue is wrapped with the queue name and underlying error, aborting the deployment version state evaluation.
Source
Thrown at service/worker/workerdeployment/version_activities.go:172
// CheckIfTaskQueuesHavePollers returns true if any of the given task queues has any pollers
func (a *VersionActivities) CheckIfTaskQueuesHavePollers(ctx context.Context, args *deploymentspb.CheckTaskQueuesHavePollersActivityArgs) (bool, error) {
versionStr := worker_versioning.ExternalWorkerDeploymentVersionToString(worker_versioning.ExternalWorkerDeploymentVersionFromVersion(args.WorkerDeploymentVersion))
for tqName, tqTypes := range args.TaskQueuesAndTypes {
res, err := a.MatchingClient.DescribeTaskQueue(ctx, &matchingservice.DescribeTaskQueueRequest{
NamespaceId: a.namespace.ID().String(),
DescRequest: &workflowservice.DescribeTaskQueueRequest{
Namespace: a.namespace.Name().String(),
TaskQueue: &taskqueuepb.TaskQueue{Name: tqName, Kind: enumspb.TASK_QUEUE_KIND_NORMAL},
ApiMode: enumspb.DESCRIBE_TASK_QUEUE_MODE_ENHANCED,
Versions: &taskqueuepb.TaskQueueVersionSelection{BuildIds: []string{versionStr}},
ReportPollers: true,
TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW,
TaskQueueTypes: tqTypes.Types,
},
})
if err != nil {
return false, fmt.Errorf("error describing task queue with name %s: %s", tqName, err)
}
typesInfo := res.GetDescResponse().GetVersionsInfo()[versionStr].GetTypesInfo()
if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetPollers()) > 0 {
return true, nil
}
if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_ACTIVITY)].GetPollers()) > 0 {
return true, nil
}
if len(typesInfo[int32(enumspb.TASK_QUEUE_TYPE_NEXUS)].GetPollers()) > 0 {
return true, nil
}
}
return false, nil
}
func (a *VersionActivities) GetVersionDrainageStatus(ctx context.Context, version *deploymentspb.WorkerDeploymentVersion) (*deploymentpb.VersionDrainageInfo, error) {
logger := activity.GetLogger(ctx)
response, err := a.WorkerDeploymentClient.GetVersionDrainageStatus(ctx, a.namespace, worker_versioning.WorkerDeploymentVersionToStringV31(version))View on GitHub (pinned to bde624efd1)
Solutions
- Inspect the wrapped inner error and fix its root cause (connectivity, auth, namespace)
- Retry the activity; the worker-deployment workflow retries activities on transient errors
- Verify the task queue names / deployment series configuration are current, not stale
- Increase activity timeouts if DescribeTaskQueue is consistently slow under load
Defensive patterns
Strategy: retry
Try / catch
ok, err := deployment.CheckIfTaskQueuesHavePollers(ctx, ...)
if err != nil {
var svcErr *serviceerror.Unavailable
if errors.As(err, &svcErr) { return retryable(err) } // transient, let activity retry
return err
} Prevention
- Keep activity retry policies with backoff for DescribeTaskQueue calls
- Monitor frontend availability; task queue describes fail during outages
- Ensure AWS credentials/region are resolvable where signing-based ES or IAM auth is used
When it happens
Trigger: DescribeTaskQueue failing (timeout, service unavailable, namespace not found, permission denied) while the version checking activity evaluates reachability of a deployment's task queues.
Common situations: Frontend/history outage or overload; task queue name from a stale/typo'd Build ID; namespace deleted or auth token expired; long DescribeTaskQueue latency hitting activity timeouts.
Related errors
- bucket not found
- page size to read history tasks must be positive
- history task from queue has nil blob
- enqueue task request task is nil
- queue already exists
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/f5f7c5073c92ff9f.
Report an issue: GitHub.