juicedata/juicefs · error

invalid file size %d, data length %d, checksum length %d

Error message

invalid file size %d, data length %d, checksum length %d

What it means

Returned by openCacheFile when the on-disk file is larger than the data but the extra bytes are fewer than the expected checksum length and not a valid footer layout — the file does not match any known cache format combination of data+checksum+footer.

Source

Thrown at pkg/chunk/disk_cache_file.go:181

	}
	checksumLength := int64(((length-1)/csBlock + 1) * 4)
	extra := fi.Size() - int64(length)
	if extra < 0 {
		_ = fp.Close()
		return nil, fmt.Errorf("invalid file size %d, data length %d", fi.Size(), length)
	}
	footerOff := int64(0)
	switch {
	case extra == 0:
		level = CsNone // data only, no footer
	case extra%4 == 0:
		switch {
		case extra == checksumLength:
		case extra > checksumLength:
			footerOff = int64(length) + checksumLength
		default:
			_ = fp.Close()
			return nil, fmt.Errorf("invalid file size %d, data length %d, checksum length %d", fi.Size(), length, checksumLength)
		}
	default:
		level = CsNone
		footerOff = int64(length)
	}
	cf := &cacheFile{File: fp, length: length, csLevel: level, footerOff: footerOff, size: fi.Size()}
	return cf, nil
}

func (cf *cacheFile) ReadAt(b []byte, off int64) (n int, err error) {
	logger.Tracef("CacheFile length %d level %s, readat off %d buffer size %d", cf.length, cf.csLevel, off, len(b))
	defer func() {
		logger.Tracef("CacheFile readat returns n %d err %s", n, err)
	}()
	if cf.csLevel == CsNone || cf.csLevel == CsFull && (off != 0 || len(b) != cf.length) {
		return cf.File.ReadAt(b, off)
	}
	var rb = b     // read buffer

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Discard the malformed cache file; it will be rewritten on next caching
  2. Rule out mixed client versions using incompatible cache formats on the same dir
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at pkg/chunk/disk_cache_file.go:181 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/a3b3b720488b3a52. Report an issue: GitHub.