hashicorp/nomad · error

failed to initialize process manager: %w

Error message

failed to initialize process manager: %w

What it means

NewClient returns this when proclib.New fails to construct the process wranglers that manage external plugin driver processes. The wranglers need a valid usable-core count from the detected topology and a logger; construction failure aborts client startup.

Source

Thrown at client/client.go:499

	// Create the dynamic workload users pool
	c.users = dynamic.New(&dynamic.PoolConfig{
		MinUGID: cfg.Users.MinDynamicUser,
		MaxUGID: cfg.Users.MaxDynamicUser,
	})

	// Create the cpu core partition manager
	c.partitions = cgroupslib.GetPartition(c.logger.Named("partitions"),
		c.topology.UsableCores(),
	)

	// Create the process wranglers
	wranglers, err := proclib.New(&proclib.Configs{
		UsableCores: c.topology.UsableCores(),
		Logger:      c.logger.Named("proclib"),
	})
	if err != nil {
		return nil, fmt.Errorf("failed to initialize process manager: %w", err)
	}
	c.wranglers = wranglers

	// Build the allow/denylists of drivers.
	// COMPAT(1.0) uses inclusive language. white/blacklist are there for backward compatible reasons only.
	allowlistDrivers := cfg.ReadStringListToMap("driver.allowlist", "driver.whitelist")
	blocklistDrivers := cfg.ReadStringListToMap("driver.denylist", "driver.blacklist")

	// Setup the csi manager
	csiConfig := &csimanager.Config{
		Logger:                c.logger,
		DynamicRegistry:       c.dynamicRegistry,
		UpdateNodeCSIInfoFunc: c.batchNodeUpdates.updateNodeFromCSI,
		TriggerNodeEvent:      c.triggerNodeEvent,
	}
	csiManager := csimanager.New(csiConfig)
	c.csimanager = csiManager
	c.pluginManagers.RegisterAndRun(csiManager.PluginManager())

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Fix the underlying topology fingerprinting issue so UsableCores > 0 (see fingerprinting failure remedies).
  2. Check cgroup CPU limits / taskset restrictions that could make the core count zero.
  3. Upgrade Nomad to get improved topology detection for constrained environments.
  4. Report to Nomad if it reproduces on normal hardware — this indicates an internal invariant violation.

Example fix

// before (container)
docker run --cpus=0 nomad agent -client  # invalid: 0 usable cores
// after
docker run --cpus=2 nomad agent -client
Defensive patterns

Strategy: validation

Validate before calling

// ensure the client will detect at least one usable core before starting
if runtime.NumCPU() == 0 || cgroupCPULimit() == 0 {
    return errors.New("zero usable CPUs detected; proclib init would fail")
}

Prevention

When it happens

Trigger: proclib.New returns an error — practically only when the proclib.Configs are invalid (e.g. UsableCores computed as 0 or negative from a failed/broken topology fingerprint).

Common situations: Environments where CPU detection yields zero usable cores (cgroup limits, restricted /sys) so downstream proclib setup cannot proceed; bug-level misconfiguration rather than user error.

Related errors


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