func()

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