From a73f81ecfafc72ffde06f9f4633d5f68cc884931 Mon Sep 17 00:00:00 2001 From: Avesh Agarwal Date: Thu, 3 Aug 2017 00:56:43 -0400 Subject: [PATCH] Update duplicate strategy implementation. --- pkg/rescheduler/strategies/duplicates.go | 39 +++++++++++++++++++----- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/pkg/rescheduler/strategies/duplicates.go b/pkg/rescheduler/strategies/duplicates.go index 34ecdf1e3..3b0554636 100644 --- a/pkg/rescheduler/strategies/duplicates.go +++ b/pkg/rescheduler/strategies/duplicates.go @@ -17,6 +17,9 @@ limitations under the License. package strategies import ( + "fmt" + "strings" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -24,25 +27,45 @@ import ( "github.com/aveshagarwal/rescheduler/pkg/rescheduler/pod" ) -type creator string -type DuplicatePodsMap [creator][]*v1.Pod +//type creator string +type DuplicatePodsMap map[string][]*v1.Pod -func RemoveDuplicatePods(client clientset.Interface) { +func RemoveDuplicatePods(client clientset.Interface) error { + stopChannel := make(chan struct{}) + nodes, err := node.ReadyNodes(client, stopChannel) + if err != nil { + return err + } + for _, node := range nodes { + fmt.Printf("\nProcessing node: %#v\n", node.Name) + dpm := RemoveDuplicatePodsOnANode(client, node) + for i, j := range dpm { + fmt.Printf("%#v\n", i) + for _, k := range j { + fmt.Printf("Duplicate pod %#v\n", k.Name) + } + } + } } -func RemoveDuplicatePodsOnANode(client clientset.Interface, node *v1.Node) { +func RemoveDuplicatePodsOnANode(client clientset.Interface, node *v1.Node) DuplicatePodsMap { pods := pod.ListPodsOnANode(client, node) + return FindDuplicatePods(pods) } -func FindDuplicatePods(pods []*v1.Pod) { - for i, pod := range pods { - sr, err := pod.CreatorRef(pod[i]) +func FindDuplicatePods(pods []*v1.Pod) DuplicatePodsMap { + dpm := DuplicatePodsMap{} + + for _, pod := range pods { + sr, err := pod.CreatorRef(pod) if err != nil || sr == nil { continue } if pod.IsMirrorPod(pod) || IsDaemonsetPod(sr) || IsPodWithLocalStorage(pod) { continue } - + s := strings.Join([]string{sr.Reference.Kind, sr.Reference.Namespace, sr.Reference.Name}, "/") + append(dpm[s], pod) } + return dpm }