hashicorp/nomad · error

failed to encode task stats: %v

Error message

failed to encode task stats: %v

What it means

In the driver plugin server's TaskStats streaming handler, converting a driver's statistics frame to protobuf failed, so the stats stream is aborted mid-flight with the marshaling error wrapped.

Source

Thrown at plugins/drivers/server.go:283

	ch, err := b.impl.TaskStats(srv.Context(), req.TaskId, interval)
	if err != nil {
		if rec, ok := err.(structs.Recoverable); ok {
			st := status.New(codes.FailedPrecondition, rec.Error())
			st, err := st.WithDetails(&sproto.RecoverableError{Recoverable: rec.IsRecoverable()})
			if err != nil {
				// If this error, it will always error
				panic(err)
			}
			return st.Err()
		}
		return err
	}

	for stats := range ch {
		pb, err := TaskStatsToProto(stats)
		if err != nil {
			return fmt.Errorf("failed to encode task stats: %v", err)
		}

		if err = srv.Send(&proto.TaskStatsResponse{Stats: pb}); err == io.EOF {
			break
		} else if err != nil {
			return err
		}

	}

	return nil
}

func (b *driverPluginServer) ExecTask(ctx context.Context, req *proto.ExecTaskRequest) (*proto.ExecTaskResponse, error) {
	timeout, err := ptypes.Duration(req.Timeout)
	if err != nil {
		return nil, err
	}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Check the driver's TaskStats implementation emits well-formed stats structs
  2. Fix the field that fails TaskStatsToProto conversion (e.g. malformed resource usage data)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugins/drivers/server.go:283 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/54ce4c703e1ec4bc. Report an issue: GitHub.