Skip to content

Commit 7e52849

Browse files
refactor: split global component reconciliation logic
Refactors `reconcileGlobalComponents` in the MultigresCluster controller by splitting it into two distinct methods: `reconcileGlobalTopoServer` and `reconcileMultiAdmin`. This improves code clarity and readability by isolating the reconciliation logic for each global component, addressing feedback to avoid context switching within a single function.
1 parent 3a40dfb commit 7e52849

File tree

1 file changed

+38
-28
lines changed

1 file changed

+38
-28
lines changed

pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -131,30 +131,28 @@ func (r *MultigresClusterReconciler) checkChildrenDeleted(ctx context.Context, c
131131
}
132132

133133
func (r *MultigresClusterReconciler) reconcileGlobalComponents(ctx context.Context, cluster *multigresv1alpha1.MultigresCluster, resolver *TemplateResolver) error {
134-
var err error
135-
136-
topoTplName := cluster.Spec.TemplateDefaults.CoreTemplate
137-
if cluster.Spec.GlobalTopoServer.TemplateRef != "" {
138-
topoTplName = cluster.Spec.GlobalTopoServer.TemplateRef
134+
if err := r.reconcileGlobalTopoServer(ctx, cluster, resolver); err != nil {
135+
return err
139136
}
140-
141-
topoTpl, err := resolver.ResolveCoreTemplate(ctx, topoTplName)
142-
if err != nil {
143-
return fmt.Errorf("failed to resolve topo template: %w", err)
137+
if err := r.reconcileMultiAdmin(ctx, cluster, resolver); err != nil {
138+
return err
144139
}
140+
return nil
141+
}
145142

146-
adminTplName := cluster.Spec.TemplateDefaults.CoreTemplate
147-
if cluster.Spec.MultiAdmin.TemplateRef != "" {
148-
adminTplName = cluster.Spec.MultiAdmin.TemplateRef
143+
func (r *MultigresClusterReconciler) reconcileGlobalTopoServer(ctx context.Context, cluster *multigresv1alpha1.MultigresCluster, resolver *TemplateResolver) error {
144+
tplName := cluster.Spec.TemplateDefaults.CoreTemplate
145+
if cluster.Spec.GlobalTopoServer.TemplateRef != "" {
146+
tplName = cluster.Spec.GlobalTopoServer.TemplateRef
149147
}
150148

151-
adminTpl, err := resolver.ResolveCoreTemplate(ctx, adminTplName)
149+
tpl, err := resolver.ResolveCoreTemplate(ctx, tplName)
152150
if err != nil {
153-
return fmt.Errorf("failed to resolve admin template: %w", err)
151+
return fmt.Errorf("failed to resolve topo template: %w", err)
154152
}
155153

156-
topoSpec := ResolveGlobalTopo(&cluster.Spec.GlobalTopoServer, topoTpl)
157-
if topoSpec.Etcd != nil {
154+
spec := ResolveGlobalTopo(&cluster.Spec.GlobalTopoServer, tpl)
155+
if spec.Etcd != nil {
158156
ts := &multigresv1alpha1.TopoServer{
159157
ObjectMeta: metav1.ObjectMeta{
160158
Name: cluster.Name + "-global-topo",
@@ -164,24 +162,37 @@ func (r *MultigresClusterReconciler) reconcileGlobalComponents(ctx context.Conte
164162
}
165163
if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, ts, func() error {
166164
replicas := DefaultEtcdReplicas
167-
if topoSpec.Etcd.Replicas != nil {
168-
replicas = *topoSpec.Etcd.Replicas
165+
if spec.Etcd.Replicas != nil {
166+
replicas = *spec.Etcd.Replicas
169167
}
170168

171169
ts.Spec.Etcd = &multigresv1alpha1.EtcdSpec{
172-
Image: topoSpec.Etcd.Image,
170+
Image: spec.Etcd.Image,
173171
Replicas: &replicas,
174-
Storage: topoSpec.Etcd.Storage,
175-
Resources: topoSpec.Etcd.Resources,
172+
Storage: spec.Etcd.Storage,
173+
Resources: spec.Etcd.Resources,
176174
}
177175
return controllerutil.SetControllerReference(cluster, ts, r.Scheme)
178176
}); err != nil {
179177
return fmt.Errorf("failed to create/update global topo: %w", err)
180178
}
181179
}
180+
return nil
181+
}
182182

183-
multiAdminSpec := ResolveMultiAdmin(&cluster.Spec.MultiAdmin, adminTpl)
184-
if multiAdminSpec != nil {
183+
func (r *MultigresClusterReconciler) reconcileMultiAdmin(ctx context.Context, cluster *multigresv1alpha1.MultigresCluster, resolver *TemplateResolver) error {
184+
tplName := cluster.Spec.TemplateDefaults.CoreTemplate
185+
if cluster.Spec.MultiAdmin.TemplateRef != "" {
186+
tplName = cluster.Spec.MultiAdmin.TemplateRef
187+
}
188+
189+
tpl, err := resolver.ResolveCoreTemplate(ctx, tplName)
190+
if err != nil {
191+
return fmt.Errorf("failed to resolve admin template: %w", err)
192+
}
193+
194+
spec := ResolveMultiAdmin(&cluster.Spec.MultiAdmin, tpl)
195+
if spec != nil {
185196
deploy := &appsv1.Deployment{
186197
ObjectMeta: metav1.ObjectMeta{
187198
Name: cluster.Name + "-multiadmin",
@@ -191,8 +202,8 @@ func (r *MultigresClusterReconciler) reconcileGlobalComponents(ctx context.Conte
191202
}
192203
if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, deploy, func() error {
193204
replicas := DefaultAdminReplicas
194-
if multiAdminSpec.Replicas != nil {
195-
replicas = *multiAdminSpec.Replicas
205+
if spec.Replicas != nil {
206+
replicas = *spec.Replicas
196207
}
197208
deploy.Spec.Replicas = &replicas
198209
deploy.Spec.Selector = &metav1.LabelSelector{
@@ -208,18 +219,17 @@ func (r *MultigresClusterReconciler) reconcileGlobalComponents(ctx context.Conte
208219
{
209220
Name: "multiadmin",
210221
Image: cluster.Spec.Images.MultiAdmin,
211-
Resources: multiAdminSpec.Resources,
222+
Resources: spec.Resources,
212223
},
213224
},
214-
Affinity: multiAdminSpec.Affinity,
225+
Affinity: spec.Affinity,
215226
},
216227
}
217228
return controllerutil.SetControllerReference(cluster, deploy, r.Scheme)
218229
}); err != nil {
219230
return fmt.Errorf("failed to create/update multiadmin: %w", err)
220231
}
221232
}
222-
223233
return nil
224234
}
225235

0 commit comments

Comments
 (0)