in lambda/rapidcore/standalone/invokeHandler.go [17:62]
func InvokeHandler(w http.ResponseWriter, r *http.Request, s rapidcore.InteropServer) {
tok := s.CurrentToken()
if tok == nil {
log.Errorf("Attempt to call directInvoke without Reserve")
w.WriteHeader(http.StatusBadRequest)
return
}
isResyncReceivedFlag := false
awsKey := r.Header.Get("ResyncAwsKey")
awsSecret := r.Header.Get("ResyncAwsSecret")
awsSession := r.Header.Get("ResyncAwsSession")
if len(awsKey) > 0 && len(awsSecret) > 0 && len(awsSession) > 0 {
isResyncReceivedFlag = true
}
invokePayload := &interop.Invoke{
TraceID: r.Header.Get("X-Amzn-Trace-Id"),
LambdaSegmentID: r.Header.Get("X-Amzn-Segment-Id"),
Payload: r.Body,
CorrelationID: "invokeCorrelationID",
DeadlineNs: fmt.Sprintf("%d", metering.Monotime()+tok.FunctionTimeout.Nanoseconds()),
ResyncState: interop.Resync{
IsResyncReceived: isResyncReceivedFlag,
AwsKey: awsKey,
AwsSecret: awsSecret,
AwsSession: awsSession,
},
}
if err := s.FastInvoke(w, invokePayload, false); err != nil {
switch err {
case rapidcore.ErrNotReserved:
case rapidcore.ErrAlreadyReplied:
case rapidcore.ErrAlreadyInvocating:
log.Errorf("Failed to set reply stream: %s", err)
w.WriteHeader(400)
return
case rapidcore.ErrInvokeReservationDone:
// TODO use http.StatusBadGateway
w.WriteHeader(http.StatusGatewayTimeout)
}
}
}