{"record":{"id":"feeb297cce9eed5d","repo":"hashicorp/nomad","slug":"error-deleting-unexpected-task-bucket-q-v","errorCode":null,"errorMessage":"error deleting unexpected task bucket %q: %v","messagePattern":"error deleting unexpected task bucket %q: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"client/state/upgrade.go","lineNumber":271,"sourceCode":"\treturn nil\n}\n\n// upgradeTaskBucket iterates over keys in a task bucket, deleting invalid keys\n// and returning the 0.8 version of the state.\nfunc upgradeTaskBucket(logger hclog.Logger, bkt *bbolt.Bucket) (*taskRunnerState08, error) {\n\tsimpleFound := false\n\tvar trState taskRunnerState08\n\n\tcur := bkt.Cursor()\n\tfor k, v := cur.First(); k != nil; k, v = cur.Next() {\n\t\tif v == nil {\n\t\t\t// value is nil: delete unexpected bucket\n\t\t\tlogger.Warn(\"deleting unexpected task state bucket\",\n\t\t\t\t\"bucket\", string(k),\n\t\t\t)\n\n\t\t\tif err := bkt.DeleteBucket(k); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error deleting unexpected task bucket %q: %v\", string(k), err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif !bytes.Equal(k, []byte(\"simple-all\")) {\n\t\t\t// value is non-nil: delete unexpected entry\n\t\t\tlogger.Warn(\"deleting unexpected task state entry\",\n\t\t\t\t\"key\", string(k), \"value_bytes\", len(v),\n\t\t\t)\n\n\t\t\tif err := cur.Delete(); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error delting unexpected task key %q: %v\", string(k), err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Decode simple-all\n\t\tsimpleFound = true","sourceCodeStart":253,"sourceCodeEnd":289,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/client/state/upgrade.go#L253-L289","documentation":"While upgrading a 0.8 task bucket, upgradeTaskBucket iterates keys; any nested bucket (nil value) other than expected entries is unexpected state and is deleted. If boltdd's DeleteBucket fails on that nested bucket, the whole task upgrade returns this wrapped error and the task's state is dropped.","triggerScenarios":"A task sub-bucket inside an alloc's task bucket contains a nested bucket (v == nil) during UpgradeAllocs, and DeleteBucket on it fails (corrupt page, key not a bucket, tx inconsistency).","commonSituations":"Corrupted or hand-modified 0.8 client boltdb state being migrated to 0.9+; leftover buckets from unofficial Nomad versions or interrupted writes.","solutions":["Stop nomad, back up the data_dir, and remove/restore the affected client state file","Inspect the wrapped %v error to see the boltdd failure cause and repair or discard that alloc's state","Let the agent re-sync task state from the Nomad servers after cleaning state","Report upstream with the bucket key and wrapped error if reproducible"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Go: recover by cleaning client state on wrapped delete failure\nif err := runMigration(); err != nil {\n    var wrapped *fmt.Errorf\n    if errors.As(err, &wrapped) && strings.Contains(err.Error(), \"unexpected task bucket\") {\n        logger.Warn(\"corrupt nested bucket; restore backup or clear client state\", \"err\", err)\n    }\n}","preventionTips":["Never manually edit the client boltdb state file","Back up state.db before upgrading","Upgrade via supported sequential Nomad versions","Monitor for unclean shutdowns that leave partial buckets"],"tags":["nomad","boltdb","state-migration"],"backgroundTag":"boltdb-bucket-delete-failed","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}