)]}'
{"oslo_messaging/rpc/client.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"75e282fc539101ce88ffd0656e5f2b4beb813476","unresolved":false,"context_lines":[{"line_number":498,"context_line":"    them via timeout_ceiling or if not specified by 10 * the default timeout."},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    _METHOD_TIMEOUTS \u003d collections.defaultdict("},{"line_number":502,"context_line":"        lambda: _DEFAULT_RESPONSE_TIMEOUT)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def __init__(self, transport, target,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_cda856de","line":501,"updated":"2016-12-15 09:51:02.000000000","message":"We should not share this between transport, the reason you get a timeout from one transport is perhaps not valid for another one.\n\n\nI don\u0027t think that should be shared between RPCClient at all. Application can just creates on TimeoutBackoffRPCClient if their want to share timeouts. Oslo.messaging should not make any assumption.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"84585e7fcf64d4fcd7eb956938c1a8bb828be9af","unresolved":false,"context_lines":[{"line_number":498,"context_line":"    them via timeout_ceiling or if not specified by 10 * the default timeout."},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    _METHOD_TIMEOUTS \u003d collections.defaultdict("},{"line_number":502,"context_line":"        lambda: _DEFAULT_RESPONSE_TIMEOUT)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def __init__(self, transport, target,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_7b76fcd7","line":501,"in_reply_to":"1a6eadb0_cda856de","updated":"2016-12-15 19:44:49.000000000","message":"Ack: I\u0027ll address this in the next patch.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"d66f24e0d31d34d21ae894e82d29d4a7e48a3e91","unresolved":false,"context_lines":[{"line_number":545,"context_line":"    @classmethod"},{"line_number":546,"context_line":"    def get_scoped_method_name(cls, method, context):"},{"line_number":547,"context_line":"        return (\u0027%s.%s\u0027 % (context.target.namespace, method)"},{"line_number":548,"context_line":"                if context.target.namespace else method)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @classmethod"},{"line_number":551,"context_line":"    def set_default_timeout(cls, timeout):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_2565751d","line":548,"updated":"2016-12-15 00:07:22.000000000","message":"does the context passed into the call have a \u0027.target\u0027 member?  IIRC ctxt is an application supplied map - opaque to the RPC class.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"84585e7fcf64d4fcd7eb956938c1a8bb828be9af","unresolved":false,"context_lines":[{"line_number":545,"context_line":"    @classmethod"},{"line_number":546,"context_line":"    def get_scoped_method_name(cls, method, context):"},{"line_number":547,"context_line":"        return (\u0027%s.%s\u0027 % (context.target.namespace, method)"},{"line_number":548,"context_line":"                if context.target.namespace else method)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @classmethod"},{"line_number":551,"context_line":"    def set_default_timeout(cls, timeout):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_fb504c34","line":548,"in_reply_to":"1a6eadb0_2565751d","updated":"2016-12-15 19:44:49.000000000","message":"Good point; this class probably shouldn\u0027t know/care about contexts. I\u0027ll address in the next patch.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"d66f24e0d31d34d21ae894e82d29d4a7e48a3e91","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                ctxt, method, kwargs)"},{"line_number":572,"context_line":"        except exceptions.MessagingTimeout:"},{"line_number":573,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":574,"context_line":"                scoped_method \u003d self.get_scoped_method_name(method, ctxt)"},{"line_number":575,"context_line":"                next_timeout \u003d self._timeout_fn(scoped_method, kwargs[\u0027timeout\u0027],"},{"line_number":576,"context_line":"                                                self.get_default_timeout())"},{"line_number":577,"context_line":"                splay \u003d self._splay_fn(scoped_method, kwargs[\u0027timeout\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_057dd9b0","line":574,"updated":"2016-12-15 00:07:22.000000000","message":"as noted above: use \u0027self.target\u0027 instead of ctxt.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"84585e7fcf64d4fcd7eb956938c1a8bb828be9af","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                ctxt, method, kwargs)"},{"line_number":572,"context_line":"        except exceptions.MessagingTimeout:"},{"line_number":573,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":574,"context_line":"                scoped_method \u003d self.get_scoped_method_name(method, ctxt)"},{"line_number":575,"context_line":"                next_timeout \u003d self._timeout_fn(scoped_method, kwargs[\u0027timeout\u0027],"},{"line_number":576,"context_line":"                                                self.get_default_timeout())"},{"line_number":577,"context_line":"                splay \u003d self._splay_fn(scoped_method, kwargs[\u0027timeout\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_9b567828","line":574,"in_reply_to":"1a6eadb0_057dd9b0","updated":"2016-12-15 19:44:49.000000000","message":"Ack, thanks.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5a7d289656c68c923d2a774b4d2bd9a6136da35c","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                                    \"to %(new)s seconds. Restart the agent to \""},{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_4b12c90a","line":593,"updated":"2016-12-08 16:31:20.000000000","message":"Unbounded class variables that can grow and never get released by the garbage collector scare me :-P","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"84585e7fcf64d4fcd7eb956938c1a8bb828be9af","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                                    \"to %(new)s seconds. Restart the agent to \""},{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_7b243cc4","line":593,"in_reply_to":"1a6eadb0_6f4071a6","updated":"2016-12-15 19:44:49.000000000","message":"Given the comments above where _METHOD_TIMEOUTS is defined, I hope your concerns will lie to rest in the next patch.","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"50a652268565e52866f559a3e7b8577829139427","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                                    \"to %(new)s seconds. Restart the agent to \""},{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_6f4071a6","line":593,"in_reply_to":"3a71b18c_4b12c90a","updated":"2016-12-13 18:52:02.000000000","message":"What alternatives do you suggest?","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"d66f24e0d31d34d21ae894e82d29d4a7e48a3e91","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_a05a5328","line":594,"updated":"2016-12-15 00:07:22.000000000","message":"What\u0027s the purpose of this sleep?","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"d66f24e0d31d34d21ae894e82d29d4a7e48a3e91","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_052b1995","line":594,"updated":"2016-12-15 00:07:22.000000000","message":"what\u0027s the goal of sleeping here?","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"d66f24e0d31d34d21ae894e82d29d4a7e48a3e91","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_451fd16b","line":594,"updated":"2016-12-15 00:07:22.000000000","message":"what\u0027s the goal of sleeping here?","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"84585e7fcf64d4fcd7eb956938c1a8bb828be9af","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                                    \"restore it to the default value.\"),"},{"line_number":592,"context_line":"                                {\u0027method\u0027: scoped_method, \u0027new\u0027: next_timeout})"},{"line_number":593,"context_line":"                    self._METHOD_TIMEOUTS[scoped_method] \u003d next_timeout"},{"line_number":594,"context_line":"                time.sleep(splay)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_96600fd1","line":594,"in_reply_to":"1a6eadb0_a05a5328","updated":"2016-12-15 19:44:49.000000000","message":"The intent is to introduce a random splay on timeouts to try and spread rpc calls more evenly. Note that if consumers don\u0027t want this splay sleep, they can pass in a simple lambda as the splay_func.. e.g.\n\n  client \u003d TimeoutBackoffRPCClient(... splay_func\u003dlambda *args: 0, ...)","commit_id":"40a48dcf3fe79cdb69826c08db0b7e90477d4270"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"a36a859fd95b8f7e7eed33cedb19530551fa6ac6","unresolved":false,"context_lines":[{"line_number":566,"context_line":"    def _get_timeout(self, method):"},{"line_number":567,"context_line":"        return self._timeouts[self.get_scoped_method_name(method)]"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def call(self, ctxt, method, **kwargs):"},{"line_number":570,"context_line":"        if \u0027timeout\u0027 in kwargs:"},{"line_number":571,"context_line":"            return super(TimeoutBackoffRPCClient, self).call("},{"line_number":572,"context_line":"                ctxt, method, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_4707edc9","line":569,"updated":"2017-01-04 21:41:37.000000000","message":"This impl will have to support prepare() in this client and provide a custom context since a number of consumers just use client.prepare(...).call(...) which won\u0027t get handled here.","commit_id":"77f7733b678e83ae819a70364090568d97e63055"}]}
