juicedata/juicefs · error

failed to clean up sid %d

Error message

failed to clean up sid %d

What it means

Returned by kvMeta cleanup when one or more cleanup steps for a stale session failed (locks, sustained inodes); individual failures are logged as warnings and this aggregate error signals the session was not fully reaped and cleanup should be retried later.

Source

Thrown at pkg/meta/tkv.go:752

		logger.Warnf("Scan plock with sid %d: %s", sid, err)
		fail = true
	}

	if keys, err := m.scanKeys(ctx, m.fmtKey("SS", sid)); err == nil {
		for _, key := range keys {
			inode := m.decodeInode(key[10:]) // "SS" + sid
			if err = m.doDeleteSustainedInode(sid, inode); err != nil {
				logger.Warnf("Delete sustained inode %d of sid %d: %s", inode, sid, err)
				fail = true
			}
		}
	} else {
		logger.Warnf("Scan sustained with sid %d: %s", sid, err)
		fail = true
	}

	if fail {
		return fmt.Errorf("failed to clean up sid %d", sid)
	} else {
		if !m.getFormat().ChangeLog {
			return m.deleteKeys(m.sessionKey(sid), m.legacySessionKey(sid), m.sessionInfoKey(sid))
		}
		return m.txn(ctx, func(tx *kvTxn) error {
			tx.delete(m.sessionKey(sid))
			tx.delete(m.legacySessionKey(sid))
			tx.delete(m.sessionInfoKey(sid))
			m.genLog(tx, time.Now(), "CLEANSESSION(%d)", sid)
			return nil
		})
	}
}

func (m *kvMeta) doFindStaleSessions(limit int) ([]uint64, error) {
	ctx := Background()
	vals, err := m.scanValues(ctx, m.fmtKey("SE"), limit, func(k, v []byte) bool {
		return m.parseInt64(v) < time.Now().Unix()

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Retry later; the next cleanup pass will re-attempt the failed steps
  2. Address the logged per-key failures (KV store errors) if persistent
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at pkg/meta/tkv.go:752 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/6cbf9ccc5415ff5f. Report an issue: GitHub.