kubernetes/kubernetes · error

DRA driver name is empty

Error message

DRA driver name is empty

What it means

Returned by DRAPluginManager.GetPlugin() (dra_plugin_manager.go:274-277) when the caller passes an empty driverName. DRA plugins are keyed by driver name, so an empty name has no registered plugin and is treated as a programming error rather than a missing-plugin condition.

Source

Thrown at pkg/kubelet/cm/dra/plugin/dra_plugin_manager.go:276

			return true, nil
		default:
			// Log and retry for other errors.
			logger.V(3).Info("Deleting ResourceSlice failed, retrying", "fieldSelector", fieldSelector, "err", err)
			return false, nil
		}
	})
}

// GetPlugin returns a wrapper around those gRPC methods of a DRA
// driver kubelet plugin which need to be called by kubelet. The wrapper
// handles gRPC connection management and logging. Connections are reused
// across different calls.
//
// It returns an informative error message including the driver name
// with an explanation why the driver is not usable.
func (pm *DRAPluginManager) GetPlugin(driverName string) (*DRAPlugin, error) {
	if driverName == "" {
		return nil, errors.New("DRA driver name is empty")
	}
	plugin := pm.get(driverName)
	if plugin == nil {
		return nil, fmt.Errorf("DRA driver %s is not registered", driverName)
	}
	return plugin, nil
}

// get lets you retrieve a DRA DRAPlugin by name.
func (pm *DRAPluginManager) get(driverName string) *DRAPlugin {
	pm.mutex.RLock()
	defer pm.mutex.RUnlock()

	logger := klog.FromContext(pm.backgroundCtx)

	plugins := pm.store[driverName]
	if len(plugins) == 0 {
		logger.V(5).Info("No plugin registered", "driverName", driverName)

View on GitHub (pinned to b882c60b40)

Solutions

  1. Inspect the ResourceClaim allocation: kubectl get resourceclaim <name> -o jsonpath='{.status.allocation.devices.results[*].driver}' and confirm no empty values.
  2. Ensure the DRA driver writes a non-empty driver name in its allocation results.
  3. In callers, guard against empty driverName before calling GetPlugin and surface a clearer upstream error.

Example fix

// before
plugin, err := pm.GetPlugin(claimDriver)
// after
if claimDriver == "" {
    return fmt.Errorf("resource claim %s has empty DRA driver", klog.KObj(claim))
}
plugin, err := pm.GetPlugin(claimDriver)
Defensive patterns

Strategy: validation

Validate before calling

if driverName == "" {
    return errors.New("cannot resolve DRA plugin: driver name is empty")
}
plugin, err := pm.GetPlugin(driverName)

Type guard

func hasNonEmptyDriverName(results []resourceapi.DeviceRequestAllocationResult) bool {
    for _, r := range results {
        if r.Driver == "" {
            return false
        }
    }
    return true
}

Prevention

When it happens

Trigger: GetPlugin("") is called. This typically stems from a ResourceClaim/Device whose allocation result has an empty Driver field, which then flows into the plugin lookup.

Common situations: Upstream data integrity issue: a ResourceClaim allocation result with an empty driver string (should be rejected by API validation but slipped through). Local testing with hand-crafted claim objects. Race where the driver name isn't yet populated.

Related errors


AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07). Data as JSON: /api/errors/a89629fc7916e3ec. Report an issue: GitHub.