in lambda/rapidcore/server.go [781:816]
func (s *Server) AwaitRelease() (*statejson.ReleaseResponse, error) {
defer func() {
s.setRapidPhase(phaseIdle)
s.setRuntimeState(runtimeInvokeComplete)
}()
select {
case doneWithState := <-s.InvokeDoneChan:
if len(doneWithState.ErrorType) > 0 && string(doneWithState.ErrorType) == ErrInitDoneFailed.Error() {
return nil, ErrInitDoneFailed
}
if len(doneWithState.ErrorType) > 0 {
log.Errorf("Invoke DONE failed: %s", doneWithState.ErrorType)
return nil, ErrInvokeDoneFailed
}
releaseResponse := statejson.ReleaseResponse{
InternalStateDescription: &doneWithState.State,
ResponseMetrics: statejson.ResponseMetrics{
RuntimeResponseLatencyMs: doneWithState.Meta.RuntimeResponseLatencyMs,
Dimensions: statejson.ResponseMetricsDimensions{
InvokeResponseMode: statejson.InvokeResponseMode(
doneWithState.Meta.MetricsDimensions.InvokeResponseMode,
),
},
},
}
s.Release()
return &releaseResponse, nil
case <-s.reservationContext.Done():
return nil, ErrReleaseReservationDone
}
}