From c528bbe843e21dc49b8eceff5a139814532a73d8 Mon Sep 17 00:00:00 2001 From: Lucas Pinheiro Date: Wed, 31 Jan 2024 08:40:37 -0300 Subject: [PATCH] fix: OnAdd() panics when called for running job (#12) --- pkg/controller/job_scheduler.go | 5 +---- pkg/controller/job_scheduler_test.go | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/pkg/controller/job_scheduler.go b/pkg/controller/job_scheduler.go index 42d06ed..fd07714 100644 --- a/pkg/controller/job_scheduler.go +++ b/pkg/controller/job_scheduler.go @@ -310,15 +310,12 @@ func (s *JobScheduler) isJobRunning(logger logr.Logger, jobID string, job *batch return s.kubernetesMajorVersion, s.kubernetesMinorVersion }) - if running { - s.current[jobID].Running = true - } - return running } func (s *JobScheduler) handleInProgress(logger logr.Logger, jobID string, job *batchv1.Job) { if s.isJobRunning(logger, jobID, job) { + s.current[jobID].Running = true logger.Info("Job is running", "for", time.Since(job.Status.StartTime.Time)) return } diff --git a/pkg/controller/job_scheduler_test.go b/pkg/controller/job_scheduler_test.go index 6f05f0e..f0a81be 100644 --- a/pkg/controller/job_scheduler_test.go +++ b/pkg/controller/job_scheduler_test.go @@ -42,7 +42,7 @@ func Test__JobScheduler(t *testing.T) { require.NoError(t, err) - t.Run("job is loaded on startup", func(t *testing.T) { + t.Run("non-running job is loaded on startup", func(t *testing.T) { clear(scheduler.current) defer clear(scheduler.current) @@ -62,6 +62,31 @@ func Test__JobScheduler(t *testing.T) { require.True(t, scheduler.IsCurrentJob(jobID)) }) + t.Run("running job is loaded on startup", func(t *testing.T) { + clear(scheduler.current) + defer clear(scheduler.current) + + jobID := randJobID() + require.False(t, scheduler.IsCurrentJob(jobID)) + + ready := int32(1) + j := &batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + config.JobIDLabel: jobID, + config.AgentTypeLabel: agentType.AgentTypeName, + }, + }, + Status: batchv1.JobStatus{ + Ready: &ready, + }, + } + + scheduler.OnAdd(j, false) + require.True(t, scheduler.IsCurrentJob(jobID)) + require.True(t, scheduler.current[jobID].Running) + }) + t.Run("job is created", func(t *testing.T) { clear(scheduler.current) defer clear(scheduler.current)