infinispan / infinispan-operator

Infinispan Operator
https://infinispan.org/docs/infinispan-operator/main/operator.html
Apache License 2.0
47 stars 52 forks source link

Unable to update spec.version when Operand has been removed #2111

Closed ryanemerson closed 2 weeks ago

ryanemerson commented 2 weeks ago

If a user has an existing Infinispan CR with an Operand version that was created using an older Operator, but the Operand version has been removed on Operator upgrade, it's not possible for the user to update spec.version to a supported Operand version as a nil pointer dereference is thrown in the validating webhook:

2024/06/13 09:15:56 http: panic serving 10.128.0.2:37112: runtime error: invalid memory address or nil pointer dereference
goroutine 1227 [running]:
net/http.(*conn).serve.func1()
    /usr/lib/golang/src/net/http/server.go:1868 +0xb9
panic({0x16e10e0?, 0x2778960?})
    /usr/lib/golang/src/runtime/panic.go:920 +0x270
github.com/infinispan/infinispan-operator/pkg/infinispan/version.Operand.LT({0xc00068ccd0, 0xc00068cc80, {0xc00004a51e, 0x74}, 0x0, 0x0}, {0x0, 0x0, {0x0, 0x0}, ...})
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/pkg/infinispan/version/version.go:68 +0xa1
github.com/infinispan/infinispan-operator/api/v1.(*Infinispan).ValidateUpdate(0xc00098c380, {0x1b69fc8?, 0xc00098c700})
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/api/v1/infinispan_webhook.go:192 +0x6d1
sigs.k8s.io/controller-runtime/pkg/webhook/admission.(*validatingHandler).Handle(_, {_, _}, {{{0xc001c9f590, 0x24}, {{0xc001f30180, 0xe}, {0xc001f30158, 0x2}, {0xc001f30190, ...}}, ...}})
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/validator.go:93 +0x74e
sigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).Handle(_, {_, _}, {{{0xc001c9f590, 0x24}, {{0xc001f30180, 0xe}, {0xc001f30158, 0x2}, {0xc001f30190, ...}}, ...}})
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/webhook.go:146 +0x98
sigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).ServeHTTP(0xc0006ff240, {0x7f63ec0cd678?, 0xc001f0c500}, 0xc001f1a200)
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/http.go:98 +0xe70
sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics.InstrumentedHook.InstrumentHandlerInFlight.func1({0x7f63ec0cd678, 0xc001f0c500}, 0x1b6f400?)
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go:40 +0xcb
net/http.HandlerFunc.ServeHTTP(0x1b6f4b0?, {0x7f63ec0cd678?, 0xc001f0c500?}, 0xc0008f9ae8?)
    /usr/lib/golang/src/net/http/server.go:2136 +0x29
github.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerCounter.func1({0x1b6f4b0?, 0xc0000c4460?}, 0xc001f1a200)
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go:117 +0xa5
net/http.HandlerFunc.ServeHTTP(0x0?, {0x1b6f4b0?, 0xc0000c4460?}, 0xc192cc1b0258793a?)
    /usr/lib/golang/src/net/http/server.go:2136 +0x29
github.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerDuration.func2({0x1b6f4b0, 0xc0000c4460}, 0xc001f1a200)
    /remote-source/deps/gomod/src/github.com/infinispan/infinispan-operator/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go:84 +0xb2
net/http.HandlerFunc.ServeHTTP(0x10?, {0x1b6f4b0?, 0xc0000c4460?}, 0xc0000984ac?)
    /usr/lib/golang/src/net/http/server.go:2136 +0x29
net/http.(*ServeMux).ServeHTTP(0x412dc5?, {0x1b6f4b0, 0xc0000c4460}, 0xc001f1a200)
    /usr/lib/golang/src/net/http/server.go:2514 +0x142
net/http.serverHandler.ServeHTTP({0x1b697f8?}, {0x1b6f4b0?, 0xc0000c4460?}, 0x6?)
    /usr/lib/golang/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc001f16510, {0x1b7ba78, 0xc00061f8f0})
    /usr/lib/golang/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 339
    /usr/lib/golang/src/net/http/server.go:3086 +0x5cb