juicedata/juicefs · error

delimiter should be a rune but now is %s

Error message

delimiter should be a rune but now is %s

What it means

Returned by swiftOSS.List when the delimiter parameter is a string of zero or multiple runes. The Swift API takes a single rune delimiter for common-prefix listing, so any multi-character delimiter is rejected before the request is sent.

Source

Thrown at pkg/object/swift.go:90

func (s *swiftOSS) Delete(ctx context.Context, key string, getters ...AttrGetter) error {
	err := s.conn.ObjectDelete(ctx, s.container, key)
	if err != nil && errors.Is(err, swift.ObjectNotFound) {
		err = nil
	}
	return err
}

func (s *swiftOSS) List(ctx context.Context, prefix, marker, token, delimiter string, limit int64, followLink bool) ([]Object, bool, string, error) {
	if limit > 10000 {
		limit = 10000
	}
	var delimiter_ rune
	if delimiter != "" {
		if len([]rune(delimiter)) == 1 {
			delimiter_ = []rune(delimiter)[0]
		} else {
			return nil, false, "", fmt.Errorf("delimiter should be a rune but now is %s", delimiter)
		}
	}
	objects, err := s.conn.Objects(ctx, s.container, &swift.ObjectsOpts{Prefix: prefix, Marker: marker, Delimiter: delimiter_, Limit: int(limit)})
	if err != nil {
		return nil, false, "", err
	}
	var objs = make([]Object, len(objects))
	for i, o := range objects {
		// https://docs.openstack.org/swift/latest/api/pseudo-hierarchical-folders-directories.html
		if delimiter != "" && o.PseudoDirectory {
			objs[i] = &obj{o.SubDir, 0, time.Unix(0, 0), true, "", ""}
		} else {
			objs[i] = &obj{o.Name, o.Bytes, o.LastModified, strings.HasSuffix(o.Name, "/"), "", ""}
		}
	}
	return generateListResult(objs, limit)
}

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Use a single-character delimiter (typically '/') for hierarchical listing
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/object/swift.go:90 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/8f13bcd025669833. Report an issue: GitHub.