Skip to content

Commit ac4d9a4

Browse files
Add concurrencyPolicy to backup CronJobs
Only one pgBackRest backup can run at a time. A scheduled backup that runs too long can cause the next scheduled backup to fail and retry multiple times. Skip that next one instead. Co-authored-by: Scott Zelenka <szelenka@cisco.com> Issue: #3439
1 parent 80dfa39 commit ac4d9a4

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

internal/controller/postgrescluster/pgbackrest.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2880,8 +2880,9 @@ func (r *Reconciler) reconcilePGBackRestCronJob(
28802880
pgBackRestCronJob := &batchv1.CronJob{
28812881
ObjectMeta: objectmeta,
28822882
Spec: batchv1.CronJobSpec{
2883-
Schedule: *schedule,
2884-
Suspend: &suspend,
2883+
Schedule: *schedule,
2884+
Suspend: &suspend,
2885+
ConcurrencyPolicy: batchv1.ForbidConcurrent,
28852886
JobTemplate: batchv1.JobTemplateSpec{
28862887
ObjectMeta: metav1.ObjectMeta{
28872888
Annotations: annotations,

internal/controller/postgrescluster/pgbackrest_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ topologySpreadConstraints:
528528
// check returned cronjob matches set spec
529529
assert.Equal(t, returnedCronJob.Name, "hippocluster-repo1-full")
530530
assert.Equal(t, returnedCronJob.Spec.Schedule, testCronSchedule)
531+
assert.Equal(t, returnedCronJob.Spec.ConcurrencyPolicy, batchv1.ForbidConcurrent)
531532
assert.Equal(t, returnedCronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Name,
532533
"pgbackrest")
533534
assert.Assert(t, returnedCronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].SecurityContext != &corev1.SecurityContext{})
@@ -3641,6 +3642,7 @@ func TestReconcileScheduledBackups(t *testing.T) {
36413642
// check returned cronjob matches set spec
36423643
assert.Equal(t, returnedCronJob.Name, cronJobName)
36433644
assert.Equal(t, returnedCronJob.Spec.Schedule, testCronSchedule)
3645+
assert.Equal(t, returnedCronJob.Spec.ConcurrencyPolicy, batchv1.ForbidConcurrent)
36443646
assert.Equal(t, returnedCronJob.Spec.JobTemplate.Spec.Template.Spec.PriorityClassName, "some-priority-class")
36453647
assert.Equal(t, returnedCronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Name,
36463648
"pgbackrest")

0 commit comments

Comments
 (0)