浏览代码

NetworksPrune: do not return warnings as error

`NetworksPrune()` is designed to ignore errors
encountered during removal of networks, and only
print them as warnings.

However, the last error encountered was returned
by the function, resulting in the prune command
to be reported as "failing" wheras it did not.

In addition, in situations where a network
failed to be removed, the networks that
_were_ succesfully removed were not reported
back.

This patch changes the function to not return
the error, and to return the list of networks
that were succesfully removed at all times.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 8 年之前
父节点
当前提交
06c4c5f499
共有 1 个文件被更改,包括 26 次插入29 次删除
  1. 26 29
      daemon/prune.go

+ 26 - 29
daemon/prune.go

@@ -190,13 +190,10 @@ func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPrune
 }
 
 // localNetworksPrune removes unused local networks
-func (daemon *Daemon) localNetworksPrune(pruneFilters filters.Args) (*types.NetworksPruneReport, error) {
+func (daemon *Daemon) localNetworksPrune(pruneFilters filters.Args) *types.NetworksPruneReport {
 	rep := &types.NetworksPruneReport{}
 
-	until, err := getUntilFromPruneFilters(pruneFilters)
-	if err != nil {
-		return rep, err
-	}
+	until, _ := getUntilFromPruneFilters(pruneFilters)
 
 	// When the function returns true, the walk will stop.
 	l := func(nw libnetwork.Network) bool {
@@ -204,28 +201,28 @@ func (daemon *Daemon) localNetworksPrune(pruneFilters filters.Args) (*types.Netw
 			return false
 		}
 		nwName := nw.Name()
-		predefined := runconfig.IsPreDefinedNetwork(nwName)
-		if !predefined && len(nw.Endpoints()) == 0 {
-			if err = daemon.DeleteNetwork(nw.ID()); err != nil {
-				logrus.Warnf("could not remove network %s: %v", nwName, err)
-				return false
-			}
-			rep.NetworksDeleted = append(rep.NetworksDeleted, nwName)
+		if runconfig.IsPreDefinedNetwork(nwName) {
+			return false
+		}
+		if len(nw.Endpoints()) > 0 {
+			return false
+		}
+		if err := daemon.DeleteNetwork(nw.ID()); err != nil {
+			logrus.Warnf("could not remove local network %s: %v", nwName, err)
+			return false
 		}
+		rep.NetworksDeleted = append(rep.NetworksDeleted, nwName)
 		return false
 	}
 	daemon.netController.WalkNetworks(l)
-	return rep, err
+	return rep
 }
 
 // clusterNetworksPrune removes unused cluster networks
 func (daemon *Daemon) clusterNetworksPrune(pruneFilters filters.Args) (*types.NetworksPruneReport, error) {
 	rep := &types.NetworksPruneReport{}
 
-	until, err := getUntilFromPruneFilters(pruneFilters)
-	if err != nil {
-		return nil, err
-	}
+	until, _ := getUntilFromPruneFilters(pruneFilters)
 
 	cluster := daemon.GetCluster()
 	networks, err := cluster.GetNetworks()
@@ -248,7 +245,7 @@ func (daemon *Daemon) clusterNetworksPrune(pruneFilters filters.Args) (*types.Ne
 			// we can safely ignore the "network .. is in use" error
 			match := networkIsInUse.FindStringSubmatch(err.Error())
 			if len(match) != 2 || match[1] != nw.ID {
-				logrus.Warnf("could not remove network %s: %v", nw.Name, err)
+				logrus.Warnf("could not remove cluster network %s: %v", nw.Name, err)
 			}
 			continue
 		}
@@ -259,20 +256,20 @@ func (daemon *Daemon) clusterNetworksPrune(pruneFilters filters.Args) (*types.Ne
 
 // NetworksPrune removes unused networks
 func (daemon *Daemon) NetworksPrune(pruneFilters filters.Args) (*types.NetworksPruneReport, error) {
-	rep := &types.NetworksPruneReport{}
-	clusterRep, err := daemon.clusterNetworksPrune(pruneFilters)
-	if err != nil {
-		logrus.Warnf("could not remove cluster networks: %v", err)
-	} else {
-		rep.NetworksDeleted = append(rep.NetworksDeleted, clusterRep.NetworksDeleted...)
+	if _, err := getUntilFromPruneFilters(pruneFilters); err != nil {
+		return nil, err
 	}
-	localRep, err := daemon.localNetworksPrune(pruneFilters)
+
+	clusterRep, err := daemon.clusterNetworksPrune(pruneFilters)
 	if err != nil {
-		logrus.Warnf("could not remove local networks: %v", err)
-	} else {
-		rep.NetworksDeleted = append(rep.NetworksDeleted, localRep.NetworksDeleted...)
+		return nil, fmt.Errorf("could not remove cluster networks: %s", err)
 	}
-	return rep, err
+	rep := &types.NetworksPruneReport{}
+	rep.NetworksDeleted = append(rep.NetworksDeleted, clusterRep.NetworksDeleted...)
+
+	localRep := daemon.localNetworksPrune(pruneFilters)
+	rep.NetworksDeleted = append(rep.NetworksDeleted, localRep.NetworksDeleted...)
+	return rep, nil
 }
 
 func getUntilFromPruneFilters(pruneFilters filters.Args) (time.Time, error) {