mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	kubectl: fix sort logic for logs
Use a separate sorting algorithm for kubectl logs that sorts from older to newer instead of the other way that ActivePods is doing.
This commit is contained in:
		| @@ -525,6 +525,43 @@ func (f *FakePodControl) Clear() { | ||||
| 	f.Templates = []api.PodTemplateSpec{} | ||||
| } | ||||
|  | ||||
| // ByLogging allows custom sorting of pods so the best one can be picked for getting its logs. | ||||
| type ByLogging []*api.Pod | ||||
|  | ||||
| func (s ByLogging) Len() int      { return len(s) } | ||||
| func (s ByLogging) Swap(i, j int) { s[i], s[j] = s[j], s[i] } | ||||
|  | ||||
| func (s ByLogging) Less(i, j int) bool { | ||||
| 	// 1. assigned < unassigned | ||||
| 	if s[i].Spec.NodeName != s[j].Spec.NodeName && (len(s[i].Spec.NodeName) == 0 || len(s[j].Spec.NodeName) == 0) { | ||||
| 		return len(s[i].Spec.NodeName) > 0 | ||||
| 	} | ||||
| 	// 2. PodRunning < PodUnknown < PodPending | ||||
| 	m := map[api.PodPhase]int{api.PodRunning: 0, api.PodUnknown: 1, api.PodPending: 2} | ||||
| 	if m[s[i].Status.Phase] != m[s[j].Status.Phase] { | ||||
| 		return m[s[i].Status.Phase] < m[s[j].Status.Phase] | ||||
| 	} | ||||
| 	// 3. ready < not ready | ||||
| 	if api.IsPodReady(s[i]) != api.IsPodReady(s[j]) { | ||||
| 		return api.IsPodReady(s[i]) | ||||
| 	} | ||||
| 	// TODO: take availability into account when we push minReadySeconds information from deployment into pods, | ||||
| 	//       see https://github.com/kubernetes/kubernetes/issues/22065 | ||||
| 	// 4. Been ready for more time < less time < empty time | ||||
| 	if api.IsPodReady(s[i]) && api.IsPodReady(s[j]) && !podReadyTime(s[i]).Equal(podReadyTime(s[j])) { | ||||
| 		return afterOrZero(podReadyTime(s[j]), podReadyTime(s[i])) | ||||
| 	} | ||||
| 	// 5. Pods with containers with higher restart counts < lower restart counts | ||||
| 	if maxContainerRestarts(s[i]) != maxContainerRestarts(s[j]) { | ||||
| 		return maxContainerRestarts(s[i]) > maxContainerRestarts(s[j]) | ||||
| 	} | ||||
| 	// 6. older pods < newer pods < empty timestamp pods | ||||
| 	if !s[i].CreationTimestamp.Equal(s[j].CreationTimestamp) { | ||||
| 		return afterOrZero(s[j].CreationTimestamp, s[i].CreationTimestamp) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // ActivePods type allows custom sorting of pods so a controller can pick the best ones to delete. | ||||
| type ActivePods []*api.Pod | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michail Kargakis
					Michail Kargakis