mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 23:15:14 +00:00
Merge pull request #84060 from yutedz/gc-ref-diff
Traverse OwnerReference maps more efficiently
This commit is contained in:
commit
6e0c915f43
@ -409,6 +409,16 @@ func TestProcessEvent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkReferencesDiffs(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for n := 0; n < t.N; n++ {
|
||||
old := []metav1.OwnerReference{{UID: "1"}, {UID: "2"}}
|
||||
new := []metav1.OwnerReference{{UID: "2"}, {UID: "3"}}
|
||||
referencesDiffs(old, new)
|
||||
}
|
||||
}
|
||||
|
||||
// TestDependentsRace relies on golang's data race detector to check if there is
|
||||
// data race among in the dependents field.
|
||||
func TestDependentsRace(t *testing.T) {
|
||||
|
@ -403,27 +403,21 @@ func referencesDiffs(old []metav1.OwnerReference, new []metav1.OwnerReference) (
|
||||
oldUIDToRef[string(value.UID)] = value
|
||||
}
|
||||
oldUIDSet := sets.StringKeySet(oldUIDToRef)
|
||||
newUIDToRef := make(map[string]metav1.OwnerReference)
|
||||
for _, value := range new {
|
||||
newUIDToRef[string(value.UID)] = value
|
||||
}
|
||||
newUIDSet := sets.StringKeySet(newUIDToRef)
|
||||
|
||||
addedUID := newUIDSet.Difference(oldUIDSet)
|
||||
removedUID := oldUIDSet.Difference(newUIDSet)
|
||||
intersection := oldUIDSet.Intersection(newUIDSet)
|
||||
|
||||
for uid := range addedUID {
|
||||
added = append(added, newUIDToRef[uid])
|
||||
}
|
||||
for uid := range removedUID {
|
||||
removed = append(removed, oldUIDToRef[uid])
|
||||
}
|
||||
for uid := range intersection {
|
||||
if !reflect.DeepEqual(oldUIDToRef[uid], newUIDToRef[uid]) {
|
||||
changed = append(changed, ownerRefPair{oldRef: oldUIDToRef[uid], newRef: newUIDToRef[uid]})
|
||||
newUID := string(value.UID)
|
||||
if oldUIDSet.Has(newUID) {
|
||||
if !reflect.DeepEqual(oldUIDToRef[newUID], value) {
|
||||
changed = append(changed, ownerRefPair{oldRef: oldUIDToRef[newUID], newRef: value})
|
||||
}
|
||||
oldUIDSet.Delete(newUID)
|
||||
} else {
|
||||
added = append(added, value)
|
||||
}
|
||||
}
|
||||
for oldUID := range oldUIDSet {
|
||||
removed = append(removed, oldUIDToRef[oldUID])
|
||||
}
|
||||
|
||||
return added, removed, changed
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user