Example #1
0
 def consume_request_iterator():  # pylint: disable=too-many-branches
     while True:
         return_from_user_request_generator_invoked = False
         try:
             # The thread may die in user-code. Do not block fork for this.
             cygrpc.enter_user_request_generator()
             request = next(request_iterator)
         except StopIteration:
             break
         except Exception:  # pylint: disable=broad-except
             cygrpc.return_from_user_request_generator()
             return_from_user_request_generator_invoked = True
             code = grpc.StatusCode.UNKNOWN
             details = 'Exception iterating requests!'
             _LOGGER.exception(details)
             call.cancel(_common.STATUS_CODE_TO_CYGRPC_STATUS_CODE[code],
                         details)
             _abort(state, code, details)
             return
         finally:
             if not return_from_user_request_generator_invoked:
                 cygrpc.return_from_user_request_generator()
         serialized_request = _common.serialize(request, request_serializer)
         with state.condition:
             if state.code is None and not state.cancelled:
                 if serialized_request is None:
                     code = grpc.StatusCode.INTERNAL
                     details = 'Exception serializing request!'
                     call.cancel(
                         _common.STATUS_CODE_TO_CYGRPC_STATUS_CODE[code],
                         details)
                     _abort(state, code, details)
                     return
                 else:
                     operations = (cygrpc.SendMessageOperation(
                         serialized_request, _EMPTY_FLAGS), )
                     operating = call.operate(operations, event_handler)
                     if operating:
                         state.due.add(cygrpc.OperationType.send_message)
                     else:
                         return
                     while True:
                         state.condition.wait(condition_wait_timeout)
                         cygrpc.block_if_fork_in_progress(state)
                         if state.code is None:
                             if cygrpc.OperationType.send_message not in state.due:
                                 break
                         else:
                             return
             else:
                 return
     with state.condition:
         if state.code is None:
             operations = (
                 cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS), )
             operating = call.operate(operations, event_handler)
             if operating:
                 state.due.add(cygrpc.OperationType.send_close_from_client)
Example #2
0
 def consume_request_iterator():  # pylint: disable=too-many-branches
     while True:
         return_from_user_request_generator_invoked = False
         try:
             # The thread may die in user-code. Do not block fork for this.
             cygrpc.enter_user_request_generator()
             request = next(request_iterator)
         except StopIteration:
             break
         except Exception:  # pylint: disable=broad-except
             cygrpc.return_from_user_request_generator()
             return_from_user_request_generator_invoked = True
             code = grpc.StatusCode.UNKNOWN
             details = 'Exception iterating requests!'
             _LOGGER.exception(details)
             call.cancel(_common.STATUS_CODE_TO_CYGRPC_STATUS_CODE[code],
                         details)
             _abort(state, code, details)
             return
         finally:
             if not return_from_user_request_generator_invoked:
                 cygrpc.return_from_user_request_generator()
         serialized_request = _common.serialize(request, request_serializer)
         with state.condition:
             if state.code is None and not state.cancelled:
                 if serialized_request is None:
                     code = grpc.StatusCode.INTERNAL
                     details = 'Exception serializing request!'
                     call.cancel(
                         _common.STATUS_CODE_TO_CYGRPC_STATUS_CODE[code],
                         details)
                     _abort(state, code, details)
                     return
                 else:
                     operations = (cygrpc.SendMessageOperation(
                         serialized_request, _EMPTY_FLAGS),)
                     operating = call.operate(operations, event_handler)
                     if operating:
                         state.due.add(cygrpc.OperationType.send_message)
                     else:
                         return
                     while True:
                         state.condition.wait(condition_wait_timeout)
                         cygrpc.block_if_fork_in_progress(state)
                         if state.code is None:
                             if cygrpc.OperationType.send_message not in state.due:
                                 break
                         else:
                             return
             else:
                 return
     with state.condition:
         if state.code is None:
             operations = (
                 cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS),)
             operating = call.operate(operations, event_handler)
             if operating:
                 state.due.add(cygrpc.OperationType.send_close_from_client)