Fix panic when getting storage type
General
Escalation
General
Escalation
Description
Environment
None
Activity
Eleonora Zinchenko November 24, 2024 at 9:15 PM
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
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
Slava Sarzhan
September 26, 2024 at 5:23 PM
The issue was fixed.
Method
PXCBackupStatus.GetStorageType(PerconaXtraDBCluster)
can produce a panic when passed CR has nilspec.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