Merge pull request #532 from wpaulino/remove-extra-reconnection-logic

chain/rpc: remove unnecessary ping keep alive
This commit is contained in:
Olaoluwa Osuntokun 2018-09-03 17:14:59 -07:00 committed by GitHub
commit 09d3730f35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -386,8 +386,6 @@ func (c *RPCClient) handler() {
enqueue := c.enqueueNotification enqueue := c.enqueueNotification
var dequeue chan interface{} var dequeue chan interface{}
var next interface{} var next interface{}
pingChan := time.After(time.Minute)
pingChanReset := make(chan (<-chan time.Time))
out: out:
for { for {
select { select {
@ -407,7 +405,6 @@ out:
dequeue = c.dequeueNotification dequeue = c.dequeueNotification
} }
notifications = append(notifications, n) notifications = append(notifications, n)
pingChan = time.After(time.Minute)
case dequeue <- next: case dequeue <- next:
if n, ok := next.(BlockConnected); ok { if n, ok := next.(BlockConnected); ok {
@ -430,47 +427,6 @@ out:
dequeue = nil dequeue = nil
} }
case <-pingChan:
// No notifications were received in the last 60s. Ensure the
// connection is still active by making a new request to the server.
//
// This MUST wait for the response in a new goroutine so as to not
// block channel sends enqueueing more notifications. Doing so
// would cause a deadlock and after the timeout expires, the client
// would be shut down.
//
// TODO: A minute timeout is used to prevent the handler loop from
// blocking here forever, but this is much larger than it needs to
// be due to dcrd processing websocket requests synchronously (see
// https://github.com/btcsuite/btcd/issues/504). Decrease this to
// something saner like 3s when the above issue is fixed.
type sessionResult struct {
err error
}
sessionResponse := make(chan sessionResult, 1)
go func() {
_, err := c.Session()
sessionResponse <- sessionResult{err}
}()
go func() {
select {
case resp := <-sessionResponse:
if resp.err != nil {
log.Errorf("Failed to receive session "+
"result: %v", resp.err)
c.Stop()
}
pingChanReset <- time.After(time.Minute)
case <-time.After(time.Minute):
log.Errorf("Timeout waiting for session RPC")
c.Stop()
}
}()
case ch := <-pingChanReset:
pingChan = ch
case c.currentBlock <- bs: case c.currentBlock <- bs:
case <-c.quit: case <-c.quit: