Speed up client startup and registration (#11005)
Speed up client startup, by retrying more until the servers are known. Currently, if client fingerprinting is fast and finishes before the client connect to a server, node registration may be delayed by 15 seconds or so! Ideally, we'd wait until the client discovers the servers and then retry immediately, but that requires significant code changes. Here, we simply retry the node registration request every second. That's basically the equivalent of check if the client discovered servers every second. Should be a cheap operation. When testing this change on my local computer and where both servers and clients are co-located, the time from startup till node registration dropped from 34 seconds to 8 seconds!
This commit is contained in:
parent
c1d1906628
commit
efcc8bf082
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
```release-note:improvement
|
||||||
|
client: Speed up client startup time
|
||||||
|
```
|
|
@ -80,6 +80,10 @@ const (
|
||||||
// devModeRetryIntv is the retry interval used for development
|
// devModeRetryIntv is the retry interval used for development
|
||||||
devModeRetryIntv = time.Second
|
devModeRetryIntv = time.Second
|
||||||
|
|
||||||
|
// noServerRetryIntv is the retry interval used when client has not
|
||||||
|
// connected to server yet
|
||||||
|
noServerRetryIntv = time.Second
|
||||||
|
|
||||||
// stateSnapshotIntv is how often the client snapshots state
|
// stateSnapshotIntv is how often the client snapshots state
|
||||||
stateSnapshotIntv = 60 * time.Second
|
stateSnapshotIntv = 60 * time.Second
|
||||||
|
|
||||||
|
@ -1772,15 +1776,17 @@ func (c *Client) retryRegisterNode() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
retryIntv := registerRetryIntv
|
||||||
if err == noServersErr {
|
if err == noServersErr {
|
||||||
c.logger.Debug("registration waiting on servers")
|
c.logger.Debug("registration waiting on servers")
|
||||||
c.triggerDiscovery()
|
c.triggerDiscovery()
|
||||||
|
retryIntv = noServerRetryIntv
|
||||||
} else {
|
} else {
|
||||||
c.logger.Error("error registering", "error", err)
|
c.logger.Error("error registering", "error", err)
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case <-c.rpcRetryWatcher():
|
case <-c.rpcRetryWatcher():
|
||||||
case <-time.After(c.retryIntv(registerRetryIntv)):
|
case <-time.After(c.retryIntv(retryIntv)):
|
||||||
case <-c.shutdownCh:
|
case <-c.shutdownCh:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue