Zarko Milosevic
287b25a059
Align with spec ( #2642 )
6 years ago
Ismail Khoffi
8888595b94
[R4R] Fixed sized and reordered fields for Vote/Proposal/Heartbeat SignBytes ( #2598 )
* WIP: switching to fixed offsets for SignBytes
* add version field to sign bytes and update order
* more comments on test-cases and add a tc with a chainID
* remove amino:"write_empty" tag
- it doesn't affect if default fixed size fields ((u)int64) are
written or not
- add comment about int->int64 casting
* update CHANGELOG_PENDING
* update documentation
* add back link to issue #1622 in documentation
* remove JSON tags and add (failing test-case)
* fix failing test
* update test-vectors due to added `Type` field
* change Type field from string to byte and add new type alias
- SignedMsgType replaces VoteTypePrevote, VoteTypePrecommit and adds new
ProposalType to separate votes from proposal when signed
- update test-vectors
* fix remains from rebasing
* use SignMessageType instead of byte everywhere
* fixes from review
6 years ago
Matthew Slipper
92343ef484
Add additional metrics ( #2500 )
* Add additional metrics
Continues addressing https://github.com/cosmos/cosmos-sdk/issues/2169 .
* Add nop metrics to fix NPE
* Tweak buckets, code review
* Update buckets
* Update docs with new metrics
* Code review updates
6 years ago
Zarko Milosevic
12675ecd92
consensus: Wait timeout precommit before starting new round ( #2493 )
* Disable transitioning to new round upon 2/3+ of Precommit nils
Pull in ensureVote test function from https://github.com/tendermint/tendermint/pull/2132
* Add several ensureX test methods to wrap channel read with timeout
* Revert panic in tests
6 years ago
Anton Kaliaev
4c4a95ca53
config: Add ValidateBasic ( #2485 )
* add missing options to config.toml template and docs
Refs #2232
* config#ValidateBasic
Refs #2232
* [config] timeouts as time.Duration, not ints
Why:
- native type provides better guarantees than ", in ms" comment (harder
to shoot yourself in the leg)
- flexibility: you can change units
6 years ago
Matthew Slipper
587116dae1
metrics: Add additional metrics to p2p and consensus ( #2425 )
* Add additional metrics to p2p and consensus
Partially addresses https://github.com/cosmos/cosmos-sdk/issues/2169 .
* WIP
* Updates from code review
* Updates from code review
* Add instrumentation namespace to configuration
* Fix test failure
* Updates from code review
* Add quotes
* Add atomic load
* Use storeint64
* Use addInt64 in writePacketMsgTo
6 years ago
Zarko Milosevic
f99e4010f2
Add stats related channel between consensus state and reactor ( #2388 )
6 years ago
Zarko Milosevic
7b88172f41
Implement BFT time ( #2203 )
* Implement BFT time
* set LastValidators when creating state in state helper
for heights >= 2
6 years ago
Dev Ojha
2756be5a59
libs: Remove usage of custom Fmt, in favor of fmt.Sprintf ( #2199 )
* libs: Remove usage of custom Fmt, in favor of fmt.Sprintf
Closes #2193
* Fix bug that was masked by custom Fmt!
6 years ago
VenkatDatta
188e459273
Removed unnecessary onStart call ( #2098 )
* Removed unnecessary onStart & onStop calls in reactor
* Refactor OnStart & OnStop in reactor
* Removed redundant OnStart func in reactor
6 years ago
ValarDragon
99e582d79a
crypto: Refactor to move files out of the top level directory
Currently the top level directory contains basically all of the code
for the crypto package. This PR moves the crypto code into submodules
in a similar manner to what `golang/x/crypto` does. This improves code
organization.
Ref discussion: https://github.com/tendermint/tendermint/pull/1966
Closes #1956
6 years ago
Ethan Buchman
9b0b0b02d0
consensus: wait on stop if not fastsync
6 years ago
Zach Ramsay
44dad6d70b
Revert "detele everything"
This reverts commit d02c5d1e30
.
6 years ago
Zach Ramsay
d02c5d1e30
detele everything
6 years ago
Ethan Buchman
223095d12f
remove Wait from consensus reactor OnStop
6 years ago
Anton Kaliaev
9120fd5d14
unexport DecodeMessage functions
Refs #646
6 years ago
Anton Kaliaev
b242b15d40
wait until WAL closes the autogroup
Refs #1839
6 years ago
Ethan Buchman
d55243f0e6
fix import paths
6 years ago
Liamsi
d2c05bc5b9
Revert "delete everything" (includes everything non-go-crypto)
This reverts commit 96a3502
7 years ago
Liamsi
96a3502126
delete everything
7 years ago
Anton Kaliaev
c6f612bfc3
subscribe before state emits NewRoundStep
I had to alter events package for that. Hope that's fine.
Refs #847
7 years ago
Anton Kaliaev
bb9aa85d22
copy events and pubsub packages from tmlibs
Refs #847
7 years ago
Anton Kaliaev
c4fef499b6
switch to events package
7 years ago
Anton Kaliaev
b77d5344fc
rename methods for clarity
7 years ago
Anton Kaliaev
21f5f3faa7
use channels to send votes, ... from consensus state to reactor
Refs #847
7 years ago
Zarko Milosevic
b5ac9ede8a
Add rules in gossipVotesForHeight to clarify priorities on messages to send
7 years ago
Jae Kwon
e3c4625e63
Suggested changes to consensus/reactor.go
7 years ago
Zarko Milosevic
83ca46396d
Update gossipVotes routine to align with validBlock mechanism
7 years ago
Jae Kwon
56c9e0da7e
Add back sample output in rpc/core/consensus.go; Tweak DumpConsensusState output for peers
7 years ago
Jae Kwon
edbec10f9e
Expose peer stats for dump_consensus_state
7 years ago
Anton Kaliaev
26c38e770e
fix data race
Closes #1442
```
WARNING: DATA RACE
Write at 0x00c4209de7c8 by goroutine 23:
github.com/tendermint/tendermint/types.(*Block).fillHeader()
/home/vagrant/go/src/github.com/tendermint/tendermint/types/block.go:88 +0x157
github.com/tendermint/tendermint/types.(*Block).Hash()
/home/vagrant/go/src/github.com/tendermint/tendermint/types/block.go:104 +0x121
github.com/tendermint/tendermint/types.(*Block).HashesTo()
/home/vagrant/go/src/github.com/tendermint/tendermint/types/block.go:135 +0x4f
github.com/tendermint/tendermint/consensus.(*ConsensusState).enterPrecommit()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:1037 +0x182d
github.com/tendermint/tendermint/consensus.(*ConsensusState).addVote()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:1425 +0x1a6c
github.com/tendermint/tendermint/consensus.(*ConsensusState).tryAddVote()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:1318 +0x77
github.com/tendermint/tendermint/consensus.(*ConsensusState).handleMsg()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:581 +0x7a9
github.com/tendermint/tendermint/consensus.(*ConsensusState).receiveRoutine()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:539 +0x6c3
Previous read at 0x00c4209de7c8 by goroutine 47:
github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common.(*HexBytes).MarshalJSON()
<autogenerated>:1 +0x52
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.invokeMarshalJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:433 +0x88
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec)._encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:82 +0x8d2
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:50 +0x10e
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSONStruct()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:348 +0x539
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec)._encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:119 +0x83f
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:50 +0x10e
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSONStruct()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:348 +0x539
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec)._encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:119 +0x83f
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:50 +0x10e
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSONStruct()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:348 +0x539
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec)._encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:119 +0x83f
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:50 +0x10e
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSONStruct()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:348 +0x539
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec)._encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:119 +0x83f
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).encodeReflectJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/json-encode.go:50 +0x10e
github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino.(*Codec).MarshalJSON()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/go-amino/amino.go:296 +0x182
github.com/tendermint/tendermint/rpc/lib/types.NewRPCSuccessResponse()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/lib/types/types.go:100 +0x12c
github.com/tendermint/tendermint/rpc/lib/server.makeJSONRPCHandler.func1()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/lib/server/handlers.go:152 +0xab7
net/http.HandlerFunc.ServeHTTP()
/usr/lib/go-1.9/src/net/http/server.go:1918 +0x51
net/http.(*ServeMux).ServeHTTP()
/usr/lib/go-1.9/src/net/http/server.go:2254 +0xa2
github.com/tendermint/tendermint/rpc/lib/server.RecoverAndLogHandler.func1()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/lib/server/http_server.go:138 +0x4fa
net/http.HandlerFunc.ServeHTTP()
/usr/lib/go-1.9/src/net/http/server.go:1918 +0x51
net/http.serverHandler.ServeHTTP()
/usr/lib/go-1.9/src/net/http/server.go:2619 +0xbc
net/http.(*conn).serve()
/usr/lib/go-1.9/src/net/http/server.go:1801 +0x83b
Goroutine 23 (running) created at:
github.com/tendermint/tendermint/consensus.(*ConsensusState).OnStart()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/state.go:250 +0x35b
github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common.(*BaseService).Start()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common/service.go:130 +0x5fc
github.com/tendermint/tendermint/consensus.(*ConsensusReactor).OnStart()
/home/vagrant/go/src/github.com/tendermint/tendermint/consensus/reactor.go:69 +0x1b4
github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common.(*BaseService).Start()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common/service.go:130 +0x5fc
github.com/tendermint/tendermint/consensus.(*ConsensusReactor).Start()
<autogenerated>:1 +0x43
github.com/tendermint/tendermint/p2p.(*Switch).OnStart()
/home/vagrant/go/src/github.com/tendermint/tendermint/p2p/switch.go:177 +0x124
github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common.(*BaseService).Start()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common/service.go:130 +0x5fc
github.com/tendermint/tendermint/node.(*Node).OnStart()
/home/vagrant/go/src/github.com/tendermint/tendermint/node/node.go:416 +0xa1b
github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common.(*BaseService).Start()
/home/vagrant/go/src/github.com/tendermint/tendermint/vendor/github.com/tendermint/tmlibs/common/service.go:130 +0x5fc
github.com/tendermint/tendermint/rpc/test.StartTendermint()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/test/helpers.go:100 +0x5b
github.com/tendermint/tendermint/rpc/client_test.TestMain()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/client/main_test.go:17 +0x4c
main.main()
github.com/tendermint/tendermint/rpc/client/_test/_testmain.go:76 +0x1cd
Goroutine 47 (running) created at:
net/http.(*Server).Serve()
/usr/lib/go-1.9/src/net/http/server.go:2720 +0x37c
net/http.Serve()
/usr/lib/go-1.9/src/net/http/server.go:2323 +0xe2
github.com/tendermint/tendermint/rpc/lib/server.StartHTTPServer.func1()
/home/vagrant/go/src/github.com/tendermint/tendermint/rpc/lib/server/http_server.go:35 +0xb3
```
7 years ago
Ethan Buchman
1a1e4e767b
check max msg size in DecodeMessage
7 years ago
Jae Kwon
fb64314d1c
Review from Anton
7 years ago
Jae Kwon
e4492afbad
Merge
7 years ago
Jae Kwon
45ec5fd170
WIP consensus
7 years ago
Anton Kaliaev
a506cf47ad
protect Record* peerStateStats functions by mutex
Fixes #1414
DATA RACE:
```
Read at 0x00c4214ee940 by goroutine 146:
github.com/tendermint/tendermint/consensus.(*peerStateStats).String()
<autogenerated>:1 +0x57
fmt.(*pp).handleMethods()
/usr/local/go/src/fmt/print.go:596 +0x3f4
fmt.(*pp).printArg()
/usr/local/go/src/fmt/print.go:679 +0x11f
fmt.(*pp).doPrintf()
/usr/local/go/src/fmt/print.go:996 +0x319
fmt.Sprintf()
/usr/local/go/src/fmt/print.go:196 +0x73
github.com/tendermint/tendermint/consensus.(*PeerState).StringIndented()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:1426 +0x573
github.com/tendermint/tendermint/consensus.(*PeerState).String()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:1419 +0x66
github.com/go-logfmt/logfmt.safeString()
/home/ubuntu/go/src/github.com/go-logfmt/logfmt/encode.go:299 +0x9d
github.com/go-logfmt/logfmt.writeValue()
/home/ubuntu/go/src/github.com/go-logfmt/logfmt/encode.go:217 +0x5a0
github.com/go-logfmt/logfmt.(*Encoder).EncodeKeyval()
/home/ubuntu/go/src/github.com/go-logfmt/logfmt/encode.go:61 +0x1dd
github.com/tendermint/tmlibs/log.tmfmtLogger.Log()
/home/ubuntu/go/src/github.com/tendermint/tmlibs/log/tmfmt_logger.go:107 +0x1001
github.com/tendermint/tmlibs/log.(*tmfmtLogger).Log()
<autogenerated>:1 +0x93
github.com/go-kit/kit/log.(*context).Log()
/home/ubuntu/go/src/github.com/go-kit/kit/log/log.go:124 +0x248
github.com/tendermint/tmlibs/log.(*tmLogger).Debug()
/home/ubuntu/go/src/github.com/tendermint/tmlibs/log/tm_logger.go:64 +0x1d0
github.com/tendermint/tendermint/consensus.(*PeerState).PickSendVote()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:1059 +0x242
github.com/tendermint/tendermint/consensus.(*ConsensusReactor).gossipVotesForHeight()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:789 +0x6ef
github.com/tendermint/tendermint/consensus.(*ConsensusReactor).gossipVotesRoutine()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:723 +0x1039
Previous write at 0x00c4214ee940 by goroutine 21:
github.com/tendermint/tendermint/consensus.(*PeerState).RecordVote()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:1242 +0x15a
github.com/tendermint/tendermint/consensus.(*ConsensusReactor).Receive()
github.com/tendermint/tendermint/consensus/_test/_obj_test/reactor.go:309 +0x32e6
github.com/tendermint/tendermint/p2p.createMConnection.func1()
/home/ubuntu/go/src/github.com/tendermint/tendermint/p2p/peer.go:365 +0xea
github.com/tendermint/tendermint/p2p/conn.(*MConnection).recvRoutine()
/home/ubuntu/go/src/github.com/tendermint/tendermint/p2p/conn/connection.go:531 +0x779
```
7 years ago
Ethan Buchman
5f548c7679
consensus: close pubsub channels. fixes #1372
7 years ago
Thomas Corbière
2644a529f0
Fix lint errors ( #1390 )
* use increment and decrement operators.
* remove unnecessary else branches.
* fix package comment with leading space.
* fix receiver names.
* fix error strings.
* remove omittable code.
* remove redundant return statement.
* Revert changes (code is generated.)
* use cfg as receiver name for all config-related types.
* use lsi as the receiver name for the LastSignedInfo type.
7 years ago
Anton Kaliaev
2c445059f2
mark peer as good every blocksToContributeToBecomeGoodPeer blocks
if enough peers are marked good eventually some will become unmarked, so
good to have a force that will continue to cycle them back into good
territory!
Refs #1317
7 years ago
Anton Kaliaev
ab59f64f57
test we record votes and block parts
Refs #1317
7 years ago
Anton Kaliaev
42e3457884
fix tracking of votes and blockparts to not allow old information
also remove mutex
Refs #1317
7 years ago
Anton Kaliaev
31f3dd42e7
mark peer as good only once
or should we do it every N blocks?
Refs #1317
7 years ago
Anton Kaliaev
5fab8e404d
replace magic number with blocksToContributeToBecomeGoodPeer const
Refs #1317
7 years ago
Anton Kaliaev
86ddf17db0
add a todo
Refs #1281
7 years ago
Anton Kaliaev
a655500047
fix copy-pasted comment [ci skip]
7 years ago
Anton Kaliaev
714f885dac
mark peer as good if it contributed enough votes or block parts
Refs #1147
7 years ago
Anton Kaliaev
266974cb59
stop peer if it sends invalid vote
7 years ago
Anton Kaliaev
4242352852
stop peer on decoding error
7 years ago
Anton Kaliaev
2a24ae90c1
fixes from Jae's review
1. remove pointer
2. add Quit() method to Service interface
7 years ago
Ethan Buchman
ee674f919f
StopPeerForError in blockchain and consensus
7 years ago