From d4dbaba760bd3869d87560be4988cbd99baf09bd Mon Sep 17 00:00:00 2001 From: Jun <108045855+2456868764@users.noreply.github.com> Date: Thu, 6 Jul 2023 10:02:45 +0800 Subject: [PATCH] deepcopy tracing configuration and fix code format (#411) --- pkg/ingress/kube/configmap/tracing.go | 40 +++++++++++++++++++-------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/pkg/ingress/kube/configmap/tracing.go b/pkg/ingress/kube/configmap/tracing.go index fd9aa176e..ffcb3c05d 100644 --- a/pkg/ingress/kube/configmap/tracing.go +++ b/pkg/ingress/kube/configmap/tracing.go @@ -15,6 +15,7 @@ package configmap import ( + "encoding/json" "errors" "fmt" "reflect" @@ -56,7 +57,7 @@ type Zipkin struct { Port string `json:"port,omitempty"` } -// Defines configuration for a Skywalking tracer. +// Skywalking Defines configuration for a Skywalking tracer. type Skywalking struct { // Address of the Skywalking tracer. Service string `json:"service,omitempty"` @@ -65,6 +66,7 @@ type Skywalking struct { AccessToken string `json:"access_token,omitempty"` } +// OpenTelemetry Defines configuration for a OpenTelemetry tracer. type OpenTelemetry struct { // Address of OpenTelemetry tracer. Service string `json:"service,omitempty"` @@ -78,7 +80,7 @@ func validServiceAndPort(service string, port string) bool { return true } -func ValidTracing(t *Tracing) error { +func validTracing(t *Tracing) error { if t == nil { return nil } @@ -121,7 +123,7 @@ func ValidTracing(t *Tracing) error { return nil } -func CompareTracing(old *Tracing, new *Tracing) (Result, error) { +func compareTracing(old *Tracing, new *Tracing) (Result, error) { if old == nil && new == nil { return ResultNothing, nil } @@ -137,6 +139,16 @@ func CompareTracing(old *Tracing, new *Tracing) (Result, error) { return ResultNothing, nil } +func deepCopyTracing(tracing *Tracing) (*Tracing, error) { + newTracing := NewDefaultTracing() + bytes, err := json.Marshal(tracing) + if err != nil { + return nil, err + } + err = json.Unmarshal(bytes, newTracing) + return newTracing, err +} + func NewDefaultTracing() *Tracing { tracing := &Tracing{ Enable: false, @@ -163,8 +175,8 @@ func NewTracingController(namespace string) *TracingController { return tracingMgr } -func (t *TracingController) SetTracing(higressConfig *Tracing) { - t.tracing.Store(higressConfig) +func (t *TracingController) SetTracing(tracing *Tracing) { + t.tracing.Store(tracing) } func (t *TracingController) GetTracing() *Tracing { @@ -182,19 +194,23 @@ func (t *TracingController) GetName() string { } func (t *TracingController) AddOrUpdateHigressConfig(name util.ClusterNamespacedName, old *HigressConfig, new *HigressConfig) error { - if err := ValidTracing(new.Tracing); err != nil { + if err := validTracing(new.Tracing); err != nil { IngressLog.Errorf("data:%+v convert to tracing , error: %+v", new.Tracing, err) return nil } - result, _ := CompareTracing(old.Tracing, new.Tracing) + result, _ := compareTracing(old.Tracing, new.Tracing) switch result { case ResultReplace: - t.SetTracing(new.Tracing) - IngressLog.Infof("AddOrUpdate Higress config tracing") - t.eventHandler(higressTracingEnvoyFilterName) - IngressLog.Infof("send event with filter name:%s", higressTracingEnvoyFilterName) + if newTracing, err := deepCopyTracing(new.Tracing); err != nil { + IngressLog.Infof("tracing deepcopy error:%v", err) + } else { + t.SetTracing(newTracing) + IngressLog.Infof("AddOrUpdate Higress config tracing") + t.eventHandler(higressTracingEnvoyFilterName) + IngressLog.Infof("send event with filter name:%s", higressTracingEnvoyFilterName) + } case ResultDelete: t.SetTracing(NewDefaultTracing()) IngressLog.Infof("Delete Higress config tracing") @@ -213,7 +229,7 @@ func (t *TracingController) ValidHigressConfig(higressConfig *HigressConfig) err return nil } - return ValidTracing(higressConfig.Tracing) + return validTracing(higressConfig.Tracing) } func (t *TracingController) RegisterItemEventHandler(eventHandler ItemEventHandler) {