{"record":{"id":"e543d1e618ab5b81","repo":"vitessio/vitess","slug":"throttler-not-found","errorCode":null,"errorMessage":"throttler not found","messagePattern":"throttler not found","errorType":"http","errorClass":null,"httpStatus":404,"severity":"info","filePath":"go/vt/throttler/throttlerlogz.go","lineNumber":127,"sourceCode":"\nfunc throttlerlogzHandler(w http.ResponseWriter, r *http.Request, m *managerImpl) {\n\t// Longest supported URL: /throttlerlogz/<name>\n\tparts := strings.SplitN(r.URL.Path, \"/\", 3)\n\n\tif len(parts) != 3 {\n\t\thttp.Error(w, \"invalid /throttlerlogz path\", http.StatusNotFound)\n\t\treturn\n\t}\n\n\tname := parts[2]\n\tif name == \"\" {\n\t\t// If no name is given, redirect to the list of throttlers at /throttlerz.\n\t\thttp.Redirect(w, r, \"/throttlerz\", http.StatusTemporaryRedirect)\n\t\treturn\n\t}\n\n\tif !slices.Contains(m.Throttlers(), name) {\n\t\thttp.Error(w, \"throttler not found\", http.StatusNotFound)\n\t\treturn\n\t}\n\n\tshowThrottlerLog(w, m, name)\n}\n\nfunc showThrottlerLog(w http.ResponseWriter, m *managerImpl, name string) {\n\tresults, err := m.log(name)\n\tif err != nil {\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tlogz.StartHTMLTable(w)\n\n\tif _, err := io.WriteString(w, logHeaderHTML); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to execute logHeader template: %v\", err))\n\t}","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/throttler/throttlerlogz.go#L109-L145","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\ncurl http://localhost:15000/throttlerlogz/reshard-demo1\n// after\ncurl http://localhost:15000/throttlerz   # find valid name\ncurl http://localhost:15000/throttlerlogz/<name-from-list>","handlingStrategy":"fallback","validationCode":"names, err := fetchJSON(\"http://localhost:15000/throttlerz\")\nif err != nil {\n\treturn err\n}\nif !slices.Contains(names, target) {\n\treturn fmt.Errorf(\"throttler %q not registered; available: %v\", target, names)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["http","throttler","not-found","debug-endpoint"],"backgroundTag":"resource-not-found","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}