)]}'
{"swift/common/utils.py":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"b8544f9100f49827343cc282e7ceff52b3567a8d","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                if self._inflight \u003d\u003d 0:"},{"line_number":3162,"context_line":"                    raise StopIteration()"},{"line_number":3163,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3164,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3165,"context_line":"                continue"},{"line_number":3166,"context_line":"            self._pending -\u003d 1"},{"line_number":3167,"context_line":"            return rv"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1a5f8fde","line":3164,"updated":"2018-12-07 09:02:10.000000000","message":"Shouldn\u0027t this condition be placed after _pending is decremented? Otherwise, _pending might never reached 0.\n\nBTW, _pending is accessed in proxy/controller/obj.py, an accessor (like inflight) would be nice.","commit_id":"534392d43d7963118aa130778d1fb851bee8ab2c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ea924268b7e25d6eb5b5db668f3e452525223999","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                if self._inflight \u003d\u003d 0:"},{"line_number":3162,"context_line":"                    raise StopIteration()"},{"line_number":3163,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3164,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3165,"context_line":"                continue"},{"line_number":3166,"context_line":"            self._pending -\u003d 1"},{"line_number":3167,"context_line":"            return rv"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_4f3eb0b8","line":3164,"in_reply_to":"3f79a3b5_1a5f8fde","updated":"2019-08-01 22:24:21.000000000","message":"I\u0027m not sure the expectation for ._pending is defined when there\u0027s an error - we definitely didn\u0027t get a result from that spawn...","commit_id":"534392d43d7963118aa130778d1fb851bee8ab2c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"81806ac61204dd08b1934f2432889ca5ea5f767f","unresolved":false,"context_lines":[{"line_number":3344,"context_line":"                if self._inflight \u003d\u003d 0:"},{"line_number":3345,"context_line":"                    raise StopIteration()"},{"line_number":3346,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3347,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3348,"context_line":"                continue"},{"line_number":3349,"context_line":"            self._pending -\u003d 1"},{"line_number":3350,"context_line":"            return rv"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_efb43c38","line":3347,"range":{"start_line":3347,"start_character":18,"end_line":3347,"end_character":20},"updated":"2019-08-01 22:49:13.000000000","message":"nit: Should we use\n\n is\n\ninstead?","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"81806ac61204dd08b1934f2432889ca5ea5f767f","unresolved":false,"context_lines":[{"line_number":3346,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3347,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3348,"context_line":"                continue"},{"line_number":3349,"context_line":"            self._pending -\u003d 1"},{"line_number":3350,"context_line":"            return rv"},{"line_number":3351,"context_line":"    __next__ \u003d next"},{"line_number":3352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_2f957440","line":3349,"updated":"2019-08-01 22:49:13.000000000","message":"I share Romain\u0027s concern about us leaving the pending count too high -- I\u0027m worried that we may fail to spawn() around https://github.com/openstack/swift/blob/2.22.0/swift/proxy/controllers/obj.py#L2386, making us more likely to fail a request that we should have been willing to make extra requests to try to service...","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0da10c369b9cc7ba9459897d488ea5546b00b6d9","unresolved":false,"context_lines":[{"line_number":3346,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3347,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3348,"context_line":"                continue"},{"line_number":3349,"context_line":"            self._pending -\u003d 1"},{"line_number":3350,"context_line":"            return rv"},{"line_number":3351,"context_line":"    __next__ \u003d next"},{"line_number":3352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_f206581c","line":3349,"in_reply_to":"7faddb67_0742d40f","updated":"2019-08-02 15:19:08.000000000","message":"IIRC,\n- inflight is for the time between spawn() call and adding to the responses queue, while\n- pending is for the time between spawn() and *reading* the response off the queue.\n\nSince we read a result, seems like we ought to decrement.\n\nSo inflight should tell us whether spawn will block... and pending should tell us whether we can expect a result from next? No, exceptions still cause problems... hmm... makes me wonder if there\u0027s still a problem in the object controller.\n\nWell, I don\u0027t think it\u0027s demonstrably *worse* than before, anyway.","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"847705bdceb3af911e3ff986f63a43b75826fbd4","unresolved":false,"context_lines":[{"line_number":3346,"context_line":"                rv \u003d self._responses.get()"},{"line_number":3347,"context_line":"            if rv \u003d\u003d DEAD:"},{"line_number":3348,"context_line":"                continue"},{"line_number":3349,"context_line":"            self._pending -\u003d 1"},{"line_number":3350,"context_line":"            return rv"},{"line_number":3351,"context_line":"    __next__ \u003d next"},{"line_number":3352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_0742d40f","line":3349,"in_reply_to":"7faddb67_2f957440","updated":"2019-08-02 14:25:19.000000000","message":"Fine by me, as long as there\u0027s consensus.\n\nI don\u0027t really understand the difference between pending and inflight - but lots of tests fail if that code uses the wrong one so I guess the difference is significant.","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"}],"test/unit/common/middleware/s3api/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"81806ac61204dd08b1934f2432889ca5ea5f767f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.app \u003d FakeApp()"},{"line_number":81,"context_line":"        self.swift \u003d self.app.swift"},{"line_number":82,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":83,"context_line":"        self.s3api.logger \u003d self.s3api.app.logger \u003d debug_logger()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":86,"context_line":"                            swob.HTTPOk, {}, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_0f8bd867","line":83,"range":{"start_line":83,"start_character":28,"end_line":83,"end_character":49},"updated":"2019-08-01 22:49:13.000000000","message":"self.s3api.app.logger, or self.app.logger? I guess they ought to be the same -- makes me glad I did the ListingEtagMiddleware the way I did at https://github.com/openstack/swift/blob/2.22.0/swift/common/middleware/s3api/s3api.py#L356","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"847705bdceb3af911e3ff986f63a43b75826fbd4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.app \u003d FakeApp()"},{"line_number":81,"context_line":"        self.swift \u003d self.app.swift"},{"line_number":82,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":83,"context_line":"        self.s3api.logger \u003d self.s3api.app.logger \u003d debug_logger()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":86,"context_line":"                            swob.HTTPOk, {}, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_e7a218fc","line":83,"range":{"start_line":83,"start_character":28,"end_line":83,"end_character":49},"in_reply_to":"7faddb67_0f8bd867","updated":"2019-08-02 14:25:19.000000000","message":"I think this is some non-sense i picked up in the rebase - although generally support using all debug_loggers in unittests!","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0da10c369b9cc7ba9459897d488ea5546b00b6d9","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.app \u003d FakeApp()"},{"line_number":81,"context_line":"        self.swift \u003d self.app.swift"},{"line_number":82,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":83,"context_line":"        self.s3api.logger \u003d debug_logger()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":86,"context_line":"                            swob.HTTPOk, {}, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d27a3c22","line":83,"updated":"2019-08-02 15:19:08.000000000","message":"IDK -- I thought there was value in making sure the fake app had a logger...\n\nOh. Except it really doesn\u0027t do any logging, does it? *Maybe* self.swift should have one, but I\u0027m not really sure that FakeSwift does logging, either...\n\n*shrug*","commit_id":"bd867f585545e3fd8e9deb92e98047c112dfe6fe"}],"test/unit/common/middleware/s3api/test_multi_delete.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e301c10b2d11c45c043bc5daef063fad71c289c6","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        obj \u003d SubElement(elem, \u0027Object\u0027)"},{"line_number":332,"context_line":"        SubElement(obj, \u0027Key\u0027).text \u003d \u0027Key1\u0027"},{"line_number":333,"context_line":"        body \u003d tostring(elem, use_s3ns\u003dFalse)"},{"line_number":334,"context_line":"        content_md5 \u003d md5(body).digest().encode(\u0027base64\u0027).strip()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        req \u003d Request.blank(\u0027/bucket?delete\u0027,"},{"line_number":337,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_284b2a2b","line":334,"updated":"2019-08-02 03:48:59.000000000","message":"Looks like we want something like\n\n content_md5 \u003d base64.b64encode(md5(body).digest()).strip()\n\nin a py3 world.","commit_id":"c695886aef7fb0dbd123459e89c401fb28f03220"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0da10c369b9cc7ba9459897d488ea5546b00b6d9","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        obj \u003d SubElement(elem, \u0027Object\u0027)"},{"line_number":332,"context_line":"        SubElement(obj, \u0027Key\u0027).text \u003d \u0027Key1\u0027"},{"line_number":333,"context_line":"        body \u003d tostring(elem, use_s3ns\u003dFalse)"},{"line_number":334,"context_line":"        content_md5 \u003d md5(body).digest().encode(\u0027base64\u0027).strip()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        req \u003d Request.blank(\u0027/bucket?delete\u0027,"},{"line_number":337,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_3264f049","line":334,"range":{"start_line":334,"start_character":41,"end_line":334,"end_character":47},"updated":"2019-08-02 15:19:08.000000000","message":"py3\u0027s still gonna be busted -- I\u0027ll re-spin.","commit_id":"bd867f585545e3fd8e9deb92e98047c112dfe6fe"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"847705bdceb3af911e3ff986f63a43b75826fbd4","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                                     \u0027Content-MD5\u0027: content_md5},"},{"line_number":341,"context_line":"                            body\u003dbody)"},{"line_number":342,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":343,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _test_object_multi_DELETE(self, account):"},{"line_number":346,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_479a0c14","line":343,"updated":"2019-08-02 14:25:19.000000000","message":"I guess something related to multi-delete is when I (originally?) discovered this failure mode - it\u0027s really not great.","commit_id":"bd867f585545e3fd8e9deb92e98047c112dfe6fe"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0da10c369b9cc7ba9459897d488ea5546b00b6d9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    def setUp(self):"},{"line_number":171,"context_line":"        # setup fake rings with handoffs"},{"line_number":172,"context_line":"        for policy in POLICIES:"},{"line_number":173,"context_line":"            policy.object_ring.max_more_nodes \u003d policy.object_ring.replicas"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        self.logger \u003d debug_logger(\u0027proxy-server\u0027)"},{"line_number":176,"context_line":"        self.logger.thread_locals \u003d (\u0027txn1\u0027, \u0027127.0.0.2\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_52308c56","line":173,"updated":"2019-08-02 15:19:08.000000000","message":"OK, got it -- so this is how we know we\u0027re going to actually look at (and then ignore) those 404s.","commit_id":"bd867f585545e3fd8e9deb92e98047c112dfe6fe"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"847705bdceb3af911e3ff986f63a43b75826fbd4","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"    def test_primary_returns_some_nonsense_timestamp(self):"},{"line_number":1603,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":1604,"context_line":"        # an un-handled ValueError in _make_node_request should just continue"},{"line_number":1605,"context_line":"        # to the next node rather than hang the request"},{"line_number":1606,"context_line":"        headers \u003d [{\u0027X-Backend-Timestamp\u0027: \u0027not-a-timestamp\u0027}, {}]"},{"line_number":1607,"context_line":"        codes \u003d [200, 200]"},{"line_number":1608,"context_line":"        with set_http_connect(*codes, headers\u003dheaders):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_c7003c37","line":1605,"updated":"2019-08-02 14:25:19.000000000","message":"this failure mode was what reminded me of this fix","commit_id":"bd867f585545e3fd8e9deb92e98047c112dfe6fe"}]}
