From ac02bbd33d077f8d3dbe35abd62c148125d9b5e7 Mon Sep 17 00:00:00 2001 From: sevennt Date: Wed, 28 Jan 2026 19:54:41 +0800 Subject: [PATCH] fix(CtxStoreSet): add mutext to ctxStore --- server/egrpc/interceptor.go | 9 ++++++++- server/egrpc/interceptor_test.go | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/egrpc/interceptor.go b/server/egrpc/interceptor.go index ba2fe22..a406c29 100644 --- a/server/egrpc/interceptor.go +++ b/server/egrpc/interceptor.go @@ -9,6 +9,7 @@ import ( "runtime" "strconv" "strings" + "sync" "time" sentinel "github.com/alibaba/sentinel-golang/api" @@ -246,6 +247,7 @@ func (c *Container) prometheusStreamServerInterceptor(ss grpc.ServerStream, info } type ctxStore struct { + mu sync.RWMutex kvs map[string]any } @@ -255,7 +257,9 @@ type ctxStoreStruct struct{} func CtxStoreSet(ctx context.Context, k string, v any) { skv, ok := ctx.Value(ctxStoreStruct{}).(*ctxStore) if ok { + skv.mu.Lock() skv.kvs[k] = v + skv.mu.Unlock() } } @@ -336,7 +340,10 @@ func (c *Container) defaultUnaryServerInterceptor() grpc.UnaryServerInterceptor skv, skvOk := ctx.Value(ctxStoreStruct{}).(*ctxStore) for _, key := range loggerKeys { if skvOk { - if v, ok := skv.kvs[key]; ok { + skv.mu.RLock() + v, ok := skv.kvs[key] + skv.mu.RUnlock() + if ok { fields = append(fields, elog.Any(strings.ToLower(key), v)) } } diff --git a/server/egrpc/interceptor_test.go b/server/egrpc/interceptor_test.go index 67a89c0..93cbc29 100644 --- a/server/egrpc/interceptor_test.go +++ b/server/egrpc/interceptor_test.go @@ -246,7 +246,9 @@ func TestCtxStoreSet(t *testing.T) { CtxStore := Ctx.Value(ctxStoreStruct{}).(*ctxStore) assert.NotNil(t, CtxStore) CtxStoreSet(Ctx, "hello", "world") + CtxStore.mu.RLock() storeValue, out := CtxStore.kvs["hello"] + CtxStore.mu.RUnlock() assert.Equal(t, "world", storeValue) assert.True(t, true, out) }