)]}'
{"swift/common/middleware/bulk.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"240ac03416e666f763e72eb95e78179f9be3f586","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                        if last_yield + self.yield_frequency \u003c time():"},{"line_number":453,"context_line":"                            separator \u003d \u0027\\r\\n\\r\\n\u0027"},{"line_number":454,"context_line":"                            last_yield \u003d time()"},{"line_number":455,"context_line":"                            yield \u0027 \u0027"},{"line_number":456,"context_line":"                        self._process_delete(resp, pile, obj_name,"},{"line_number":457,"context_line":"                                             resp_dict, failed_files,"},{"line_number":458,"context_line":"                                             failed_file_response, retry)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_16017038","line":455,"updated":"2019-03-18 19:43:19.000000000","message":"We\u0027re changing the order of the xml declaration vs the dribbled-out whitespace. This is gonna break xml parsers :-(","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e640472f31c6c2e60fbe43fc9f0191db36fefe94","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                        if last_yield + self.yield_frequency \u003c time():"},{"line_number":453,"context_line":"                            separator \u003d \u0027\\r\\n\\r\\n\u0027"},{"line_number":454,"context_line":"                            last_yield \u003d time()"},{"line_number":455,"context_line":"                            yield \u0027 \u0027"},{"line_number":456,"context_line":"                        self._process_delete(resp, pile, obj_name,"},{"line_number":457,"context_line":"                                             resp_dict, failed_files,"},{"line_number":458,"context_line":"                                             failed_file_response, retry)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_df40d4a7","line":455,"in_reply_to":"5fc1f717_16017038","updated":"2019-03-18 20:38:27.000000000","message":"Done","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4fa5b101bd44a1c8f14755535c9d5c50ae9abe44","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                        if last_yield + self.yield_frequency \u003c time():"},{"line_number":453,"context_line":"                            separator \u003d \u0027\\r\\n\\r\\n\u0027"},{"line_number":454,"context_line":"                            last_yield \u003d time()"},{"line_number":455,"context_line":"                            yield \u0027 \u0027"},{"line_number":456,"context_line":"                        self._process_delete(resp, pile, obj_name,"},{"line_number":457,"context_line":"                                             resp_dict, failed_files,"},{"line_number":458,"context_line":"                                             failed_file_response, retry)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_41172253","line":455,"in_reply_to":"5fc1f717_df40d4a7","updated":"2019-03-19 08:31:38.000000000","message":"Uh, good catch! Missed that in Gerrit - I was not looking for earlier yields in the collapsed \"skipped lines\" section.","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"}],"test/functional/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"240ac03416e666f763e72eb95e78179f9be3f586","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"def requires_bulk(f):"},{"line_number":1295,"context_line":"    @functools.wraps(f)"},{"line_number":1296,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":1297,"context_line":"        global skip, cluster_info"},{"line_number":1298,"context_line":"        if skip or not cluster_info:"},{"line_number":1299,"context_line":"            raise SkipTest(\u0027Requires bulk middleware\u0027)"},{"line_number":1300,"context_line":"        # Determine whether this cluster has bulk middleware; if not, skip test"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_01d36805","line":1297,"updated":"2019-03-18 19:43:19.000000000","message":"We\u0027re not changing these, right? I think we can skip the global declaration...\n\n*shrug*","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e640472f31c6c2e60fbe43fc9f0191db36fefe94","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"def requires_bulk(f):"},{"line_number":1295,"context_line":"    @functools.wraps(f)"},{"line_number":1296,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":1297,"context_line":"        global skip, cluster_info"},{"line_number":1298,"context_line":"        if skip or not cluster_info:"},{"line_number":1299,"context_line":"            raise SkipTest(\u0027Requires bulk middleware\u0027)"},{"line_number":1300,"context_line":"        # Determine whether this cluster has bulk middleware; if not, skip test"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_df053447","line":1297,"in_reply_to":"5fc1f717_01d36805","updated":"2019-03-18 20:38:27.000000000","message":"Done","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"}],"test/functional/test_object.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"240ac03416e666f763e72eb95e78179f9be3f586","unresolved":false,"context_lines":[{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"        def bulk_delete(url, token, parsed, conn):"},{"line_number":1653,"context_line":"            # try to bulk delete the object that was created during test setup"},{"line_number":1654,"context_line":"            conn.request(\u0027DELETE\u0027, \u0027%s/%s/%s?bulk-delete\u0027 % ("},{"line_number":1655,"context_line":"                parsed.path, self.container, self.obj),"},{"line_number":1656,"context_line":"                \u0027%s/%s\u0027 % (self.container, self.obj),"},{"line_number":1657,"context_line":"                {\u0027X-Auth-Token\u0027: token,"},{"line_number":1658,"context_line":"                 \u0027Accept\u0027: \u0027application/xml\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_012a88d9","line":1655,"range":{"start_line":1654,"start_character":35,"end_line":1655,"end_character":54},"updated":"2019-03-18 19:43:19.000000000","message":"Wait, really? bulk handles object paths? I thought it only looked at account (and *maybe* container?)...","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"240ac03416e666f763e72eb95e78179f9be3f586","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"            return check_response(conn)"},{"line_number":1662,"context_line":"        resp \u003d retry(bulk_delete)"},{"line_number":1663,"context_line":"        resp.read()"},{"line_number":1664,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_2186a4ba","line":1664,"updated":"2019-03-18 19:43:19.000000000","message":"No assertions on the body? I thought that was where the problem manifested... Status and headers came out fine, but then we got garbage in the response body because eventlet sent the 100 Continue despite having already sent headers...\n\nOh, I get it -- the 100 Continue comes when we\u0027re expecting a chunk size, so urllib3 barfs... ok. Still, *some* assertion (like, that it can be parsed as XML) would be nice; as it is, this will blow up if I do something like\n\n minidom.parseString(resp.read())\n\nsaying\n\n ExpatError: XML or text declaration not at start of entity: line 1, column 1","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e640472f31c6c2e60fbe43fc9f0191db36fefe94","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"            return check_response(conn)"},{"line_number":1662,"context_line":"        resp \u003d retry(bulk_delete)"},{"line_number":1663,"context_line":"        resp.read()"},{"line_number":1664,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_3f36b852","line":1664,"in_reply_to":"5fc1f717_2186a4ba","updated":"2019-03-18 20:38:27.000000000","message":"Done","commit_id":"ccd743148f9d282145c734a050f16b1618c0d2fb"}]}
