File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change 66 "errors"
77 "fmt"
88 "net/http"
9+ "time"
910
1011 "github.com/aws/aws-sdk-go/aws"
1112 "github.com/localstack/lambda-runtime-init/internal/localstack"
@@ -31,6 +32,35 @@ func NewInteropServer(ls *localstack.LocalStackClient) *LocalStackInteropsServer
3132 }
3233}
3334
35+ func (c * LocalStackInteropsServer ) Init (initRequest * interop.Init , timeoutMs int64 ) error {
36+ // This allows us to properly timeout when an INIT request -- which is unimplemented in the upstream.
37+
38+ initStart := metering .Monotime ()
39+
40+ initDone := make (chan error , 1 )
41+ go func () {
42+ initDone <- c .Server .Init (initRequest , timeoutMs )
43+ }()
44+
45+ var err error
46+ select {
47+ case err = <- initDone :
48+ case <- time .After (time .Duration (timeoutMs ) * time .Millisecond ):
49+ if _ , resetErr := c .Server .Reset ("timeout" , 2000 ); resetErr != nil {
50+ log .WithError (resetErr ).Error ("Failed to reset after init timeout" )
51+ }
52+ err = errors .New ("timeout" )
53+ }
54+
55+ initDuration := float64 (metering .Monotime ()- initStart ) / float64 (time .Millisecond )
56+
57+ if err != nil {
58+ log .WithError (err ).WithField ("duration" , initDuration ).Error ("Init failed" )
59+ }
60+
61+ return err
62+ }
63+
3464func (c * LocalStackInteropsServer ) Execute (ctx context.Context , responseWriter http.ResponseWriter , invoke * interop.Invoke ) error {
3565 ctx , cancel := context .WithTimeout (context .Background (), c .Server .GetInvokeTimeout ())
3666 defer cancel ()
You can’t perform that action at this time.
0 commit comments