func parallelLeave(t *testing.T, rc libnetwork.Sandbox, ep libnetwork.Endpoint, thrNumber int) { debugf("L%d.", thrNumber) var err error cid := fmt.Sprintf("%drace", thrNumber) sb := sboxes[thrNumber-1] if thrNumber == first { err = ep.Leave(sb) } else { err = sb.Delete() // re add sandbox defer func() { if err == nil { var e error if sboxes[thrNumber-1], e = controller.NewSandbox(cid); e != nil { t.Fatalf("Failed to recreate sandbox %s: %v", cid, e) } } }() } runtime.LockOSThread() if err != nil { if _, ok := err.(types.ForbiddenError); !ok { t.Fatalf("thread %d: %v", thrNumber, err) } debugf("LE%d(%v).", thrNumber, err) } debugf("LD%d.", thrNumber) }
func (container *Container) disconnectFromNetwork(n libnetwork.Network) error { var ( ep libnetwork.Endpoint sbox libnetwork.Sandbox ) s := func(current libnetwork.Endpoint) bool { if sb := current.Info().Sandbox(); sb != nil { if sb.ContainerID() == container.ID { ep = current sbox = sb return true } } return false } n.WalkEndpoints(s) if ep == nil { return fmt.Errorf("container %s is not connected to the network", container.ID) } if err := ep.Leave(sbox); err != nil { return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err) } if err := ep.Delete(); err != nil { return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err) } delete(container.NetworkSettings.Networks, n.Name()) return nil }
func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n libnetwork.Network, force bool) error { var ( ep libnetwork.Endpoint sbox libnetwork.Sandbox ) s := func(current libnetwork.Endpoint) bool { epInfo := current.Info() if epInfo == nil { return false } if sb := epInfo.Sandbox(); sb != nil { if sb.ContainerID() == container.ID { ep = current sbox = sb return true } } return false } n.WalkEndpoints(s) if ep == nil && force { epName := strings.TrimPrefix(container.Name, "/") ep, err := n.EndpointByName(epName) if err != nil { return err } return ep.Delete(force) } if ep == nil { return fmt.Errorf("container %s is not connected to the network", container.ID) } if err := ep.Leave(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 { return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err) } delete(container.NetworkSettings.Networks, n.Name()) if daemon.clusterProvider != nil && n.Info().Dynamic() && !container.Managed { if err := daemon.clusterProvider.DetachNetwork(n.Name(), container.ID); err != nil { logrus.Warnf("error detaching from network %s: %v", n.Name(), err) if err := daemon.clusterProvider.DetachNetwork(n.ID(), container.ID); err != nil { logrus.Warnf("error detaching from network %s: %v", n.ID(), err) } } } return nil }
func parallelLeave(t *testing.T, ep libnetwork.Endpoint, thrNumber int) { debugf("L%d.", thrNumber) err := ep.Leave("racing_container") runtime.LockOSThread() if err != nil { if err != libnetwork.ErrNoContainer && err != libnetwork.ErrInvalidJoin { t.Fatal(err) } debugf("LE%d(%v).", thrNumber, err) } debugf("LD%d.", thrNumber) }
func parallelLeave(t *testing.T, rc libnetwork.Sandbox, ep libnetwork.Endpoint, thrNumber int) { debugf("L%d.", thrNumber) var err error sb := sboxes[thrNumber-1] err = ep.Leave(sb) runtime.LockOSThread() if err != nil { if _, ok := err.(types.ForbiddenError); !ok { t.Fatalf("thread %d: %v", thrNumber, err) } debugf("LE%d(%v).", thrNumber, err) } debugf("LD%d.", thrNumber) }
func disconnectFromNetwork(container *container.Container, n libnetwork.Network, force bool) error { var ( ep libnetwork.Endpoint sbox libnetwork.Sandbox ) s := func(current libnetwork.Endpoint) bool { epInfo := current.Info() if epInfo == nil { return false } if sb := epInfo.Sandbox(); sb != nil { if sb.ContainerID() == container.ID { ep = current sbox = sb return true } } return false } n.WalkEndpoints(s) if ep == nil && force { epName := strings.TrimPrefix(container.Name, "/") ep, err := n.EndpointByName(epName) if err != nil { return err } return ep.Delete(force) } if ep == nil { return fmt.Errorf("container %s is not connected to the network", container.ID) } if err := ep.Leave(sbox); err != nil { return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err) } if err := ep.Delete(false); err != nil { return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err) } delete(container.NetworkSettings.Networks, n.Name()) return nil }
func (container *Container) disconnectFromNetwork(n libnetwork.Network, updateSettings bool) error { var ( ep libnetwork.Endpoint sbox libnetwork.Sandbox ) s := func(current libnetwork.Endpoint) bool { if sb := current.Info().Sandbox(); sb != nil { if sb.ContainerID() == container.ID { ep = current sbox = sb return true } } return false } n.WalkEndpoints(s) if ep == nil { return fmt.Errorf("could not locate network endpoint for container %s", container.ID) } if err := ep.Leave(sbox); err != nil { return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err) } if err := ep.Delete(); err != nil { return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err) } if updateSettings { networks := container.NetworkSettings.Networks for i, s := range networks { sn, err := container.daemon.FindNetwork(s) if err != nil { continue } if sn.Name() == n.Name() { networks = append(networks[:i], networks[i+1:]...) container.NetworkSettings.Networks = networks break } } } return nil }
func parallelLeave(t *testing.T, ep libnetwork.Endpoint, thrNumber int) { debugf("L%d.", thrNumber) var err error if thrNumber == first { err = ep.Leave(fmt.Sprintf("%drace", thrNumber)) } else { err = controller.LeaveAll(fmt.Sprintf("%drace", thrNumber)) } runtime.LockOSThread() if err != nil { if _, ok := err.(libnetwork.ErrNoContainer); !ok { if _, ok := err.(libnetwork.ErrInvalidJoin); !ok { t.Fatalf("thread %d: %v", thrNumber, err) } } debugf("LE%d(%v).", thrNumber, err) } debugf("LD%d.", thrNumber) }