From 61af3785c1d02aed0c89bfdf0de3f38ff5bf6008 Mon Sep 17 00:00:00 2001 From: Kellen Swain Date: Mon, 24 Mar 2025 22:52:58 +0000 Subject: [PATCH] removing unsafe lib by switching to atomic.Pointer --- pkg/epp/backend/metrics/pod_metrics.go | 13 ++++++------- pkg/epp/backend/metrics/types.go | 6 +++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pkg/epp/backend/metrics/pod_metrics.go b/pkg/epp/backend/metrics/pod_metrics.go index b7f20e9b6..cfb6b1384 100644 --- a/pkg/epp/backend/metrics/pod_metrics.go +++ b/pkg/epp/backend/metrics/pod_metrics.go @@ -22,7 +22,6 @@ import ( "sync" "sync/atomic" "time" - "unsafe" "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" @@ -36,8 +35,8 @@ const ( ) type podMetrics struct { - pod unsafe.Pointer // stores a *Pod - metrics unsafe.Pointer // stores a *Metrics + pod atomic.Pointer[Pod] + metrics atomic.Pointer[Metrics] pmc PodMetricsClient ds Datastore interval time.Duration @@ -58,15 +57,15 @@ func (pm *podMetrics) String() string { } func (pm *podMetrics) GetPod() *Pod { - return (*Pod)(atomic.LoadPointer(&pm.pod)) + return pm.pod.Load() } func (pm *podMetrics) GetMetrics() *Metrics { - return (*Metrics)(atomic.LoadPointer(&pm.metrics)) + return pm.metrics.Load() } func (pm *podMetrics) UpdatePod(in *corev1.Pod) { - atomic.StorePointer(&pm.pod, unsafe.Pointer(toInternalPod(in))) + pm.pod.Store(toInternalPod(in)) } func toInternalPod(in *corev1.Pod) *Pod { @@ -128,7 +127,7 @@ func (pm *podMetrics) refreshMetrics() error { if updated != nil { updated.UpdateTime = time.Now() pm.logger.V(logutil.TRACE).Info("Refreshed metrics", "updated", updated) - atomic.StorePointer(&pm.metrics, unsafe.Pointer(updated)) + pm.metrics.Store(updated) } return nil diff --git a/pkg/epp/backend/metrics/types.go b/pkg/epp/backend/metrics/types.go index fd6001633..17db23b4c 100644 --- a/pkg/epp/backend/metrics/types.go +++ b/pkg/epp/backend/metrics/types.go @@ -22,7 +22,6 @@ import ( "fmt" "sync" "time" - "unsafe" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" @@ -43,8 +42,6 @@ type PodMetricsFactory struct { func (f *PodMetricsFactory) NewPodMetrics(parentCtx context.Context, in *corev1.Pod, ds Datastore) PodMetrics { pm := &podMetrics{ - pod: unsafe.Pointer(toInternalPod(in)), - metrics: unsafe.Pointer(newMetrics()), pmc: f.pmc, ds: ds, interval: f.refreshMetricsInterval, @@ -53,6 +50,9 @@ func (f *PodMetricsFactory) NewPodMetrics(parentCtx context.Context, in *corev1. done: make(chan struct{}), logger: log.FromContext(parentCtx), } + pm.pod.Store(toInternalPod(in)) + pm.metrics.Store(newMetrics()) + pm.startRefreshLoop() return pm }