vitessio/vitess · error

throttler: %v does not exist

Error message

throttler: %v does not exist

What it means

Manager.GetConfiguration returns configuration for a named throttler; if the name is not present in the registry, it cannot return any configuration. Empty name returns configs for all throttlers instead.

Source

Thrown at go/vt/throttler/manager.go:131

	defer m.mu.Unlock()

	for _, t := range m.throttlers {
		t.SetMaxRate(rate)
	}
	return m.throttlerNamesLocked()
}

// GetConfiguration implements the "Manager" interface.
func (m *managerImpl) GetConfiguration(throttlerName string) (map[string]*throttlerdatapb.Configuration, error) {
	m.mu.Lock()
	defer m.mu.Unlock()

	configurations := make(map[string]*throttlerdatapb.Configuration)

	if throttlerName != "" {
		t, ok := m.throttlers[throttlerName]
		if !ok {
			return nil, fmt.Errorf("throttler: %v does not exist", throttlerName)
		}
		configurations[throttlerName] = t.GetConfiguration()
		return configurations, nil
	}

	for name, t := range m.throttlers {
		configurations[name] = t.GetConfiguration()
	}
	return configurations, nil
}

// UpdateConfiguration implements the "Manager" interface.
func (m *managerImpl) UpdateConfiguration(throttlerName string, configuration *throttlerdatapb.Configuration, copyZeroValues bool) ([]string, error) {
	m.mu.Lock()
	defer m.mu.Unlock()

	// Note: The calls to t.UpdateConfiguration() below return no error but the
	// called protobuf library functions may panic. This is fine because the

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Verify the exact throttler name (keyspace/cell format) used at registration
  2. Run GetConfiguration with empty name to list all registered throttler names
  3. Retry against the correct vttablet/cell that hosts the throttler
  4. Fix any name typos in the tooling calling ThrottlerGetConfiguration

Example fix

// before
mgr.GetConfiguration(ctx, "commerce0", nil)
// after
mgr.GetConfiguration(ctx, "commerce/0", nil) // correct name
Defensive patterns

Strategy: type-guard

Validate before calling

names, err := manager.GetConfiguration(ctx, "", nil)
if err != nil { return err }
if _, ok := names[wantedName]; !ok {
    return fmt.Errorf("%s not registered here", wantedName)
}

Type guard

func throttlerExists(name string, all map[string]*throttlerdatapb.Configuration) bool {
    _, ok := all[name]
    return ok
}

Try / catch

cfg, err := manager.GetConfiguration(ctx, name, nil)
if err != nil {
    if strings.Contains(err.Error(), "does not exist") {
        return retryOnOtherCell(name)
    }
    return err
}

Prevention

When it happens

Trigger: Calling GetConfiguration(throttlerName) via the throttler RPC/ThrottlerGetConfiguration with a throttler name that is not registered on that manager.

Common situations: Client targets the wrong cell/vttablet (throttler name includes keyspace/cell), stale name after reshard, or typo in the throttler name in the get-configuration command.

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/4b5c8019402bd3d9. Report an issue: GitHub.