hashicorp/nomad · error

failed to decode alloc

Error message

failed to decode alloc: %v

What it means

In getAllAllocations, allocBkt.Get fails to decode the serialized allocEntry for one allocation (deserialization/corruption); the error is recorded per alloc ID in the errs map and the loop skips to the next allocation.

Solutions

  1. Check the state DB for corrupted alloc entries
  2. Re-adopt or re-run the affected allocation after repair
  3. Log and continue for remaining allocs as the code already does
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at client/state/db_bolt.go:278 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class


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

Appendix: source

Thrown at client/state/db_bolt.go:278

		// No allocs
		return allocs, errs
	}

	// Create a cursor for iteration.
	c := allocationsBkt.BoltBucket().Cursor()

	// Iterate over all the allocation buckets
	for k, _ := c.First(); k != nil; k, _ = c.Next() {
		allocID := string(k)
		allocBkt := allocationsBkt.Bucket(k)
		if allocBkt == nil {
			errs[allocID] = fmt.Errorf("missing alloc bucket")
			continue
		}

		var ae allocEntry
		if err := allocBkt.Get(allocKey, &ae); err != nil {
			errs[allocID] = fmt.Errorf("failed to decode alloc: %v", err)
			continue
		}

		// Handle upgrade path
		ae.Alloc.Canonicalize()
		ae.Alloc.Job.Canonicalize()

		allocs = append(allocs, ae.Alloc)
	}

	return allocs, errs
}

// PutAllocation stores an allocation or returns an error.
func (s *BoltStateDB) PutAllocation(alloc *structs.Allocation, opts ...WriteOption) error {
	return s.updateWithOptions(opts, func(tx *boltdd.Tx) error {
		// Retrieve the root allocations bucket
		allocsBkt, err := tx.CreateBucketIfNotExists(allocationsBucketName)

View on GitHub (pinned to 482b49bf1a)