Fix cmdsInfo to create node

This commit is contained in:
Vladimir Mihailenco 2019-06-29 10:28:33 +03:00
parent a28bb0bd25
commit fa479814de
1 changed files with 21 additions and 21 deletions

View File

@ -326,20 +326,7 @@ func (c *clusterNodes) GC(generation uint32) {
} }
func (c *clusterNodes) Get(addr string) (*clusterNode, error) { func (c *clusterNodes) Get(addr string) (*clusterNode, error) {
var node *clusterNode node, err := c.get(addr)
var err error
c.mu.RLock()
if c.closed {
err = pool.ErrClosed
} else {
node = c.allNodes[addr]
}
c.mu.RUnlock()
return node, err
}
func (c *clusterNodes) GetOrCreate(addr string) (*clusterNode, error) {
node, err := c.Get(addr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -368,6 +355,19 @@ func (c *clusterNodes) GetOrCreate(addr string) (*clusterNode, error) {
return node, err return node, err
} }
func (c *clusterNodes) get(addr string) (*clusterNode, error) {
var node *clusterNode
var err error
c.mu.RLock()
if c.closed {
err = pool.ErrClosed
} else {
node = c.allNodes[addr]
}
c.mu.RUnlock()
return node, err
}
func (c *clusterNodes) All() ([]*clusterNode, error) { func (c *clusterNodes) All() ([]*clusterNode, error) {
c.mu.RLock() c.mu.RLock()
defer c.mu.RUnlock() defer c.mu.RUnlock()
@ -390,7 +390,7 @@ func (c *clusterNodes) Random() (*clusterNode, error) {
} }
n := rand.Intn(len(addrs)) n := rand.Intn(len(addrs))
return c.GetOrCreate(addrs[n]) return c.Get(addrs[n])
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -448,7 +448,7 @@ func newClusterState(
addr = replaceLoopbackHost(addr, originHost) addr = replaceLoopbackHost(addr, originHost)
} }
node, err := c.nodes.GetOrCreate(addr) node, err := c.nodes.Get(addr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -795,7 +795,7 @@ func (c *ClusterClient) process(ctx context.Context, cmd Cmder) error {
var addr string var addr string
moved, ask, addr = internal.IsMovedError(err) moved, ask, addr = internal.IsMovedError(err)
if moved || ask { if moved || ask {
node, err = c.nodes.GetOrCreate(addr) node, err = c.nodes.Get(addr)
if err != nil { if err != nil {
break break
} }
@ -980,7 +980,7 @@ func (c *ClusterClient) loadState() (*clusterState, error) {
var firstErr error var firstErr error
for _, addr := range addrs { for _, addr := range addrs {
node, err := c.nodes.GetOrCreate(addr) node, err := c.nodes.Get(addr)
if err != nil { if err != nil {
if firstErr == nil { if firstErr == nil {
firstErr = err firstErr = err
@ -1192,7 +1192,7 @@ func (c *ClusterClient) checkMovedErr(
if moved { if moved {
c.state.LazyReload() c.state.LazyReload()
node, err := c.nodes.GetOrCreate(addr) node, err := c.nodes.Get(addr)
if err != nil { if err != nil {
return false return false
} }
@ -1204,7 +1204,7 @@ func (c *ClusterClient) checkMovedErr(
} }
if ask { if ask {
node, err := c.nodes.GetOrCreate(addr) node, err := c.nodes.Get(addr)
if err != nil { if err != nil {
return false return false
} }
@ -1406,7 +1406,7 @@ func (c *ClusterClient) Watch(fn func(*Tx) error, keys ...string) error {
moved, ask, addr := internal.IsMovedError(err) moved, ask, addr := internal.IsMovedError(err)
if moved || ask { if moved || ask {
node, err = c.nodes.GetOrCreate(addr) node, err = c.nodes.Get(addr)
if err != nil { if err != nil {
return err return err
} }