Ethan Buchman and GitHub
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
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 and GitHub
ac2ef9e0ea
Merge pull request #750 from tendermint/feature/cleanup
...
Cleanup of code and code docs
2017-10-23 11:14:15 -04:00
Adrian Brink and Ethan Buchman
036d3b59a3
Address reviews
2017-10-23 11:04:45 -04:00
Adrian Brink and Ethan Buchman
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
Silas Davis
3e3d53daef
Make RPCError an actual error and don't swallow its companion data
2017-10-22 15:14:21 +01:00
Anton Kaliaev and Zach Ramsay
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 and Zach Ramsay
ce36a0111a
rpc: subscribe on reconnection ( #689 )
...
* rpc: subscribe on reconnection
* rpc: fix unit tests
2017-10-02 13:00:20 -04:00
Anton Kaliaev and Ethan Buchman
7fadde0b37
check for request ID after receiving it
2017-09-18 16:36:03 -04:00
Anton Kaliaev and Ethan Buchman
e36c79f713
capitalize RpcError
2017-09-18 16:36:03 -04:00
Anton Kaliaev and Ethan Buchman
b700ed8e31
remove check for non-empty message as it should always be present
2017-09-18 16:36:03 -04:00
Anton Kaliaev and Ethan Buchman
6c1572c9b8
fix invalid memory address or nil pointer dereference
2017-09-18 16:36:02 -04:00
Dave Bryson and Ethan Buchman
60a1f49a5c
updated json response to match spec by @davebryson
2017-09-18 16:35:50 -04:00
Ethan Buchman
9dde1a0bd4
rpc: comments
2017-08-25 17:57:09 -04:00
Anton Kaliaev
2fd8496bc1
correct handling of pings and pongs
...
server:
- always has read & write timeouts
- ping handler never blocks the reader (see A)
- sends regular pings to check up on a client
A:
at some point server write buffer can become full, so in order not to
block reads from a client (see
https://github.com/gorilla/websocket/issues/97 ), server may skip some
pongs. As a result, client may disconnect. But you either have to do
that or block the reader. There is no third way.
client:
- optional read & write timeouts
- optional ping/pong to measure latency
2017-08-10 17:53:49 -04:00
Anton Kaliaev
236489aecf
backlog must always have higher priority
2017-08-08 19:03:48 -04:00
Ethan Buchman
797acbe911
ws: small comment
2017-08-08 17:33:17 -04:00
Anton Kaliaev
8267920749
[ws-client] write normal close message
2017-08-08 16:02:37 -04:00
Anton Kaliaev
23a87304cc
add a comment for PingPongLatencyTimer [ci skip]
2017-08-08 13:20:58 -04:00
Anton Kaliaev
57eee2466b
make WSClient thread-safe
2017-08-07 17:56:38 -04:00
Anton Kaliaev
5d66d1c28c
fixes from review
2017-08-05 13:11:00 -04:00
Anton Kaliaev
0013053fae
allow to change pong wait and ping period
2017-08-04 10:42:55 -04:00
Anton Kaliaev
1abbb11b44
do not exit from reconnectRoutine!
2017-08-03 22:44:18 -04:00
Anton Kaliaev
54903adeff
add IsReconnecting and IsActive methods
2017-08-03 19:10:15 -04:00
Anton Kaliaev
c08618f7e9
expose latency timer on WSClient
2017-08-03 19:10:14 -04:00
Anton Kaliaev
d578f7f81e
biff up WS client
...
What's new:
- auto reconnect
- ping/pong
- colored tests
2017-08-03 19:10:14 -04:00
Ethan Frey
aac85a14f0
httpDialer accepts no prefix or http:// as tcp://
2017-06-22 20:56:57 +02:00
Anton Kaliaev
b4ece65726
standardize key for errors (should be "err")
2017-06-14 12:50:49 +04:00
Anton Kaliaev
f8fdbe3dbc
changes as per Bucky's review
2017-05-13 16:22:51 +02:00
Anton Kaliaev
f803544195
new logging
2017-05-13 10:24:58 +02:00
Ethan Frey
6ba799132c
json.RawMessage in RPCRequest to defer parsing
2017-05-03 16:13:58 +02:00
Ethan Buchman
efeadcc0f4
some cleanup from review
2017-04-28 23:18:38 -04:00
Ethan Frey
6c60c07f16
BROKEN: attempt to replace go-wire.JSON with json.Unmarshall in rpc
2017-04-28 16:24:06 +02:00
Ethan Buchman
cc6dde96c1
rpc -> rpc/lib and rpc/tendermint -> rpc
2017-04-26 19:57:33 -04:00