)]}'
{"swift/common/memcached.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"5196ed6d3e2b6a485f72b2e70a3831d50fd1ba8a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        getter \u003d Pool.get"},{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            # call the patched .get() if eventlet is older than 0.9.17"},{"line_number":126,"context_line":"            if int(eventlet_version.rsplit(\u0027.\u0027, 1)[-1]) \u003c 17:"},{"line_number":127,"context_line":"                getter \u003d MemcacheConnPool.upstream_fixed_get"},{"line_number":128,"context_line":"        except ValueError:"},{"line_number":129,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FDvU%3D","line":126,"updated":"2013-11-15 01:59:25.000000000","message":"How about we make this check during __init__() and save the result?","commit_id":"ce3568dcd1408a8b633a78ee7e7e8b9ecdaf02d1"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"5196ed6d3e2b6a485f72b2e70a3831d50fd1ba8a","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # The following method is from eventlet post 0.9.16. This version"},{"line_number":137,"context_line":"    # properly keeps track of pool size accounting, and therefore doesn\u0027t"},{"line_number":138,"context_line":"    # let the pool grown without bound. This patched version is the result"},{"line_number":139,"context_line":"    # of commit f5e5b2bda7b442f0262ee1084deefcc5a1cc0694 in eventlet and is"},{"line_number":140,"context_line":"    # documented at https://bitbucket.org/eventlet/eventlet/issue/91"},{"line_number":141,"context_line":"    def upstream_fixed_get(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FDv8%3D","line":138,"updated":"2013-11-15 01:59:25.000000000","message":"Perhaps *grow*?","commit_id":"ce3568dcd1408a8b633a78ee7e7e8b9ecdaf02d1"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"c428184c5472ed7fc1f18c4029e774deb7767608","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        \"\"\""},{"line_number":145,"context_line":"        if self.free_items:"},{"line_number":146,"context_line":"            return self.free_items.popleft()"},{"line_number":147,"context_line":"        self.current_size +\u003d 1"},{"line_number":148,"context_line":"        if self.current_size \u003c\u003d self.max_size:"},{"line_number":149,"context_line":"            try:"},{"line_number":150,"context_line":"                created \u003d self.create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FDos%3D","line":147,"updated":"2013-11-15 02:47:20.000000000","message":"Where is current_size set? In my tests, this ends with AttributeError: \u0027MemcacheConnPool\u0027 object has no attribute \u0027current_size\u0027, but perhaps I am missing something or copypasted wrong.","commit_id":"ce3568dcd1408a8b633a78ee7e7e8b9ecdaf02d1"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"f469ccc94f08c7084a8ea5c7141a86c9bacbaa9c","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                self._parent_class_getter \u003d self._upstream_fixed_get"},{"line_number":114,"context_line":"        except ValueError:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":"        print \u0027%r\u0027 % self._parent_class_getter"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create(self):"},{"line_number":119,"context_line":"        if \u0027:\u0027 in self.server:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FDlw%3D","line":116,"updated":"2013-11-15 03:08:41.000000000","message":"Is this a forgotten debugging statement?","commit_id":"dffe647d75315e128f908dccc26ac61fb7be47a8"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"fe110caa009982ae9fc1800d823c38f84060ae08","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._parent_class_getter \u003d super(MemcacheConnPool, self).get"},{"line_number":110,"context_line":"        try:"},{"line_number":111,"context_line":"            # call the patched .get() if eventlet is older than 0.9.17"},{"line_number":112,"context_line":"            if int(eventlet_version.rsplit(\u0027.\u0027, 1)[-1]) \u003c 17:"},{"line_number":113,"context_line":"                self._parent_class_getter \u003d self._upstream_fixed_get"},{"line_number":114,"context_line":"        except ValueError:"},{"line_number":115,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FDkA%3D","line":112,"updated":"2013-11-15 03:19:16.000000000","message":"Amazingly enough, this is probably going to continue to function if the substitute function is correct in eventlet 1.0, but ewwww.","commit_id":"4f7f565cb91a0f55ede9af88a75f9b32aa18fe27"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"156139013e7bbca49623a92ab1b394055bba89b8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        if self.current_size \u003c\u003d self.max_size:"},{"line_number":149,"context_line":"            try:"},{"line_number":150,"context_line":"                created \u003d self.create()"},{"line_number":151,"context_line":"            except:"},{"line_number":152,"context_line":"                self.current_size -\u003d 1"},{"line_number":153,"context_line":"                raise"},{"line_number":154,"context_line":"            return created"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FDjc%3D","line":151,"updated":"2013-11-15 03:26:40.000000000","message":"This does not pass pep8.","commit_id":"4f7f565cb91a0f55ede9af88a75f9b32aa18fe27"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"adcf11a1cd503d84e1bf7f3b68d3ea0d9431c597","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                created \u003d self.create()"},{"line_number":153,"context_line":"            except:  # noqa"},{"line_number":154,"context_line":"                self.current_size -\u003d 1"},{"line_number":155,"context_line":"                raise"},{"line_number":156,"context_line":"            return created"},{"line_number":157,"context_line":"        self.current_size -\u003d 1  # did not create"},{"line_number":158,"context_line":"        return self.channel.get()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B2WE%3D","line":155,"updated":"2013-11-19 11:48:53.000000000","message":"You *could* reword this with a sentinel and a finally:\n\n    created \u003d None\n    try:\n        created \u003d self.create()\n    finally:\n        if not created:\n            self.current_size -\u003d 1","commit_id":"448953ae11d62e7a44f3bf25bd37d1a08a6762cf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0b6ecb2a81f899b98bf7cdada9a645d85fbec6af","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                created \u003d self.create()"},{"line_number":153,"context_line":"            except:  # noqa"},{"line_number":154,"context_line":"                self.current_size -\u003d 1"},{"line_number":155,"context_line":"                raise"},{"line_number":156,"context_line":"            return created"},{"line_number":157,"context_line":"        self.current_size -\u003d 1  # did not create"},{"line_number":158,"context_line":"        return self.channel.get()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Bztw%3D","line":155,"in_reply_to":"AAAATn%2F%2B1Ng%3D","updated":"2013-11-19 22:09:53.000000000","message":"well except Exception isn\u0027t really the same thing is it... except BaseException would probably work (at least for Timeout) - but then you get into the whole \"old-style class exception\" problem.\n\nI\u0027m just saying since *this* bare except also happens to include a re-raise you can rephrase it as a finally with a sentinel check and it\u0027s exactly functionally equivalent to the bare except.\n\nI\u0027d be surprised if there\u0027s not a hacking equivalent to the #noqa line out there somewhere - has anyone looked?","commit_id":"448953ae11d62e7a44f3bf25bd37d1a08a6762cf"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"1c4bbbb4041d90455eef49fe2dfc89548aff9687","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                created \u003d self.create()"},{"line_number":153,"context_line":"            except:  # noqa"},{"line_number":154,"context_line":"                self.current_size -\u003d 1"},{"line_number":155,"context_line":"                raise"},{"line_number":156,"context_line":"            return created"},{"line_number":157,"context_line":"        self.current_size -\u003d 1  # did not create"},{"line_number":158,"context_line":"        return self.channel.get()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B1Ng%3D","line":155,"in_reply_to":"AAAATn%2F%2B2WE%3D","updated":"2013-11-19 15:58:44.000000000","message":"ya, but if we are rewording it, then why not do \"except Exception\"? Point being, the submitted code is what\u0027s in upstream. The bare except is important here since .create() could raise a Timeout.","commit_id":"448953ae11d62e7a44f3bf25bd37d1a08a6762cf"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"546e8b7e43cedcc4d5d242e5c1d887a22213f3fd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        \"\"\"Return an item from the pool, when one is available.  This may"},{"line_number":145,"context_line":"        cause the calling greenthread to block."},{"line_number":146,"context_line":"        \"\"\""},{"line_number":147,"context_line":"        if self.free_items:"},{"line_number":148,"context_line":"            return self.free_items.popleft()"},{"line_number":149,"context_line":"        self.current_size +\u003d 1"},{"line_number":150,"context_line":"        if self.current_size \u003c\u003d self.max_size:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Bl68%3D","line":147,"updated":"2013-11-22 18:12:40.000000000","message":"It would be great to see unit tests covering this code.","commit_id":"c80a211e3e4bbfc250b4f5d1532a804abe73018f"}],"test/unit/common/test_memcached.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"392ed07a8332060423efd1acbf9e2932f97f6f4c","unresolved":false,"context_lines":[{"line_number":422,"context_line":"            def _slow_yielding_connector(addr):"},{"line_number":423,"context_line":"                count[0] +\u003d 1"},{"line_number":424,"context_line":"                if count[0] % 3 \u003d\u003d 0:"},{"line_number":425,"context_line":"                    sleep(0.02)"},{"line_number":426,"context_line":"                    raise ValueError(\u0027whoops!\u0027)"},{"line_number":427,"context_line":"                sleep(0.1)"},{"line_number":428,"context_line":"                connected.append(addr)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bdsk%3D","line":425,"updated":"2013-11-25 19:44:13.000000000","message":"This sleep appears to have no effect on the test outcome.","commit_id":"5fdb2b71041c1336e4545312521bcc80c6a98a44"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"392ed07a8332060423efd1acbf9e2932f97f6f4c","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                if count[0] % 3 \u003d\u003d 0:"},{"line_number":425,"context_line":"                    sleep(0.02)"},{"line_number":426,"context_line":"                    raise ValueError(\u0027whoops!\u0027)"},{"line_number":427,"context_line":"                sleep(0.1)"},{"line_number":428,"context_line":"                connected.append(addr)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            mock_module.socket.return_value.connect.side_effect \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BdsA%3D","line":427,"updated":"2013-11-25 19:44:13.000000000","message":"Either this sleep or the other sleep call down on line 449 appear to be required to make the test work, but we don\u0027t appear to need both.","commit_id":"5fdb2b71041c1336e4545312521bcc80c6a98a44"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"392ed07a8332060423efd1acbf9e2932f97f6f4c","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                while not got:"},{"line_number":447,"context_line":"                    try:"},{"line_number":448,"context_line":"                        got \u003d pool.get()"},{"line_number":449,"context_line":"                        sleep(0.01)"},{"line_number":450,"context_line":"                    except:"},{"line_number":451,"context_line":"                        pass"},{"line_number":452,"context_line":"                pool.put(got)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bdrs%3D","line":449,"updated":"2013-11-25 19:44:13.000000000","message":"See comment for line 427, we don\u0027t appear to need this call to sleep if we have the other one.","commit_id":"5fdb2b71041c1336e4545312521bcc80c6a98a44"}]}
