)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f76bfbce4fa99110193ed2ab43a74f8e3e3e87d","unresolved":false,"context_lines":[{"line_number":2010,"context_line":"        info \u003d dict((k[len(prefix):], v if include_timestamps else v[0])"},{"line_number":2011,"context_line":"                    for k, v in metadata.items() if k.startswith(prefix))"},{"line_number":2012,"context_line":"        if key:"},{"line_number":2013,"context_line":"            return info.get(key)"},{"line_number":2014,"context_line":"        return info"},{"line_number":2015,"context_line":""},{"line_number":2016,"context_line":"    def _load_root_info(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_1007c584","line":2013,"range":{"start_line":2013,"start_character":19,"end_line":2013,"end_character":32},"updated":"2019-09-22 04:10:30.000000000","message":"Considering the difference made by include_timestamps, I wonder if this might be better as\n\n if key:\n     if include_timestamps:\n         return info.get(key, (None, None))\n     return info.get(key)\n return info","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2723063d13336c195ffdd2ce0b2f9622e356748c","unresolved":false,"context_lines":[{"line_number":2010,"context_line":"        info \u003d dict((k[len(prefix):], v if include_timestamps else v[0])"},{"line_number":2011,"context_line":"                    for k, v in metadata.items() if k.startswith(prefix))"},{"line_number":2012,"context_line":"        if key:"},{"line_number":2013,"context_line":"            return info.get(key)"},{"line_number":2014,"context_line":"        return info"},{"line_number":2015,"context_line":""},{"line_number":2016,"context_line":"    def _load_root_info(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_eb147e50","line":2013,"range":{"start_line":2013,"start_character":19,"end_line":2013,"end_character":32},"in_reply_to":"3fa7e38b_1007c584","updated":"2019-09-22 12:09:19.000000000","message":"Ahh yes.\n\nI \"might\" have rushed this patch a little. Sorry. Just wanted to get something up because I really didn\u0027t want NM to wait a whole reclaim age for no reason.\n\nI\u0027ll clean this up on Monday.","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"13305b3760fc0d0adbb510cde7a54e9d5257737b","unresolved":false,"context_lines":[{"line_number":2010,"context_line":"        info \u003d dict((k[len(prefix):], v if include_timestamps else v[0])"},{"line_number":2011,"context_line":"                    for k, v in metadata.items() if k.startswith(prefix))"},{"line_number":2012,"context_line":"        if key:"},{"line_number":2013,"context_line":"            return info.get(key)"},{"line_number":2014,"context_line":"        return info"},{"line_number":2015,"context_line":""},{"line_number":2016,"context_line":"    def _load_root_info(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_8173694d","line":2013,"range":{"start_line":2013,"start_character":19,"end_line":2013,"end_character":32},"in_reply_to":"3fa7e38b_1007c584","updated":"2019-09-23 01:12:55.000000000","message":"Done","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d837a2353dcceab95b65b740d074930500be524a","unresolved":false,"context_lines":[{"line_number":2013,"context_line":"                    for k, v in metadata.items() if k.startswith(prefix))"},{"line_number":2014,"context_line":"        if key:"},{"line_number":2015,"context_line":"            if include_timestamps:"},{"line_number":2016,"context_line":"                return info.get(key, (None, None))"},{"line_number":2017,"context_line":"            return info.get(key)"},{"line_number":2018,"context_line":"        return info"},{"line_number":2019,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_b4433013","line":2016,"updated":"2019-09-23 20:24:16.000000000","message":"yeah, idk... the kwarg chnages the return signature?","commit_id":"9869289feabbe277f2ce2b13545d9b1f075f49c1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1545b0d63c21aa0573a97a81446b588370fdf551","unresolved":false,"context_lines":[{"line_number":2013,"context_line":"                    for k, v in metadata.items() if k.startswith(prefix))"},{"line_number":2014,"context_line":"        if key:"},{"line_number":2015,"context_line":"            if include_timestamps:"},{"line_number":2016,"context_line":"                return info.get(key, (None, None))"},{"line_number":2017,"context_line":"            return info.get(key)"},{"line_number":2018,"context_line":"        return info"},{"line_number":2019,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_f4be88b2","line":2016,"in_reply_to":"3fa7e38b_b4433013","updated":"2019-09-23 20:47:45.000000000","message":"...isn\u0027t that *already* true with key? *shrug*\n\nFWIW, acoles proposed something similar in https://review.opendev.org/#/c/569832/","commit_id":"9869289feabbe277f2ce2b13545d9b1f075f49c1"}],"swift/container/sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1f76bfbce4fa99110193ed2ab43a74f8e3e3e87d","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        for context in CleavingContext.load_all(broker):"},{"line_number":768,"context_line":"            now \u003d Timestamp.now()"},{"line_number":769,"context_line":"            last_mod \u003d context.last_modified"},{"line_number":770,"context_line":"            if Timestamp(last_mod).timestamp + self.reclaim_age \u003c \\"},{"line_number":771,"context_line":"                    now.timestamp:"},{"line_number":772,"context_line":"                context.delete(broker)"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f0030972","line":770,"updated":"2019-09-22 04:10:30.000000000","message":"This is definitely a nice simplification. And it\u0027s nice for NM to not need to wait a full reclaim age from upgrade to see things improve.\n\nBut I wonder if it\u0027d be better to only tweak the API for load_all -- have it yield out (context, timestamp) tuples, so we don\u0027t have to add last_modified during load/load_all or drop it during store....\n\n*shrug*","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"13305b3760fc0d0adbb510cde7a54e9d5257737b","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        for context in CleavingContext.load_all(broker):"},{"line_number":768,"context_line":"            now \u003d Timestamp.now()"},{"line_number":769,"context_line":"            last_mod \u003d context.last_modified"},{"line_number":770,"context_line":"            if Timestamp(last_mod).timestamp + self.reclaim_age \u003c \\"},{"line_number":771,"context_line":"                    now.timestamp:"},{"line_number":772,"context_line":"                context.delete(broker)"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6122ed02","line":770,"in_reply_to":"3fa7e38b_f0030972","updated":"2019-09-23 01:12:55.000000000","message":"Done","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2723063d13336c195ffdd2ce0b2f9622e356748c","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        for context in CleavingContext.load_all(broker):"},{"line_number":768,"context_line":"            now \u003d Timestamp.now()"},{"line_number":769,"context_line":"            last_mod \u003d context.last_modified"},{"line_number":770,"context_line":"            if Timestamp(last_mod).timestamp + self.reclaim_age \u003c \\"},{"line_number":771,"context_line":"                    now.timestamp:"},{"line_number":772,"context_line":"                context.delete(broker)"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_cb098231","line":770,"in_reply_to":"3fa7e38b_f0030972","updated":"2019-09-22 12:09:19.000000000","message":"yeah, good call. I\u0027ll take a look on Monday.","commit_id":"e0e6d77627ebe8038fc0ac3d06a1f8c223bdb9db"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1545b0d63c21aa0573a97a81446b588370fdf551","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        for context in CleavingContext.load_all(broker):"},{"line_number":758,"context_line":"            now \u003d Timestamp.now()"},{"line_number":759,"context_line":"            last_mod \u003d context.last_modified"},{"line_number":760,"context_line":"            if not last_mod:"},{"line_number":761,"context_line":"                context.store(broker)"},{"line_number":762,"context_line":"            elif Timestamp(last_mod).timestamp + self.reclaim_age \u003c \\"},{"line_number":763,"context_line":"                    now.timestamp:"},{"line_number":764,"context_line":"                context.delete(broker)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_b4b810e5","side":"PARENT","line":761,"range":{"start_line":760,"start_character":12,"end_line":761,"end_character":37},"updated":"2019-09-23 20:47:45.000000000","message":"This part is the why -- original patch requires a migration to add last_modified for existing contexts, which delays the clock for expiration. This method\n\n* reduces how much duplicate information we write down and more importantly\n* gets container DBs that are currently in bad states fixed faster.\n\nWill update the commit message to call it out.","commit_id":"81a41da5420313f9cdb9c759bbb0f46c0d20c5af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d837a2353dcceab95b65b740d074930500be524a","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            # marked for deletion"},{"line_number":258,"context_line":"            if key.startswith(\"Context-\") and len(val) \u003e 0:"},{"line_number":259,"context_line":"                try:"},{"line_number":260,"context_line":"                    yield cls(**json.loads(val[0])), val[1]"},{"line_number":261,"context_line":"                except ValueError:"},{"line_number":262,"context_line":"                    continue"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_7449382f","line":260,"updated":"2019-09-23 20:24:16.000000000","message":"maybe tuple unpacking?","commit_id":"9869289feabbe277f2ce2b13545d9b1f075f49c1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1545b0d63c21aa0573a97a81446b588370fdf551","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            # marked for deletion"},{"line_number":258,"context_line":"            if key.startswith(\"Context-\") and len(val) \u003e 0:"},{"line_number":259,"context_line":"                try:"},{"line_number":260,"context_line":"                    yield cls(**json.loads(val[0])), val[1]"},{"line_number":261,"context_line":"                except ValueError:"},{"line_number":262,"context_line":"                    continue"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d4d4ac22","line":260,"in_reply_to":"3fa7e38b_7449382f","updated":"2019-09-23 20:47:45.000000000","message":"+1, will fix","commit_id":"9869289feabbe277f2ce2b13545d9b1f075f49c1"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9c740decf4ac336603a3351e774820eb22b13f8b","unresolved":false,"context_lines":[{"line_number":4506,"context_line":"                           Timestamp(last_modified).internal)})"},{"line_number":4507,"context_line":""},{"line_number":4508,"context_line":"        def get_context(id, broker):"},{"line_number":4509,"context_line":"            data \u003d broker.get_sharding_sysmeta(include_timestamps\u003dTrue)"},{"line_number":4510,"context_line":"            data, _lm \u003d data.get(\u0027Context-%s\u0027 % id)"},{"line_number":4511,"context_line":"            if data:"},{"line_number":4512,"context_line":"                return CleavingContext(**json.loads(data))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_ce9bbec6","line":4509,"range":{"start_line":4509,"start_character":47,"end_line":4509,"end_character":65},"updated":"2019-09-23 19:12:58.000000000","message":"Since we aren\u0027t using _lm, I think we can drop this...","commit_id":"8855b267a019a2c116debd2531112261650b0d98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9c740decf4ac336603a3351e774820eb22b13f8b","unresolved":false,"context_lines":[{"line_number":4598,"context_line":"                # reset it so the dict comparison will succeed"},{"line_number":4599,"context_line":"                reloaded_ctx.max_row \u003d 12"},{"line_number":4600,"context_line":"                # also reset the last_modified."},{"line_number":4601,"context_line":"                reloaded_ctx.last_modified \u003d None"},{"line_number":4602,"context_line":"                self.assertEqual(dict(ctx), dict(reloaded_ctx))"},{"line_number":4603,"context_line":""},{"line_number":4604,"context_line":"    def test_load(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_8e570603","line":4601,"updated":"2019-09-23 19:12:58.000000000","message":"This isn\u0027t really a thing anymore, is it?","commit_id":"8855b267a019a2c116debd2531112261650b0d98"}]}
