{"record":{"id":"08cf72e86e3d0dc9","repo":"juicedata/juicefs","slug":"delete-delayed-slice-d-affected-d-rows","errorCode":null,"errorMessage":"delete delayed slice %d affected %d rows","messagePattern":"delete delayed slice (.+?) affected (.+?) rows","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/meta/sql.go","lineNumber":4087,"sourceCode":"\t\t\tm.decodeDelayedSlices(del.Slices, &ss)\n\t\t\tclean, err := scan(ss, del.Deleted)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !clean {\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\t// Deleting the delayed row claims cleanup; rollback restores it on failure.\n\t\t\taffected, err := tx.Delete(&delslices{Id: del.Id})\n\t\t\tif err != nil {\n\t\t\t\treturn errors.Wrapf(err, \"claim delayed slice %d\", del.Id)\n\t\t\t}\n\t\t\tif affected == 0 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif affected != 1 {\n\t\t\t\treturn fmt.Errorf(\"delete delayed slice %d affected %d rows\", del.Id, affected)\n\t\t\t}\n\t\t\tfor _, s := range ss {\n\t\t\t\tif _, e := tx.Exec(m.sqlConv(\"update chunk_ref set refs=refs-1 where chunkid=? AND size=?\"), s.Id, s.Size); e != nil {\n\t\t\t\t\treturn e\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.genLog(ctx, tx, time.Now().UnixNano(), \"CLEANUP_TRASH_SLICES(%d,%d)\", del.Id, del.Deleted)\n\t\t\tclaimed = true\n\t\t\treturn nil\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif claimed {\n\t\t\tfor _, s := range ss {\n\t\t\t\tvar ref = sliceRef{Id: s.Id}\n\t\t\t\terr := m.simpleTxn(ctx, func(tx *xorm.Session) error {\n\t\t\t\t\tok, err := tx.Get(&ref)","sourceCodeStart":4069,"sourceCodeEnd":4105,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/meta/sql.go#L4069-L4105","documentation":"Returned inside the delayed-slice cleanup transaction when deleting the delslices row affects an unexpected number of rows (not 0 or 1). A non-unit affected count means concurrent cleanup raced in an unexpected way, so the txn aborts to keep refcounts consistent.","triggerScenarios":"Thrown at pkg/meta/sql.go:4087 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry; the competing cleanup usually completes and the row disappears","Recurring occurrences: check for multiple GC instances running against the same volume"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}