From 3ca65de38dc4c338d5c81ad50cfdf90be3385e36 Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Wed, 12 Nov 2025 17:19:58 +0200 Subject: [PATCH 1/5] K8SPG-894 upgrade job using the init container from primary sts --- internal/controller/pgupgrade/jobs.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/controller/pgupgrade/jobs.go b/internal/controller/pgupgrade/jobs.go index 9ce675f89..4b0b86dd9 100644 --- a/internal/controller/pgupgrade/jobs.go +++ b/internal/controller/pgupgrade/jobs.go @@ -192,6 +192,20 @@ func (r *PGUpgradeReconciler) generateUpgradeJob( // K8SPG-254: Major upgrade support job.Spec.Template.Spec.InitContainers = upgrade.Spec.InitContainers + // K8SPG-894 + var initContainer *corev1.Container + for i := range startup.Spec.Template.Spec.InitContainers { + container := startup.Spec.Template.Spec.InitContainers[i] + if container.Name == ContainerDatabase+"-init" { + initContainer = &container + break + } + } + + if initContainer != nil { + job.Spec.Template.Spec.InitContainers = append(job.Spec.Template.Spec.InitContainers, *initContainer) + } + volumeMounts := database.VolumeMounts volumeMounts = append(volumeMounts, upgrade.Spec.VolumeMounts...) From bbbc972c7159f7c3c0b3bdad6d75ac967eb2a6e6 Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Wed, 12 Nov 2025 17:44:14 +0200 Subject: [PATCH 2/5] update unit test --- internal/controller/pgupgrade/jobs_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/controller/pgupgrade/jobs_test.go b/internal/controller/pgupgrade/jobs_test.go index 79075b1c2..9888052fd 100644 --- a/internal/controller/pgupgrade/jobs_test.go +++ b/internal/controller/pgupgrade/jobs_test.go @@ -113,6 +113,11 @@ func TestGenerateUpgradeJob(t *testing.T) { startup := &appsv1.StatefulSet{} startup.Spec.Template.Spec = corev1.PodSpec{ + InitContainers: []corev1.Container{ + { + Name: ContainerDatabase + "-init", + }, + }, Containers: []corev1.Container{{ Name: ContainerDatabase, @@ -213,6 +218,9 @@ spec: volumeMounts: - mountPath: /mnt/some/such name: vm1 + initContainers: + - name: database-init + resources: {} restartPolicy: Never volumes: - hostPath: From 2753551c7144e8a0cfd92c15bdefc996f476d366 Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Wed, 12 Nov 2025 17:55:39 +0200 Subject: [PATCH 3/5] configure custom container for the upgrade spec and ensure that everything is considered --- internal/controller/pgupgrade/jobs_test.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/controller/pgupgrade/jobs_test.go b/internal/controller/pgupgrade/jobs_test.go index 9888052fd..00f63c53c 100644 --- a/internal/controller/pgupgrade/jobs_test.go +++ b/internal/controller/pgupgrade/jobs_test.go @@ -110,6 +110,11 @@ func TestGenerateUpgradeJob(t *testing.T) { upgrade.Spec.Resources.Requests = corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("3.14"), } + upgrade.Spec.InitContainers = []corev1.Container{ + { + Name: "upgrade-init-container", + }, + } startup := &appsv1.StatefulSet{} startup.Spec.Template.Spec = corev1.PodSpec{ @@ -219,6 +224,8 @@ spec: - mountPath: /mnt/some/such name: vm1 initContainers: + - name: upgrade-init-container + resources: {} - name: database-init resources: {} restartPolicy: Never From aee9eba21f01b72ccbb5db06ddf64c4dcb61c990 Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Wed, 12 Nov 2025 18:10:42 +0200 Subject: [PATCH 4/5] change order of init containers --- internal/controller/pgupgrade/jobs.go | 10 +++++----- internal/controller/pgupgrade/jobs_test.go | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/controller/pgupgrade/jobs.go b/internal/controller/pgupgrade/jobs.go index 4b0b86dd9..186e550a7 100644 --- a/internal/controller/pgupgrade/jobs.go +++ b/internal/controller/pgupgrade/jobs.go @@ -189,10 +189,7 @@ func (r *PGUpgradeReconciler) generateUpgradeJob( // Replace all containers with one that does the upgrade. job.Spec.Template.Spec.EphemeralContainers = nil - // K8SPG-254: Major upgrade support - job.Spec.Template.Spec.InitContainers = upgrade.Spec.InitContainers - - // K8SPG-894 + // K8SPG-894: find the database init container so that the required scripts are installed var initContainer *corev1.Container for i := range startup.Spec.Template.Spec.InitContainers { container := startup.Spec.Template.Spec.InitContainers[i] @@ -203,9 +200,12 @@ func (r *PGUpgradeReconciler) generateUpgradeJob( } if initContainer != nil { - job.Spec.Template.Spec.InitContainers = append(job.Spec.Template.Spec.InitContainers, *initContainer) + job.Spec.Template.Spec.InitContainers = []corev1.Container{*initContainer} } + // K8SPG-254: Major upgrade support + job.Spec.Template.Spec.InitContainers = append(job.Spec.Template.Spec.InitContainers, upgrade.Spec.InitContainers...) + volumeMounts := database.VolumeMounts volumeMounts = append(volumeMounts, upgrade.Spec.VolumeMounts...) diff --git a/internal/controller/pgupgrade/jobs_test.go b/internal/controller/pgupgrade/jobs_test.go index 00f63c53c..74d499fc8 100644 --- a/internal/controller/pgupgrade/jobs_test.go +++ b/internal/controller/pgupgrade/jobs_test.go @@ -224,10 +224,10 @@ spec: - mountPath: /mnt/some/such name: vm1 initContainers: - - name: upgrade-init-container - resources: {} - name: database-init resources: {} + - name: upgrade-init-container + resources: {} restartPolicy: Never volumes: - hostPath: From a071625bd7694c9579c7b931c5f59ac33b7b9f4b Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Wed, 12 Nov 2025 18:50:34 +0200 Subject: [PATCH 5/5] small refactor --- internal/controller/pgupgrade/jobs.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/internal/controller/pgupgrade/jobs.go b/internal/controller/pgupgrade/jobs.go index c16395487..93b2bad34 100644 --- a/internal/controller/pgupgrade/jobs.go +++ b/internal/controller/pgupgrade/jobs.go @@ -189,22 +189,22 @@ func (r *PGUpgradeReconciler) generateUpgradeJob( // Replace all containers with one that does the upgrade. job.Spec.Template.Spec.EphemeralContainers = nil - // K8SPG-894: find the database init container so that the required scripts are installed - var initContainer *corev1.Container - for i := range startup.Spec.Template.Spec.InitContainers { - container := startup.Spec.Template.Spec.InitContainers[i] - if container.Name == ContainerDatabase+"-init" { - initContainer = &container + // K8SPG-894: Ensure database init container is included for required scripts + var initContainers []corev1.Container + + dbInitContainerName := ContainerDatabase + "-init" + for _, container := range startup.Spec.Template.Spec.InitContainers { + if container.Name == dbInitContainerName { + initContainers = append(initContainers, container) break } } - if initContainer != nil { - job.Spec.Template.Spec.InitContainers = []corev1.Container{*initContainer} + if len(upgrade.Spec.InitContainers) > 0 { + initContainers = append(initContainers, upgrade.Spec.InitContainers...) } - // K8SPG-254: Major upgrade support - job.Spec.Template.Spec.InitContainers = append(job.Spec.Template.Spec.InitContainers, upgrade.Spec.InitContainers...) + job.Spec.Template.Spec.InitContainers = initContainers volumeMounts := database.VolumeMounts volumeMounts = append(volumeMounts, upgrade.Spec.VolumeMounts...)