Skip to content

Commit 81eb47a

Browse files
committed
refactor: properly run the function exactly once
1 parent 3c86792 commit 81eb47a

File tree

1 file changed

+21
-14
lines changed
  • common/pkg/capi/clustertopology/handlers/mutation

1 file changed

+21
-14
lines changed

common/pkg/capi/clustertopology/handlers/mutation/meta.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,25 +62,32 @@ func (mgp metaGeneratePatches) Name() string {
6262
return mgp.name
6363
}
6464

65-
func (mgp metaGeneratePatches) GeneratePatches(
66-
ctx context.Context,
67-
req *runtimehooksv1.GeneratePatchesRequest,
68-
resp *runtimehooksv1.GeneratePatchesResponse,
69-
) {
70-
clusterKey := handlers.ClusterKeyFromReq(req)
71-
getCluster := func(ctx context.Context) (*clusterv1.Cluster, error) {
72-
cluster := &clusterv1.Cluster{}
73-
var err error
74-
fn := sync.OnceFunc(func() {
75-
err = mgp.cl.Get(ctx, clusterKey, cluster)
65+
func (mgp metaGeneratePatches) CreateClusterGetter(
66+
clusterKey client.ObjectKey,
67+
) func(context.Context) (*clusterv1.Cluster, error) {
68+
return func(ctx context.Context) (*clusterv1.Cluster, error) {
69+
var (
70+
cluster clusterv1.Cluster
71+
err error
72+
once sync.Once
73+
)
74+
once.Do(func() {
75+
err = mgp.cl.Get(ctx, clusterKey, &cluster)
7676
})
77-
fn()
7877
if err != nil {
7978
return nil, fmt.Errorf("failed to fetch cluster %w", err)
8079
}
81-
return cluster, nil
80+
return &cluster, nil
8281
}
82+
}
8383

84+
func (mgp metaGeneratePatches) GeneratePatches(
85+
ctx context.Context,
86+
req *runtimehooksv1.GeneratePatchesRequest,
87+
resp *runtimehooksv1.GeneratePatchesResponse,
88+
) {
89+
clusterKey := handlers.ClusterKeyFromReq(req)
90+
clusterGetter := mgp.CreateClusterGetter(clusterKey)
8491
topologymutation.WalkTemplates(
8592
ctx,
8693
unstructured.UnstructuredJSONScheme,
@@ -93,7 +100,7 @@ func (mgp metaGeneratePatches) GeneratePatches(
93100
holderRef runtimehooksv1.HolderReference,
94101
) error {
95102
for _, h := range mgp.mutators {
96-
if err := h.Mutate(ctx, obj.(*unstructured.Unstructured), vars, holderRef, clusterKey, getCluster); err != nil {
103+
if err := h.Mutate(ctx, obj.(*unstructured.Unstructured), vars, holderRef, clusterKey, clusterGetter); err != nil {
97104
return err
98105
}
99106
}

0 commit comments

Comments
 (0)