vitessio/vitess · error
--buffer-keyspace-shards=%v also requires that --enable_buff
Error message
--buffer-keyspace-shards=%v also requires that --enable_buffer is set
What it means
Listing keyspace/shards in --buffer-keyspace-shards only makes sense when buffering is actually enabled with --enable_buffer. verifyFlags rejects a non-empty --buffer-keyspace-shards when buffering is disabled, because the list would silently do nothing.
Source
Thrown at go/vt/vtgate/buffer/flags.go:84
if bufferWindow < 1*time.Second {
return fmt.Errorf("--buffer-window must be >= 1s (specified value: %v)", bufferWindow)
}
if bufferWindow > bufferMaxFailoverDuration {
return fmt.Errorf("--buffer-window must be <= --buffer-max-failover-duration: %v vs. %v", bufferWindow, bufferMaxFailoverDuration)
}
if bufferSize < 1 {
return fmt.Errorf("--buffer-size must be >= 1 (specified value: %d)", bufferSize)
}
if bufferMinTimeBetweenFailovers < 1*time.Second {
return fmt.Errorf("--buffer-min-time-between-failovers must be >= 1s (specified value: %v)", bufferMinTimeBetweenFailovers)
}
if bufferDrainConcurrency < 1 {
return fmt.Errorf("--buffer-drain-concurrency must be >= 1 (specified value: %d)", bufferDrainConcurrency)
}
if bufferKeyspaceShards != "" && !bufferEnabled {
return fmt.Errorf("--buffer-keyspace-shards=%v also requires that --enable_buffer is set", bufferKeyspaceShards)
}
if bufferEnabled && bufferEnabledDryRun && bufferKeyspaceShards == "" {
return errors.New("both the dry-run mode and actual buffering is enabled. To avoid ambiguity, keyspaces and shards for actual buffering must be explicitly listed in --buffer-keyspace-shards")
}
keyspaces, shards := keyspaceShardsToSets(bufferKeyspaceShards)
for s := range shards {
keyspace, _, err := topoproto.ParseKeyspaceShard(s)
if err != nil {
return err
}
if keyspaces[keyspace] {
return fmt.Errorf("--buffer-keyspace-shards has overlapping entries (keyspace only vs. keyspace/shard): %v vs. %v Please remove one or the other", keyspace, s)
}
}
return nil
}View on GitHub (pinned to 01a25a7d17)
Solutions
- Add --enable_buffer so the keyspace/shard list takes effect
- Or remove --buffer-keyspace-shards if buffering is intentionally disabled
- Check flag-precedence automation that may strip --enable_buffer while keeping other buffer flags
Example fix
// before vtgate --buffer-keyspace-shards=commerce/-80 // after vtgate --enable_buffer --buffer-keyspace-shards=commerce/-80
Defensive patterns
Strategy: validation
Validate before calling
if bufferKeyspaceShards != "" && !bufferEnabled {
return fmt.Errorf("--buffer-keyspace-shards=%v also requires --enable_buffer", bufferKeyspaceShards)
} Prevention
- When disabling buffering, remove all related flags, not just --enable_buffer
- Keep buffer flags in one config block toggled together
- Grep deploy manifests for orphaned buffer flags after config changes
When it happens
Trigger: Starting vtgate with --buffer-keyspace-shards=ks1/-shard1 but without --enable_buffer (or with it explicitly false).
Common situations: Disabling buffering during an incident by removing --enable_buffer but leaving the shard list; stale configs where the enable flag was dropped but the list kept.
Understand the failure class
Background: "unknown output mode", "invalid value for flag", "expects true/false": fixing invalid flag value errors in CLI tools — this error's family across 24 libraries.
Related errors
- --buffer-window must be >= 1s (specified value: %v)
- --buffer-window must be <= --buffer-max-failover-duration: %
- --buffer-size must be >= 1 (specified value: %d)
- --buffer-min-time-between-failovers must be >= 1s (specified
- --buffer-drain-concurrency must be >= 1 (specified value: %d
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/a7ab97d55d43cd33.
Report an issue: GitHub.