动态原理图 协程_在协程中动态调用创建XClientPool时出现DATA RACE

你好,由于需要实现服务无状态无顺序启动,需要在第一次请求时实时创建XClientPool和EtcdDiscovery,这时会出现竞争问题:

错误如下:

`WARNING: DATA RACE

Write at 0x00c000272950 by goroutine 71:

github.com/smallnest/rpcx/client.(*EtcdDiscovery).watch()

C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/etcd_discovery.go:216 +0xb8c

Previous read at 0x00c000272950 by goroutine 65:

github.com/smallnest/rpcx/client.(*EtcdDiscovery).GetServices()

C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/etcd_discovery.go:119 +0x45

github.com/smallnest/rpcx/client.NewXClient()

C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/xclient.go:114 +0x217

github.com/smallnest/rpcx/client.NewXClientPool()

C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/xclient_pool.go:38 +0x337

github.com/doublemo/baa/internal/rpcx.NewXClientPool()

G:/works/2020/balala/github.com/doublemo/baa/internal/rpcx/rpc.go:21 +0x117`

引发代码如下:

`

go func(){

d:= client.NewEtcdDiscovery(etcd.BasePath, "serviceName", etcd.Addr, nil)

option:= client.DefaultOption

p := client.NewXClientPool(10, "serviceName", client.Failover, client.WeightedRoundRobin, d, option)

}()

`

这里还有个问题,动态创建时,如果指定服务不存于etcd 会引发panic

请问这个问有没有解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值