in lambda/rapid/start.go [588:640]
func handleReset(execCtx *rapidContext, watchdog *core.Watchdog, reset *interop.Reset) {
log.Warnf("Reset initiated: %s", reset.Reason)
if execCtx.initCachingEnabled {
execCtx.credentialsService.UnblockService()
}
if err := execCtx.eventsAPI.SendRuntimeDone(reset.Reason); err != nil {
log.Errorf("Failed to send RUNDONE: %s", err)
}
profiler := metering.ExtensionsResetDurationProfiler{}
gracefulShutdown(execCtx, watchdog, &profiler, reset.DeadlineNs, execCtx.standaloneMode, reset.Reason)
extensionsResetMs, resetTimeout := profiler.CalculateExtensionsResetMs()
meta := interop.DoneMetadata{
ExtensionsResetMs: extensionsResetMs,
}
if !execCtx.standaloneMode {
// GIRP interopServer implementation sends GIRP RSTFAIL/RSTDONE
if resetTimeout {
// TODO: DoneFail must contain a reset timeout ErrorType for rapid local to distinguish errors
doneFail := &interop.DoneFail{CorrelationID: reset.CorrelationID, Meta: meta}
if err := execCtx.interopServer.SendDoneFail(doneFail); err != nil {
log.Panicf("Failed to SendDoneFail: %s", err)
}
} else {
done := &interop.Done{CorrelationID: reset.CorrelationID, Meta: meta}
if err := execCtx.interopServer.SendDone(done); err != nil {
log.Panicf("Failed to SendDone: %s", err)
}
}
os.Exit(0)
}
reinitialize(execCtx, watchdog)
fatalErrorType, _ := appctx.LoadFirstFatalError(execCtx.appCtx)
if resetTimeout {
doneFail := &interop.DoneFail{CorrelationID: reset.CorrelationID, ErrorType: fatalErrorType, Meta: meta}
if err := execCtx.interopServer.SendDoneFail(doneFail); err != nil {
log.Panicf("Failed to SendDoneFail: %s", err)
}
} else {
done := &interop.Done{CorrelationID: reset.CorrelationID, ErrorType: fatalErrorType, Meta: meta}
if err := execCtx.interopServer.SendDone(done); err != nil {
log.Panicf("Failed to SendDone: %s", err)
}
}
}