1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #1687 from aboch/rnm

Fix rename for containers on swarm network
This commit is contained in:
Madhu Venugopal 2017-03-30 07:32:55 -07:00 committed by GitHub
commit 56ae6ff330

View file

@ -584,39 +584,64 @@ func doUpdateHostsFile(n *network, sb *sandbox) bool {
}
func (ep *endpoint) rename(name string) error {
var err error
var (
err error
netWatch *netWatch
ok bool
)
n := ep.getNetwork()
if n == nil {
return fmt.Errorf("network not connected for ep %q", ep.name)
}
n.getController().Lock()
netWatch, ok := n.getController().nmap[n.ID()]
n.getController().Unlock()
c := n.getController()
if !ok {
return fmt.Errorf("watch null for network %q", n.Name())
if c.isAgent() {
if err = ep.deleteServiceInfoFromCluster(); err != nil {
return types.InternalErrorf("Could not delete service state for endpoint %s from cluster on rename: %v", ep.Name(), err)
}
} else {
c.Lock()
netWatch, ok = c.nmap[n.ID()]
c.Unlock()
if !ok {
return fmt.Errorf("watch null for network %q", n.Name())
}
n.updateSvcRecord(ep, c.getLocalEps(netWatch), false)
}
n.updateSvcRecord(ep, n.getController().getLocalEps(netWatch), false)
oldName := ep.name
oldAnonymous := ep.anonymous
ep.name = name
ep.anonymous = false
n.updateSvcRecord(ep, n.getController().getLocalEps(netWatch), true)
defer func() {
if err != nil {
n.updateSvcRecord(ep, n.getController().getLocalEps(netWatch), false)
ep.name = oldName
ep.anonymous = oldAnonymous
n.updateSvcRecord(ep, n.getController().getLocalEps(netWatch), true)
if c.isAgent() {
if err = ep.addServiceInfoToCluster(); err != nil {
return types.InternalErrorf("Could not add service state for endpoint %s to cluster on rename: %v", ep.Name(), err)
}
}()
defer func() {
if err != nil {
ep.deleteServiceInfoFromCluster()
ep.name = oldName
ep.anonymous = oldAnonymous
ep.addServiceInfoToCluster()
}
}()
} else {
n.updateSvcRecord(ep, c.getLocalEps(netWatch), true)
defer func() {
if err != nil {
n.updateSvcRecord(ep, c.getLocalEps(netWatch), false)
ep.name = oldName
ep.anonymous = oldAnonymous
n.updateSvcRecord(ep, c.getLocalEps(netWatch), true)
}
}()
}
// Update the store with the updated name
if err = n.getController().updateToStore(ep); err != nil {
if err = c.updateToStore(ep); err != nil {
return err
}
// After the name change do a dummy endpoint count update to