From 896d45e15abeb65fc4850535a0890587c1c26a9d Mon Sep 17 00:00:00 2001 From: Mohammadreza Khani Date: Fri, 17 Jan 2025 21:11:17 +0330 Subject: [PATCH] fix: resolve crash operator in some cases --- internal/crd/finalizer.go | 6 +++--- internal/managed_job/manager.go | 12 ++++++++---- internal/managed_job/remove.go | 8 +++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/internal/crd/finalizer.go b/internal/crd/finalizer.go index 9b79b3f..8b775dc 100644 --- a/internal/crd/finalizer.go +++ b/internal/crd/finalizer.go @@ -27,14 +27,14 @@ func (crd Crd) manageFinalizer(jobEventObservable rxgo.Observable) { // Perform cleanup pkg.Logger.Debug("[finalizer] stopping managed job", zap.String("name", jobEvent.Job.GetName())) if err := crd.cleanupResources(jobEvent.Job); err != nil { - pkg.Logger.Error("[crd] [manage-finalizer] cleanup failed", zap.Error(err)) + pkg.Logger.Info("[crd] [manage-finalizer] cleanup failed", zap.Error(err)) return } // Remove finalizer controllerutil.RemoveFinalizer(jobEvent.Job, finalizerName) if err := crd.runtimeClient.Update(context.Background(), jobEvent.Job); err != nil { - pkg.Logger.Error("[crd] [manage-finalizer] failed to remove finalizer", zap.Error(err)) + pkg.Logger.Info("[crd] [manage-finalizer] failed to remove finalizer", zap.Error(err)) return } pkg.Logger.Debug("[crd] [manage-finalizer] job removed", zap.String("name", jobEvent.Job.GetName())) @@ -49,7 +49,7 @@ func (crd Crd) manageFinalizer(jobEventObservable rxgo.Observable) { pkg.Logger.Debug("[finalizer] adding job") // Update the resource to add the finalizer if err := crd.runtimeClient.Update(context.Background(), jobEvent.Job); err != nil { - pkg.Logger.Error("[finalizer] failed to add", zap.Error(err)) + pkg.Logger.Info("[finalizer] failed to add", zap.Error(err)) return } } diff --git a/internal/managed_job/manager.go b/internal/managed_job/manager.go index 386ed85..599a413 100644 --- a/internal/managed_job/manager.go +++ b/internal/managed_job/manager.go @@ -50,8 +50,11 @@ func NewManager(client *api.Client, crdInstance *crd.Crd) Manager { go func() { for event := range crd.FinalizerChannel { manager := mgr.GetJob(event) - manager.Stop() - delete(mgr.managedJobs, event) + if manager != nil { + err := manager.Stop() + pkg.Logger.Info("[finalizer]", zap.Error(err)) + delete(mgr.managedJobs, event) + } } }() @@ -129,6 +132,7 @@ func (mgr *Manager) GetJobs() map[types.UID]ManagedJob { return mgr.managedJobs } -func (mgr *Manager) GetJob(id types.UID) ManagedJob { - return mgr.managedJobs[id] +func (mgr *Manager) GetJob(id types.UID) *ManagedJob { + job := mgr.managedJobs[id] + return &job } diff --git a/internal/managed_job/remove.go b/internal/managed_job/remove.go index c007e16..1134347 100644 --- a/internal/managed_job/remove.go +++ b/internal/managed_job/remove.go @@ -1,5 +1,11 @@ package managed_job +import "errors" + func (job *ManagedJob) Stop() error { - return job.client.StopJob(*job.def.Status.JobId) + if job.def.Status.JobId != nil { + return job.client.StopJob(*job.def.Status.JobId) + } else { + return errors.New("job Id not found") + } }