Example #1
0
    def call(self, ctxt, method, **kwargs):
        """Invoke a method and wait for a reply. See RPCClient.call()."""
        if self.target.fanout:
            raise exceptions.InvalidTarget("A call cannot be used with fanout", self.target)

        msg = self._make_message(ctxt, method, kwargs)
        msg_ctxt = self.serializer.serialize_context(ctxt)

        span_host = tomograph.getHost()

        ser_name = "%s[%s]" % ("RPC_call", self.target.topic)
        tomograph.start(ser_name, self.target.topic, span_host, 0)
        trace_info = tomograph.get_trace_info()
        msg_ctxt["trace_id"] = trace_info[0]
        msg_ctxt["span_id"] = trace_info[1]

        timeout = self.timeout
        if self.timeout is None:
            timeout = self.conf.rpc_response_timeout

        if self.version_cap:
            self._check_version_cap(msg.get("version"))

        try:
            result = self.transport._send(
                self.target, msg_ctxt, msg, wait_for_reply=True, timeout=timeout, retry=self.retry
            )

            tomograph.stop(self.target.topic)
        except driver_base.TransportDriverError as ex:
            raise ClientSendError(self.target, ex)
        return self.serializer.deserialize_entity(ctxt, result)
Example #2
0
    def call(self, ctxt, method, **kwargs):
        """Invoke a method and wait for a reply. See RPCClient.call()."""
        if self.target.fanout:
            raise exceptions.InvalidTarget('A call cannot be used with fanout',
                                           self.target)

        msg = self._make_message(ctxt, method, kwargs)
        msg_ctxt = self.serializer.serialize_context(ctxt)

        span_host = tomograph.getHost()

        ser_name = "%s[%s]" % ("RPC_call", self.target.topic)
        tomograph.start(ser_name, self.target.topic, span_host, 0)
        trace_info = tomograph.get_trace_info()
        msg_ctxt["trace_id"] = trace_info[0]
        msg_ctxt["span_id"] = trace_info[1]

        timeout = self.timeout
        if self.timeout is None:
            timeout = self.conf.rpc_response_timeout

        if self.version_cap:
            self._check_version_cap(msg.get('version'))

        try:
            result = self.transport._send(self.target, msg_ctxt, msg,
                                          wait_for_reply=True, timeout=timeout,
                                          retry=self.retry)

            tomograph.stop(self.target.topic)
        except driver_base.TransportDriverError as ex:
            raise ClientSendError(self.target, ex)
        return self.serializer.deserialize_entity(ctxt, result)
Example #3
0
    def cast(self, ctxt, method, **kwargs):
        """Invoke a method and return immediately. See RPCClient.cast()."""
        msg = self._make_message(ctxt, method, kwargs)
        msg_ctxt = self.serializer.serialize_context(ctxt)

        span_host = tomograph.getHost()
        ser_name = "%s[%s]" % ("RPC_cast", self.target.topic)
        tomograph.start(ser_name, self.target.topic, span_host, 0)
        trace_info = tomograph.get_trace_info()
        msg_ctxt["trace_id"] = trace_info[0]
        msg_ctxt["span_id"] = trace_info[1]

        if self.version_cap:
            self._check_version_cap(msg.get("version"))
        try:
            self.transport._send(self.target, msg_ctxt, msg, retry=self.retry)
            tomograph.stop(self.target.topic)
        except driver_base.TransportDriverError as ex:
            raise ClientSendError(self.target, ex)
Example #4
0
    def cast(self, ctxt, method, **kwargs):
        """Invoke a method and return immediately. See RPCClient.cast()."""
        msg = self._make_message(ctxt, method, kwargs)
        msg_ctxt = self.serializer.serialize_context(ctxt)

        span_host = tomograph.getHost()
        ser_name = "%s[%s]" % ("RPC_cast", self.target.topic)
        tomograph.start(ser_name, self.target.topic, span_host, 0)
        trace_info = tomograph.get_trace_info()
        msg_ctxt["trace_id"] = trace_info[0]
        msg_ctxt["span_id"] = trace_info[1]

        if self.version_cap:
            self._check_version_cap(msg.get('version'))
        try:
            self.transport._send(self.target, msg_ctxt, msg, retry=self.retry)
            tomograph.stop(self.target.topic)
        except driver_base.TransportDriverError as ex:
            raise ClientSendError(self.target, ex)