From b8bdb43e9528c32780a3ab1ff7535bfb79f6e6f5 Mon Sep 17 00:00:00 2001 From: dxinli Date: Wed, 20 Nov 2024 22:53:59 +0800 Subject: [PATCH] fix: etcd component init IsHealth check Get operation context set timeout --- backend/gopkgs/components/etcdx/etcd.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/gopkgs/components/etcdx/etcd.go b/backend/gopkgs/components/etcdx/etcd.go index 266e92f..5d49fef 100644 --- a/backend/gopkgs/components/etcdx/etcd.go +++ b/backend/gopkgs/components/etcdx/etcd.go @@ -7,8 +7,11 @@ import ( "github.com/go-kratos/kratos/v2/log" clientv3 "go.etcd.io/etcd/client/v3" "sync" + "time" ) +const healthCheckTimeout = 3 * time.Second + var ( globalClientMap = sync.Map{} globalConfigMap = make(components.ConfigMap[*Config]) @@ -67,7 +70,9 @@ func GetClient(ctx context.Context, keys ...string) *clientv3.Client { func IsHealth() (err error) { globalClientMap.Range(func(key, value interface{}) bool { client := value.(*clientv3.Client) - _, err = client.Get(context.Background(), "health") + timeoutCtx, cancelFunc := context.WithTimeout(context.Background(), healthCheckTimeout) + defer cancelFunc() + _, err = client.Get(timeoutCtx, "health") if err != nil { log.Errorf("etcd health check failed, client key: %s", key) return false