Skip to content

Commit 61c4397

Browse files
authored
Fix EndTime nil pointer when persisting metrics (#2259)
1 parent dee4354 commit 61c4397

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

pkg/crds/controllers/batch/batchjob_controller_helpers.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import (
4646
kbatch "k8s.io/api/batch/v1"
4747
kcore "k8s.io/api/core/v1"
4848
kerrors "k8s.io/apimachinery/pkg/api/errors"
49+
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4950
ctrl "sigs.k8s.io/controller-runtime"
5051
"sigs.k8s.io/controller-runtime/pkg/client"
5152
)
@@ -462,6 +463,18 @@ func (r *BatchJobReconciler) updateStatus(ctx context.Context, batchJob *batch.B
462463
if worker != nil {
463464
batchJob.Status.EndTime = worker.Status.CompletionTime // assign right away, because it's a pointer
464465

466+
if batchJob.Status.EndTime == nil {
467+
completedTimestampStr, completedTimestampExists := batchJob.Annotations[_completedTimestampAnnotation]
468+
if completedTimestampExists {
469+
ts, err := time.Parse(time.RFC3339, completedTimestampStr)
470+
if err != nil {
471+
return errors.Wrap(err, "failed to parse completed timestamp string")
472+
}
473+
completedTime := v1.NewTime(ts)
474+
batchJob.Status.EndTime = &completedTime
475+
}
476+
}
477+
465478
if worker.Status.Failed == batchJob.Spec.Workers {
466479
batchJobStatus := status.JobWorkerError
467480
for _, condition := range worker.Status.Conditions {
@@ -668,14 +681,20 @@ func getTotalBatchCount(r *BatchJobReconciler, batchJob batch.BatchJob) (int, er
668681
}
669682

670683
func getMetrics(r *BatchJobReconciler, batchJob batch.BatchJob) (metrics.BatchMetrics, error) {
684+
endTime := time.Now()
685+
if batchJob.Status.EndTime != nil {
686+
endTime = batchJob.Status.EndTime.Time
687+
}
688+
671689
jobMetrics, err := batch.GetMetrics(r.Prometheus, spec.JobKey{
672690
ID: batchJob.Name,
673691
APIName: batchJob.Spec.APIName,
674692
Kind: userconfig.BatchAPIKind,
675-
}, batchJob.Status.EndTime.Time)
693+
}, endTime)
676694
if err != nil {
677695
return metrics.BatchMetrics{}, err
678696
}
697+
679698
return jobMetrics, nil
680699
}
681700

0 commit comments

Comments
 (0)