{"record":{"id":"4b5c8019402bd3d9","repo":"vitessio/vitess","slug":"throttler-v-does-not-exist","errorCode":null,"errorMessage":"throttler: %v does not exist","messagePattern":"throttler: (.+?) does not exist","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/throttler/manager.go","lineNumber":131,"sourceCode":"\tdefer m.mu.Unlock()\n\n\tfor _, t := range m.throttlers {\n\t\tt.SetMaxRate(rate)\n\t}\n\treturn m.throttlerNamesLocked()\n}\n\n// GetConfiguration implements the \"Manager\" interface.\nfunc (m *managerImpl) GetConfiguration(throttlerName string) (map[string]*throttlerdatapb.Configuration, error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tconfigurations := make(map[string]*throttlerdatapb.Configuration)\n\n\tif throttlerName != \"\" {\n\t\tt, ok := m.throttlers[throttlerName]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"throttler: %v does not exist\", throttlerName)\n\t\t}\n\t\tconfigurations[throttlerName] = t.GetConfiguration()\n\t\treturn configurations, nil\n\t}\n\n\tfor name, t := range m.throttlers {\n\t\tconfigurations[name] = t.GetConfiguration()\n\t}\n\treturn configurations, nil\n}\n\n// UpdateConfiguration implements the \"Manager\" interface.\nfunc (m *managerImpl) UpdateConfiguration(throttlerName string, configuration *throttlerdatapb.Configuration, copyZeroValues bool) ([]string, error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\t// Note: The calls to t.UpdateConfiguration() below return no error but the\n\t// called protobuf library functions may panic. This is fine because the","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/throttler/manager.go#L113-L149","documentation":"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.","triggerScenarios":"Calling GetConfiguration(throttlerName) via the throttler RPC/ThrottlerGetConfiguration with a throttler name that is not registered on that manager.","commonSituations":"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.","solutions":["Verify the exact throttler name (keyspace/cell format) used at registration","Run GetConfiguration with empty name to list all registered throttler names","Retry against the correct vttablet/cell that hosts the throttler","Fix any name typos in the tooling calling ThrottlerGetConfiguration"],"exampleFix":"// before\nmgr.GetConfiguration(ctx, \"commerce0\", nil)\n// after\nmgr.GetConfiguration(ctx, \"commerce/0\", nil) // correct name","handlingStrategy":"type-guard","validationCode":"names, err := manager.GetConfiguration(ctx, \"\", nil)\nif err != nil { return err }\nif _, ok := names[wantedName]; !ok {\n    return fmt.Errorf(\"%s not registered here\", wantedName)\n}","typeGuard":"func throttlerExists(name string, all map[string]*throttlerdatapb.Configuration) bool {\n    _, ok := all[name]\n    return ok\n}","tryCatchPattern":"cfg, err := manager.GetConfiguration(ctx, name, nil)\nif err != nil {\n    if strings.Contains(err.Error(), \"does not exist\") {\n        return retryOnOtherCell(name)\n    }\n    return err\n}","preventionTips":["List all throttlers (empty-name query) before targeting one","Use the exact keyspace/cell name from registration","Route RPCs to the tablet hosting the throttler"],"tags":["throttler","configuration","lookup"],"backgroundTag":"throttler-not-found","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}