@@ -40,9 +40,12 @@ func main() {
40
40
os .Exit (1 )
41
41
}
42
42
43
+ requestFree := make (chan bool , 1 )
44
+ requestFree <- true
45
+
43
46
pb := NewALBPayloadBuilder (* albMultiValue )
44
47
client := MakeLambdaClient (* endpoint )
45
- handler := MakeInvokeLambdaHandler (client , * functionName , pb )
48
+ handler := MakeInvokeLambdaHandler (client , * functionName , pb , requestFree )
46
49
47
50
http .HandleFunc ("/" , handler )
48
51
@@ -63,8 +66,17 @@ func MakeLambdaClient(endpoint string) *lambda.Lambda {
63
66
return lambda .New (sess , & config )
64
67
}
65
68
66
- func MakeInvokeLambdaHandler (client * lambda.Lambda , functionName string , pb PayloadBuilder ) func (http.ResponseWriter , * http.Request ) {
69
+ func MakeInvokeLambdaHandler (client * lambda.Lambda , functionName string , pb PayloadBuilder , requestFree chan bool ) func (http.ResponseWriter , * http.Request ) {
67
70
return func (w http.ResponseWriter , r * http.Request ) {
71
+ // Use the requestFree channel as a lock to prevent more than one inflight request to the lambda function
72
+ // since it has a concurrency of one.
73
+ _ , ok := <- requestFree
74
+ if ! ok {
75
+ return // Indicates channel closure
76
+ }
77
+
78
+ defer func () {requestFree <- true }()
79
+
68
80
// Add proxy headers
69
81
r .Header .Add ("X-Forwarded-For" , r .RemoteAddr [0 :strings .LastIndex (r .RemoteAddr , ":" )])
70
82
r .Header .Add ("X-Forwarded-Proto" , "http" )
0 commit comments