Skip to content

Commit 7bb88e6

Browse files
authored
feat: ensure Copy collector run last (#1688)
* ensure Copy collector run last * * add unit test * reorder in Preflight as well
1 parent be2c212 commit 7bb88e6

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed

pkg/collect/collector.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,3 +286,20 @@ func DedupCollectors(allCollectors []*troubleshootv1beta2.Collect) []*troublesho
286286
}
287287
return finalCollectors
288288
}
289+
290+
// Ensure Copy collectors are last in the list
291+
// This is because copy collectors are expected to copy files from other collectors such as Exec, RunPod, RunDaemonSet
292+
func EnsureCopyLast(allCollectors []Collector) []Collector {
293+
otherCollectors := make([]Collector, 0)
294+
copyCollectors := make([]Collector, 0)
295+
296+
for _, collector := range allCollectors {
297+
if _, ok := collector.(*CollectCopy); ok {
298+
copyCollectors = append(copyCollectors, collector)
299+
} else {
300+
otherCollectors = append(otherCollectors, collector)
301+
}
302+
}
303+
304+
return append(otherCollectors, copyCollectors...)
305+
}

pkg/collect/collector_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,3 +445,84 @@ func TestCollector_DedupCollectors(t *testing.T) {
445445
})
446446
}
447447
}
448+
func TestEnsureCopyLast(t *testing.T) {
449+
tests := []struct {
450+
name string
451+
allCollectors []Collector
452+
want []Collector
453+
}{
454+
{
455+
name: "no copy collectors",
456+
allCollectors: []Collector{
457+
&CollectClusterInfo{},
458+
&CollectClusterResources{},
459+
},
460+
want: []Collector{
461+
&CollectClusterInfo{},
462+
&CollectClusterResources{},
463+
},
464+
},
465+
{
466+
name: "only copy collectors",
467+
allCollectors: []Collector{
468+
&CollectCopy{},
469+
&CollectCopy{},
470+
},
471+
want: []Collector{
472+
&CollectCopy{},
473+
&CollectCopy{},
474+
},
475+
},
476+
{
477+
name: "mixed collectors",
478+
allCollectors: []Collector{
479+
&CollectClusterInfo{},
480+
&CollectCopy{},
481+
&CollectClusterResources{},
482+
&CollectCopy{},
483+
},
484+
want: []Collector{
485+
&CollectClusterInfo{},
486+
&CollectClusterResources{},
487+
&CollectCopy{},
488+
&CollectCopy{},
489+
},
490+
},
491+
{
492+
name: "copy collectors at the beginning",
493+
allCollectors: []Collector{
494+
&CollectCopy{},
495+
&CollectCopy{},
496+
&CollectClusterInfo{},
497+
&CollectClusterResources{},
498+
},
499+
want: []Collector{
500+
&CollectClusterInfo{},
501+
&CollectClusterResources{},
502+
&CollectCopy{},
503+
&CollectCopy{},
504+
},
505+
},
506+
{
507+
name: "copy collectors at the end",
508+
allCollectors: []Collector{
509+
&CollectClusterInfo{},
510+
&CollectClusterResources{},
511+
&CollectCopy{},
512+
&CollectCopy{},
513+
},
514+
want: []Collector{
515+
&CollectClusterInfo{},
516+
&CollectClusterResources{},
517+
&CollectCopy{},
518+
&CollectCopy{},
519+
},
520+
},
521+
}
522+
for _, tt := range tests {
523+
t.Run(tt.name, func(t *testing.T) {
524+
got := EnsureCopyLast(tt.allCollectors)
525+
assert.Equal(t, tt.want, got)
526+
})
527+
}
528+
}

pkg/preflight/collect.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ func CollectWithContext(ctx context.Context, opts CollectOpts, p *troubleshootv1
234234
return collectResult, collect.ErrInsufficientPermissionsToRun
235235
}
236236

237+
// move Copy Collectors if any to the end of the execution list
238+
allCollectors = collect.EnsureCopyLast(allCollectors)
239+
237240
for i, collector := range allCollectors {
238241
_, span := otel.Tracer(constants.LIB_TRACER_NAME).Start(ctx, collector.Title())
239242
span.SetAttributes(attribute.String("type", reflect.TypeOf(collector).String()))

pkg/supportbundle/collect.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ func runCollectors(ctx context.Context, collectors []*troubleshootv1beta2.Collec
139139
return nil, collect.ErrInsufficientPermissionsToRun
140140
}
141141

142+
// move Copy Collectors if any to the end of the execution list
143+
allCollectors = collect.EnsureCopyLast(allCollectors)
144+
142145
for _, collector := range allCollectors {
143146
_, span := otel.Tracer(constants.LIB_TRACER_NAME).Start(ctx, collector.Title())
144147
span.SetAttributes(attribute.String("type", reflect.TypeOf(collector).String()))

0 commit comments

Comments
 (0)