Skip to content

Commit e6afe60

Browse files
authored
K8SPSMDB-1466 improve MCS error handling to prevent operator crashes (#2044)
* K8SPSMDB-1466 improve MCS error handling to prevent operator crashes * add more logs :) * improve tests
1 parent 2f4bad7 commit e6afe60

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

cmd/manager/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func main() {
148148
os.Exit(1)
149149
}
150150

151-
if err := mcs.Register(discovery.NewDiscoveryClientForConfigOrDie(config)); err != nil {
151+
if err := mcs.Register(discovery.NewDiscoveryClientForConfigOrDie(config), setupLog); err != nil {
152152
setupLog.Error(err, "failed to register multicluster service")
153153
os.Exit(1)
154154
}

pkg/mcs/register.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package mcs
22

33
import (
4-
"github.com/pkg/errors"
4+
"github.com/go-logr/logr"
55
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
66
"k8s.io/apimachinery/pkg/runtime"
77
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -33,10 +33,14 @@ func addKnownTypes(scheme *runtime.Scheme) error {
3333
return nil
3434
}
3535

36-
func Register(dc *discovery.DiscoveryClient) error {
36+
func Register(dc *discovery.DiscoveryClient, log logr.Logger) error {
3737
resources, err := dc.ServerPreferredResources()
3838
if err != nil {
39-
return errors.Wrap(err, "get api groups and resources")
39+
// MCS is optional functionality - if discovery fails for any reason,
40+
// mark it as unavailable and continue without crashing the operator
41+
available = false
42+
log.Info("Multi-cluster services (MCS) are not available: failed to discover API resources", "error", err)
43+
return nil
4044
}
4145

4246
outer:
@@ -53,6 +57,7 @@ outer:
5357

5458
if MCSSchemeGroupVersion.Group == "" {
5559
available = false
60+
log.Info("Multi-cluster services (MCS) are not available: ServiceExport resource not found in cluster")
5661
return nil
5762
}
5863

pkg/mcs/register_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package mcs
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestIsAvailable(t *testing.T) {
10+
available = true
11+
assert.True(t, IsAvailable())
12+
13+
available = false
14+
assert.False(t, IsAvailable())
15+
}
16+
17+
func TestServiceExport(t *testing.T) {
18+
namespace := "test-namespace"
19+
name := "test-service"
20+
labels := map[string]string{
21+
"app": "test",
22+
}
23+
24+
se := ServiceExport(namespace, name, labels)
25+
26+
assert.Equal(t, name, se.Name)
27+
assert.Equal(t, namespace, se.Namespace)
28+
assert.Equal(t, "test", se.Labels["app"])
29+
}
30+
31+
func TestServiceExportList(t *testing.T) {
32+
seList := ServiceExportList()
33+
34+
assert.Equal(t, "ServiceExportList", seList.Kind)
35+
}

0 commit comments

Comments
 (0)