BBVA / qed

The scalable, auditable and high-performance tamper-evident log project
https://qed.readthedocs.io/
Apache License 2.0
95 stars 19 forks source link

Unable to Query Membership concurrently #50

Closed suizman closed 5 years ago

suizman commented 5 years ago

When we try to concurrently Query Membership we receive the fowling error:

2018/10/03 17:42:50 http: panic serving [::1]:59546: d.nx != 0 goroutine 400165 [running]: net/http.(conn).serve.func1(0xc022b49720) /usr/local/go/src/net/http/server.go:1746 +0xd0 panic(0x8edd00, 0xa4e670) /usr/local/go/src/runtime/panic.go:513 +0x1b9 crypto/sha256.(digest).checkSum(0xc00fcc37c8, 0x0, 0x0, 0x0, 0x0) /usr/local/go/src/crypto/sha256/sha256.go:253 +0x1db crypto/sha256.(digest).Sum(0xc0000a6200, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0) /usr/local/go/src/crypto/sha256/sha256.go:229 +0x69 github.com/bbva/qed/hashing.(Sha256Hasher).Do(0xc000066470, 0xc011b5e6a0, 0x1, 0x1, 0xc00fc52908, 0x0, 0x0) /home/spark/go/src/github.com/bbva/qed/hashing/hash.go:74 +0xb5 github.com/bbva/qed/balloon.Balloon.QueryMembership(0x186a0, 0x9e4ba0, 0x7f807c8f7360, 0xc005510048, 0xc0000af500, 0xc00551c1c0, 0xa55e20, 0xc000066470, 0xc01158ec50, 0xb, ...) /home/spark/go/src/github.com/bbva/qed/balloon/balloon.go:222 +0xe1 github.com/bbva/qed/raftwal.BalloonFSM.QueryMembership(0x9e4ba0, 0xa59cc0, 0xc005510048, 0xc0000af740, 0xc01c1a6300, 0x0, 0x0, 0x0, 0xc01158ec50, 0xb, ...) /home/spark/go/src/github.com/bbva/qed/raftwal/fsm.go:89 +0x87 github.com/bbva/qed/raftwal.RaftBalloon.QueryMembership(0x7ffca83d569c, 0x11, 0x9ba7b3, 0x5, 0xc0000240e2, 0x9, 0xc000116000, 0xc000158400, 0xc00553a1b0, 0xc00000c940, ...) /home/spark/go/src/github.com/bbva/qed/raftwal/raft.go:408 +0x87 github.com/bbva/qed/api/apihttp.Membership.func1(0xa55de0, 0xc011b5e660, 0xc0170c6500) /home/spark/go/src/github.com/bbva/qed/api/apihttp/apihttp.go:167 +0x1e1 net/http.HandlerFunc.ServeHTTP(0xc00000c680, 0xa55de0, 0xc011b5e660, 0xc0170c6500) /usr/local/go/src/net/http/server.go:1964 +0x44 github.com/bbva/qed/api/apihttp.AuthHandlerMiddleware.func1(0xa55de0, 0xc011b5e660, 0xc0170c6500) /home/spark/go/src/github.com/bbva/qed/api/apihttp/apihttp.go:246 +0xc5 net/http.HandlerFunc.ServeHTTP(0xc0000664d0, 0xa55de0, 0xc011b5e660, 0xc0170c6500) /usr/local/go/src/net/http/server.go:1964 +0x44 net/http.(ServeMux).ServeHTTP(0xc005531740, 0xa55de0, 0xc011b5e660, 0xc0170c6500) /usr/local/go/src/net/http/server.go:2361 +0x127 github.com/bbva/qed/api/apihttp.LogHandler.func1(0xa56b20, 0xc01c6b7960, 0xc0170c6500) /home/spark/go/src/github.com/bbva/qed/api/apihttp/apihttp.go:290 +0xda net/http.HandlerFunc.ServeHTTP(0xc00000c6c0, 0xa56b20, 0xc01c6b7960, 0xc0170c6500) /usr/local/go/src/net/http/server.go:1964 +0x44 net/http.serverHandler.ServeHTTP(0xc000132a90, 0xa56b20, 0xc01c6b7960, 0xc0170c6500) /usr/local/go/src/net/http/server.go:2741 +0xab net/http.(conn).serve(0xc022b49720, 0xa571a0, 0xc025696f00) /usr/local/go/src/net/http/server.go:1847 +0x646 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2851 +0x2f5

It seams to be related we are sharing the same hasher for each client.