143
}
144
145
>
func HandlerProvider(args NewHandlerArgs, lc fx.Lifecycle) (*Handler, error) {
fx.go
146
>
handler := &Handler{
147
>
status: common.DaemonStatusInitialized,
148
>
config: args.Config,
149
>
nexusCompletionHandler: args.NexusCompletionHandler,
150
>
tokenSerializer: tasktoken.NewSerializer(),
151
>
deepHealthCheckHandler: deepHealthCheckHandler{
152
>
healthServer: args.HealthServer,
153
>
metricsHandler: args.MetricsHandler,
154
>
config: args.Config,
155
>
historyHealthSignal: args.HistoryHealthSignal,
156
>
persistenceHealthSignal: args.PersistenceHealthSignal,
157
>
startupTime: time.Now(),
158
>
},
159
>
logger: args.Logger,
160
>
throttledLogger: args.ThrottledLogger,
161
>
persistenceExecutionManager: args.PersistenceExecutionManager,
162
>
persistenceShardManager: args.PersistenceShardManager,
163
>
persistenceVisibilityManager: args.PersistenceVisibilityManager,
164
>
historyServiceResolver: args.HistoryServiceResolver,
165
>
metricsHandler: args.MetricsHandler,
166
>
payloadSerializer: args.PayloadSerializer,
167
>
timeSource: args.TimeSource,
168
>
namespaceRegistry: args.NamespaceRegistry,
169
>
saProvider: args.SaProvider,
170
>
clusterMetadata: args.ClusterMetadata,
171
>
archivalMetadata: args.ArchivalMetadata,
172
>
hostInfoProvider: args.HostInfoProvider,
173
>
controller: args.ShardController,
174
>
eventNotifier: args.EventNotifier,
175
>
tracer: args.TracerProvider.Tracer(consts.LibraryName),
176
>
taskQueueManager: args.TaskQueueManager,
177
>
taskCategoryRegistry: args.TaskCategoryRegistry,
178
>
dlqMetricsEmitter: args.DLQMetricsEmitter,
179
>
chasmEngine: args.ChasmEngine,
180
>
chasmRegistry: args.ChasmRegistry,
181
>
testHooks: args.TestHooks,
182
>
183
>
replicationTaskFetcherFactory: args.ReplicationTaskFetcherFactory,
184
>
replicationTaskConverterProvider: args.ReplicationTaskConverterFactory,
185
>
streamReceiverMonitor: args.StreamReceiverMonitor,
186
>
replicationServerRateLimiter: args.ReplicationServerRateLimiter,
187
>
}
188
>
189
>
// Build the Nexus handler in OnStart rather than here so that it runs after all
190
>
// fx.Invoke functions have completed. If we built it eagerly, the dependency chain
191
>
//
192
>
// activity.HistoryModule (fx.Invoke)
193
>
// → *library → *handler → historyservice.HistoryServiceServer
194
>
// → HistoryServiceServerProvider → HandlerProvider (this function)
195
>
//
196
>
// would force HandlerProvider to run before modules like chasmtests.Module have had
197
>
// a chance to register their nexus services via their own fx.Invoke calls. As a
198
>
// result, buildNexusHandler would snapshot an empty registry and h.nexusHandler
199
>
// would remain nil, causing all StartNexusOperation calls to the system endpoint to
200
>
// return "no nexus services registered". OnStart hooks run after ALL invokes are
201
>
// done, so the registry is fully populated by the time we call buildNexusHandler.
202
>
lc.Append(fx.Hook{
203
>
OnStart: func(_ context.Context) error {
204
h, err := buildNexusHandler(args.ChasmRegistry)
205
if err != nil {