From 82a6643d8c671aabf09f293c8911971a8cd788d7 Mon Sep 17 00:00:00 2001 From: shaoyue Date: Mon, 28 Oct 2024 14:47:22 +0800 Subject: [PATCH] Fix etcd replicaCount (#202) Signed-off-by: haorenfsa --- apis/milvus.io/v1beta1/milvus_webhook.go | 7 +++---- pkg/util/util.go | 15 +++++++++++++++ pkg/util/util_test.go | 16 ++++++++++++++++ test/min-milvus-feature.yaml | 2 +- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/apis/milvus.io/v1beta1/milvus_webhook.go b/apis/milvus.io/v1beta1/milvus_webhook.go index 9859b4a2..a6c83b93 100644 --- a/apis/milvus.io/v1beta1/milvus_webhook.go +++ b/apis/milvus.io/v1beta1/milvus_webhook.go @@ -360,10 +360,9 @@ func (r *Milvus) defaultEtcd() { if r.Spec.Dep.Etcd.InCluster.Values.Data == nil { r.Spec.Dep.Etcd.InCluster.Values.Data = map[string]interface{}{} } - etcdReplicaCountRaw, etcdReplicaCountExists := r.Spec.Dep.Etcd.InCluster.Values.Data["replicaCount"] - etcdReplicaCountInt64, etcdReplicaCountValid := etcdReplicaCountRaw.(int64) + etcdReplicaCountNumber, etcdReplicaCountValid := util.GetNumberValue(r.Spec.Dep.Etcd.InCluster.Values.Data, "replicaCount") var etcdReplicaCount int - if !etcdReplicaCountExists || !etcdReplicaCountValid { + if !etcdReplicaCountValid { if r.Spec.Mode == MilvusModeStandalone { etcdReplicaCount = 1 } else { @@ -371,7 +370,7 @@ func (r *Milvus) defaultEtcd() { } r.Spec.Dep.Etcd.InCluster.Values.Data["replicaCount"] = int64(etcdReplicaCount) } else { - etcdReplicaCount = int(etcdReplicaCountInt64) + etcdReplicaCount = int(etcdReplicaCountNumber) } if len(r.Spec.Dep.Etcd.Endpoints) == 0 && etcdReplicaCount > 0 { diff --git a/pkg/util/util.go b/pkg/util/util.go index ccb01f53..bace7079 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -21,6 +21,21 @@ import ( const MqTypeConfigKey = "messageQueue" +// GetNumberValue supports int64 / float64 in values return as float64 +// see https://datatracker.ietf.org/doc/html/rfc8259#section-6 +func GetNumberValue(values map[string]interface{}, fields ...string) (float64, bool) { + val, found, err := unstructured.NestedInt64(values, fields...) + if err == nil && found { + return float64(val), true + } + + fval, found, err := unstructured.NestedFloat64(values, fields...) + if err == nil && found { + return fval, true + } + return 0, false +} + func GetBoolValue(values map[string]interface{}, fields ...string) (bool, bool) { val, found, err := unstructured.NestedBool(values, fields...) if err != nil || !found { diff --git a/pkg/util/util_test.go b/pkg/util/util_test.go index b67b6447..239034d3 100644 --- a/pkg/util/util_test.go +++ b/pkg/util/util_test.go @@ -12,6 +12,22 @@ import ( "sigs.k8s.io/yaml" ) +func TestGetNumberValue(t *testing.T) { + vals := map[string]interface{}{ + "a": map[string]interface{}{ + "b": int64(1), + "c": float64(2.2), + }, + } + + ret, exist := GetNumberValue(vals, "a", "b") + assert.True(t, exist) + assert.Equal(t, float64(1), ret) + ret, exist = GetNumberValue(vals, "a", "c") + assert.True(t, exist) + assert.Equal(t, float64(2.2), ret) +} + func TestGetStringValue(t *testing.T) { vals := map[string]interface{}{ "a": map[string]interface{}{ diff --git a/test/min-milvus-feature.yaml b/test/min-milvus-feature.yaml index 38fa1b8e..d261f01c 100644 --- a/test/min-milvus-feature.yaml +++ b/test/min-milvus-feature.yaml @@ -65,7 +65,7 @@ spec: deletionPolicy: Delete pvcDeletion: true values: - replicaCount: 1 + replicaCount: 3 auth: rbac: enabled: true