{"record":{"id":"aa17abb8268c4f22","repo":"juicedata/juicefs","slug":"list-s-with-delimiter-s","errorCode":null,"errorMessage":"list %s with delimiter: %s","messagePattern":"list (.+?) with delimiter: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/sync/sync.go","lineNumber":2066,"sourceCode":"\n\tstartAfter := checkpointMgr.GetLastListedKey(prefix)\n\n\tvar onChildPrefix func(string)\n\tif checkpointMgr != nil {\n\t\tonChildPrefix = func(key string) {\n\t\t\tif (len(config.rules) == 0 || matchLeveledPath(config.rules, key)) &&\n\t\t\t\tkey >= config.Start &&\n\t\t\t\t(config.End == \"\" || key <= config.End) {\n\t\t\t\tcheckpointMgr.RegisterChildPrefix(key, listDepth-1)\n\t\t\t}\n\t\t}\n\t}\n\n\tsrckeys, err := listCommonPrefix(src, prefix, commonPrefix, !config.Links, startAfter, onChildPrefix)\n\tif err == utils.ErrNotSUP {\n\t\treturn startSingleProducer(tasks, src, dst, prefix, config, checkpointMgr)\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"list %s with delimiter: %s\", src, err)\n\t}\n\tvar dcp chan object.Object\n\tif config.DeleteDst {\n\t\tdcp = commonPrefix // search common prefix in dst\n\t}\n\tvar dstkeys <-chan object.Object\n\tif config.ForceUpdate && !config.DeleteDst {\n\t\tt := make(chan object.Object)\n\t\tclose(t)\n\t\tdstkeys = t\n\t} else {\n\t\tdstkeys, err = listCommonPrefix(dst, prefix, dcp, !config.Links, startAfter, nil)\n\t\tif err == utils.ErrNotSUP {\n\t\t\treturn startSingleProducer(tasks, src, dst, prefix, config, checkpointMgr)\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"list %s with delimiter: %s\", dst, err)\n\t\t}\n\t}","sourceCodeStart":2048,"sourceCodeEnd":2084,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/sync/sync.go#L2048-L2084","documentation":"Returned by the delimiter-based producer in `juicefs sync` when listCommonPrefixes fails for the prefix. It wraps the store's listing error; when the error is ErrNotSUP the code falls back to the single producer, otherwise the producer aborts.","triggerScenarios":"Thrown at pkg/sync/sync.go:2066 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check source store credentials and listing permissions","Retry sync; transient list API failures are common on some backends"],"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-14T00:17:10.932Z"}