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

  1. Retry the request — transient races during throttler registration/unregistration usually resolve.
  2. Re-list names via /throttlerz to confirm the throttler still exists, then retry.
  3. Check tablet logs around the failure for the underlying m.log error detail.
  4. 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

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


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