in lambda/rapid/start.go [513:565]
func handleInvoke(ctx context.Context, execCtx *rapidContext, watchdog *core.Watchdog, invokeRequest *interop.Invoke) {
interopServer, appCtx := execCtx.interopServer, execCtx.appCtx
invokeMx := invokeMetrics{}
if invokeRequest.ResyncState.IsResyncReceived {
err := execCtx.credentialsService.UpdateCredentials(invokeRequest.ResyncState.AwsKey, invokeRequest.ResyncState.AwsSecret, invokeRequest.ResyncState.AwsSession)
execCtx.credentialsService.UnblockService()
if err != nil {
log.WithError(err).WithField("InvokeID", invokeRequest.ID).Error("Resync for Invoke failed")
doneFailMsg := generateDoneFail(execCtx, invokeRequest.CorrelationID, &invokeMx, invokeRequest.InvokeReceivedTime)
handleInvokeError(doneFailMsg, execCtx, invokeRequest.ID, interopServer, err)
}
}
if err := doInvoke(ctx, execCtx, watchdog, invokeRequest, &invokeMx); err != nil {
log.WithError(err).WithField("InvokeID", invokeRequest.ID).Error("Invoke failed")
doneFailMsg := generateDoneFail(execCtx, invokeRequest.CorrelationID, &invokeMx, invokeRequest.InvokeReceivedTime)
handleInvokeError(doneFailMsg, execCtx, invokeRequest.ID, interopServer, err)
return
}
if err := execCtx.interopServer.CommitResponse(); err != nil {
log.Panic(err)
}
var invokeCompletionTimeNs int64
if responseTimeNs := execCtx.registrationService.GetRuntime().GetRuntimeDescription().State.ResponseTimeNs; responseTimeNs != 0 {
invokeCompletionTimeNs = time.Now().UnixNano() - responseTimeNs
}
doneMsg := &interop.Done{
CorrelationID: invokeRequest.CorrelationID,
Meta: interop.DoneMetadata{
RuntimeRelease: appctx.GetRuntimeRelease(appCtx),
NumActiveExtensions: execCtx.registrationService.CountAgents(),
ExtensionNames: execCtx.GetExtensionNames(),
InvokeRequestReadTimeNs: invokeMx.rendererMetrics.ReadTime.Nanoseconds(),
InvokeRequestSizeBytes: int64(invokeMx.rendererMetrics.SizeBytes),
InvokeCompletionTimeNs: invokeCompletionTimeNs,
InvokeReceivedTime: invokeRequest.InvokeReceivedTime,
RuntimeReadyTime: invokeMx.runtimeReadyTime,
},
}
if execCtx.telemetryAPIEnabled {
doneMsg.Meta.LogsAPIMetrics = execCtx.logsSubscriptionAPI.FlushMetrics()
}
if err := interopServer.SendDone(doneMsg); err != nil {
log.Panic(err)
}
}