From 632cda452a5284d272330d02278ed4882355a7aa Mon Sep 17 00:00:00 2001 From: JmPotato Date: Thu, 30 May 2024 17:25:22 +0800 Subject: [PATCH] api/middleware: avoid redirecting when the leader remains unchanged (#8228) ref tikv/pd#7300 Avoid redirecting when the leader remains unchanged. Signed-off-by: JmPotato Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com> --- pkg/utils/apiutil/serverapi/middleware.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/utils/apiutil/serverapi/middleware.go b/pkg/utils/apiutil/serverapi/middleware.go index 18dd2f52155..1cd3d5b53d6 100755 --- a/pkg/utils/apiutil/serverapi/middleware.go +++ b/pkg/utils/apiutil/serverapi/middleware.go @@ -208,10 +208,16 @@ func (h *redirector) ServeHTTP(w http.ResponseWriter, r *http.Request, next http w.Header().Add(apiutil.XForwardedToMicroServiceHeader, "true") } else if name := r.Header.Get(apiutil.PDRedirectorHeader); len(name) == 0 { leader := h.waitForLeader(r) + // The leader has not been elected yet. if leader == nil { http.Error(w, "no leader", http.StatusServiceUnavailable) return } + // If the leader is the current server now, we can handle the request directly. + if h.s.GetMember().IsLeader() || leader.GetName() == h.s.Name() { + next(w, r) + return + } clientUrls = leader.GetClientUrls() r.Header.Set(apiutil.PDRedirectorHeader, h.s.Name()) } else {