in lambda/rapid/start.go [425:475]
func handleStart(ctx context.Context, execCtx *rapidContext, watchdog *core.Watchdog, startRequest *interop.Start) {
if execCtx.initCachingEnabled {
if err := execCtx.acceptStartRequestForInitCaching(startRequest); err != nil {
handleStartError(execCtx, startRequest.InvokeID, startRequest.CorrelationID, err)
return
}
execCtx.credentialsService.UnblockService()
defer execCtx.credentialsService.BlockService()
} else {
execCtx.acceptStartRequest(startRequest)
}
interopServer, appCtx := execCtx.interopServer, execCtx.appCtx
if err := interopServer.SendRunning(&interop.Running{
PreLoadTimeNs: execCtx.preLoadTimeNs,
PostLoadTimeNs: execCtx.postLoadTimeNs,
WaitStartTimeNs: execCtx.postLoadTimeNs,
WaitEndTimeNs: metering.Monotime(),
ExtensionsEnabled: extensions.AreEnabled(),
}); err != nil {
log.Panic(err)
}
if !startRequest.SuppressInit {
if err := doInit(ctx, execCtx, watchdog); err != nil {
handleStartError(execCtx, startRequest.InvokeID, startRequest.CorrelationID, err)
return
}
}
doneMsg := &interop.Done{
CorrelationID: startRequest.CorrelationID,
Meta: interop.DoneMetadata{
RuntimeRelease: appctx.GetRuntimeRelease(appCtx),
NumActiveExtensions: execCtx.registrationService.CountAgents(),
ExtensionNames: execCtx.GetExtensionNames(),
},
}
if execCtx.telemetryAPIEnabled {
doneMsg.Meta.LogsAPIMetrics = execCtx.logsSubscriptionAPI.FlushMetrics()
}
if err := interopServer.SendDone(doneMsg); err != nil {
log.Panic(err)
}
if err := interopServer.StartAcceptingDirectInvokes(); err != nil {
log.Panic(err)
}
}