juicedata/juicefs · error
invalid range %q: end must be greater than start
Error message
invalid range %q: end must be greater than start
What it means
parseRanges requires end > start for every range; if end <= start it returns 'invalid range %q: end must be greater than start'. Zero-length or inverted ranges are rejected because they select no bytes.
Source
Thrown at pkg/vfs/fill.go:238
}
func parseRanges(spec string) ([]ByteRange, error) {
var ranges []ByteRange
for _, part := range strings.Split(spec, ";") {
sep := strings.IndexByte(part, '-')
if sep < 0 {
return nil, fmt.Errorf("invalid range %q", part)
}
start, err := strconv.ParseUint(part[:sep], 10, 64)
if err != nil {
return nil, fmt.Errorf("invalid range %q: %w", part, err)
}
end, err := strconv.ParseUint(part[sep+1:], 10, 64)
if err != nil {
return nil, fmt.Errorf("invalid range %q: %w", part, err)
}
if end <= start {
return nil, fmt.Errorf("invalid range %q: end must be greater than start", part)
}
ranges = append(ranges, ByteRange{Start: start, End: end})
}
sort.Slice(ranges, func(i, j int) bool { return ranges[i].Start < ranges[j].Start })
merged := ranges[:0]
for _, r := range ranges {
if n := len(merged); n > 0 && r.Start <= merged[n-1].End {
if r.End > merged[n-1].End {
merged[n-1].End = r.End
}
continue
}
merged = append(merged, r)
}
return merged, nil
}
func (c *CacheFiller) resolve(ctx meta.Context, p string, inode *Ino, attr *Attr) syscall.Errno {View on GitHub (pinned to c9a67b23e8)
Solutions
- Ensure every range satisfies end > start
- Swap start/end if accidentally reversed
- Remove empty ranges from the spec
Example fix
// before "100-100" // after "100-200"
Defensive patterns
Strategy: validation
Validate before calling
s, _ := strconv.ParseUint(a, 10, 64); e, _ := strconv.ParseUint(b, 10, 64)
if e <= s { return fmt.Errorf("range %s-%s invalid", a, b) } Try / catch
if _, err := parseRanges(spec); err != nil { return fmt.Errorf("fill spec: %w", err) } Prevention
- Assert end > start when generating ranges programmatically
- Drop empty ranges before serializing specs
- Review off-by-one math around chunk sizes
When it happens
Trigger: Specs like '100-100' or '200-100' passed to the fill target parser.
Common situations: Off-by-one mistakes when computing offsets; swapped start/end after editing; empty ranges generated programmatically.
Related errors
- invalid range %q
- invalid range %q: %w
- illegal value for parameter 'ranger-service': " + serviceNam
- No sources given
- Source file " + normalizePath(src) + " is no
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/e600b7fcd58a88d0.
Report an issue: GitHub.