func handleStart()

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)
	}
}