Improved lambda timings
This commit is contained in:
parent
9ddf7fe436
commit
62a2d8f756
3 changed files with 36 additions and 8 deletions
|
|
@ -298,7 +298,12 @@ class LambdaFunction(BaseModel):
|
|||
volumes=["{}:/var/task".format(data_vol.name)], environment=env_vars, detach=True, **run_kwargs)
|
||||
finally:
|
||||
if container:
|
||||
exit_code = container.wait()
|
||||
try:
|
||||
exit_code = container.wait(timeout=300)
|
||||
except requests.exceptions.ReadTimeout:
|
||||
exit_code = -1
|
||||
container.stop()
|
||||
container.kill()
|
||||
output = container.logs(stdout=False, stderr=True)
|
||||
output += container.logs(stdout=True, stderr=False)
|
||||
container.remove()
|
||||
|
|
|
|||
|
|
@ -12,6 +12,24 @@ except:
|
|||
from moto.core.utils import amz_crc32, amzn_request_id
|
||||
from moto.core.responses import BaseResponse
|
||||
|
||||
import signal
|
||||
import contextlib
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def timeout(seconds=5):
|
||||
def handle_error(signum, frame):
|
||||
raise RuntimeError()
|
||||
|
||||
try:
|
||||
signal.signal(signal.SIGALRM, handle_error)
|
||||
signal.alarm(seconds)
|
||||
yield None
|
||||
except RuntimeError:
|
||||
pass
|
||||
finally:
|
||||
signal.alarm(0)
|
||||
|
||||
|
||||
class LambdaResponse(BaseResponse):
|
||||
|
||||
|
|
@ -100,7 +118,8 @@ class LambdaResponse(BaseResponse):
|
|||
|
||||
if lambda_backend.has_function(function_name):
|
||||
fn = lambda_backend.get_function(function_name)
|
||||
payload = fn.invoke(self.body, self.headers, response_headers)
|
||||
with timeout(seconds=360):
|
||||
payload = fn.invoke(self.body, self.headers, response_headers)
|
||||
response_headers['Content-Length'] = str(len(payload))
|
||||
return 202, response_headers, payload
|
||||
else:
|
||||
|
|
@ -114,7 +133,8 @@ class LambdaResponse(BaseResponse):
|
|||
function_name = path.split('/')[-3]
|
||||
if lambda_backend.has_function(function_name):
|
||||
fn = lambda_backend.get_function(function_name)
|
||||
fn.invoke(self.body, self.headers, response_headers)
|
||||
with timeout(seconds=360):
|
||||
fn.invoke(self.body, self.headers, response_headers)
|
||||
response_headers['Content-Length'] = str(0)
|
||||
return 202, response_headers, ""
|
||||
else:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue