diff --git a/changelogs/unreleased/9048-sseago b/changelogs/unreleased/9048-sseago new file mode 100644 index 000000000..a78a6e1a9 --- /dev/null +++ b/changelogs/unreleased/9048-sseago @@ -0,0 +1 @@ +Allow for proper tracking of multiple hooks per container diff --git a/internal/hook/hook_tracker.go b/internal/hook/hook_tracker.go index afcb334ea..c73befc65 100644 --- a/internal/hook/hook_tracker.go +++ b/internal/hook/hook_tracker.go @@ -46,6 +46,9 @@ type hookKey struct { // Container indicates the container hooks use. // For hooks specified in the backup/restore spec, the container might be the same under different hookName. container string + // hookIndex contains the slice index for the specific hook, in order to track multiple hooks + // for the same container + hookIndex int } // hookStatus records the execution status of a specific hook. @@ -83,7 +86,7 @@ func NewHookTracker() *HookTracker { // Add adds a hook to the hook tracker // Add must precede the Record for each individual hook. // In other words, a hook must be added to the tracker before its execution result is recorded. -func (ht *HookTracker) Add(podNamespace, podName, container, source, hookName string, hookPhase HookPhase) { +func (ht *HookTracker) Add(podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookIndex int) { ht.lock.Lock() defer ht.lock.Unlock() @@ -94,6 +97,7 @@ func (ht *HookTracker) Add(podNamespace, podName, container, source, hookName st container: container, hookPhase: hookPhase, hookName: hookName, + hookIndex: hookIndex, } if _, ok := ht.tracker[key]; !ok { @@ -108,7 +112,7 @@ func (ht *HookTracker) Add(podNamespace, podName, container, source, hookName st // Record records the hook's execution status // Add must precede the Record for each individual hook. // In other words, a hook must be added to the tracker before its execution result is recorded. -func (ht *HookTracker) Record(podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookFailed bool, hookErr error) error { +func (ht *HookTracker) Record(podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookIndex int, hookFailed bool, hookErr error) error { ht.lock.Lock() defer ht.lock.Unlock() @@ -119,6 +123,7 @@ func (ht *HookTracker) Record(podNamespace, podName, container, source, hookName container: container, hookPhase: hookPhase, hookName: hookName, + hookIndex: hookIndex, } if _, ok := ht.tracker[key]; !ok { @@ -179,24 +184,24 @@ func NewMultiHookTracker() *MultiHookTracker { } // Add adds a backup/restore hook to the tracker -func (mht *MultiHookTracker) Add(name, podNamespace, podName, container, source, hookName string, hookPhase HookPhase) { +func (mht *MultiHookTracker) Add(name, podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookIndex int) { mht.lock.Lock() defer mht.lock.Unlock() if _, ok := mht.trackers[name]; !ok { mht.trackers[name] = NewHookTracker() } - mht.trackers[name].Add(podNamespace, podName, container, source, hookName, hookPhase) + mht.trackers[name].Add(podNamespace, podName, container, source, hookName, hookPhase, hookIndex) } // Record records a backup/restore hook execution status -func (mht *MultiHookTracker) Record(name, podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookFailed bool, hookErr error) error { +func (mht *MultiHookTracker) Record(name, podNamespace, podName, container, source, hookName string, hookPhase HookPhase, hookIndex int, hookFailed bool, hookErr error) error { mht.lock.RLock() defer mht.lock.RUnlock() var err error if _, ok := mht.trackers[name]; ok { - err = mht.trackers[name].Record(podNamespace, podName, container, source, hookName, hookPhase, hookFailed, hookErr) + err = mht.trackers[name].Record(podNamespace, podName, container, source, hookName, hookPhase, hookIndex, hookFailed, hookErr) } else { err = fmt.Errorf("the backup/restore not exist in hook tracker, backup/restore name: %s", name) } diff --git a/internal/hook/hook_tracker_test.go b/internal/hook/hook_tracker_test.go index 6376065d4..31e349160 100644 --- a/internal/hook/hook_tracker_test.go +++ b/internal/hook/hook_tracker_test.go @@ -34,7 +34,7 @@ func TestNewHookTracker(t *testing.T) { func TestHookTracker_Add(t *testing.T) { tracker := NewHookTracker() - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) key := hookKey{ podNamespace: "ns1", @@ -51,8 +51,8 @@ func TestHookTracker_Add(t *testing.T) { func TestHookTracker_Record(t *testing.T) { tracker := NewHookTracker() - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - err := tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + err := tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) key := hookKey{ podNamespace: "ns1", @@ -68,10 +68,10 @@ func TestHookTracker_Record(t *testing.T) { assert.True(t, info.hookExecuted) require.NoError(t, err) - err = tracker.Record("ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + err = tracker.Record("ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) require.Error(t, err) - err = tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", false, nil) + err = tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, false, nil) require.NoError(t, err) assert.True(t, info.hookFailed) } @@ -79,29 +79,30 @@ func TestHookTracker_Record(t *testing.T) { func TestHookTracker_Stat(t *testing.T) { tracker := NewHookTracker() - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - tracker.Add("ns2", "pod2", "container1", HookSourceAnnotation, "h2", "") - tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + tracker.Add("ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 0) + tracker.Add("ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 1) + tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) attempted, failed := tracker.Stat() - assert.Equal(t, 2, attempted) + assert.Equal(t, 3, attempted) assert.Equal(t, 1, failed) } func TestHookTracker_IsComplete(t *testing.T) { tracker := NewHookTracker() - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre) - tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, true, fmt.Errorf("err")) + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, 0) + tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, 0, true, fmt.Errorf("err")) assert.True(t, tracker.IsComplete()) - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) assert.False(t, tracker.IsComplete()) } func TestHookTracker_HookErrs(t *testing.T) { tracker := NewHookTracker() - tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + tracker.Add("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + tracker.Record("ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) hookErrs := tracker.HookErrs() assert.Len(t, hookErrs, 1) @@ -110,7 +111,7 @@ func TestHookTracker_HookErrs(t *testing.T) { func TestMultiHookTracker_Add(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) key := hookKey{ podNamespace: "ns1", @@ -119,6 +120,7 @@ func TestMultiHookTracker_Add(t *testing.T) { hookPhase: "", hookSource: HookSourceAnnotation, hookName: "h1", + hookIndex: 0, } _, ok := mht.trackers["restore1"].tracker[key] @@ -127,8 +129,8 @@ func TestMultiHookTracker_Add(t *testing.T) { func TestMultiHookTracker_Record(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - err := mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + err := mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) key := hookKey{ podNamespace: "ns1", @@ -137,6 +139,7 @@ func TestMultiHookTracker_Record(t *testing.T) { hookPhase: "", hookSource: HookSourceAnnotation, hookName: "h1", + hookIndex: 0, } info := mht.trackers["restore1"].tracker[key] @@ -144,29 +147,31 @@ func TestMultiHookTracker_Record(t *testing.T) { assert.True(t, info.hookExecuted) require.NoError(t, err) - err = mht.Record("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + err = mht.Record("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) require.Error(t, err) - err = mht.Record("restore2", "ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + err = mht.Record("restore2", "ns2", "pod2", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) assert.Error(t, err) } func TestMultiHookTracker_Stat(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - mht.Add("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "") - mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) - mht.Record("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", false, nil) + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + mht.Add("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 0) + mht.Add("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 1) + mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) + mht.Record("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 0, false, nil) + mht.Record("restore1", "ns2", "pod2", "container1", HookSourceAnnotation, "h2", "", 1, false, nil) attempted, failed := mht.Stat("restore1") - assert.Equal(t, 2, attempted) + assert.Equal(t, 3, attempted) assert.Equal(t, 1, failed) } func TestMultiHookTracker_Delete(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) mht.Delete("restore1") _, ok := mht.trackers["restore1"] @@ -175,11 +180,11 @@ func TestMultiHookTracker_Delete(t *testing.T) { func TestMultiHookTracker_IsComplete(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("backup1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre) - mht.Record("backup1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, true, fmt.Errorf("err")) + mht.Add("backup1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, 0) + mht.Record("backup1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", PhasePre, 0, true, fmt.Errorf("err")) assert.True(t, mht.IsComplete("backup1")) - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) assert.False(t, mht.IsComplete("restore1")) assert.True(t, mht.IsComplete("restore2")) @@ -187,8 +192,8 @@ func TestMultiHookTracker_IsComplete(t *testing.T) { func TestMultiHookTracker_HookErrs(t *testing.T) { mht := NewMultiHookTracker() - mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "") - mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", true, fmt.Errorf("err")) + mht.Add("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0) + mht.Record("restore1", "ns1", "pod1", "container1", HookSourceAnnotation, "h1", "", 0, true, fmt.Errorf("err")) hookErrs := mht.HookErrs("restore1") assert.Len(t, hookErrs, 1) diff --git a/internal/hook/item_hook_handler.go b/internal/hook/item_hook_handler.go index af8e84a04..52dd815ab 100644 --- a/internal/hook/item_hook_handler.go +++ b/internal/hook/item_hook_handler.go @@ -223,7 +223,7 @@ func (h *DefaultItemHookHandler) HandleHooks( hookFromAnnotations = getPodExecHookFromAnnotations(metadata.GetAnnotations(), "", log) } if hookFromAnnotations != nil { - hookTracker.Add(namespace, name, hookFromAnnotations.Container, HookSourceAnnotation, "", phase) + hookTracker.Add(namespace, name, hookFromAnnotations.Container, HookSourceAnnotation, "", phase, 0) hookLog := log.WithFields( logrus.Fields{ @@ -239,7 +239,7 @@ func (h *DefaultItemHookHandler) HandleHooks( hookLog.WithError(errExec).Error("Error executing hook") hookFailed = true } - errTracker := hookTracker.Record(namespace, name, hookFromAnnotations.Container, HookSourceAnnotation, "", phase, hookFailed, errExec) + errTracker := hookTracker.Record(namespace, name, hookFromAnnotations.Container, HookSourceAnnotation, "", phase, 0, hookFailed, errExec) if errTracker != nil { hookLog.WithError(errTracker).Warn("Error recording the hook in hook tracker") } @@ -267,10 +267,10 @@ func (h *DefaultItemHookHandler) HandleHooks( hooks = resourceHook.Post } - for _, hook := range hooks { + for i, hook := range hooks { if groupResource == kuberesource.Pods { if hook.Exec != nil { - hookTracker.Add(namespace, name, hook.Exec.Container, HookSourceSpec, resourceHook.Name, phase) + hookTracker.Add(namespace, name, hook.Exec.Container, HookSourceSpec, resourceHook.Name, phase, i) // The remaining hooks will only be executed if modeFailError is nil. // Otherwise, execution will stop and only hook collection will occur. if modeFailError == nil { @@ -291,7 +291,7 @@ func (h *DefaultItemHookHandler) HandleHooks( modeFailError = err } } - errTracker := hookTracker.Record(namespace, name, hook.Exec.Container, HookSourceSpec, resourceHook.Name, phase, hookFailed, err) + errTracker := hookTracker.Record(namespace, name, hook.Exec.Container, HookSourceSpec, resourceHook.Name, phase, i, hookFailed, err) if errTracker != nil { hookLog.WithError(errTracker).Warn("Error recording the hook in hook tracker") } @@ -534,6 +534,11 @@ type PodExecRestoreHook struct { HookSource string Hook velerov1api.ExecRestoreHook executed bool + // hookIndex contains the slice index for the specific hook from the restore spec + // in order to track multiple hooks. Stored here because restore hook results are recorded + // outside of the original slice iteration + // for the same container + hookIndex int } // GroupRestoreExecHooks returns a list of hooks to be executed in a pod grouped by @@ -561,12 +566,13 @@ func GroupRestoreExecHooks( if hookFromAnnotation.Container == "" { hookFromAnnotation.Container = pod.Spec.Containers[0].Name } - hookTrack.Add(restoreName, metadata.GetNamespace(), metadata.GetName(), hookFromAnnotation.Container, HookSourceAnnotation, "", HookPhase("")) + hookTrack.Add(restoreName, metadata.GetNamespace(), metadata.GetName(), hookFromAnnotation.Container, HookSourceAnnotation, "", HookPhase(""), 0) byContainer[hookFromAnnotation.Container] = []PodExecRestoreHook{ { HookName: "", HookSource: HookSourceAnnotation, Hook: *hookFromAnnotation, + hookIndex: 0, }, } return byContainer, nil @@ -579,7 +585,7 @@ func GroupRestoreExecHooks( if !rrh.Selector.applicableTo(kuberesource.Pods, namespace, labels) { continue } - for _, rh := range rrh.RestoreHooks { + for i, rh := range rrh.RestoreHooks { if rh.Exec == nil { continue } @@ -587,6 +593,7 @@ func GroupRestoreExecHooks( HookName: rrh.Name, Hook: *rh.Exec, HookSource: HookSourceSpec, + hookIndex: i, } // default to false if attr WaitForReady not set if named.Hook.WaitForReady == nil { @@ -596,7 +603,7 @@ func GroupRestoreExecHooks( if named.Hook.Container == "" { named.Hook.Container = pod.Spec.Containers[0].Name } - hookTrack.Add(restoreName, metadata.GetNamespace(), metadata.GetName(), named.Hook.Container, HookSourceSpec, rrh.Name, HookPhase("")) + hookTrack.Add(restoreName, metadata.GetNamespace(), metadata.GetName(), named.Hook.Container, HookSourceSpec, rrh.Name, HookPhase(""), i) byContainer[named.Hook.Container] = append(byContainer[named.Hook.Container], named) } } diff --git a/internal/hook/item_hook_handler_test.go b/internal/hook/item_hook_handler_test.go index f7c7296cf..37f1500a3 100644 --- a/internal/hook/item_hook_handler_test.go +++ b/internal/hook/item_hook_handler_test.go @@ -1151,6 +1151,7 @@ func TestGroupRestoreExecHooks(t *testing.T) { WaitTimeout: metav1.Duration{Duration: time.Minute}, WaitForReady: boolptr.False(), }, + hookIndex: 0, }, { HookName: "hook1", @@ -1163,6 +1164,7 @@ func TestGroupRestoreExecHooks(t *testing.T) { WaitTimeout: metav1.Duration{Duration: time.Minute * 2}, WaitForReady: boolptr.False(), }, + hookIndex: 2, }, { HookName: "hook2", @@ -1175,6 +1177,7 @@ func TestGroupRestoreExecHooks(t *testing.T) { WaitTimeout: metav1.Duration{Duration: time.Minute * 4}, WaitForReady: boolptr.True(), }, + hookIndex: 0, }, }, "container2": { @@ -1189,6 +1192,7 @@ func TestGroupRestoreExecHooks(t *testing.T) { WaitTimeout: metav1.Duration{Duration: time.Second * 3}, WaitForReady: boolptr.False(), }, + hookIndex: 1, }, }, }, diff --git a/internal/hook/wait_exec_hook_handler.go b/internal/hook/wait_exec_hook_handler.go index 45ff61815..ce947e85a 100644 --- a/internal/hook/wait_exec_hook_handler.go +++ b/internal/hook/wait_exec_hook_handler.go @@ -169,7 +169,7 @@ func (e *DefaultWaitExecHookHandler) HandleHooks( hookLog.Error(err) errors = append(errors, err) - errTracker := multiHookTracker.Record(restoreName, newPod.Namespace, newPod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), true, err) + errTracker := multiHookTracker.Record(restoreName, newPod.Namespace, newPod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), i, true, err) if errTracker != nil { hookLog.WithError(errTracker).Warn("Error recording the hook in hook tracker") } @@ -195,7 +195,7 @@ func (e *DefaultWaitExecHookHandler) HandleHooks( hookFailed = true } - errTracker := multiHookTracker.Record(restoreName, newPod.Namespace, newPod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), hookFailed, hookErr) + errTracker := multiHookTracker.Record(restoreName, newPod.Namespace, newPod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), i, hookFailed, hookErr) if errTracker != nil { hookLog.WithError(errTracker).Warn("Error recording the hook in hook tracker") } @@ -239,7 +239,7 @@ func (e *DefaultWaitExecHookHandler) HandleHooks( // containers to become ready. // Each unexecuted hook is logged as an error and this error will be returned from this function. for _, hooks := range byContainer { - for _, hook := range hooks { + for i, hook := range hooks { if hook.executed { continue } @@ -252,7 +252,7 @@ func (e *DefaultWaitExecHookHandler) HandleHooks( }, ) - errTracker := multiHookTracker.Record(restoreName, pod.Namespace, pod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), true, err) + errTracker := multiHookTracker.Record(restoreName, pod.Namespace, pod.Name, hook.Hook.Container, hook.HookSource, hook.HookName, HookPhase(""), i, true, err) if errTracker != nil { hookLog.WithError(errTracker).Warn("Error recording the hook in hook tracker") } diff --git a/internal/hook/wait_exec_hook_handler_test.go b/internal/hook/wait_exec_hook_handler_test.go index 994b5baee..8fccca5db 100644 --- a/internal/hook/wait_exec_hook_handler_test.go +++ b/internal/hook/wait_exec_hook_handler_test.go @@ -1007,17 +1007,17 @@ func TestRestoreHookTrackerUpdate(t *testing.T) { } hookTracker1 := NewMultiHookTracker() - hookTracker1.Add("restore1", "default", "my-pod", "container1", HookSourceAnnotation, "", HookPhase("")) + hookTracker1.Add("restore1", "default", "my-pod", "container1", HookSourceAnnotation, "", HookPhase(""), 0) hookTracker2 := NewMultiHookTracker() - hookTracker2.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase("")) + hookTracker2.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase(""), 0) hookTracker3 := NewMultiHookTracker() - hookTracker3.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase("")) - hookTracker3.Add("restore1", "default", "my-pod", "container2", HookSourceSpec, "my-hook-2", HookPhase("")) + hookTracker3.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase(""), 0) + hookTracker3.Add("restore1", "default", "my-pod", "container2", HookSourceSpec, "my-hook-2", HookPhase(""), 0) hookTracker4 := NewMultiHookTracker() - hookTracker4.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase("")) + hookTracker4.Add("restore1", "default", "my-pod", "container1", HookSourceSpec, "my-hook-1", HookPhase(""), 0) tests1 := []struct { name string diff --git a/pkg/controller/restore_finalizer_controller_test.go b/pkg/controller/restore_finalizer_controller_test.go index 9189bd63a..18f2b3c48 100644 --- a/pkg/controller/restore_finalizer_controller_test.go +++ b/pkg/controller/restore_finalizer_controller_test.go @@ -471,14 +471,14 @@ func TestWaitRestoreExecHook(t *testing.T) { hookTracker2 := hook.NewMultiHookTracker() restoreName2 := "restore2" - hookTracker2.Add(restoreName2, "ns", "pod", "con1", "s1", "h1", "") - hookTracker2.Record(restoreName2, "ns", "pod", "con1", "s1", "h1", "", false, nil) + hookTracker2.Add(restoreName2, "ns", "pod", "con1", "s1", "h1", "", 0) + hookTracker2.Record(restoreName2, "ns", "pod", "con1", "s1", "h1", "", 0, false, nil) hookTracker3 := hook.NewMultiHookTracker() restoreName3 := "restore3" podNs, podName, container, source, hookName := "ns", "pod", "con1", "s1", "h1" hookFailed, hookErr := true, fmt.Errorf("hook failed") - hookTracker3.Add(restoreName3, podNs, podName, container, source, hookName, hook.PhasePre) + hookTracker3.Add(restoreName3, podNs, podName, container, source, hookName, hook.PhasePre, 0) tests := []struct { name string @@ -546,7 +546,7 @@ func TestWaitRestoreExecHook(t *testing.T) { if tc.waitSec > 0 { go func() { time.Sleep(time.Second * time.Duration(tc.waitSec)) - tc.hookTracker.Record(tc.restore.Name, tc.podNs, tc.podName, tc.Container, tc.Source, tc.hookName, hook.PhasePre, tc.hookFailed, tc.hookErr) + tc.hookTracker.Record(tc.restore.Name, tc.podNs, tc.podName, tc.Container, tc.Source, tc.hookName, hook.PhasePre, 0, tc.hookFailed, tc.hookErr) }() }