mirror of
https://github.com/moby/moby.git
synced 2026-08-05 15:40:54 +00:00
Endpoint.sbLeave: don't load ep from store
Because it loaded the Endpoint object from store and operated on that copy rather than its own receiver, sbJoin couldn't successfully roll back on error if the Endpoint was not included in the Sandbox's list of endpoints, or its current state had not been written to store after the error occurred. So, for example, releaseOSSboxResources() would not be called to delete interfaces created in the container's netns. Signed-off-by: Rob Murray <rob.murray@docker.com>
This commit is contained in:
@@ -100,7 +100,7 @@ func (sb *Sandbox) clearDefaultGW() error {
|
||||
if ep = sb.getEndpointInGWNetwork(); ep == nil {
|
||||
return nil
|
||||
}
|
||||
if err := ep.sbLeave(context.TODO(), sb, false); err != nil {
|
||||
if err := ep.sbLeave(context.TODO(), sb, ep.getNetwork(), false); err != nil {
|
||||
return fmt.Errorf("container %s: endpoint leaving GW Network failed: %v", sb.containerID, err)
|
||||
}
|
||||
if err := ep.Delete(context.TODO(), false); err != nil {
|
||||
|
||||
@@ -753,20 +753,20 @@ func (ep *Endpoint) Leave(ctx context.Context, sb *Sandbox) error {
|
||||
sb.joinLeaveMu.Lock()
|
||||
defer sb.joinLeaveMu.Unlock()
|
||||
|
||||
return ep.sbLeave(ctx, sb, false)
|
||||
}
|
||||
|
||||
func (ep *Endpoint) sbLeave(ctx context.Context, sb *Sandbox, force bool) error {
|
||||
n, err := ep.getNetworkFromStore()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get network from store during leave: %v", err)
|
||||
}
|
||||
|
||||
ep, err = n.getEndpointFromStore(ep.ID())
|
||||
storedEp, err := n.getEndpointFromStore(ep.ID())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get endpoint from store during leave: %v", err)
|
||||
}
|
||||
|
||||
return storedEp.sbLeave(ctx, sb, n, false)
|
||||
}
|
||||
|
||||
func (ep *Endpoint) sbLeave(ctx context.Context, sb *Sandbox, n *Network, force bool) error {
|
||||
ctx = log.WithLogger(ctx, log.G(ctx).WithFields(log.Fields{
|
||||
"nid": n.ID(),
|
||||
"net": n.Name(),
|
||||
@@ -920,7 +920,7 @@ func (ep *Endpoint) Delete(ctx context.Context, force bool) error {
|
||||
}
|
||||
|
||||
if sb != nil {
|
||||
if e := ep.sbLeave(context.WithoutCancel(ctx), sb, force); e != nil {
|
||||
if e := ep.sbLeave(context.WithoutCancel(ctx), sb, n, force); e != nil {
|
||||
log.G(ctx).Warnf("failed to leave sandbox for endpoint %s : %v", name, e)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user