juicedata/juicefs · error

delete slice from chunk %s fail: %s, retry later

Error message

delete slice from chunk %s fail: %s, retry later

What it means

Returned by dbMeta.deleteChunk_s after the transaction deleting slices from a chunk fails; the 'retry later' wording marks it as transient — concurrent modification or DB errors abort the txn and the delayed-slice cleanup will be retried in a later GC pass.

Source

Thrown at pkg/meta/sql.go:3771

		deltas := make(map[uint64]int)
		for _, sl := range ss {
			if sl.id > 0 {
				deltas[sl.id] += -1
			}
		}
		if err = m.batchUpdateChunkRefs(s, deltas); err != nil {
			return err
		}
		c.Slices = nil
		n, err := s.Where("inode = ? AND indx = ?", inode, indx).Delete(&c)
		if err == nil && n == 0 {
			err = fmt.Errorf("chunk %d:%d changed, try restarting transaction", inode, indx)
		}
		m.genLog(Background(), s, time.Now().UnixNano(), "DELCHUNK(%d,%d)", inode, indx)
		return err
	})
	if err != nil {
		return fmt.Errorf("delete slice from chunk %s fail: %s, retry later", inode, err)
	}
	for _, s := range ss {
		if s.id == 0 {
			continue
		}
		var ref = sliceRef{Id: s.id}
		err := m.simpleTxn(Background(), func(s *xorm.Session) error {
			ok, err := s.Get(&ref)
			if err == nil && !ok {
				err = errors.New("not found")
			}
			return err
		})
		if err == nil && ref.Refs <= 0 {
			m.deleteSlice(s.id, s.size)
		}
	}
	return nil

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. No action needed for transient conflicts; GC retries automatically
  2. Persistent failures: check DB health, locks, and replication lag
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at pkg/meta/sql.go:3771 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/faecee94326afbc6. Report an issue: GitHub.