| 
9 | 9 | 	"github.com/sentinel-official/sentinel-go-sdk/libs/log"  | 
10 | 10 | 	"github.com/sentinel-official/sentinel-go-sdk/process"  | 
11 | 11 | 	"github.com/sentinel-official/sentinelhub/v12/x/node/types/v3"  | 
 | 12 | +	"golang.org/x/sync/errgroup"  | 
12 | 13 | 
 
  | 
13 | 14 | 	"github.com/sentinel-official/sentinel-dvpnx/core"  | 
14 | 15 | )  | 
@@ -125,16 +126,37 @@ func (n *Node) UpdateDetails(ctx context.Context) error {  | 
125 | 126 | // Start initializes the Node's services, scheduler, and API server.  | 
126 | 127 | func (n *Node) Start() error {  | 
127 | 128 | 	return n.Manager.Start(func(ctx context.Context) error {  | 
128 |  | -		if err := n.Context().Service().Start(); err != nil {  | 
129 |  | -			return fmt.Errorf("starting service: %w", err)  | 
130 |  | -		}  | 
 | 129 | +		sg := &errgroup.Group{}  | 
131 | 130 | 
 
  | 
132 |  | -		if err := n.Scheduler().Start(); err != nil {  | 
133 |  | -			return fmt.Errorf("starting scheduler: %w", err)  | 
134 |  | -		}  | 
 | 131 | +		sg.Go(func() error {  | 
 | 132 | +			log.Info("Starting service")  | 
 | 133 | +			if err := n.Context().Service().Start(); err != nil {  | 
 | 134 | +				return fmt.Errorf("starting service: %w", err)  | 
 | 135 | +			}  | 
 | 136 | + | 
 | 137 | +			return nil  | 
 | 138 | +		})  | 
 | 139 | + | 
 | 140 | +		sg.Go(func() error {  | 
 | 141 | +			log.Info("Starting scheduler")  | 
 | 142 | +			if err := n.Scheduler().Start(); err != nil {  | 
 | 143 | +				return fmt.Errorf("starting scheduler: %w", err)  | 
 | 144 | +			}  | 
 | 145 | + | 
 | 146 | +			return nil  | 
 | 147 | +		})  | 
 | 148 | + | 
 | 149 | +		sg.Go(func() error {  | 
 | 150 | +			log.Info("Starting API server")  | 
 | 151 | +			if err := n.Server().Start(); err != nil {  | 
 | 152 | +				return fmt.Errorf("starting API server: %w", err)  | 
 | 153 | +			}  | 
 | 154 | + | 
 | 155 | +			return nil  | 
 | 156 | +		})  | 
135 | 157 | 
 
  | 
136 |  | -		if err := n.Server().Start(); err != nil {  | 
137 |  | -			return fmt.Errorf("starting API server: %w", err)  | 
 | 158 | +		if err := sg.Wait(); err != nil {  | 
 | 159 | +			return err  | 
138 | 160 | 		}  | 
139 | 161 | 
 
  | 
140 | 162 | 		if err := n.Register(ctx); err != nil {  | 
@@ -181,16 +203,37 @@ func (n *Node) Wait() error {  | 
181 | 203 | // Stop gracefully stops the Node's operations.  | 
182 | 204 | func (n *Node) Stop() error {  | 
183 | 205 | 	return n.Manager.Stop(func() error {  | 
184 |  | -		if err := n.Context().Service().Stop(); err != nil {  | 
185 |  | -			return fmt.Errorf("stopping service: %w", err)  | 
186 |  | -		}  | 
 | 206 | +		sg := &errgroup.Group{}  | 
187 | 207 | 
 
  | 
188 |  | -		if err := n.Scheduler().Stop(); err != nil {  | 
189 |  | -			return fmt.Errorf("stopping scheduler: %w", err)  | 
190 |  | -		}  | 
 | 208 | +		sg.Go(func() error {  | 
 | 209 | +			log.Info("Stopping service")  | 
 | 210 | +			if err := n.Context().Service().Stop(); err != nil {  | 
 | 211 | +				return fmt.Errorf("stopping service: %w", err)  | 
 | 212 | +			}  | 
 | 213 | + | 
 | 214 | +			return nil  | 
 | 215 | +		})  | 
 | 216 | + | 
 | 217 | +		sg.Go(func() error {  | 
 | 218 | +			log.Info("Stopping scheduler")  | 
 | 219 | +			if err := n.Scheduler().Stop(); err != nil {  | 
 | 220 | +				return fmt.Errorf("stopping scheduler: %w", err)  | 
 | 221 | +			}  | 
 | 222 | + | 
 | 223 | +			return nil  | 
 | 224 | +		})  | 
 | 225 | + | 
 | 226 | +		sg.Go(func() error {  | 
 | 227 | +			log.Info("Stopping API server")  | 
 | 228 | +			if err := n.Server().Stop(); err != nil {  | 
 | 229 | +				return fmt.Errorf("stopping API server: %w", err)  | 
 | 230 | +			}  | 
 | 231 | + | 
 | 232 | +			return nil  | 
 | 233 | +		})  | 
191 | 234 | 
 
  | 
192 |  | -		if err := n.Server().Stop(); err != nil {  | 
193 |  | -			return fmt.Errorf("stopping API server: %w", err)  | 
 | 235 | +		if err := sg.Wait(); err != nil {  | 
 | 236 | +			return err  | 
194 | 237 | 		}  | 
195 | 238 | 
 
  | 
196 | 239 | 		return nil  | 
 | 
0 commit comments