Fix panic when getting storage type

Description

Method PXCBackupStatus.GetStorageType(PerconaXtraDBCluster) can produce a panic when passed CR has nil spec.backup .

Issue raised in forum question: https://forums.percona.com/t/observed-a-panic-in-reconciler-on-the-backup-restore-request-perconaxtradbclusterrestore-pxc-percona-com/30192

Environment

None

Activity

Eleonora Zinchenko 
November 24, 2024 at 9:15 PM

Hi,

Verified. Operator does not segfault if there is no storage in backup source.

Eleonora Zinchenko 
November 4, 2024 at 12:05 PM

Hi

I can still see panic if I remove spec.backup  from cr and try to make restore to this cluster (but no SIGSEGV):

2024-10-31T22:39:22.193Z INFO backup restore request {"controller": "pxcrestore-controller", "namespace": "pxc", "name": "restore1", "reconcileID": "058d8e3a-f74e-4785-92d0-2fe8ccedfdeb"} 2024-10-31T22:39:22.216Z ERROR Observed a panic {"controller": "pxcrestore-controller", "namespace": "pxc", "name": "restore1", "reconcileID": "058d8e3a-f74e-4785-92d0-2fe8ccedfdeb", "panic": "runtime error: invalid memory address or nil pointer dereference", "panicGoValue": "\"invalid memory address or nil pointer dereference\"", "stacktrace": "goroutine 232 [running]:\nk8s.io/apimachinery/pkg/util/runtime.logPanic({0x22b4eb8, 0xc00165a8a0}, {0x1c8dae0, 0x3220790})\n\t/go/pkg/mod/k8s.io/apimachinery@v0.31.2/pkg/util/runtime/runtime.go:107 +0xbc\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile.func1()\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:105 +0x112\npanic({0x1c8dae0?, 0x3220790?})\n\t/usr/local/go/src/runtime/panic.go:770 +0x132\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1.(*BackupContainerOptions).GetEnvVar(0x10000000000?, 0x7f0dd64ab8d0?, {0xc000c5c758?, 0x7f0e1cf06108?})\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1/pxc_types.go:604 +0xc6\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup.restoreJobEnvs(0xc000b0d208, 0xc0010c5040, 0xc0008b4508, {0x0, 0x0}, 0x0)\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/restore.go:303 +0x199\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup.RestoreJob(0xc0010c5040, 0xc000b0d208, 0xc0008b4508, {0xc000803560, 0x2f}, {0x0, 0x0}, 0x0)\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/restore.go:249 +0x150e\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*pvc).Job(0xc000b08e10?)\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/restorer.go:121 +0x32\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*ReconcilePerconaXtraDBClusterRestore).validate(0xc000b08e10?, {0x22b4eb8, 0xc00165a8a0}, 0xc0010c5040, 0x22b4f98?, 0x32be180?)\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/restore.go:80 +0x42\ngithub.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*ReconcilePerconaXtraDBClusterRestore).Reconcile(0xc000b08e10, {0x22b4eb8, 0xc00165a8a0}, {{{0xc0011d8580?, 0x1f4209c?}, {0xc0011d8578?, 0x100?}}})\n\t/go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/controller.go:192 +0xe8e\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile(0xc00165a810?, {0x22b4eb8?, 0xc00165a8a0?}, {{{0xc0011d8580?, 0x0?}, {0xc0011d8578?, 0x0?}}})\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:116 +0xd4\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler(0x22c44e0, {0x22b4ef0, 0xc00075b130}, {{{0xc0011d8580, 0x3}, {0xc0011d8578, 0x8}}})\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:303 +0x3bc\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem(0x22c44e0, {0x22b4ef0, 0xc00075b130})\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:263 +0x21d\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2()\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:224 +0x8a\ncreated by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2 in goroutine 114\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:220 +0x490\n"} runtime.sigpanic /usr/local/go/src/runtime/signal_unix.go:881 github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1.(*BackupContainerOptions).GetEnvVar /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1/pxc_types.go:604 github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup.restoreJobEnvs /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/restore.go:303 github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup.RestoreJob /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/restore.go:249 github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*pvc).Job /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/restorer.go:121 github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*ReconcilePerconaXtraDBClusterRestore).validate /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/restore.go:80 github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore.(*ReconcilePerconaXtraDBClusterRestore).Reconcile /go/src/github.com/percona/percona-xtradb-cluster-operator/pkg/controller/pxcrestore/controller.go:192 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:116 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:303 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:263 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2 /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:224 2024-10-31T22:39:22.216Z ERROR Reconciler error {"controller": "pxcrestore-controller", "namespace": "pxc", "name": "restore1", "reconcileID": "058d8e3a-f74e-4785-92d0-2fe8ccedfdeb", "error": "panic: runtime error: invalid memory address or nil pointer dereference [recovered]"} sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:316 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:263 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2 /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.0/pkg/internal/controller/controller.go:224

Slava Sarzhan 
September 26, 2024 at 5:23 PM

The issue was fixed.

Done

Details

Assignee

Reporter

Labels

Needs QA

Story Points

Sprint

Fix versions

Priority

Created September 5, 2024 at 1:27 PM
Updated December 19, 2024 at 8:11 PM
Resolved November 24, 2024 at 9:15 PM