From b804ce974a75a2d32fe186f6abdc3493eb851ee4 Mon Sep 17 00:00:00 2001 From: Neeraj Kashyap <nkashy1@gmail.com> Date: Mon, 26 Aug 2019 08:43:46 -0700 Subject: [PATCH 1/3] Implemented _abort method on ServicerContext This acquires a lock from the _condition member of the context's _rpc and then aborts the _rpc directly --- .../grpcio_testing/grpc_testing/_server/_servicer_context.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py index 63a1b1aec95..0f9c4ed4b00 100644 --- a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py +++ b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py @@ -74,7 +74,8 @@ class ServicerContext(grpc.ServicerContext): _common.fuss_with_metadata(trailing_metadata)) def abort(self, code, details): - raise NotImplementedError() + self._rpc._condition.acquire() + self._rpc._abort(code, details) def abort_with_status(self, status): raise NotImplementedError() From 1ab9225dcef223610cd4992482363bd927f41a5c Mon Sep 17 00:00:00 2001 From: Neeraj Kashyap <nkashy1@gmail.com> Date: Mon, 26 Aug 2019 10:57:35 -0700 Subject: [PATCH 2/3] Release the lock on the RPC object condition --- .../grpcio_testing/grpc_testing/_server/_servicer_context.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py index 0f9c4ed4b00..b1277fa4a42 100644 --- a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py +++ b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py @@ -76,6 +76,7 @@ class ServicerContext(grpc.ServicerContext): def abort(self, code, details): self._rpc._condition.acquire() self._rpc._abort(code, details) + self._rpc._condition.release() def abort_with_status(self, status): raise NotImplementedError() From 5c173084f8af589a1bad3ba44cabedb1c781470b Mon Sep 17 00:00:00 2001 From: Neeraj Kashyap <nkashy1@gmail.com> Date: Mon, 26 Aug 2019 11:07:58 -0700 Subject: [PATCH 3/3] condition acquire and release with context manager Was previously unfamiliar with the contex manager wrapper around threading primitives. --- .../grpcio_testing/grpc_testing/_server/_servicer_context.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py index b1277fa4a42..6fa8c6b3ba8 100644 --- a/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py +++ b/src/python/grpcio_testing/grpc_testing/_server/_servicer_context.py @@ -74,9 +74,8 @@ class ServicerContext(grpc.ServicerContext): _common.fuss_with_metadata(trailing_metadata)) def abort(self, code, details): - self._rpc._condition.acquire() - self._rpc._abort(code, details) - self._rpc._condition.release() + with self._rpc._condition: + self._rpc._abort(code, details) def abort_with_status(self, status): raise NotImplementedError()