cluster: avoid recursive readlock on swarm info
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com> (cherry picked from commit ee1be71e9dc52db8a7ac951ba96f18a5c894806a) Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
@@ -194,9 +194,9 @@ func (c *Cluster) Join(req types.JoinRequest) error {
|
||||
|
||||
// Inspect retrieves the configuration properties of a managed swarm cluster.
|
||||
func (c *Cluster) Inspect() (types.Swarm, error) {
|
||||
var swarm *swarmapi.Cluster
|
||||
var swarm types.Swarm
|
||||
if err := c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
|
||||
s, err := getSwarm(ctx, state.controlClient)
|
||||
s, err := c.inspect(ctx, state)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -205,7 +205,15 @@ func (c *Cluster) Inspect() (types.Swarm, error) {
|
||||
}); err != nil {
|
||||
return types.Swarm{}, err
|
||||
}
|
||||
return convert.SwarmFromGRPC(*swarm), nil
|
||||
return swarm, nil
|
||||
}
|
||||
|
||||
func (c *Cluster) inspect(ctx context.Context, state nodeState) (types.Swarm, error) {
|
||||
s, err := getSwarm(ctx, state.controlClient)
|
||||
if err != nil {
|
||||
return types.Swarm{}, err
|
||||
}
|
||||
return convert.SwarmFromGRPC(*s), nil
|
||||
}
|
||||
|
||||
// Update updates configuration of a managed swarm cluster.
|
||||
@@ -409,7 +417,7 @@ func (c *Cluster) Info() types.Info {
|
||||
|
||||
if state.IsActiveManager() {
|
||||
info.ControlAvailable = true
|
||||
swarm, err := c.Inspect()
|
||||
swarm, err := c.inspect(ctx, state)
|
||||
if err != nil {
|
||||
info.Error = err.Error()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user