Skip to content

Commit cecb769

Browse files
committed
perf: 添加多个集群时全部处理完统一返回,优化相关代码
1 parent 9aaeb2a commit cecb769

File tree

1 file changed

+63
-43
lines changed

1 file changed

+63
-43
lines changed

pkg/server/handler/clusters/cluster.go

Lines changed: 63 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -97,34 +97,41 @@ func (ch *ClusterHandler) ListClusters(c *gin.Context) {
9797

9898
// AddClusters add the clusters which has deployed crane server. cluster info must has valid & accessible crane server url
9999
func (ch *ClusterHandler) AddClusters(c *gin.Context) {
100-
var r AddClustersRequest
101-
if err := c.ShouldBindJSON(&r); err != nil {
100+
var request AddClustersRequest
101+
if err := c.ShouldBindJSON(&request); err != nil {
102102
ginwrapper.WriteResponse(c, err, nil)
103103
return
104104
}
105105

106-
if len(r.Clusters) == 0 {
107-
ginwrapper.WriteResponse(c, fmt.Errorf("req is empty, check your input para"), nil)
106+
if len(request.Clusters) == 0 {
107+
ginwrapper.WriteResponse(c, fmt.Errorf("no clusters provided"), nil)
108108
return
109109
}
110110

111111
clustersMap, err := ch.getClusterMap()
112+
112113
if err != nil {
113114
ginwrapper.WriteResponse(c, err, nil)
114115
return
115116
}
116117

117-
for _, cluster := range r.Clusters {
118-
if cluster.CraneUrl == "" || cluster.Name == "" {
119-
err := fmt.Errorf("cluster CraneUrl, Name field must not be empty")
120-
ginwrapper.WriteResponse(c, err, nil)
121-
return
118+
var errors []error
119+
var addedClusters []*store.Cluster
120+
121+
for _, cluster := range request.Clusters {
122+
if err := validateCluster(cluster); err != nil {
123+
errors = append(errors, err)
124+
continue
122125
}
123126

124-
if !IsUrl(cluster.CraneUrl) {
125-
err := fmt.Errorf("cluster CraneUrl %v is not valid url", cluster.CraneUrl)
126-
ginwrapper.WriteResponse(c, err, nil)
127-
return
127+
if _, ok := clustersMap[cluster.Id]; ok {
128+
errors = append(errors, fmt.Errorf("cluster id %v duplicated", cluster.Id))
129+
continue
130+
}
131+
132+
if cluster.CraneUrlDuplicated(clustersMap) {
133+
errors = append(errors, fmt.Errorf("cluster CraneUrl %v duplicated", cluster.CraneUrl))
134+
continue
128135
}
129136

130137
if cluster.Id == "" {
@@ -136,49 +143,62 @@ func (ch *ClusterHandler) AddClusters(c *gin.Context) {
136143
cluster.Discount = 100
137144
}
138145

139-
if _, ok := clustersMap[cluster.Id]; ok {
140-
err := fmt.Errorf("cluster id %v duplicated", cluster.Id)
141-
ginwrapper.WriteResponse(c, err, nil)
142-
return
143-
}
146+
clustersMap[cluster.Id] = cluster
144147

145-
if cluster.CraneUrlDuplicated(clustersMap) {
146-
err := fmt.Errorf("cluster CraneUlr %v duplicated", cluster.CraneUrl)
147-
ginwrapper.WriteResponse(c, err, nil)
148-
return
149-
}
148+
addedClusters = append(addedClusters, cluster)
149+
}
150150

151-
clustersMap[cluster.Id] = cluster
151+
if len(errors) > 0 {
152+
ginwrapper.WriteResponse(c, fmt.Errorf("encountered errors adding clusters: %v", errors), nil)
153+
return
152154
}
153155

154-
for _, cluster := range r.Clusters {
155-
err := ch.clusterSrv.AddCluster(context.TODO(), cluster)
156-
if err != nil {
157-
ginwrapper.WriteResponse(c, err, nil)
158-
return
156+
for _, cluster := range addedClusters {
157+
if err := ch.clusterSrv.AddCluster(context.TODO(), cluster); err != nil {
158+
errors = append(errors, err)
159+
continue
159160
}
160161

161-
if cluster.PreinstallRecommendation && err == nil {
162-
err := ch.upsertRecommendationRule(RecommendationRuleWorkloadsName, RecommendationRuleWorkloadsYAML)
163-
if err != nil {
164-
ginwrapper.WriteResponse(c, err, nil)
165-
return
166-
}
167-
168-
err = ch.upsertRecommendationRule(RecommendationRuleIdleNodeName, RecommendationRuleIdleNodeYAML)
169-
if err != nil {
170-
ginwrapper.WriteResponse(c, err, nil)
171-
return
162+
if cluster.PreinstallRecommendation {
163+
if err := ch.upsertRecommendationRules(); err != nil {
164+
errors = append(errors, err)
165+
continue
172166
}
173-
} else if err != nil {
174-
ginwrapper.WriteResponse(c, err, nil)
175-
return
176167
}
177168
}
178169

170+
if len(errors) > 0 {
171+
ginwrapper.WriteResponse(c, fmt.Errorf("encountered errors adding clusters: %v", errors), nil)
172+
return
173+
}
174+
179175
ginwrapper.WriteResponse(c, nil, nil)
180176
}
181177

178+
func validateCluster(cluster *store.Cluster) error {
179+
if cluster.CraneUrl == "" || cluster.Name == "" {
180+
return fmt.Errorf("cluster CraneUrl or Name field is empty")
181+
}
182+
183+
if !IsUrl(cluster.CraneUrl) {
184+
return fmt.Errorf("cluster CraneUrl %v is not valid url", cluster.CraneUrl)
185+
}
186+
187+
return nil
188+
}
189+
190+
func (ch *ClusterHandler) upsertRecommendationRules() error {
191+
if err := ch.upsertRecommendationRule(RecommendationRuleWorkloadsName, RecommendationRuleWorkloadsYAML); err != nil {
192+
return err
193+
}
194+
195+
if err := ch.upsertRecommendationRule(RecommendationRuleIdleNodeName, RecommendationRuleIdleNodeYAML); err != nil {
196+
return err
197+
}
198+
199+
return nil
200+
}
201+
182202
// UpdateCluster the clusters crane info
183203
func (ch *ClusterHandler) UpdateCluster(c *gin.Context) {
184204
var r store.Cluster

0 commit comments

Comments
 (0)