vitessio/vitess · error
err.Error()
Error message
err.Error()
What it means
showThrottlerLog calls m.log(name) to fetch the throttler's log entries; if that returns an error, the handler responds 500 with err.Error() verbatim. This means the manager failed to retrieve the log for a throttler that was just verified to exist.
Source
Thrown at go/vt/throttler/throttlerlogz.go:137
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))
}
for _, r := range results {
// Color based on max(tested state, new state).
state := r.TestedState
if stateGreater(r.NewState, state) {
state = r.NewState
}
var colorLevel string
switch state {
case stateIncreaseRate:
colorLevel = "low"View on GitHub (pinned to 01a25a7d17)
Solutions
- Retry the request — transient races during throttler registration/unregistration usually resolve.
- Re-list names via /throttlerz to confirm the throttler still exists, then retry.
- Check tablet logs around the failure for the underlying m.log error detail.
- If persistent, restart/re-check the tablet or file a bug with the verbatim error text.
Defensive patterns
Strategy: retry
Try / catch
for attempt := 0; attempt < 3; attempt++ {
resp, err := http.Get(logzURL)
if err == nil && resp.StatusCode == http.StatusOK {
// success
resp.Body.Close()
return
}
if resp != nil {
resp.Body.Close()
}
time.Sleep(200 * time.Millisecond << attempt)
} Prevention
- Retry throttler logz fetches with backoff — teardown races are transient.
- Confirm via /throttlerz that the throttler still exists after a 500.
- Correlate with tablet logs for the underlying m.log error.
When it happens
Trigger: GET /throttlerlogz/<valid-name> where m.log(name) errors — e.g. internal state race where the throttler was removed between the existence check and the log fetch, or the log lookup key is inconsistent.
Common situations: Race with throttler shutdown/unregistration on a busy tablet; querying a tablet while it is shutting down or mid-workflow teardown; internal manager inconsistency.
Related errors
- invalid /throttlerlogz path
- throttler not found
- invalid /throttlerz path
- --enable and --disable are mutually exclusive
- unexpected: there are no tables to copy
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/334b4994c6f1c7b0.
Report an issue: GitHub.