Skip to content

Commit eaa53bf

Browse files
authored
Merge pull request kubernetes-sigs#87 from apelisse/benchmarks
Add benchmarks for merge package
2 parents 059502f + 748f1ce commit eaa53bf

File tree

3 files changed

+432
-0
lines changed

3 files changed

+432
-0
lines changed

merge/deduced_test.go

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,280 @@ func TestDeduced(t *testing.T) {
534534
})
535535
}
536536
}
537+
538+
func BenchmarkDeducedSimple(b *testing.B) {
539+
test := TestCase{
540+
Ops: []Operation{
541+
Apply{
542+
Manager: "default",
543+
APIVersion: "v1",
544+
Object: `
545+
numeric: 1
546+
string: "string"
547+
`,
548+
},
549+
Update{
550+
Manager: "controller",
551+
APIVersion: "v1",
552+
Object: `
553+
numeric: 1
554+
string: "controller string"
555+
bool: true
556+
`,
557+
},
558+
Apply{
559+
Manager: "default",
560+
APIVersion: "v1",
561+
Object: `
562+
numeric: 2
563+
string: "user string"
564+
`,
565+
Conflicts: merge.Conflicts{
566+
merge.Conflict{Manager: "controller", Path: _P("string")},
567+
},
568+
},
569+
ForceApply{
570+
Manager: "default",
571+
APIVersion: "v1",
572+
Object: `
573+
numeric: 2
574+
string: "user string"
575+
`,
576+
},
577+
},
578+
Object: `
579+
numeric: 2
580+
string: "user string"
581+
bool: true
582+
`,
583+
Managed: fieldpath.ManagedFields{
584+
"default": fieldpath.NewVersionedSet(
585+
_NS(
586+
_P("numeric"), _P("string"),
587+
),
588+
"v1",
589+
false,
590+
),
591+
"controller": fieldpath.NewVersionedSet(
592+
_NS(
593+
_P("bool"),
594+
),
595+
"v1",
596+
false,
597+
),
598+
},
599+
}
600+
601+
b.ReportAllocs()
602+
for n := 0; n < b.N; n++ {
603+
if err := test.Test(typed.DeducedParseableType); err != nil {
604+
b.Fatal(err)
605+
}
606+
}
607+
}
608+
609+
func BenchmarkDeducedNested(b *testing.B) {
610+
test := TestCase{
611+
Ops: []Operation{
612+
Apply{
613+
Manager: "default",
614+
APIVersion: "v1",
615+
Object: `
616+
a: 1
617+
b:
618+
c:
619+
d: 2
620+
e:
621+
- 1
622+
- 2
623+
- 3
624+
f:
625+
- name: n
626+
value: 1
627+
`,
628+
},
629+
Update{
630+
Manager: "controller",
631+
APIVersion: "v1",
632+
Object: `
633+
a: 1
634+
b:
635+
c:
636+
d: 3
637+
e:
638+
- 1
639+
- 2
640+
- 3
641+
- 4
642+
f:
643+
- name: n
644+
value: 2
645+
g: 5
646+
`,
647+
},
648+
Apply{
649+
Manager: "default",
650+
APIVersion: "v1",
651+
Object: `
652+
a: 2
653+
b:
654+
c:
655+
d: 2
656+
e:
657+
- 3
658+
- 2
659+
- 1
660+
f:
661+
- name: n
662+
value: 1
663+
`,
664+
Conflicts: merge.Conflicts{
665+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "d")},
666+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "e")},
667+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "f")},
668+
},
669+
},
670+
ForceApply{
671+
Manager: "default",
672+
APIVersion: "v1",
673+
Object: `
674+
a: 2
675+
b:
676+
c:
677+
d: 2
678+
e:
679+
- 3
680+
- 2
681+
- 1
682+
f:
683+
- name: n
684+
value: 1
685+
`,
686+
},
687+
},
688+
Object: `
689+
a: 2
690+
b:
691+
c:
692+
d: 2
693+
e:
694+
- 3
695+
- 2
696+
- 1
697+
f:
698+
- name: n
699+
value: 1
700+
g: 5
701+
`,
702+
}
703+
704+
b.ReportAllocs()
705+
for n := 0; n < b.N; n++ {
706+
if err := test.Test(typed.DeducedParseableType); err != nil {
707+
b.Fatal(err)
708+
}
709+
}
710+
}
711+
712+
func BenchmarkDeducedNestedAcrossVersion(b *testing.B) {
713+
test := TestCase{
714+
Ops: []Operation{
715+
Apply{
716+
Manager: "default",
717+
APIVersion: "v1",
718+
Object: `
719+
a: 1
720+
b:
721+
c:
722+
d: 2
723+
e:
724+
- 1
725+
- 2
726+
- 3
727+
f:
728+
- name: n
729+
value: 1
730+
`,
731+
},
732+
Update{
733+
Manager: "controller",
734+
APIVersion: "v2",
735+
Object: `
736+
a: 1
737+
b:
738+
c:
739+
d: 3
740+
e:
741+
- 1
742+
- 2
743+
- 3
744+
- 4
745+
f:
746+
- name: n
747+
value: 2
748+
g: 5
749+
`,
750+
},
751+
Apply{
752+
Manager: "default",
753+
APIVersion: "v3",
754+
Object: `
755+
a: 2
756+
b:
757+
c:
758+
d: 2
759+
e:
760+
- 3
761+
- 2
762+
- 1
763+
f:
764+
- name: n
765+
value: 1
766+
`,
767+
Conflicts: merge.Conflicts{
768+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "d")},
769+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "e")},
770+
merge.Conflict{Manager: "controller", Path: _P("b", "c", "f")},
771+
},
772+
},
773+
ForceApply{
774+
Manager: "default",
775+
APIVersion: "v3",
776+
Object: `
777+
a: 2
778+
b:
779+
c:
780+
d: 2
781+
e:
782+
- 3
783+
- 2
784+
- 1
785+
f:
786+
- name: n
787+
value: 1
788+
`,
789+
},
790+
},
791+
Object: `
792+
a: 2
793+
b:
794+
c:
795+
d: 2
796+
e:
797+
- 3
798+
- 2
799+
- 1
800+
f:
801+
- name: n
802+
value: 1
803+
g: 5
804+
`,
805+
}
806+
807+
b.ReportAllocs()
808+
for n := 0; n < b.N; n++ {
809+
if err := test.Test(typed.DeducedParseableType); err != nil {
810+
b.Fatal(err)
811+
}
812+
}
813+
}

merge/leaf_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,3 +467,74 @@ func TestUpdateLeaf(t *testing.T) {
467467
})
468468
}
469469
}
470+
471+
func BenchmarkLeafConflictAcrossVersion(b *testing.B) {
472+
test := TestCase{
473+
Ops: []Operation{
474+
Apply{
475+
Manager: "default",
476+
APIVersion: "v1",
477+
Object: `
478+
numeric: 1
479+
string: "string"
480+
`,
481+
},
482+
Update{
483+
Manager: "controller",
484+
APIVersion: "v2",
485+
Object: `
486+
numeric: 1
487+
string: "controller string"
488+
bool: true
489+
`,
490+
},
491+
Apply{
492+
Manager: "default",
493+
APIVersion: "v1",
494+
Object: `
495+
numeric: 2
496+
string: "user string"
497+
`,
498+
Conflicts: merge.Conflicts{
499+
merge.Conflict{Manager: "controller", Path: _P("string")},
500+
},
501+
},
502+
ForceApply{
503+
Manager: "default",
504+
APIVersion: "v1",
505+
Object: `
506+
numeric: 2
507+
string: "user string"
508+
`,
509+
},
510+
},
511+
Object: `
512+
numeric: 2
513+
string: "user string"
514+
bool: true
515+
`,
516+
Managed: fieldpath.ManagedFields{
517+
"default": fieldpath.NewVersionedSet(
518+
_NS(
519+
_P("numeric"), _P("string"),
520+
),
521+
"v1",
522+
false,
523+
),
524+
"controller": fieldpath.NewVersionedSet(
525+
_NS(
526+
_P("bool"),
527+
),
528+
"v2",
529+
false,
530+
),
531+
},
532+
}
533+
534+
b.ReportAllocs()
535+
for n := 0; n < b.N; n++ {
536+
if err := test.Test(leafFieldsParser); err != nil {
537+
b.Fatal(err)
538+
}
539+
}
540+
}

0 commit comments

Comments
 (0)