juicedata/juicefs · error
open %s: %s
Error message
open %s: %s
What it means
Returned by produceFromList in `juicefs sync` when the --files-from list file cannot be opened. The wrapped error is the os.Open failure — missing file or unreadable path — so the object list to copy cannot be read.
Source
Thrown at pkg/sync/sync.go:1867
logger.Debugf("Restore prefix %q from checkpoint, restoreObjs: %d, listDone: %v", prefix, len(objs), listDone)
for _, obj := range objs {
incrTotal(1)
tasks <- obj
}
if !listDone {
if err := startProducer(tasks, src, dst, prefix, listDepth, config, checkpointMgr); err != nil {
logger.Errorf("Failed to restart producer for prefix %s: %v", prefix, err)
failed.Increment()
}
}
return true
}
func produceFromList(tasks chan<- object.Object, src, dst object.ObjectStorage, config *Config, checkpointMgr *CheckpointManager) error {
f, err := os.Open(config.FilesFrom)
if err != nil {
return fmt.Errorf("open %s: %s", config.FilesFrom, err)
}
defer f.Close()
prefixs := make(chan string, config.Threads)
var wg sync.WaitGroup
wg.Add(config.Threads)
for i := 0; i < config.Threads; i++ {
go func() {
defer wg.Done()
for key := range prefixs {
if !strings.HasSuffix(key, "/") {
if err := produceSingleObject(tasks, src, dst, key, config, checkpointMgr); err == nil {
listedPrefix.Increment()
continue
} else if errors.Is(err, errDirSuffix) {
key += "/"
} else if os.IsNotExist(err) {
atomic.AddInt64(&ignoreFiles, 1)View on GitHub (pinned to c9a67b23e8)
Solutions
- Check the --files-from path exists and is readable
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pkg/sync/sync.go:1867 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/cfb97f121fe8c034.
Report an issue: GitHub.