Skip to content

Commit 636bb48

Browse files
authored
OCPBUGS-31031: use retrywatcher when watching job (#921)
1 parent d00f74f commit 636bb48

File tree

6 files changed

+629
-8
lines changed

6 files changed

+629
-8
lines changed

pkg/controller/periodic/job.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import (
88
corev1 "k8s.io/api/core/v1"
99
"k8s.io/apimachinery/pkg/api/resource"
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11-
"k8s.io/apimachinery/pkg/watch"
11+
apiWatch "k8s.io/apimachinery/pkg/watch"
1212
"k8s.io/client-go/kubernetes"
13+
"k8s.io/client-go/tools/cache"
14+
"k8s.io/client-go/tools/watch"
1315
)
1416

1517
// JobController type responsible for
@@ -107,24 +109,29 @@ func (j *JobController) CreateGathererJob(ctx context.Context, dataGatherName, i
107109
}
108110

109111
// WaitForJobCompletion listen the Kubernetes events to check if job finished.
110-
func (j *JobController) WaitForJobCompletion(ctx context.Context, jobName string) error {
111-
watcher, err := j.kubeClient.BatchV1().Jobs(insightsNamespace).
112-
Watch(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("metadata.name=%s", jobName)})
112+
func (j *JobController) WaitForJobCompletion(ctx context.Context, job *batchv1.Job) error {
113+
watcherFnc := func(options metav1.ListOptions) (apiWatch.Interface, error) {
114+
return j.kubeClient.BatchV1().Jobs(insightsNamespace).
115+
Watch(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("metadata.name=%s", job.Name)})
116+
}
117+
118+
retryWatcher, err := watch.NewRetryWatcher(job.ResourceVersion, &cache.ListWatch{WatchFunc: watcherFnc})
113119
if err != nil {
114120
return err
115121
}
116-
defer watcher.Stop()
122+
123+
defer retryWatcher.Stop()
117124

118125
for {
119126
select {
120127
case <-ctx.Done():
121128
return ctx.Err()
122-
case event, ok := <-watcher.ResultChan():
129+
case event, ok := <-retryWatcher.ResultChan():
123130
if !ok {
124131
return fmt.Errorf("watcher channel was closed unexpectedly")
125132
}
126133

127-
if event.Type != watch.Modified {
134+
if event.Type != apiWatch.Modified {
128135
continue
129136
}
130137

pkg/controller/periodic/periodic.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ func (c *Controller) runJobAndCheckResults(ctx context.Context, dataGather *insi
346346
}
347347

348348
klog.Infof("Created new gathering job %v", gj.Name)
349-
err = c.jobController.WaitForJobCompletion(ctx, gj.Name)
349+
err = c.jobController.WaitForJobCompletion(ctx, gj)
350350
if err != nil {
351351
if errors.Is(err, context.DeadlineExceeded) {
352352
klog.Errorf("Failed to read job status: %v", err)

vendor/k8s.io/client-go/tools/watch/informerwatcher.go

+150
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)