From fb00a32b86d5aed31cb714da7372fe8f079bb431 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Tue, 16 Aug 2016 19:43:31 -0700 Subject: [PATCH] integration: fix races in global proxies --- integration/cluster_proxy.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/integration/cluster_proxy.go b/integration/cluster_proxy.go index 11c417a64..526e5c48d 100644 --- a/integration/cluster_proxy.go +++ b/integration/cluster_proxy.go @@ -17,24 +17,34 @@ package integration import ( + "sync" + "github.com/coreos/etcd/clientv3" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/proxy/grpcproxy" ) -var proxies map[*clientv3.Client]grpcAPI = make(map[*clientv3.Client]grpcAPI) +var ( + pmu sync.Mutex + proxies map[*clientv3.Client]grpcAPI = make(map[*clientv3.Client]grpcAPI) +) func toGRPC(c *clientv3.Client) grpcAPI { + pmu.Lock() + defer pmu.Unlock() + if v, ok := proxies[c]; ok { return v } - return grpcAPI{ + api := grpcAPI{ pb.NewClusterClient(c.ActiveConnection()), grpcproxy.KvServerToKvClient(grpcproxy.NewKvProxy(c)), pb.NewLeaseClient(c.ActiveConnection()), grpcproxy.WatchServerToWatchClient(grpcproxy.NewWatchProxy(c)), pb.NewMaintenanceClient(c.ActiveConnection()), } + proxies[c] = api + return api } func newClientV3(cfg clientv3.Config) (*clientv3.Client, error) { @@ -43,7 +53,7 @@ func newClientV3(cfg clientv3.Config) (*clientv3.Client, error) { return nil, err } - proxies[c] = toGRPC(c) + toGRPC(c) c.KV = clientv3.NewKVFromKVClient(grpcproxy.KvServerToKvClient(grpcproxy.NewKvProxy(c))) c.Watcher = clientv3.NewWatchFromWatchClient(grpcproxy.WatchServerToWatchClient(grpcproxy.NewWatchProxy(c))) return c, nil