MCPcopy
hub / github.com/grafana/dskit / NewModuleService

Function NewModuleService

modules/module_service.go:43–62  ·  view source on GitHub ↗

NewModuleService wraps a module service, and makes sure that dependencies are started/stopped before module service starts or stops. If any dependency fails to start, this service fails as well. On stop, errors from failed dependencies are ignored.

(name string, logger log.Logger, service services.Service, startDeps, stopDeps func(string) map[string]services.Service)

Source from the content-addressed store, hash-verified

41// If any dependency fails to start, this service fails as well.
42// On stop, errors from failed dependencies are ignored.
43func NewModuleService(name string, logger log.Logger, service services.Service, startDeps, stopDeps func(string) map[string]services.Service) services.Service {
44 w := &moduleService{
45 name: name,
46 logger: logger,
47 service: service,
48 startDeps: startDeps,
49 stopDeps: stopDeps,
50 }
51
52 w.Service = services.NewBasicService(w.start, w.run, w.stop)
53
54 if namedService, isNamed := service.(services.NamedService); isNamed {
55 // return a value that implements services.NamedService only if the wrapped service implements services.NamedService
56 return delegatedNamedService{
57 Service: w,
58 delegate: namedService,
59 }
60 }
61 return w
62}
63
64func (w *moduleService) start(serviceContext context.Context) error {
65 // wait until all startDeps are running

Calls 1

NewBasicServiceFunction · 0.92