소스 검색

Clear ingress resources on graceful shutdown

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 8 년 전
부모
커밋
ded6e1934a
1개의 변경된 파일26개의 추가작업 그리고 21개의 파일을 삭제
  1. 26 21
      libnetwork/controller.go

+ 26 - 21
libnetwork/controller.go

@@ -324,27 +324,7 @@ func (c *controller) clusterAgentInit() {
 			c.agentClose()
 			c.cleanupServiceBindings("")
 
-			c.Lock()
-			ingressSandbox := c.ingressSandbox
-			c.ingressSandbox = nil
-			c.Unlock()
-
-			if ingressSandbox != nil {
-				if err := ingressSandbox.Delete(); err != nil {
-					log.Warnf("Could not delete ingress sandbox while leaving: %v", err)
-				}
-			}
-
-			n, err := c.NetworkByName("ingress")
-			if err != nil {
-				log.Warnf("Could not find ingress network while leaving: %v", err)
-			}
-
-			if n != nil {
-				if err := n.Delete(); err != nil {
-					log.Warnf("Could not delete ingress network while leaving: %v", err)
-				}
-			}
+			c.clearIngress(true)
 
 			return
 		}
@@ -1108,7 +1088,32 @@ func (c *controller) getIPAMDriver(name string) (ipamapi.Ipam, *ipamapi.Capabili
 }
 
 func (c *controller) Stop() {
+	c.clearIngress(false)
 	c.closeStores()
 	c.stopExternalKeyListener()
 	osl.GC()
 }
+
+func (c *controller) clearIngress(clusterLeave bool) {
+	c.Lock()
+	ingressSandbox := c.ingressSandbox
+	c.ingressSandbox = nil
+	c.Unlock()
+
+	if ingressSandbox != nil {
+		if err := ingressSandbox.Delete(); err != nil {
+			log.Warnf("Could not delete ingress sandbox while leaving: %v", err)
+		}
+	}
+
+	n, err := c.NetworkByName("ingress")
+	if err != nil && clusterLeave {
+		log.Warnf("Could not find ingress network while leaving: %v", err)
+	}
+
+	if n != nil {
+		if err := n.Delete(); err != nil {
+			log.Warnf("Could not delete ingress network while leaving: %v", err)
+		}
+	}
+}