From fd9f899f0b597e36b6ae7d157633bff3cf29c83f Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Sun, 26 Jan 2025 17:35:14 +0800 Subject: [PATCH] pkg: avoid make channel every time (#9009) (#9027) close tikv/pd#9004 Signed-off-by: ti-chi-bot Signed-off-by: Ryan Leung Co-authored-by: Ryan Leung Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com> --- server/grpc_service.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server/grpc_service.go b/server/grpc_service.go index 66924f977d2..535b5f31224 100644 --- a/server/grpc_service.go +++ b/server/grpc_service.go @@ -227,13 +227,18 @@ type tsoRequest struct { } func (s *GrpcServer) dispatchTSORequest(ctx context.Context, request *tsoRequest, forwardedHost string, doneCh <-chan struct{}, errCh chan<- error) { - tsoRequestChInterface, loaded := s.tsoDispatcher.LoadOrStore(forwardedHost, make(chan *tsoRequest, maxMergeTSORequests)) + val, loaded := s.tsoDispatcher.Load(forwardedHost) + if !loaded { + val = make(chan *tsoRequest, maxMergeTSORequests) + val, loaded = s.tsoDispatcher.LoadOrStore(forwardedHost, val) + } + reqCh := val.(chan *tsoRequest) if !loaded { tsDeadlineCh := make(chan deadline, 1) - go s.handleDispatcher(ctx, forwardedHost, tsoRequestChInterface.(chan *tsoRequest), tsDeadlineCh, doneCh, errCh) + go s.handleDispatcher(ctx, forwardedHost, reqCh, tsDeadlineCh, doneCh, errCh) go watchTSDeadline(ctx, tsDeadlineCh) } - tsoRequestChInterface.(chan *tsoRequest) <- request + reqCh <- request } func (s *GrpcServer) handleDispatcher(ctx context.Context, forwardedHost string, tsoRequestCh <-chan *tsoRequest, tsDeadlineCh chan<- deadline, doneCh <-chan struct{}, errCh chan<- error) {