Skip to content

Commit 869f7d4

Browse files
Signed-off-by: Jesús Fernández <[email protected]>
1 parent 4ad65f2 commit 869f7d4

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

crossplane/function/runtime.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import asyncio
1818
import os
19+
import signal
1920

2021
import grpc
2122
from grpc_reflection.v1alpha import reflection
@@ -25,6 +26,7 @@
2526
import crossplane.function.proto.v1beta1.run_function_pb2 as fnv1beta1
2627
import crossplane.function.proto.v1beta1.run_function_pb2_grpc as grpcv1beta1
2728

29+
GRACE_PERIOD = 5
2830
SERVICE_NAMES = (
2931
reflection.SERVICE_NAME,
3032
fnv1.DESCRIPTOR.services_by_name["FunctionRunnerService"].full_name,
@@ -64,6 +66,10 @@ def load_credentials(tls_certs_dir: str) -> grpc.ServerCredentials:
6466
)
6567

6668

69+
async def _stop(server, timeout): # noqa: ASYNC109
70+
await server.stop(grace=timeout)
71+
72+
6773
def serve(
6874
function: grpcv1.FunctionRunnerService,
6975
address: str,
@@ -90,6 +96,10 @@ def serve(
9096

9197
server = grpc.aio.server()
9298

99+
loop.add_signal_handler(
100+
signal.SIGTERM, lambda: asyncio.create_task(_stop(server, timeout=GRACE_PERIOD))
101+
)
102+
93103
grpcv1.add_FunctionRunnerServiceServicer_to_server(function, server)
94104
grpcv1beta1.add_FunctionRunnerServiceServicer_to_server(
95105
BetaFunctionRunner(wrapped=function), server
@@ -116,7 +126,7 @@ async def start():
116126
try:
117127
loop.run_until_complete(start())
118128
finally:
119-
loop.run_until_complete(server.stop(grace=5))
129+
loop.run_until_complete(server.stop(grace=GRACE_PERIOD))
120130
loop.close()
121131

122132

0 commit comments

Comments
 (0)