Ethan Buchman
376f47e030
Merge pull request #775 from tendermint/rpc-client-jitter
...
rpc/lib/client: add jitter for exponential backoff of WSClient
2017-10-25 22:53:50 -04:00
Emmanuel Odeke
6e5cd10399
rpc/lib/client: jitter test updates and only to-be run on releases
...
* Updated code with feedback from @melekes, @ebuchman and @silasdavis.
* Added Makefile clause `release` to only run the test on seeing tag
`release` during releases i.e
```shell
make release
```
which will run the comprehensive and long integration-ish tests.
2017-10-25 19:20:55 -07:00
Ethan Buchman
5534eb4707
Merge pull request #776 from tendermint/feature/merge-light-client
...
Merge light client
2017-10-25 16:12:39 -04:00
Ethan Frey
f653ba63bf
Separated out certifiers.Commit from rpc structs
2017-10-25 16:43:18 +02:00
Silas Davis
4cb02d0bf2
Exploit the fact the BaseService's closed Quit channel will keep emitting quit signals to close both readRoutine and writeRoutine
2017-10-25 10:19:18 +01:00
Silas Davis
f6adddb4a8
Replace ResultsCh with ResponsesCh
2017-10-24 17:45:13 +01:00
Silas Davis
01be6fa309
Fix WSClient blocking in the readRoutine after Stop() as it tries to write to ResultsCh
2017-10-24 13:31:24 +01:00
Emmanuel Odeke
5504920ba3
rpc/lib/client: add jitter for exponential backoff of WSClient
...
Fixes https://github.com/tendermint/tendermint/issues/751 .
Adds jitter to our exponential backoff to mitigate a self DDOS
vector. The jitter is a randomly picked percentage of a second
whose purpose is to ensure that each exponential backoff retry
occurs within (1<<attempts) == 2**attempts, but with the delay
each client will have a random buffer time before it tries to
reconnect instead of all at once reconnections that might even
bring back the previous conditions that might have caused the
dial to the WSServer to have failed e.g
* Network outage
* File descriptor exhaustion
* False positives from firewalls
etc
2017-10-24 02:00:20 -07:00
Ethan Buchman
ac2ef9e0ea
Merge pull request #750 from tendermint/feature/cleanup
...
Cleanup of code and code docs
2017-10-23 11:14:15 -04:00
Ethan Buchman
7a6876bc62
Merge pull request #768 from tendermint/feature/merkleeyes-to-iavl
...
Feature/merkleeyes to iavl
2017-10-23 11:07:21 -04:00
Adrian Brink
036d3b59a3
Address reviews
2017-10-23 11:04:45 -04:00
Adrian Brink
782a836db0
Cleanup of code and code docs
...
This cleans up some of the code in the state package
2017-10-23 11:04:45 -04:00
Ethan Buchman
60b7f2c61b
Merge pull request #767 from silasdavis/do-not-swallow
...
Make RPCError an actual error and don't swallow its companion data
2017-10-23 01:51:40 -04:00
Silas Davis
3e3d53daef
Make RPCError an actual error and don't swallow its companion data
2017-10-22 15:14:21 +01:00
Ethan Buchman
b234f7aba2
Merge pull request #741 from tendermint/client-compile-time-assertions
...
rpc/client: use compile time assertions instead of methods
2017-10-17 03:41:24 -04:00
Emmanuel Odeke
5f218a43fd
rpc/client: use compile time assertions instead of methods
2017-10-13 14:30:54 -06:00
Anton Kaliaev
7518c4a9be
[rpc] update comment [ci skip]
2017-10-13 15:03:21 +04:00
Anton Kaliaev
db413aadfd
fixes from @cloudhead review
2017-10-13 15:03:21 +04:00
Anton Kaliaev
5433e5771e
support historical abci queries (Refs #482 )
2017-10-13 15:03:20 +04:00
Zach Ramsay
e2e50bc0fc
rpc: use /iavl repo in test ( #713 )
2017-10-11 10:35:22 -04:00
Ethan Buchman
9fb45c5b5a
remove a stale comment
2017-10-10 10:52:26 -04:00
Anton Kaliaev
aae4e94998
make RPCRequest params not a pointer
...
https://github.com/tendermint/tendermint/pull/724#issuecomment-335362927
2017-10-10 13:50:06 +04:00
Anton Kaliaev
d935a4f0a8
recover from panic in WS JSON RPC readRoutine
...
https://github.com/tendermint/tendermint/pull/724#issuecomment-335316484
2017-10-10 13:48:56 +04:00
Anton Kaliaev
5c331d8276
log a notification to help debug user issues
2017-10-10 13:01:25 +04:00
Anton Kaliaev
13b9de6778
return missing package declaration
2017-10-10 12:48:36 +04:00
Anton Kaliaev
dc0e8de9b0
extract some of the consensus types into ./types
...
so they can be used in rpc/core/types/responses.go.
```
So, it seems like we could use the actual structs here, but we don't want to have to import consensus to get them, as then clients are importing too much crap. So probably we should move some types from consensus into consensus/types so we can import.
Will these raw messages be identical to:
type ResultDumpConsensusState struct {
RoundState cstypes.RoundState
PeerRoundStates map[string]cstypes.PeerRoundState
}
```
https://github.com/tendermint/tendermint/pull/724#discussion_r143598193
2017-10-10 12:39:21 +04:00
Anton Kaliaev
d6a87d3c43
[rpc] DumpConsensusState: output state as json rather than string
...
Before:
```
{
"jsonrpc": "2.0",
"id": "",
"result": {
"round_state": "RoundState{\n H:10 R:0 S:RoundStepNewHeight\n StartTime: 2017-10-09 13:07:24.841134374 +0400 +04\n CommitTime: 2017-10-09 13:07:23.841134374 +0400 +04\n Validators: ValidatorSet{\n Proposer: Validator{EF243CC0E9B88D0161D24D733BDE9003518CEA27 {PubKeyEd25519{2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202}} VP:10 A:0}\n Validators:\n Validator{EF243CC0E9B88D0161D24D733BDE9003518CEA27 {PubKeyEd25519{2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202}} VP:10 A:0}\n }\n Proposal: \u003cnil\u003e\n ProposalBlock: nil-PartSet nil-Block\n LockedRound: 0\n LockedBlock: nil-PartSet nil-Block\n Votes: HeightVoteSet{H:10 R:0~0\n VoteSet{H:10 R:0 T:1 +2/3:\u003cnil\u003e BA{1:_} map[]}\n VoteSet{H:10 R:0 T:2 +2/3:\u003cnil\u003e BA{1:_} map[]}\n }\n LastCommit: VoteSet{H:9 R:0 T:2 +2/3:947F67A7B85439AF2CD5DFED376C51AC7BD67AEE:1:365E9983E466 BA{1:X} map[]}\n LastValidators: ValidatorSet{\n Proposer: Validator{EF243CC0E9B88D0161D24D733BDE9003518CEA27 {PubKeyEd25519{2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202}} VP:10 A:0}\n Validators:\n Validator{EF243CC0E9B88D0161D24D733BDE9003518CEA27 {PubKeyEd25519{2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202}} VP:10 A:0}\n }\n}",
"peer_round_states": []
}
}
```
After:
```
{
"jsonrpc": "2.0",
"id": "",
"result": {
"round_state": {
"Height": 1691,
"Round": 0,
"Step": 1,
"StartTime": "2017-10-09T14:08:09.129491764+04:00",
"CommitTime": "2017-10-09T14:08:08.129491764+04:00",
"Validators": {
"validators": [
{
"address": "EF243CC0E9B88D0161D24D733BDE9003518CEA27",
"pub_key": {
"type": "ed25519",
"data": "2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202"
},
"voting_power": 10,
"accum": 0
}
],
"proposer": {
"address": "EF243CC0E9B88D0161D24D733BDE9003518CEA27",
"pub_key": {
"type": "ed25519",
"data": "2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202"
},
"voting_power": 10,
"accum": 0
}
},
"Proposal": null,
"ProposalBlock": null,
"ProposalBlockParts": null,
"LockedRound": 0,
"LockedBlock": null,
"LockedBlockParts": null,
"Votes": {},
"CommitRound": -1,
"LastCommit": {},
"LastValidators": {
"validators": [
{
"address": "EF243CC0E9B88D0161D24D733BDE9003518CEA27",
"pub_key": {
"type": "ed25519",
"data": "2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202"
},
"voting_power": 10,
"accum": 0
}
],
"proposer": {
"address": "EF243CC0E9B88D0161D24D733BDE9003518CEA27",
"pub_key": {
"type": "ed25519",
"data": "2E0B9301334FCDAB193D514022F81BA09BBEC028685C96602BE9DD0BD4F9E202"
},
"voting_power": 10,
"accum": 0
}
}
},
"peer_round_states": {
"75EC8F15D244A421202F9725CD4DE509EE50303670310CF7530EF25E2B7C524B": {
"Height": 1691,
"Round": 0,
"Step": 1,
"StartTime": "2017-10-09T14:08:08.563251997+04:00",
"Proposal": false,
"ProposalBlockPartsHeader": {
"total": 0,
"hash": ""
},
"ProposalBlockParts": null,
"ProposalPOLRound": -1,
"ProposalPOL": null,
"Prevotes": null,
"Precommits": null,
"LastCommitRound": 0,
"LastCommit": null,
"CatchupCommitRound": -1,
"CatchupCommit": null
}
}
}
}
```
2017-10-09 14:09:26 +04:00
Anton Kaliaev
a3adac3787
[rpc] do not try to parse params if they were not provided (Refs #708 )
2017-10-09 13:30:52 +04:00
Anton Kaliaev
3702cb7e7c
restore rpc/lib readme as doc.go (Refs #710 ) [ci skip]
...
I don't want to lose any documentation. Correct me if I am wrong, but we
don't have this docs anywhere else.
2017-10-05 11:44:02 +04:00
Zach Ramsay
136b6a7673
rpc/lib: remove dead files, closes #710
2017-10-04 17:45:15 -04:00
Zach Ramsay
d56b44f3a5
all: no more anonymous imports
2017-10-04 16:40:45 -04:00
Anton Kaliaev
45ff7cdd0c
rewrite ws client to expose a callback instead of a channel
...
callback gives more power to the publisher. plus it is optional
comparing to a channel, which will block the whole client if you won't
read from it.
2017-10-02 13:00:20 -04:00
Alexandre Thibault
ce36a0111a
rpc: subscribe on reconnection ( #689 )
...
* rpc: subscribe on reconnection
* rpc: fix unit tests
2017-10-02 13:00:20 -04:00
Martin Dyring-Andersen
b61f5482d4
Fix broken reference to ABCI
2017-10-02 13:00:20 -04:00
Alexandre Thibault
382bead548
rpc: fix client websocket timeout ( #687 )
2017-09-29 13:32:30 +04:00
Anton Kaliaev
f9479b34cb
sleep time should be greater than readTimeout (5 sec)
...
otherwise, we're not testing ping/pongs.
see https://github.com/tendermint/tendermint/pull/687#issuecomment-332494735
2017-09-27 15:44:19 +04:00
Ethan Buchman
8311f5c611
abci.Info takes a struct; less merkleeyes
2017-09-22 11:42:40 -04:00
Ethan Buchman
ddb3d8945d
p2p: allow listener with no external connection
2017-09-22 10:13:23 -04:00
Ethan Buchman
779c2a22d0
node: NewNode takes DBProvider and GenDocProvider
2017-09-21 15:54:33 -04:00
Ethan Buchman
4382c8d28b
fix tests
2017-09-21 15:52:25 -04:00
Adrian Brink
7dd3c007c7
Refactor priv_validator
...
Users can now just pass an object that implements the Signer interface.
2017-09-21 15:50:43 -04:00
Ethan Buchman
3089bbf2b8
Amount -> Power. Closes #166
2017-09-21 14:59:27 -04:00
Anton Kaliaev
f8b152972f
return method not found error
...
if somebody tries to access WS method in non-ws context
2017-09-18 16:36:03 -04:00
Anton Kaliaev
95875c55fc
ID must be present in both request and response
...
from the spec:
This member is REQUIRED.
It MUST be the same as the value of the id member in the Request Object.
If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), it MUST be Null.
2017-09-18 16:36:03 -04:00
Anton Kaliaev
7fadde0b37
check for request ID after receiving it
2017-09-18 16:36:03 -04:00
Anton Kaliaev
e36c79f713
capitalize RpcError
2017-09-18 16:36:03 -04:00
Anton Kaliaev
b700ed8e31
remove check for non-empty message as it should always be present
2017-09-18 16:36:03 -04:00
Anton Kaliaev
f74de4cb86
include optional data field in error object
...
```
data
A Primitive or Structured value that contains additional information about the error.
This may be omitted.
The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.).
```
2017-09-18 16:36:02 -04:00
Anton Kaliaev
6c1572c9b8
fix invalid memory address or nil pointer dereference
2017-09-18 16:36:02 -04:00
Dave Bryson
60a1f49a5c
updated json response to match spec by @davebryson
2017-09-18 16:35:50 -04:00