Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

go race detect #1214

Closed
cvictory opened this issue May 25, 2021 · 7 comments
Closed

go race detect #1214

cvictory opened this issue May 25, 2021 · 7 comments
Assignees

Comments

@cvictory
Copy link
Contributor

跑 go run -race client.go, race condtion检查不通过

WARNING: DATA RACE
Read at 0x00c0001444a8 by main goroutine:
  github.com/apache/dubbo-go/registry/directory.(*RegistryDirectory).List()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/registry/directory/directory.go:401 +0x48
  github.com/apache/dubbo-go/cluster/cluster_impl.(*failoverClusterInvoker).Invoke()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/cluster_impl/failover_cluster_invoker.go:57 +0x8a
  github.com/apache/dubbo-go/common/proxy.DefaultProxyImplementFunc.func1.1()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/common/proxy/proxy.go:207 +0x7ca
.....

Previous write at 0x00c0001444a8 by goroutine 67:
  github.com/apache/dubbo-go/registry/directory.(*RegistryDirectory).setNewInvokers()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/registry/directory/directory.go:239 +0xe9
  github.com/apache/dubbo-go/registry/directory.(*RegistryDirectory).refreshAllInvokers()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/registry/directory/directory.go:205 +0x2c4

@cvictory
Copy link
Contributor Author

cvictory commented May 26, 2021

增加一个待解决:

WARNING: DATA RACE
Read at 0x00c000173b78 by goroutine 105:
  github.com/RoaringBitmap/roaring.(*runContainer16).cardinality()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:989 +0x64
  github.com/RoaringBitmap/roaring.(*runContainer16).getCardinality()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:2353 +0x265
  github.com/RoaringBitmap/roaring.(*runContainer16).equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:2124 +0x23c
  github.com/RoaringBitmap/roaring.(*roaringArray).equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/roaringarray.go:451 +0x2fa
  github.com/RoaringBitmap/roaring.(*Bitmap).Equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/roaring.go:524 +0xbb
  github.com/apache/dubbo-go/cluster/router/utils.JoinIfNotEqual()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/utils/bitmap_util.go:31 +0xc1
  github.com/apache/dubbo-go/cluster/router/conncheck.(*ConnCheckRouter).Route()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/conncheck/conn_check_route.go:63 +0xb5
  github.com/apache/dubbo-go/cluster/router/chain.(*RouterChain).Route()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/chain/chain.go:87 +0x1a1
  github.com/apache/dubbo-go/registry/directory.(*RegistryDirectory).List()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/registry/directory/directory.go:407 +0xe8
  github.com/apache/dubbo-go/cluster/cluster_impl.(*failoverClusterInvoker).Invoke()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/cluster_impl/failover_cluster_invoker.go:57 +0x8a
  github.com/apache/dubbo-go/common/proxy.DefaultProxyImplementFunc.func1.1()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/common/proxy/proxy.go:207 +0x7ca
  reflect.callReflect()
      /usr/local/go/src/reflect/value.go:565 +0x5c5
  reflect.makeFuncStub()
      /usr/local/go/src/reflect/asm_amd64.s:20 +0x41

Previous write at 0x00c000173b78 by goroutine 104:
  github.com/RoaringBitmap/roaring.(*runContainer16).cardinality()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:997 +0xfc
  github.com/RoaringBitmap/roaring.(*runContainer16).getCardinality()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:2353 +0x265
  github.com/RoaringBitmap/roaring.(*runContainer16).equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/runcontainer.go:2124 +0x23c
  github.com/RoaringBitmap/roaring.(*roaringArray).equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/roaringarray.go:451 +0x2fa
  github.com/RoaringBitmap/roaring.(*Bitmap).Equals()
      /Users/cvictory/go/pkg/mod/github.com/!roaring!bitmap/roaring@v0.5.5/roaring.go:524 +0xbb
  github.com/apache/dubbo-go/cluster/router/utils.JoinIfNotEqual()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/utils/bitmap_util.go:31 +0xc1
  github.com/apache/dubbo-go/cluster/router/conncheck.(*ConnCheckRouter).Route()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/conncheck/conn_check_route.go:63 +0xb5
  github.com/apache/dubbo-go/cluster/router/chain.(*RouterChain).Route()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/router/chain/chain.go:87 +0x1a1
  github.com/apache/dubbo-go/registry/directory.(*RegistryDirectory).List()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/registry/directory/directory.go:407 +0xe8
  github.com/apache/dubbo-go/cluster/cluster_impl.(*failoverClusterInvoker).Invoke()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/cluster/cluster_impl/failover_cluster_invoker.go:57 +0x8a
  github.com/apache/dubbo-go/common/proxy.DefaultProxyImplementFunc.func1.1()
      /Users/cvictory/go/pkg/mod/gitlab.alibaba-inc.com/middleware-go/dubbo-go@v0.0.0-20210416081125-f19ea4b4b7f4/common/proxy/proxy.go:207 +0x7ca
  reflect.callReflect()
      /usr/local/go/src/reflect/value.go:565 +0x5c5
  reflect.makeFuncStub()
      /usr/local/go/src/reflect/asm_amd64.s:20 +0x41

需要将 type AddrPool map[string]*roaring.Bitmap 这个类型改成sync.Map ??

需要避免读写并发场景问题。 https://driverzhang.github.io/post/goroutin-%E4%B8%8E-map-%E5%B9%B6%E5%8F%91%E7%9A%84%E9%87%87%E5%9D%91%E4%BA%8B%E4%BB%B6/

@beiwei30
Copy link
Member

第二个问题是 roaring bitmap 的问题,报了一个 issue: RoaringBitmap/roaring#305

beiwei30 added a commit to beiwei30/dubbo-go that referenced this issue May 27, 2021
AlexStocks pushed a commit that referenced this issue May 27, 2021
* fix: #1214 - go race detect

* add license header

* add comment to track issue

* remove dup return

* add a benchmark test for JoinIfNotEqual

* revise benchmark test
beiwei30 added a commit to beiwei30/dubbo-go that referenced this issue May 27, 2021
AlexStocks pushed a commit that referenced this issue May 28, 2021
* fix: #1214 - go race detect (#1220)

* add contract for Directory interface
@lemire
Copy link

lemire commented May 28, 2021

I recommend upgrading to roaring v0.7.1 as it should make this particular issue go away.

@zouyx
Copy link
Member

zouyx commented May 28, 2021

I recommend upgrading to roaring v0.7.1 as it should make this particular issue go away.

Thanks lemire

@AlexStocks
Copy link
Contributor

I recommend upgrading to roaring v0.7.1 as it should make this particular issue go away.

Thanks lemire

Now it's ur duty to upgrade its version. haha.

@lemire
Copy link

lemire commented May 29, 2021

To clarify, it should be merely a matter of bumping the version number and checking that the issue is resolved. There is no API change.

@AlexStocks
Copy link
Contributor

To clarify, it should be merely a matter of bumping the version number and checking that the issue is resolved. There is no API change.

thx.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants