Skip to content

Commit 888a322

Browse files
author
jennybuckley
committed
Round times to nearest second before sorting
1 parent 574acbe commit 888a322

File tree

3 files changed

+27
-16
lines changed

3 files changed

+27
-16
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/capmanagers.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package fieldmanager
1919
import (
2020
"fmt"
2121
"sort"
22-
"time"
2322

2423
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2524
"k8s.io/apimachinery/pkg/runtime"
@@ -78,15 +77,15 @@ func (f *capManagersManager) capUpdateManagers(managed Managed) (newManaged Mana
7877

7978
// If we have more than the maximum, sort the update entries by time, oldest first.
8079
sort.Slice(updaters, func(i, j int) bool {
81-
iTime, jTime, nTime := managed.Times()[updaters[i]], managed.Times()[updaters[j]], &metav1.Time{Time: time.Time{}}
82-
if iTime == nil {
83-
iTime = nTime
80+
iTime, jTime, iSeconds, jSeconds := managed.Times()[updaters[i]], managed.Times()[updaters[j]], int64(0), int64(0)
81+
if iTime != nil {
82+
iSeconds = iTime.Unix()
8483
}
85-
if jTime == nil {
86-
jTime = nTime
84+
if jTime != nil {
85+
jSeconds = jTime.Unix()
8786
}
88-
if !iTime.Equal(jTime) {
89-
return iTime.Before(jTime)
87+
if iSeconds != jSeconds {
88+
return iSeconds < jSeconds
9089
}
9190
return updaters[i] < updaters[j]
9291
})

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"encoding/json"
2121
"fmt"
2222
"sort"
23-
"time"
2423

2524
"k8s.io/apimachinery/pkg/api/meta"
2625
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -194,15 +193,15 @@ func sortEncodedManagedFields(encodedManagedFields []metav1.ManagedFieldsEntry)
194193
return p.Operation < q.Operation
195194
}
196195

197-
ntime := &metav1.Time{Time: time.Time{}}
198-
if p.Time == nil {
199-
p.Time = ntime
196+
pSeconds, qSeconds := int64(0), int64(0)
197+
if p.Time != nil {
198+
pSeconds = p.Time.Unix()
200199
}
201-
if q.Time == nil {
202-
q.Time = ntime
200+
if q.Time != nil {
201+
qSeconds = q.Time.Unix()
203202
}
204-
if !p.Time.Equal(q.Time) {
205-
return p.Time.Before(q.Time)
203+
if pSeconds != qSeconds {
204+
return pSeconds < qSeconds
206205
}
207206

208207
if p.Manager != q.Manager {

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,19 @@ func TestSortEncodedManagedFields(t *testing.T) {
326326
{Manager: "e", Operation: metav1.ManagedFieldsOperationUpdate, Time: parseTimeOrPanic("2003-01-01T01:00:00Z")},
327327
},
328328
},
329+
{
330+
name: "sort drops nanoseconds",
331+
managedFields: []metav1.ManagedFieldsEntry{
332+
{Manager: "c", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 1, time.UTC)}},
333+
{Manager: "a", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 2, time.UTC)}},
334+
{Manager: "b", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 3, time.UTC)}},
335+
},
336+
expected: []metav1.ManagedFieldsEntry{
337+
{Manager: "a", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 2, time.UTC)}},
338+
{Manager: "b", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 3, time.UTC)}},
339+
{Manager: "c", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{time.Date(2000, time.January, 0, 0, 0, 0, 1, time.UTC)}},
340+
},
341+
},
329342
}
330343

331344
for _, test := range tests {

0 commit comments

Comments
 (0)