Skip to content

Commit 3292907

Browse files
Fix errcheck in temporal/ (#3757)
1 parent 825d39c commit 3292907

File tree

3 files changed

+45
-20
lines changed

3 files changed

+45
-20
lines changed

temporal/fx.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,8 @@ func (s ServerFx) Start() error {
279279
return s.app.Start(context.Background())
280280
}
281281

282-
func (s ServerFx) Stop() {
283-
s.app.Stop(context.Background())
282+
func (s ServerFx) Stop() error {
283+
return s.app.Stop(context.Background())
284284
}
285285

286286
func StopService(logger log.Logger, app *fx.App, svcName primitives.ServiceName, stopChan chan struct{}) {
@@ -765,8 +765,7 @@ func ServerLifetimeHooks(
765765
return svr.Start()
766766
},
767767
OnStop: func(ctx context.Context) error {
768-
svr.Stop()
769-
return nil
768+
return svr.Stop()
770769
},
771770
},
772771
)
@@ -880,8 +879,7 @@ var ServiceTracingModule = fx.Options(
880879
fx.Provide(func(lc fx.Lifecycle, opts []otelsdktrace.TracerProviderOption) trace.TracerProvider {
881880
tp := otelsdktrace.NewTracerProvider(opts...)
882881
lc.Append(fx.Hook{OnStop: func(ctx context.Context) error {
883-
tp.Shutdown(ctx)
884-
return nil // do not pass this up to fx
882+
return tp.Shutdown(ctx)
885883
}})
886884
return tp
887885
}),

temporal/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const (
3939
type (
4040
Server interface {
4141
Start() error
42-
Stop()
42+
Stop() error
4343
}
4444
)
4545

temporal/server_impl.go

+40-13
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"sync"
3131

3232
"go.uber.org/fx"
33+
"go.uber.org/multierr"
3334

3435
"go.temporal.io/server/common/cluster"
3536
"go.temporal.io/server/common/config"
@@ -95,8 +96,10 @@ func (s *ServerImpl) Start() error {
9596
s.logger.Info("Starting server for services", tag.Value(s.so.serviceNames))
9697
s.logger.Debug(s.so.config.String())
9798

99+
ctx := context.TODO()
100+
98101
if err := initSystemNamespaces(
99-
context.TODO(),
102+
ctx,
100103
&s.persistenceConfig,
101104
s.clusterMetadata.CurrentClusterName,
102105
s.so.persistenceServiceResolver,
@@ -107,30 +110,22 @@ func (s *ServerImpl) Start() error {
107110
return fmt.Errorf("unable to initialize system namespace: %w", err)
108111
}
109112

110-
var wg sync.WaitGroup
111-
for _, svcMeta := range s.servicesMetadata {
112-
wg.Add(1)
113-
go func(svcMeta *ServicesMetadata) {
114-
timeoutCtx, cancelFunc := context.WithTimeout(context.Background(), serviceStartTimeout)
115-
defer cancelFunc()
116-
svcMeta.App.Start(timeoutCtx)
117-
wg.Done()
118-
}(svcMeta)
113+
if err := s.startServices(); err != nil {
114+
return err
119115
}
120-
wg.Wait()
121116

122117
if s.so.blockingStart {
123118
// If s.so.interruptCh is nil this will wait forever.
124119
interruptSignal := <-s.so.interruptCh
125120
s.logger.Info("Received interrupt signal, stopping the server.", tag.Value(interruptSignal))
126-
s.Stop()
121+
return s.Stop()
127122
}
128123

129124
return nil
130125
}
131126

132127
// Stop stops the server.
133-
func (s *ServerImpl) Stop() {
128+
func (s *ServerImpl) Stop() error {
134129
var wg sync.WaitGroup
135130
wg.Add(len(s.servicesMetadata))
136131
close(s.stoppedCh)
@@ -147,6 +142,38 @@ func (s *ServerImpl) Stop() {
147142
if s.so.metricHandler != nil {
148143
s.so.metricHandler.Stop(s.logger)
149144
}
145+
return nil
146+
}
147+
148+
func (s *ServerImpl) startServices() error {
149+
ctx, cancel := context.WithTimeout(context.Background(), serviceStartTimeout)
150+
defer cancel()
151+
results := make(chan startServiceResult, len(s.servicesMetadata))
152+
for _, svcMeta := range s.servicesMetadata {
153+
go func(svcMeta *ServicesMetadata) {
154+
err := svcMeta.App.Start(ctx)
155+
results <- startServiceResult{
156+
svc: svcMeta,
157+
err: err,
158+
}
159+
}(svcMeta)
160+
}
161+
return s.readResults(results)
162+
}
163+
164+
func (s *ServerImpl) readResults(results chan startServiceResult) (err error) {
165+
for i := 0; i < len(s.servicesMetadata); i++ {
166+
r := <-results
167+
if r.err != nil {
168+
err = multierr.Combine(err, fmt.Errorf("failed to start service %v: %w", r.svc.ServiceName, r.err))
169+
}
170+
}
171+
return
172+
}
173+
174+
type startServiceResult struct {
175+
svc *ServicesMetadata
176+
err error
150177
}
151178

152179
func initSystemNamespaces(

0 commit comments

Comments
 (0)