juicedata/juicefs · error

list chunk prefixes made no progress

Error message

list chunk prefixes made no progress

What it means

Returned by walkGcChunkObjectPrefixes during garbage collection when paginated listing of chunk object prefixes keeps returning the same first key across pages — the marker/token is not advancing, so continuing would loop forever. It aborts the prefix walk to avoid an infinite GC scan, typically caused by an object store returning inconsistent listing markers.

Source

Thrown at cmd/gc.go:545

func walkGcChunkObjectPrefixes(ctx context.Context, blob object.ObjectStorage, prefix string, depth int, allowFallback bool, fn func(string) error) error {
	seenPrefixes := make(map[string]struct{})
	var marker, token string
	firstPage := true
	for {
		objs, hasMore, nextToken, err := blob.List(ctx, prefix, marker, token, "/", gcObjectListBatch, true)
		if err != nil {
			if allowFallback && firstPage {
				logger.Warnf("can't find chunk prefixes: %s, list chunks using single thread", err)
				return fn("")
			}
			return err
		}
		firstPage = false
		if len(objs) > 0 && marker != "" && objs[0].Key() == marker {
			objs = objs[1:]
		}
		if hasMore && len(objs) == 0 && nextToken == token {
			return errors.New("list chunk prefixes made no progress")
		}
		for _, obj := range objs {
			if obj == nil || obj.Key() == "" {
				continue
			}
			key := obj.Key()
			if key == prefix {
				marker = key
				continue
			}
			if obj.IsDir() {
				if _, ok := seenPrefixes[key]; !ok {
					seenPrefixes[key] = struct{}{}
					if depth == 1 {
						if err := fn(key); err != nil {
							return err
						}
					} else {

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Re-run gc; transient listing inconsistency on the object store often resolves itself
  2. Check the object storage backend for replication lag or listing API issues
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at cmd/gc.go:545 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/c535130cb851be64. Report an issue: GitHub.