@@ -12,6 +12,7 @@ import (
1212 "strings"
1313 "time"
1414
15+ "golang.org/x/sync/errgroup"
1516 "gorm.io/gorm"
1617)
1718
@@ -162,52 +163,51 @@ func (s *ServiceImpl) AssembleService(req *AssembleServiceRequest) error {
162163 return nil
163164}
164165
165- // StartService 启动服务(启动 client 和 server 实例)
166- func (s * ServiceImpl ) StartService (sid string ) error {
167- service , err := s .GetServiceByID (sid )
168- if err != nil {
169- return fmt .Errorf ("获取服务失败: %w" , err )
170- }
166+ // controlServiceInstances 并行控制服务的客户端和服务端实例
167+ // action: "start", "stop", "restart"
168+ func (s * ServiceImpl ) controlServiceInstances (service * models.Services , action string ) error {
169+ var g errgroup.Group
171170
172- // 启动客户端实例
171+ // 并行控制客户端实例
173172 if service .ClientInstanceId != nil && service .ClientEndpointId != nil {
174- if _ , err := nodepass .ControlInstance (* service .ClientEndpointId , * service .ClientInstanceId , "start" ); err != nil {
175- return fmt .Errorf ("启动客户端实例失败: %w" , err )
176- }
173+ g .Go (func () error {
174+ if _ , err := nodepass .ControlInstance (* service .ClientEndpointId , * service .ClientInstanceId , action ); err != nil {
175+ return fmt .Errorf ("%s客户端实例失败: %w" , action , err )
176+ }
177+ return nil
178+ })
177179 }
178180
179- // 启动服务端实例 (如果存在)
181+ // 并行控制服务端实例 (如果存在)
180182 if service .ServerInstanceId != nil && service .ServerEndpointId != nil {
181- if _ , err := nodepass .ControlInstance (* service .ServerEndpointId , * service .ServerInstanceId , "start" ); err != nil {
182- return fmt .Errorf ("启动服务端实例失败: %w" , err )
183- }
183+ g .Go (func () error {
184+ if _ , err := nodepass .ControlInstance (* service .ServerEndpointId , * service .ServerInstanceId , action ); err != nil {
185+ return fmt .Errorf ("%s服务端实例失败: %w" , action , err )
186+ }
187+ return nil
188+ })
184189 }
185190
186- return nil
191+ // 等待所有goroutine完成
192+ return g .Wait ()
187193}
188194
189- // StopService 停止服务(停止 client 和 server 实例)
190- func (s * ServiceImpl ) StopService (sid string ) error {
195+ // StartService 启动服务(启动 client 和 server 实例)
196+ func (s * ServiceImpl ) StartService (sid string ) error {
191197 service , err := s .GetServiceByID (sid )
192198 if err != nil {
193199 return fmt .Errorf ("获取服务失败: %w" , err )
194200 }
201+ return s .controlServiceInstances (service , "start" )
202+ }
195203
196- // 停止客户端实例
197- if service .ClientInstanceId != nil && service .ClientEndpointId != nil {
198- if _ , err := nodepass .ControlInstance (* service .ClientEndpointId , * service .ClientInstanceId , "stop" ); err != nil {
199- return fmt .Errorf ("停止客户端实例失败: %w" , err )
200- }
201- }
202-
203- // 停止服务端实例(如果存在)
204- if service .ServerInstanceId != nil && service .ServerEndpointId != nil {
205- if _ , err := nodepass .ControlInstance (* service .ServerEndpointId , * service .ServerInstanceId , "stop" ); err != nil {
206- return fmt .Errorf ("停止服务端实例失败: %w" , err )
207- }
204+ // StopService 停止服务(停止 client 和 server 实例)
205+ func (s * ServiceImpl ) StopService (sid string ) error {
206+ service , err := s .GetServiceByID (sid )
207+ if err != nil {
208+ return fmt .Errorf ("获取服务失败: %w" , err )
208209 }
209-
210- return nil
210+ return s .controlServiceInstances (service , "stop" )
211211}
212212
213213// RestartService 重启服务(重启 client 和 server 实例)
@@ -216,22 +216,7 @@ func (s *ServiceImpl) RestartService(sid string) error {
216216 if err != nil {
217217 return fmt .Errorf ("获取服务失败: %w" , err )
218218 }
219-
220- // 重启客户端实例
221- if service .ClientInstanceId != nil && service .ClientEndpointId != nil {
222- if _ , err := nodepass .ControlInstance (* service .ClientEndpointId , * service .ClientInstanceId , "restart" ); err != nil {
223- return fmt .Errorf ("重启客户端实例失败: %w" , err )
224- }
225- }
226-
227- // 重启服务端实例(如果存在)
228- if service .ServerInstanceId != nil && service .ServerEndpointId != nil {
229- if _ , err := nodepass .ControlInstance (* service .ServerEndpointId , * service .ServerInstanceId , "restart" ); err != nil {
230- return fmt .Errorf ("重启服务端实例失败: %w" , err )
231- }
232- }
233-
234- return nil
219+ return s .controlServiceInstances (service , "restart" )
235220}
236221
237222// DeleteService 删除服务(先删除实例再删除服务记录)
0 commit comments