Merge pull request #18108 from grpc/enable-load-reporting

Enable Load Reporting
pull/18095/head^2
Richard Belleville 6 years ago committed by GitHub
commit f6cba4b2fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      src/python/grpcio/grpc/__init__.py
  2. 35
      src/python/grpcio/grpc/_server.py

@ -14,6 +14,7 @@
"""gRPC's Python API.""" """gRPC's Python API."""
import abc import abc
import contextlib
import enum import enum
import logging import logging
import sys import sys
@ -1779,6 +1780,14 @@ def server(thread_pool,
maximum_concurrent_rpcs) maximum_concurrent_rpcs)
@contextlib.contextmanager
def _create_servicer_context(rpc_event, state, request_deserializer):
from grpc import _server # pylint: disable=cyclic-import
context = _server._Context(rpc_event, state, request_deserializer)
yield context
context._finalize_state() # pylint: disable=protected-access
################################### __all__ ################################# ################################### __all__ #################################
__all__ = ( __all__ = (

@ -302,6 +302,9 @@ class _Context(grpc.ServicerContext):
with self._state.condition: with self._state.condition:
self._state.details = _common.encode(details) self._state.details = _common.encode(details)
def _finalize_state(self):
pass
class _RequestIterator(object): class _RequestIterator(object):
@ -387,20 +390,24 @@ def _unary_request(rpc_event, state, request_deserializer):
def _call_behavior(rpc_event, state, behavior, argument, request_deserializer): def _call_behavior(rpc_event, state, behavior, argument, request_deserializer):
context = _Context(rpc_event, state, request_deserializer) from grpc import _create_servicer_context
try: with _create_servicer_context(rpc_event, state,
return behavior(argument, context), True request_deserializer) as context:
except Exception as exception: # pylint: disable=broad-except try:
with state.condition: response = behavior(argument, context)
if state.aborted: return response, True
_abort(state, rpc_event.call, cygrpc.StatusCode.unknown, except Exception as exception: # pylint: disable=broad-except
b'RPC Aborted') with state.condition:
elif exception not in state.rpc_errors: if state.aborted:
details = 'Exception calling application: {}'.format(exception) _abort(state, rpc_event.call, cygrpc.StatusCode.unknown,
_LOGGER.exception(details) b'RPC Aborted')
_abort(state, rpc_event.call, cygrpc.StatusCode.unknown, elif exception not in state.rpc_errors:
_common.encode(details)) details = 'Exception calling application: {}'.format(
return None, False exception)
_LOGGER.exception(details)
_abort(state, rpc_event.call, cygrpc.StatusCode.unknown,
_common.encode(details))
return None, False
def _take_response_from_response_iterator(rpc_event, state, response_iterator): def _take_response_from_response_iterator(rpc_event, state, response_iterator):

Loading…
Cancel
Save