hashicorp/raft

[boltdb] fatal error: checkptr: converted pointer straddles multiple allocations

kmlebedev opened this issue · 1 comments

How to reproduce the problem:

git clone -b race https://github.com/kmlebedev/raft-grpc-example.git
go run -race . --raft_id 0
fatal error: checkptr: converted pointer straddles multiple allocations

goroutine 1 [running]:
runtime.throw({0x18475e9?, 0xc0002dea20?})
        /usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0xc000149710 sp=0xc0001496e0 pc=0x108955d
runtime.checkptrAlignment(0xc000149790?, 0xc000280780?, 0xc000149790?)
        /usr/local/go/src/runtime/checkptr.go:26 +0x6c fp=0xc000149730 sp=0xc000149710 pc=0x105a2ac
github.com/boltdb/bolt.(*freelist).write(0xc0002807e0, 0xc000345000)
        /Users/tochka/go/pkg/mod/github.com/boltdb/bolt@v1.3.1/freelist.go:204 +0x1b6 fp=0xc000149800 sp=0xc000149730 pc=0x16e91f6
github.com/boltdb/bolt.(*Tx).Commit(0xc000348000)
        /Users/tochka/go/pkg/mod/github.com/boltdb/bolt@v1.3.1/tx.go:182 +0x7a5 fp=0xc0001499e8 sp=0xc000149800 pc=0x16f2c85
github.com/hashicorp/raft-boltdb.(*BoltStore).initialize(0xc0002901c8)
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:107 +0x16c fp=0xc000149a90 sp=0xc0001499e8 pc=0x16f9fcc
github.com/hashicorp/raft-boltdb.New({{0xc00028c231, 0xf}, 0x0, 0x0})
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:83 +0x19c fp=0xc000149b18 sp=0xc000149a90 pc=0x16f9d9c
github.com/hashicorp/raft-boltdb.NewBoltStore(...)
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:62
main.NewRaft({0x18292de?, 0x3?}, {0x7ffeefbff781, 0x1}, {0x1831285, 0xf}, {0x1924e80, 0xc000296140})
        /Users/tochka/GolandProjects/raft-grpc-example/main.go:73 +0x245 fp=0xc000149e40 sp=0xc000149b18 pc=0x171d665
main.main()
        /Users/tochka/GolandProjects/raft-grpc-example/main.go:49 +0x465 fp=0xc000149f80 sp=0xc000149e40 pc=0x171cfe5
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x212 fp=0xc000149fe0 sp=0xc000149f80 pc=0x108bd72
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000149fe8 sp=0xc000149fe0 pc=0x10bbcc1

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005afb0 sp=0xc00005af90 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:302 +0xad fp=0xc00005afe0 sp=0xc00005afb0 pc=0x108bfcd
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005afe8 sp=0xc00005afe0 pc=0x10bbcc1
created by runtime.init.6
        /usr/local/go/src/runtime/proc.go:290 +0x25

goroutine 18 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc000056790 sp=0xc000056770 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:278 +0x8e fp=0xc0000567c8 sp=0xc000056790 pc=0x10783ee
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x26 fp=0xc0000567e0 sp=0xc0000567c8 pc=0x106d0c6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0000567e8 sp=0xc0000567e0 pc=0x10bbcc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6b

goroutine 19 [GC scavenge wait]:
runtime.gopark(0xc00009e000?, 0x191f550?, 0x1?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc000056f70 sp=0xc000056f50 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.(*scavengerState).park(0x1ca3720)
        /usr/local/go/src/runtime/mgcscavenge.go:389 +0x53 fp=0xc000056fa0 sp=0xc000056f70 pc=0x10764b3
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:617 +0x45 fp=0xc000056fc8 sp=0xc000056fa0 pc=0x1076a65
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x26 fp=0xc000056fe0 sp=0xc000056fc8 pc=0x106d066
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000056fe8 sp=0xc000056fe0 pc=0x10bbcc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xaa

goroutine 3 [finalizer wait]:
runtime.gopark(0xc000007860?, 0x0?, 0x0?, 0x6?, 0xc00005a770?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005a628 sp=0xc00005a608 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:180 +0x145 fp=0xc00005a7e0 sp=0xc00005a628 pc=0x106c1e5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005a7e8 sp=0xc00005a7e0 pc=0x10bbcc1
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:157 +0x45
exit status 2

whitout -race it oks

go run . --raft_id 0
2022-08-30T16:32:33.804+0500 [INFO]  raft: initial configuration: index=0 servers=[]
2022-08-30T16:32:33.804+0500 [INFO]  raft: entering follower state: follower="Node at localhost:50051 [Follower]" leader-address= leader-id=
2022-08-30T16:32:35.739+0500 [WARN]  raft: no known peers, aborting election

I also asked here:
golang/go#54690

Tried fixing it myself:
kmlebedev/bolt@ebd1704

But that's not the only problem:
seaweedfs/seaweedfs#3521 (comment)

after first fix:

raft-grpc-example lebedev_k$ go run -race . --raft_id 0
fatal error: checkptr: converted pointer straddles multiple allocations

goroutine 1 [running]:
runtime.throw({0x18475e9?, 0xc000264240?})
        /usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0xc0000f9710 sp=0xc0000f96e0 pc=0x108955d
runtime.checkptrAlignment(0xc0000f9790?, 0xc000157c80?, 0xc0000f9790?)
        /usr/local/go/src/runtime/checkptr.go:26 +0x6c fp=0xc0000f9730 sp=0xc0000f9710 pc=0x105a2ac
github.com/boltdb/bolt.(*freelist).write(0xc000157ce0, 0xc000267000)
        /Users/tochka/go/pkg/mod/github.com/kmlebedev/bolt@v0.0.0-20220829081325-ebd1704e99de/freelist.go:204 +0x1b6 fp=0xc0000f9800 sp=0xc0000f9730 pc=0x16e91f6
github.com/boltdb/bolt.(*Tx).Commit(0xc0001781c0)
        /Users/tochka/go/pkg/mod/github.com/kmlebedev/bolt@v0.0.0-20220829081325-ebd1704e99de/tx.go:182 +0x7a5 fp=0xc0000f99e8 sp=0xc0000f9800 pc=0x16f2c85
github.com/hashicorp/raft-boltdb.(*BoltStore).initialize(0xc0000baea0)
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:107 +0x16c fp=0xc0000f9a90 sp=0xc0000f99e8 pc=0x16f9fcc
github.com/hashicorp/raft-boltdb.New({{0xc0000aba81, 0xf}, 0x0, 0x0})
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:83 +0x19c fp=0xc0000f9b18 sp=0xc0000f9a90 pc=0x16f9d9c
github.com/hashicorp/raft-boltdb.NewBoltStore(...)
        /Users/tochka/go/pkg/mod/github.com/hashicorp/raft-boltdb@v0.0.0-20220329195025-15018e9b97e0/bolt_store.go:62
main.NewRaft({0x18292de?, 0x3?}, {0x7ffeefbff781, 0x1}, {0x1831285, 0xf}, {0x1924e80, 0xc0000968c0})
        /Users/tochka/GolandProjects/raft-grpc-example/main.go:73 +0x245 fp=0xc0000f9e40 sp=0xc0000f9b18 pc=0x171d665
main.main()
        /Users/tochka/GolandProjects/raft-grpc-example/main.go:49 +0x465 fp=0xc0000f9f80 sp=0xc0000f9e40 pc=0x171cfe5
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x212 fp=0xc0000f9fe0 sp=0xc0000f9f80 pc=0x108bd72
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0000f9fe8 sp=0xc0000f9fe0 pc=0x10bbcc1

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005afb0 sp=0xc00005af90 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:302 +0xad fp=0xc00005afe0 sp=0xc00005afb0 pc=0x108bfcd
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005afe8 sp=0xc00005afe0 pc=0x10bbcc1
created by runtime.init.6
        /usr/local/go/src/runtime/proc.go:290 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005b790 sp=0xc00005b770 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:278 +0x8e fp=0xc00005b7c8 sp=0xc00005b790 pc=0x10783ee
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x26 fp=0xc00005b7e0 sp=0xc00005b7c8 pc=0x106d0c6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005b7e8 sp=0xc00005b7e0 pc=0x10bbcc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc000032070?, 0x191f550?, 0x1?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005bf70 sp=0xc00005bf50 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.(*scavengerState).park(0x1ca3760)
        /usr/local/go/src/runtime/mgcscavenge.go:389 +0x53 fp=0xc00005bfa0 sp=0xc00005bf70 pc=0x10764b3
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:617 +0x45 fp=0xc00005bfc8 sp=0xc00005bfa0 pc=0x1076a65
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x26 fp=0xc00005bfe0 sp=0xc00005bfc8 pc=0x106d066
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005bfe8 sp=0xc00005bfe0 pc=0x10bbcc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xaa

goroutine 18 [finalizer wait]:
runtime.gopark(0xc00008a4e0?, 0x0?, 0x0?, 0x41?, 0xc00005a770?)
        /usr/local/go/src/runtime/proc.go:363 +0xd6 fp=0xc00005a628 sp=0xc00005a608 pc=0x108c136
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:369
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:180 +0x145 fp=0xc00005a7e0 sp=0xc00005a628 pc=0x106c1e5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00005a7e8 sp=0xc00005a7e0 pc=0x10bbcc1
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:157 +0x45
exit status 2

Hi,
I have this problem with -race flag in v1.5.0, is this fixed ?!

Fixed by upgrading raft-boltdb to version v2.2.2