t8y2/dbx · error

Unsupported createMode: %s

Error message

Unsupported createMode: %s

What it means

createFlags maps a createMode string to ZooKeeper node flags (ephemeral/sequential bits). Any mode string beyond the four known combinations (persistent, ephemeral, persistent_sequential, ephemeral_sequential) results in this error, so createNode refuses to guess node semantics.

Source

Thrown at agents/drivers/zookeeper/operations.go:181

	}
	result := putResult(stat)
	result["key"] = createdPath
	result["createdKey"] = createdPath
	return result, nil
}

func createFlags(mode string) (int32, error) {
	switch mode {
	case "", "persistent":
		return 0, nil
	case "ephemeral":
		return zk.FlagEphemeral, nil
	case "persistent_sequential":
		return zk.FlagSequence, nil
	case "ephemeral_sequential":
		return zk.FlagEphemeral | zk.FlagSequence, nil
	default:
		return 0, fmt.Errorf("Unsupported createMode: %s", mode)
	}
}

func createParents(client znodeClient, parent string) error {
	if parent == "/" {
		return nil
	}
	current := ""
	for _, segment := range strings.Split(strings.Trim(parent, "/"), "/") {
		current = childPath(current, segment)
		exists, _, err := client.Exists(current)
		if err != nil {
			return err
		}
		if exists {
			continue
		}
		if _, err := client.Create(current, nil, 0); err != nil && err != zk.ErrNodeExists {

View on GitHub (pinned to c0390bff16)

Solutions

  1. Use one of: "persistent", "ephemeral", "persistent_sequential", "ephemeral_sequential".
  2. Normalize user input to lowercase and replace hyphens with underscores before passing it in.
  3. Add a whitelist validation in the caller/UI so invalid modes never reach createNode.
  4. Check the switch in createFlags (operations.go:181) for the authoritative list.

Example fix

// before
createFlags("ephemeral-sequential") // hyphen rejected
// after
createFlags("ephemeral_sequential")
Defensive patterns

Strategy: validation

Validate before calling

var validCreateModes = map[string]bool{
	"persistent": true,
	"ephemeral": true,
	"persistent_sequential": true,
	"ephemeral_sequential": true,
}
func validCreateMode(m string) bool { return validCreateModes[strings.ToLower(strings.ReplaceAll(m, "-", "_"))] }

Try / catch

flags, err := createFlags(mode)
if err != nil {
	if strings.HasPrefix(err.Error(), "Unsupported createMode:") {
		return nil, fmt.Errorf("createMode %q rejected; use persistent|ephemeral|persistent_sequential|ephemeral_sequential", mode)
	}
	return nil, err
}

Prevention

When it happens

Trigger: Calling createNode (or the create RPC path) with a createMode like "ephemeral-sequential" (hyphen), "seq", or any unrecognized token — casing and spelling must match exactly.

Common situations: User-supplied mode strings from config or CLI flags, drivers/tools from other ecosystems using different naming conventions (e.g. PERSISTENT_SEQUENTIAL uppercase), or typos in test fixtures.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/f1cbb629cf7ffd43. Report an issue: GitHub.