)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0d94b5f3e23076040ff117d00ab0f1d14f7ec575","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-05-23 21:08:57 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Plumb includes down into _get_shard_range_rows"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"...so we can actually use it in our DB query. Note that find_shard_range"},{"line_number":10,"context_line":"is no longer used -- but maybe we want to keep it around in case the proxy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_92dae8e6","line":7,"updated":"2018-05-23 21:36:56.000000000","message":"I think I originally didn\u0027t fully decompress this title:\n\n... from get_shard_ranges in order to perform the filter in the DB instead of in python","commit_id":"683ac1b4b2f6b8e4a2f65d67ab0f38695b03e720"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"71a14d4cc47108734d74704750ba126b575241ca","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Plumb includes down into _get_shard_range_rows"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"...so we can actually use it in our DB query. Note that find_shard_range"},{"line_number":10,"context_line":"is no longer used -- but maybe we want to keep it around in case the proxy"},{"line_number":11,"context_line":"ever starts keeping some shard ranges in cache?"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie40b62432dd9ccfd314861655f7972a2123938fe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dddec38f_e7c304e9","line":11,"range":{"start_line":10,"start_character":57,"end_line":11,"end_character":46},"updated":"2022-02-09 00:09:39.000000000","message":"Well this needs updating ;-)","commit_id":"f40571e81a86820ea163d88f5bf0905f48c3890f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bb7022740d9033c3657695753e12c365b367f3a9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Plumb includes down into _get_shard_range_rows"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"...so we can actually use it in our DB query. Note that find_shard_range"},{"line_number":10,"context_line":"is no longer used -- but maybe we want to keep it around in case the proxy"},{"line_number":11,"context_line":"ever starts keeping some shard ranges in cache?"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie40b62432dd9ccfd314861655f7972a2123938fe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fce725ec_585a4770","line":11,"range":{"start_line":10,"start_character":57,"end_line":11,"end_character":46},"in_reply_to":"dddec38f_e7c304e9","updated":"2022-02-09 15:33:23.000000000","message":"Done","commit_id":"f40571e81a86820ea163d88f5bf0905f48c3890f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"949a508528511accb9cd810b0a17ba7b31092927","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"def30eb6_44caab6a","updated":"2022-05-02 07:12:54.000000000","message":"Love this patch, been running in prod and I think pushing it to the DB is a big win. Do have a nit in the code though.","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"de5e552e5a3b07a8ee40951b45fd1f15a82ca28e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9b7c3528_fd7fc086","updated":"2022-02-10 00:48:22.000000000","message":"recheck","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff490c7d0e24c901625a57dda31ae869485bbbd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"083e3717_cd2d1207","updated":"2022-05-10 14:58:44.000000000","message":"recheck\n\nMore logging RLock deadlocks.","commit_id":"185b11e2fd2486b13f727894339599d5c55137cd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a02e8c6b99fc56e1cbdbc02f1cc8085fc39a3010","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"44e16906_b081a28d","updated":"2022-05-09 19:58:18.000000000","message":"recheck\n\nSame eventlet logging bug.","commit_id":"185b11e2fd2486b13f727894339599d5c55137cd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8fe93a12e732793a7d7c8ba01609a03f16a52c56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"04cebd8e_75e4bc85","updated":"2022-05-10 23:12:40.000000000","message":"recheck\n\nStill that deadlock bug.","commit_id":"185b11e2fd2486b13f727894339599d5c55137cd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"00d20b43227ff574361b3f4f6d6ac642b3b1e49a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f1591ed3_3a641e43","updated":"2022-05-09 18:06:24.000000000","message":"recheck\n\nTimeout was a deadlock resulting from https://github.com/eventlet/eventlet/issues/742","commit_id":"185b11e2fd2486b13f727894339599d5c55137cd"}],"swift/container/backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0d94b5f3e23076040ff117d00ab0f1d14f7ec575","unresolved":false,"context_lines":[{"line_number":1699,"context_line":"            namespace includes or is less than the end_marker value."},{"line_number":1700,"context_line":"        :param includes: restricts the returned list to the shard range that"},{"line_number":1701,"context_line":"            includes the given value; if ``includes`` is specified then"},{"line_number":1702,"context_line":"            ``marker`` and ``end_marker`` are ignored."},{"line_number":1703,"context_line":"        :param reverse: reverse the result order."},{"line_number":1704,"context_line":"        :param include_deleted: include items that have the delete marker set"},{"line_number":1705,"context_line":"        :param states: if specified, restricts the returned list to shard"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d282a0c8","side":"PARENT","line":1702,"updated":"2018-05-23 21:36:56.000000000","message":"gah, NOW I see it!","commit_id":"9d2a1a1d14d7bdb9e5780f0ba1bf82b0ceb7d7a8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0d94b5f3e23076040ff117d00ab0f1d14f7ec575","unresolved":false,"context_lines":[{"line_number":1601,"context_line":""},{"line_number":1602,"context_line":"        :param connection: db connection"},{"line_number":1603,"context_line":"        :param includes: restricts the returned list to the shard range that"},{"line_number":1604,"context_line":"            includes the given value"},{"line_number":1605,"context_line":"        :param include_deleted: include rows marked as deleted"},{"line_number":1606,"context_line":"        :param states: include only rows matching the given state(s); can be an"},{"line_number":1607,"context_line":"            int or a list of ints."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_926c2837","line":1604,"updated":"2018-05-23 21:36:56.000000000","message":"wait, this is a NEW kwarg!?","commit_id":"683ac1b4b2f6b8e4a2f65d67ab0f38695b03e720"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"60da4eb7d8dce3e77ce04d2773241b96c6b6be91","unresolved":false,"context_lines":[{"line_number":1601,"context_line":""},{"line_number":1602,"context_line":"        :param connection: db connection"},{"line_number":1603,"context_line":"        :param includes: restricts the returned list to the shard range that"},{"line_number":1604,"context_line":"            includes the given value"},{"line_number":1605,"context_line":"        :param include_deleted: include rows marked as deleted"},{"line_number":1606,"context_line":"        :param states: include only rows matching the given state(s); can be an"},{"line_number":1607,"context_line":"            int or a list of ints."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_52abf01b","line":1604,"in_reply_to":"5f7c97a3_926c2837","updated":"2018-05-23 21:41:07.000000000","message":"New to _get_shard_range_rows, not get_shard_ranges.","commit_id":"683ac1b4b2f6b8e4a2f65d67ab0f38695b03e720"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ff2cfc512f932fc39cad09f16c070f18967875c6","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"                conditions.append(\u0027name \u003d ?\u0027)"},{"line_number":1640,"context_line":"                params.append(self.path)"},{"line_number":1641,"context_line":"            if includes is not None:"},{"line_number":1642,"context_line":"                conditions.extend((\u0027lower \u003c ?\u0027, \"(upper \u003d \u0027\u0027 OR upper \u003e\u003d ?)\"))"},{"line_number":1643,"context_line":"                params.extend((includes, includes))"},{"line_number":1644,"context_line":"            if conditions:"},{"line_number":1645,"context_line":"                condition \u003d \u0027 WHERE \u0027 + \u0027 AND \u0027.join(conditions)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_65ac16ed","line":1642,"updated":"2018-05-24 20:22:15.000000000","message":"so is this what probetests found?  interesting...","commit_id":"5121c614a9b4c01b9da7307645c6083006607c48"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0972df6aadebe097fab2e8072dfa67d1a4a17dd8","unresolved":false,"context_lines":[{"line_number":1738,"context_line":"                includes\u003dincludes, include_deleted\u003dinclude_deleted,"},{"line_number":1739,"context_line":"                states\u003dstates, include_own\u003dinclude_own,"},{"line_number":1740,"context_line":"                exclude_others\u003dexclude_others)]"},{"line_number":1741,"context_line":"        # note if this ever changes to *not* sort by upper first then it breaks"},{"line_number":1742,"context_line":"        # a key assumption for bisect, which is used by utils.find_shard_ranges"},{"line_number":1743,"context_line":"        shard_ranges.sort(key\u003dlambda sr: (sr.upper, sr.state, sr.lower))"},{"line_number":1744,"context_line":"        if includes:"},{"line_number":1745,"context_line":"            return shard_ranges[:1] if shard_ranges else []"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_fd1376ff","line":1742,"range":{"start_line":1741,"start_character":8,"end_line":1742,"end_character":79},"updated":"2018-06-01 09:36:32.000000000","message":"this comment can be deleted","commit_id":"5121c614a9b4c01b9da7307645c6083006607c48"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"949a508528511accb9cd810b0a17ba7b31092927","unresolved":true,"context_lines":[{"line_number":1846,"context_line":"        if includes:"},{"line_number":1847,"context_line":"            return shard_ranges[:1] if shard_ranges else []"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"        shard_ranges \u003d filter_shard_ranges(shard_ranges, includes,"},{"line_number":1850,"context_line":"                                           marker, end_marker)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        if not includes and fill_gaps:"}],"source_content_type":"text/x-python","patch_set":5,"id":"f6432fad_6dc7653f","line":1849,"range":{"start_line":1849,"start_character":57,"end_line":1849,"end_character":65},"updated":"2022-05-02 07:12:54.000000000","message":"I guess the whole includes path in the filter_shard_ranges isn\u0027t needed as much anymore. But we do need to still filter ranges between marker and end_marker. And might still have a need to filter on an include if we already have a list of shardranges. So doesn\u0027t hurt to keep it. But probably doen\u0027t need to be send to filter shardranges tho.. seeing as we\u0027d have returned by the time we get here because of the `if includes` above.","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"8285347ff5a2c234a0ee773d79bf5f582d688a61","unresolved":false,"context_lines":[{"line_number":1846,"context_line":"        if includes:"},{"line_number":1847,"context_line":"            return shard_ranges[:1] if shard_ranges else []"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"        shard_ranges \u003d filter_shard_ranges(shard_ranges, includes,"},{"line_number":1850,"context_line":"                                           marker, end_marker)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        if not includes and fill_gaps:"}],"source_content_type":"text/x-python","patch_set":5,"id":"745fefa0_e0f7ca56","line":1849,"range":{"start_line":1849,"start_character":57,"end_line":1849,"end_character":65},"in_reply_to":"09332881_2894027f","updated":"2022-05-05 05:58:19.000000000","message":"Ack","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ad4dd7f0747b3797b71a3d74069d4aee3e6cbade","unresolved":true,"context_lines":[{"line_number":1846,"context_line":"        if includes:"},{"line_number":1847,"context_line":"            return shard_ranges[:1] if shard_ranges else []"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"        shard_ranges \u003d filter_shard_ranges(shard_ranges, includes,"},{"line_number":1850,"context_line":"                                           marker, end_marker)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        if not includes and fill_gaps:"}],"source_content_type":"text/x-python","patch_set":5,"id":"09332881_2894027f","line":1849,"range":{"start_line":1849,"start_character":57,"end_line":1849,"end_character":65},"in_reply_to":"f6432fad_6dc7653f","updated":"2022-05-03 17:58:05.000000000","message":"The proxy for sure still needs includes plumbed into filter_shard_ranges -- IDK that I want to update the API to make these all optional, at least not right now. so the alternative is to make it an explicit None, which would also feel weird... *shrug* I\u0027m inclined to leave this as-is.","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"949a508528511accb9cd810b0a17ba7b31092927","unresolved":true,"context_lines":[{"line_number":1849,"context_line":"        shard_ranges \u003d filter_shard_ranges(shard_ranges, includes,"},{"line_number":1850,"context_line":"                                           marker, end_marker)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        if not includes and fill_gaps:"},{"line_number":1853,"context_line":"            own_shard_range \u003d self._own_shard_range()"},{"line_number":1854,"context_line":"            if shard_ranges:"},{"line_number":1855,"context_line":"                last_upper \u003d shard_ranges[-1].upper"}],"source_content_type":"text/x-python","patch_set":5,"id":"bdd89dd4_1fd21c9d","line":1852,"range":{"start_line":1852,"start_character":11,"end_line":1852,"end_character":23},"updated":"2022-05-02 07:12:54.000000000","message":"Because of the `if includes` on line 1846 which branches and returns from the fucntion this is implied now right?","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ad4dd7f0747b3797b71a3d74069d4aee3e6cbade","unresolved":true,"context_lines":[{"line_number":1849,"context_line":"        shard_ranges \u003d filter_shard_ranges(shard_ranges, includes,"},{"line_number":1850,"context_line":"                                           marker, end_marker)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        if not includes and fill_gaps:"},{"line_number":1853,"context_line":"            own_shard_range \u003d self._own_shard_range()"},{"line_number":1854,"context_line":"            if shard_ranges:"},{"line_number":1855,"context_line":"                last_upper \u003d shard_ranges[-1].upper"}],"source_content_type":"text/x-python","patch_set":5,"id":"986c47b0_d5d6b5ac","line":1852,"range":{"start_line":1852,"start_character":11,"end_line":1852,"end_character":23},"updated":"2022-05-03 17:58:05.000000000","message":"lol Apparently I had a draft comment from Feb:\n\n\u003e We should be able to drop this term.","commit_id":"bb520b899badad1be620a94c1df47741e6bed879"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0d94b5f3e23076040ff117d00ab0f1d14f7ec575","unresolved":false,"context_lines":[{"line_number":3495,"context_line":"        actual \u003d broker.get_shard_ranges(marker\u003d\u0027e\u0027, end_marker\u003d\u0027e\u0027)"},{"line_number":3496,"context_line":"        self.assertFalse([dict(sr) for sr in actual])"},{"line_number":3497,"context_line":""},{"line_number":3498,"context_line":"        actual \u003d broker.get_shard_ranges(includes\u003d\u0027f\u0027)"},{"line_number":3499,"context_line":"        self.assertEqual([dict(sr) for sr in shard_ranges[2:3]],"},{"line_number":3500,"context_line":"                         [dict(sr) for sr in actual])"},{"line_number":3501,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b267e451","side":"PARENT","line":3498,"updated":"2018-05-23 21:36:56.000000000","message":"so, how were we already testing it!?","commit_id":"9d2a1a1d14d7bdb9e5780f0ba1bf82b0ceb7d7a8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0ee3ef94d81a0a710c6ab7f10aa3d770a842cf38","unresolved":false,"context_lines":[{"line_number":3500,"context_line":"            actual \u003d broker.get_shard_ranges(includes\u003d\u0027f\u0027)"},{"line_number":3501,"context_line":"        self.assertEqual([dict(sr) for sr in shard_ranges[2:3]],"},{"line_number":3502,"context_line":"                         [dict(sr) for sr in actual])"},{"line_number":3503,"context_line":"        # What we really care about is how many times we go to disk,"},{"line_number":3504,"context_line":"        # but number of ShardRanges instantiated is a decent proxy"},{"line_number":3505,"context_line":"        self.assertEqual(1, len(mock_shard_range.mock_calls))"},{"line_number":3506,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_8467ebe9","line":3503,"range":{"start_line":3503,"start_character":8,"end_line":3503,"end_character":67},"updated":"2018-05-25 12:37:27.000000000","message":"how about capturing the sql in execute?","commit_id":"5121c614a9b4c01b9da7307645c6083006607c48"}]}
