Esempio n. 1
0
 def prelude(self, request, context) -> str:
     # Remember call for debug dump
     input_trace = trace_rpc(True, request, context=context)
     logged_call = f"Thread 0x{current_thread().ident:016x} -- " + input_trace
     with self.server.lock:
         self.server.calls.append(logged_call)
     self.logger.debug(input_trace)
     return logged_call
Esempio n. 2
0
    def __call__(self, request, context):
        # Call prelude
        logged_call = self.prelude(request, context)

        try:
            # Delegate call (streaming output)
            result_provider = self.delegate_call(request, context)
            for result in result_provider:
                self.logger.debug(trace_rpc(False, result, context=context))
                yield result
        except Exception as e:
            # Handle exception
            result = self.report_exception(context, e)
            self.logger.debug(trace_rpc(False, result, context=context))
            yield result

        # Call epilog
        self.epilog(logged_call)
Esempio n. 3
0
    def __call__(self, request, context):
        # Call prelude
        logged_call = self.prelude(request, context)

        try:
            # Delegate call (simple output)
            result = self.delegate_call(request, context)
        except Exception as e:
            # Handle exception
            result = self.report_exception(context, e)

        # Call epilog
        self.epilog(logged_call)
        self.logger.debug(trace_rpc(False, result, context=context))

        return result
Esempio n. 4
0
    def __call__(self, request):
        # Call prelude
        trace, first_try = self.prelude(request)
        retry_delay = RPC_RETRY_DELAY

        # Loop to handle retries
        while True:
            try:
                # Call real stub method, with metadata
                result = getattr(self.stub, self.m_name)(request, metadata=self.metadata.as_tuple())
                self.logger.debug(trace_rpc(False, result, context=self.metadata, method=f"{self.s_name}.{self.m_name}"))

                # May raise an exception...
                self.raise_result(result)
                return result
            except RpcError as e:
                self.handle_exception(trace, first_try, e, retry_delay)
                retry_delay *= 2
Esempio n. 5
0
 def prelude(self, request):
     trace = trace_rpc(True, request, context=self.metadata, method=f"{self.s_name}.{self.m_name}")
     self.logger.debug(trace)
     return (trace, time.time())