vitessio/vitess · info
throttler not found
Error message
throttler not found
What it means
throttlerlogzHandler checks slices.Contains(m.Throttlers(), name); if the requested throttler name is not registered in the manager, it returns 404 'throttler not found'. Each vitess process registers throttlers under specific names tied to their purpose (e.g. tablet throttlers, resharding workflows).
Source
Thrown at go/vt/throttler/throttlerlogz.go:127
func throttlerlogzHandler(w http.ResponseWriter, r *http.Request, m *managerImpl) {
// Longest supported URL: /throttlerlogz/<name>
parts := strings.SplitN(r.URL.Path, "/", 3)
if len(parts) != 3 {
http.Error(w, "invalid /throttlerlogz path", http.StatusNotFound)
return
}
name := parts[2]
if name == "" {
// If no name is given, redirect to the list of throttlers at /throttlerz.
http.Redirect(w, r, "/throttlerz", http.StatusTemporaryRedirect)
return
}
if !slices.Contains(m.Throttlers(), name) {
http.Error(w, "throttler not found", http.StatusNotFound)
return
}
showThrottlerLog(w, m, name)
}
func showThrottlerLog(w http.ResponseWriter, m *managerImpl, name string) {
results, err := m.log(name)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
logz.StartHTMLTable(w)
if _, err := io.WriteString(w, logHeaderHTML); err != nil {
panic(fmt.Sprintf("failed to execute logHeader template: %v", err))
}View on GitHub (pinned to 01a25a7d17)
Solutions
- GET /throttlerz to list the throttler names actually registered on this process and use one of those.
- Verify you are querying the correct tablet/port that owns the throttler.
- Check for typos or trailing whitespace in the name.
- If the throttler existed during a workflow, note it may have been unregistered once the workflow completed.
Example fix
// before curl http://localhost:15000/throttlerlogz/reshard-demo1 // after curl http://localhost:15000/throttlerz # find valid name curl http://localhost:15000/throttlerlogz/<name-from-list>
Defensive patterns
Strategy: fallback
Validate before calling
names, err := fetchJSON("http://localhost:15000/throttlerz")
if err != nil {
return err
}
if !slices.Contains(names, target) {
return fmt.Errorf("throttler %q not registered; available: %v", target, names)
} Prevention
- Discover throttler names via /throttlerz before querying /throttlerlogz/<name>.
- Target the tablet that actually owns the workflow's throttler.
- Trim names from config/automation output to remove stray whitespace.
- Remember throttlers for finished workflows may no longer exist.
When it happens
Trigger: GET /throttlerlogz/<name> where <name> does not match any name in m.Throttlers() — wrong name, typo, or querying a process that never created that throttler.
Common situations: Querying a vttablet that has no active resharding workflow; using a throttler name from a different tablet; name changed after a workflow finished and its throttler was removed; copy-pasted name including whitespace.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- invalid /throttlerlogz path
- err.Error()
- invalid /throttlerz path
- err.Error() (template execute failure)
- err.Error() (Fprintf write failure)
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/e543d1e618ab5b81.
Report an issue: GitHub.