From af23a024a15e7341a5ed826875eda881a71aaa7e Mon Sep 17 00:00:00 2001 From: Albin Kerouanton Date: Wed, 29 May 2024 20:25:46 +0200 Subject: [PATCH] libnet: Endpoint: add ctx to Join and Leave Signed-off-by: Albin Kerouanton --- daemon/container_operations.go | 18 +++--- daemon/network.go | 2 +- libnetwork/default_gateway.go | 6 +- libnetwork/endpoint.go | 46 ++++++++-------- libnetwork/libnetwork_internal_test.go | 2 +- libnetwork/libnetwork_linux_test.go | 76 +++++++++++++------------- libnetwork/network.go | 4 +- libnetwork/sandbox.go | 14 ++--- libnetwork/sandbox_unix_test.go | 8 +-- 9 files changed, 88 insertions(+), 88 deletions(-) diff --git a/daemon/container_operations.go b/daemon/container_operations.go index 4ba65e3b3c..f11ceb1906 100644 --- a/daemon/container_operations.go +++ b/daemon/container_operations.go @@ -312,7 +312,7 @@ func (daemon *Daemon) updateNetwork(cfg *config.Config, container *container.Con return fmt.Errorf("Update network failed: %v", err) } - if err := sb.Refresh(sbOptions...); err != nil { + if err := sb.Refresh(context.TODO(), sbOptions...); err != nil { return fmt.Errorf("Update network failed: Failure in refresh sandbox %s: %v", sid, err) } @@ -766,7 +766,7 @@ func (daemon *Daemon) connectToNetwork(ctx context.Context, cfg *config.Config, } defer func() { if retErr != nil { - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.WithoutCancel(ctx), false); err != nil { log.G(ctx).Warnf("Could not rollback container connection to network %s", idOrName) } } @@ -861,10 +861,10 @@ func (daemon *Daemon) ForceEndpointDelete(name string, networkName string) error if err != nil { return err } - return ep.Delete(true) + return ep.Delete(context.TODO(), true) } -func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *libnetwork.Network, force bool) error { +func (daemon *Daemon) disconnectFromNetwork(ctx context.Context, container *container.Container, n *libnetwork.Network, force bool) error { var ( ep *libnetwork.Endpoint sbox *libnetwork.Sandbox @@ -891,18 +891,18 @@ func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *l if err != nil { return err } - return ep.Delete(force) + return ep.Delete(ctx, force) } return fmt.Errorf("container %s is not connected to network %s", container.ID, n.Name()) } - if err := ep.Leave(sbox); err != nil { + if err := ep.Leave(ctx, sbox); err != nil { return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err) } container.NetworkSettings.Ports = getPortMapInfo(sbox) - if err := ep.Delete(false); err != nil { + if err := ep.Delete(ctx, false); err != nil { return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err) } @@ -1087,7 +1087,7 @@ func (daemon *Daemon) ConnectToNetwork(ctx context.Context, container *container } // DisconnectFromNetwork disconnects container from network n. -func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, networkName string, force bool) error { +func (daemon *Daemon) DisconnectFromNetwork(ctx context.Context, container *container.Container, networkName string, force bool) error { n, err := daemon.FindNetwork(networkName) container.Lock() defer container.Unlock() @@ -1110,7 +1110,7 @@ func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, netw return runconfig.ErrConflictHostNetwork } - if err := daemon.disconnectFromNetwork(container, n, false); err != nil { + if err := daemon.disconnectFromNetwork(ctx, container, n, false); err != nil { return err } } else { diff --git a/daemon/network.go b/daemon/network.go index 601b08f415..da99c193be 100644 --- a/daemon/network.go +++ b/daemon/network.go @@ -486,7 +486,7 @@ func (daemon *Daemon) DisconnectContainerFromNetwork(containerName string, netwo } return err } - return daemon.DisconnectFromNetwork(ctr, networkName, force) + return daemon.DisconnectFromNetwork(context.TODO(), ctr, networkName, force) } // GetNetworkDriverList returns the list of plugins drivers diff --git a/libnetwork/default_gateway.go b/libnetwork/default_gateway.go index 68abd248d4..47d48c320f 100644 --- a/libnetwork/default_gateway.go +++ b/libnetwork/default_gateway.go @@ -78,7 +78,7 @@ func (sb *Sandbox) setupDefaultGW() error { defer func() { if err != nil { - if err2 := newEp.Delete(true); err2 != nil { + if err2 := newEp.Delete(context.WithoutCancel(context.TODO()), true); err2 != nil { log.G(context.TODO()).Warnf("Failed to remove gw endpoint for container %s after failing to join the gateway network: %v", sb.containerID, err2) } @@ -99,10 +99,10 @@ func (sb *Sandbox) clearDefaultGW() error { if ep = sb.getEndpointInGWNetwork(); ep == nil { return nil } - if err := ep.sbLeave(sb, false); err != nil { + if err := ep.sbLeave(context.TODO(), sb, false); err != nil { return fmt.Errorf("container %s: endpoint leaving GW Network failed: %v", sb.containerID, err) } - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.TODO(), false); err != nil { return fmt.Errorf("container %s: deleting endpoint on GW Network failed: %v", sb.containerID, err) } return nil diff --git a/libnetwork/endpoint.go b/libnetwork/endpoint.go index 335f3f70b9..14b1e1072e 100644 --- a/libnetwork/endpoint.go +++ b/libnetwork/endpoint.go @@ -697,7 +697,7 @@ func (ep *Endpoint) hasInterface(iName string) bool { } // Leave detaches the network resources populated in the sandbox. -func (ep *Endpoint) Leave(sb *Sandbox) error { +func (ep *Endpoint) Leave(ctx context.Context, sb *Sandbox) error { if sb == nil || sb.ID() == "" || sb.Key() == "" { return types.InvalidParameterErrorf("invalid Sandbox passed to endpoint leave: %v", sb) } @@ -705,10 +705,10 @@ func (ep *Endpoint) Leave(sb *Sandbox) error { sb.joinLeaveStart() defer sb.joinLeaveEnd() - return ep.sbLeave(sb, false) + return ep.sbLeave(ctx, sb, false) } -func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { +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) @@ -746,30 +746,30 @@ func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { if d != nil { if moveExtConn { - log.G(context.TODO()).Debugf("Revoking external connectivity on endpoint %s (%s)", ep.Name(), ep.ID()) + log.G(ctx).Debugf("Revoking external connectivity on endpoint %s (%s)", ep.Name(), ep.ID()) if err := d.RevokeExternalConnectivity(n.id, ep.id); err != nil { - log.G(context.TODO()).Warnf("driver failed revoking external connectivity on endpoint %s (%s): %v", + log.G(ctx).Warnf("driver failed revoking external connectivity on endpoint %s (%s): %v", ep.Name(), ep.ID(), err) } } if err := d.Leave(n.id, ep.id); err != nil { if _, ok := err.(types.MaskableError); !ok { - log.G(context.TODO()).Warnf("driver error disconnecting container %s : %v", ep.name, err) + log.G(ctx).Warnf("driver error disconnecting container %s : %v", ep.name, err) } } } if err := ep.deleteServiceInfoFromCluster(sb, true, "sbLeave"); err != nil { - log.G(context.TODO()).Warnf("Failed to clean up service info on container %s disconnect: %v", ep.name, err) + log.G(ctx).Warnf("Failed to clean up service info on container %s disconnect: %v", ep.name, err) } if err := deleteEpFromResolver(ep.Name(), ep.iface, n.Resolvers()); err != nil { - log.G(context.TODO()).Warnf("Failed to clean up resolver info on container %s disconnect: %v", ep.name, err) + log.G(ctx).Warnf("Failed to clean up resolver info on container %s disconnect: %v", ep.name, err) } if err := sb.clearNetworkResources(ep); err != nil { - log.G(context.TODO()).Warnf("Failed to clean up network resources on container %s disconnect: %v", ep.name, err) + log.G(ctx).Warnf("Failed to clean up network resources on container %s disconnect: %v", ep.name, err) } // Update the store about the sandbox detach only after we @@ -777,12 +777,12 @@ func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { // spurious logs when cleaning up the sandbox when the daemon // ungracefully exits and restarts before completing sandbox // detach but after store has been updated. - if err := n.getController().updateToStore(context.TODO(), ep); err != nil { + if err := n.getController().updateToStore(ctx, ep); err != nil { return err } if e := ep.deleteDriverInfoFromCluster(); e != nil { - log.G(context.TODO()).Errorf("Failed to delete endpoint state for endpoint %s from cluster: %v", ep.Name(), e) + log.G(ctx).Errorf("Failed to delete endpoint state for endpoint %s from cluster: %v", ep.Name(), e) } sb.deleteHostsEntries(n.getSvcRecords(ep)) @@ -798,7 +798,7 @@ func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { // New endpoint providing external connectivity for the sandbox extEp = sb.getGatewayEndpoint() if moveExtConn && extEp != nil { - log.G(context.TODO()).Debugf("Programming external connectivity on endpoint %s (%s)", extEp.Name(), extEp.ID()) + log.G(ctx).Debugf("Programming external connectivity on endpoint %s (%s)", extEp.Name(), extEp.ID()) extN, err := extEp.getNetworkFromStore() if err != nil { return fmt.Errorf("failed to get network from store for programming external connectivity during leave: %v", err) @@ -807,15 +807,15 @@ func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { if err != nil { return fmt.Errorf("failed to get driver for programming external connectivity during leave: %v", err) } - if err := extD.ProgramExternalConnectivity(context.WithoutCancel(context.TODO()), extEp.network.ID(), extEp.ID(), sb.Labels()); err != nil { - log.G(context.TODO()).Warnf("driver failed programming external connectivity on endpoint %s: (%s) %v", + if err := extD.ProgramExternalConnectivity(context.WithoutCancel(ctx), extEp.network.ID(), extEp.ID(), sb.Labels()); err != nil { + log.G(ctx).Warnf("driver failed programming external connectivity on endpoint %s: (%s) %v", extEp.Name(), extEp.ID(), err) } } if !sb.needDefaultGW() { if err := sb.clearDefaultGW(); err != nil { - log.G(context.TODO()).Warnf("Failure while disconnecting sandbox %s (%s) from gateway network: %v", + log.G(ctx).Warnf("Failure while disconnecting sandbox %s (%s) from gateway network: %v", sb.ID(), sb.ContainerID(), err) } } @@ -824,7 +824,7 @@ func (ep *Endpoint) sbLeave(sb *Sandbox, force bool) error { } // Delete deletes and detaches this endpoint from the network. -func (ep *Endpoint) Delete(force bool) error { +func (ep *Endpoint) Delete(ctx context.Context, force bool) error { var err error n, err := ep.getNetworkFromStore() if err != nil { @@ -848,8 +848,8 @@ func (ep *Endpoint) Delete(force bool) error { } if sb != nil { - if e := ep.sbLeave(sb, force); e != nil { - log.G(context.TODO()).Warnf("failed to leave sandbox for endpoint %s : %v", name, e) + if e := ep.sbLeave(context.WithoutCancel(ctx), sb, force); e != nil { + log.G(ctx).Warnf("failed to leave sandbox for endpoint %s : %v", name, e) } } @@ -860,14 +860,14 @@ func (ep *Endpoint) Delete(force bool) error { defer func() { if err != nil && !force { ep.dbExists = false - if e := n.getController().updateToStore(context.WithoutCancel(context.TODO()), ep); e != nil { - log.G(context.TODO()).Warnf("failed to recreate endpoint in store %s : %v", name, e) + if e := n.getController().updateToStore(context.WithoutCancel(ctx), ep); e != nil { + log.G(ctx).Warnf("failed to recreate endpoint in store %s : %v", name, e) } } }() if !n.getController().isSwarmNode() || n.Scope() != scope.Swarm || !n.driverIsMultihost() { - n.updateSvcRecord(context.WithoutCancel(context.TODO()), ep, false) + n.updateSvcRecord(context.WithoutCancel(ctx), ep, false) } if err = ep.deleteEndpoint(force); err != nil && !force { @@ -877,7 +877,7 @@ func (ep *Endpoint) Delete(force bool) error { ep.releaseAddress() if err := n.getEpCnt().DecEndpointCnt(); err != nil { - log.G(context.TODO()).Warnf("failed to decrement endpoint count for ep %s: %v", ep.ID(), err) + log.G(ctx).Warnf("failed to decrement endpoint count for ep %s: %v", ep.ID(), err) } return nil @@ -1208,7 +1208,7 @@ func (c *Controller) cleanupLocalEndpoints() error { continue } log.G(context.TODO()).Infof("Removing stale endpoint %s (%s)", ep.name, ep.id) - if err := ep.Delete(true); err != nil { + if err := ep.Delete(context.WithoutCancel(context.TODO()), true); err != nil { log.G(context.TODO()).Warnf("Could not delete local endpoint %s during endpoint cleanup: %v", ep.name, err) } } diff --git a/libnetwork/libnetwork_internal_test.go b/libnetwork/libnetwork_internal_test.go index ebbfbae1f7..d703b0dbdb 100644 --- a/libnetwork/libnetwork_internal_test.go +++ b/libnetwork/libnetwork_internal_test.go @@ -630,7 +630,7 @@ func TestIpamReleaseOnNetDriverFailures(t *testing.T) { if err != nil { t.Fatal(err) } - defer ep.Delete(false) //nolint:errcheck + defer ep.Delete(context.Background(), false) //nolint:errcheck expectedIP, _ := types.ParseCIDR("10.35.0.1/16") if !types.CompareIPNet(ep.Info().Iface().Address(), expectedIP) { diff --git a/libnetwork/libnetwork_linux_test.go b/libnetwork/libnetwork_linux_test.go index 1f07cced28..e3d2d74de8 100644 --- a/libnetwork/libnetwork_linux_test.go +++ b/libnetwork/libnetwork_linux_test.go @@ -120,12 +120,12 @@ func TestNull(t *testing.T) { t.Fatal(err) } - err = ep.Leave(cnt) + err = ep.Leave(context.Background(), cnt) if err != nil { t.Fatal(err) } - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } @@ -288,7 +288,7 @@ func TestDeleteNetworkWithActiveEndpoints(t *testing.T) { } // Done testing. Now cleanup. - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } @@ -459,7 +459,7 @@ func TestUnknownEndpoint(t *testing.T) { t.Fatal(err) } - err = ep.Delete(false) + err = ep.Delete(context.Background(), false) if err != nil { t.Fatal(err) } @@ -496,7 +496,7 @@ func TestNetworkEndpointsWalkers(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep11.Delete(false); err != nil { + if err := ep11.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -506,7 +506,7 @@ func TestNetworkEndpointsWalkers(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep12.Delete(false); err != nil { + if err := ep12.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -624,7 +624,7 @@ func TestDuplicateEndpoint(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -633,7 +633,7 @@ func TestDuplicateEndpoint(t *testing.T) { defer func() { // Cleanup ep2 as well, else network cleanup might fail for failure cases if ep2 != nil { - if err := ep2.Delete(false); err != nil { + if err := ep2.Delete(context.Background(), false); err != nil { t.Fatal(err) } } @@ -774,7 +774,7 @@ func TestNetworkQuery(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep11.Delete(false); err != nil { + if err := ep11.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -784,7 +784,7 @@ func TestNetworkQuery(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep12.Delete(false); err != nil { + if err := ep12.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -872,7 +872,7 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) { t.Fatal(err) } defer func() { - err = ep.Delete(false) + err = ep.Delete(context.Background(), false) if err != nil { t.Fatal(err) } @@ -893,13 +893,13 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) { t.Fatal(err) } defer func() { - err = ep.Leave(cnt) + err = ep.Leave(context.Background(), cnt) if err != nil { t.Fatal(err) } }() - err = ep.Delete(false) + err = ep.Delete(context.Background(), false) if err == nil { t.Fatal("Expected to fail. But instead succeeded") } @@ -932,7 +932,7 @@ func TestEndpointMultipleJoins(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -966,7 +966,7 @@ func TestEndpointMultipleJoins(t *testing.T) { t.Fatal(err) } defer func() { - err = ep.Leave(sbx1) + err = ep.Leave(context.Background(), sbx1) if err != nil { t.Fatal(err) } @@ -1069,7 +1069,7 @@ func TestContainerInvalidLeave(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -1087,7 +1087,7 @@ func TestContainerInvalidLeave(t *testing.T) { } }() - err = ep.Leave(cnt) + err = ep.Leave(context.Background(), cnt) if err == nil { t.Fatal("Expected to fail leave from an endpoint which has no active join") } @@ -1095,7 +1095,7 @@ func TestContainerInvalidLeave(t *testing.T) { t.Fatalf("Failed with unexpected error type: %T. Desc: %s", err, err.Error()) } - if err = ep.Leave(nil); err == nil { + if err = ep.Leave(context.Background(), nil); err == nil { t.Fatalf("Expected to fail leave nil Sandbox") } if _, ok := err.(types.InvalidParameterError); !ok { @@ -1103,7 +1103,7 @@ func TestContainerInvalidLeave(t *testing.T) { } fsbx := &libnetwork.Sandbox{} - if err = ep.Leave(fsbx); err == nil { + if err = ep.Leave(context.Background(), fsbx); err == nil { t.Fatalf("Expected to fail leave with invalid Sandbox") } if _, ok := err.(types.InvalidParameterError); !ok { @@ -1357,19 +1357,19 @@ func TestHost(t *testing.T) { t.Fatal(err) } - if err := ep1.Leave(sbx1); err != nil { + if err := ep1.Leave(context.Background(), sbx1); err != nil { t.Fatal(err) } - if err := ep2.Leave(sbx2); err != nil { + if err := ep2.Leave(context.Background(), sbx2); err != nil { t.Fatal(err) } - if err := ep1.Delete(false); err != nil { + if err := ep1.Delete(context.Background(), false); err != nil { t.Fatal(err) } - if err := ep2.Delete(false); err != nil { + if err := ep2.Delete(context.Background(), false); err != nil { t.Fatal(err) } @@ -1397,11 +1397,11 @@ func TestHost(t *testing.T) { t.Fatal(err) } - if err := ep3.Leave(sbx2); err != nil { + if err := ep3.Leave(context.Background(), sbx2); err != nil { t.Fatal(err) } - if err := ep3.Delete(false); err != nil { + if err := ep3.Delete(context.Background(), false); err != nil { t.Fatal(err) } } @@ -1449,7 +1449,7 @@ func TestBridgeIpv6FromMac(t *testing.T) { t.Fatalf("Expected %v. Got: %v", expIP, iface.AddressIPv6()) } - if err := ep.Delete(false); err != nil { + if err := ep.Delete(context.Background(), false); err != nil { t.Fatal(err) } @@ -1514,7 +1514,7 @@ func TestEndpointJoin(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep1.Delete(false); err != nil { + if err := ep1.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -1576,7 +1576,7 @@ func TestEndpointJoin(t *testing.T) { t.Fatal(err) } defer func() { - err = ep1.Leave(sb) + err = ep1.Leave(context.Background(), sb) if err != nil { t.Fatal(err) } @@ -1630,7 +1630,7 @@ func TestEndpointJoin(t *testing.T) { t.Fatal(err) } defer func() { - if err := ep2.Delete(false); err != nil { + if err := ep2.Delete(context.Background(), false); err != nil { t.Fatal(err) } }() @@ -1640,7 +1640,7 @@ func TestEndpointJoin(t *testing.T) { t.Fatal(err) } defer func() { - err = ep2.Leave(sb) + err = ep2.Leave(context.Background(), sb) if err != nil { t.Fatal(err) } @@ -1694,7 +1694,7 @@ func externalKeyTest(t *testing.T, reexec bool) { t.Fatal(err) } defer func() { - err = ep.Delete(false) + err = ep.Delete(context.Background(), false) if err != nil { t.Fatal(err) } @@ -1705,7 +1705,7 @@ func externalKeyTest(t *testing.T, reexec bool) { t.Fatal(err) } defer func() { - err = ep2.Delete(false) + err = ep2.Delete(context.Background(), false) if err != nil { t.Fatal(err) } @@ -1729,7 +1729,7 @@ func externalKeyTest(t *testing.T, reexec bool) { t.Fatal(err) } defer func() { - err = ep.Leave(cnt) + err = ep.Leave(context.Background(), cnt) if err != nil { t.Fatal(err) } @@ -1780,7 +1780,7 @@ func externalKeyTest(t *testing.T, reexec bool) { t.Fatal(err) } defer func() { - err = ep2.Leave(sbox) + err = ep2.Leave(context.Background(), sbox) if err != nil { t.Fatal(err) } @@ -1883,14 +1883,14 @@ func TestResolvConf(t *testing.T) { ep, err := n.CreateEndpoint(context.Background(), "ep", tc.epOpts...) assert.NilError(t, err) defer func() { - err := ep.Delete(false) + err := ep.Delete(context.Background(), false) assert.Check(t, err) }() err = ep.Join(context.Background(), sb) assert.NilError(t, err) defer func() { - err := ep.Leave(sb) + err := ep.Leave(context.Background(), sb) assert.Check(t, err) }() @@ -1947,7 +1947,7 @@ func (pt parallelTester) Do(t *testing.T, thrNumber int) error { return errors.Wrapf(err, "thread %d", thrNumber) } } - if err := ep.Leave(sb); err != nil { + if err := ep.Leave(context.Background(), sb); err != nil { if _, ok := err.(types.ForbiddenError); !ok { return errors.Wrapf(err, "thread %d", thrNumber) } @@ -1957,7 +1957,7 @@ func (pt parallelTester) Do(t *testing.T, thrNumber int) error { if err := errors.WithStack(sb.Delete()); err != nil { return err } - return errors.WithStack(ep.Delete(false)) + return errors.WithStack(ep.Delete(context.Background(), false)) } func TestParallel(t *testing.T) { diff --git a/libnetwork/network.go b/libnetwork/network.go index 00316fb439..2dccc5688d 100644 --- a/libnetwork/network.go +++ b/libnetwork/network.go @@ -2139,7 +2139,7 @@ func (n *Network) createLoadBalancerSandbox() (retErr error) { } defer func() { if retErr != nil { - if e := ep.Delete(true); e != nil { + if e := ep.Delete(context.WithoutCancel(context.TODO()), true); e != nil { log.G(context.TODO()).Warnf("could not delete endpoint %s on failure on failure (%v): %v", endpointName, retErr, e) } } @@ -2176,7 +2176,7 @@ func (n *Network) deleteLoadBalancerSandbox() error { } } - if err := endpoint.Delete(true); err != nil { + if err := endpoint.Delete(context.TODO(), true); err != nil { log.G(context.TODO()).Warnf("Failed to delete endpoint %s (%s) in %s: %v", endpoint.Name(), endpoint.ID(), sandboxName, err) // Ignore error and attempt to delete the sandbox. } diff --git a/libnetwork/sandbox.go b/libnetwork/sandbox.go index 17e093d7ec..c80d5e0726 100644 --- a/libnetwork/sandbox.go +++ b/libnetwork/sandbox.go @@ -171,12 +171,12 @@ func (sb *Sandbox) delete(force bool) error { } if !force { - if err := ep.Leave(sb); err != nil { + if err := ep.Leave(context.WithoutCancel(context.TODO()), sb); err != nil { log.G(context.TODO()).Warnf("Failed detaching sandbox %s from endpoint %s: %v\n", sb.ID(), ep.ID(), err) } } - if err := ep.Delete(force); err != nil { + if err := ep.Delete(context.WithoutCancel(context.TODO()), force); err != nil { log.G(context.TODO()).Warnf("Failed deleting endpoint %s: %v\n", ep.ID(), err) } } @@ -244,14 +244,14 @@ func (sb *Sandbox) Rename(name string) error { // Refresh leaves all the endpoints, resets and re-applies the options, // re-joins all the endpoints without destroying the osl sandbox -func (sb *Sandbox) Refresh(options ...SandboxOption) error { +func (sb *Sandbox) Refresh(ctx context.Context, options ...SandboxOption) error { // Store connected endpoints epList := sb.Endpoints() // Detach from all endpoints for _, ep := range epList { - if err := ep.Leave(sb); err != nil { - log.G(context.TODO()).Warnf("Failed detaching sandbox %s from endpoint %s: %v\n", sb.ID(), ep.ID(), err) + if err := ep.Leave(context.WithoutCancel(ctx), sb); err != nil { + log.G(ctx).Warnf("Failed detaching sandbox %s from endpoint %s: %v\n", sb.ID(), ep.ID(), err) } } @@ -266,8 +266,8 @@ func (sb *Sandbox) Refresh(options ...SandboxOption) error { // Re-connect to all endpoints for _, ep := range epList { - if err := ep.Join(context.WithoutCancel(context.TODO()), sb); err != nil { - log.G(context.TODO()).Warnf("Failed attach sandbox %s to endpoint %s: %v\n", sb.ID(), ep.ID(), err) + if err := ep.Join(context.WithoutCancel(ctx), sb); err != nil { + log.G(ctx).Warnf("Failed attach sandbox %s to endpoint %s: %v\n", sb.ID(), ep.ID(), err) } } diff --git a/libnetwork/sandbox_unix_test.go b/libnetwork/sandbox_unix_test.go index f883f7b678..393c432df2 100644 --- a/libnetwork/sandbox_unix_test.go +++ b/libnetwork/sandbox_unix_test.go @@ -163,14 +163,14 @@ func TestSandboxAddMultiPrio(t *testing.T) { t.Fatal("Expected 3 endpoints to be connected to the sandbox.") } - if err := ep3.Leave(sbx); err != nil { + if err := ep3.Leave(context.Background(), sbx); err != nil { t.Fatal(err) } if ctrlr.sandboxes[sid].endpoints[0].ID() != ep2.ID() { t.Fatal("Expected ep2 to be at the top of the heap after removing ep3. But did not find ep2 at the top of the heap") } - if err := ep2.Leave(sbx); err != nil { + if err := ep2.Leave(context.Background(), sbx); err != nil { t.Fatal(err) } if ctrlr.sandboxes[sid].endpoints[0].ID() != ep1.ID() { @@ -265,7 +265,7 @@ func TestSandboxAddSamePrio(t *testing.T) { t.Fatal("Expected epInternal to be at the bottom of the heap. But did not find epInternal at the bottom of the heap") } - if err := epIPv6.Leave(sbx); err != nil { + if err := epIPv6.Leave(context.Background(), sbx); err != nil { t.Fatal(err) } @@ -274,7 +274,7 @@ func TestSandboxAddSamePrio(t *testing.T) { t.Fatal("Expected epNw0 to be at the top of the heap after removing epIPv6. But did not find epNw0 at the top of the heap") } - if err := epNw1.Leave(sbx); err != nil { + if err := epNw1.Leave(context.Background(), sbx); err != nil { t.Fatal(err) }