)]}'
{"swift/common/db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"49a945d067582c736d425fedd7939987b5b2b381","unresolved":false,"context_lines":[{"line_number":991,"context_line":"    def _reclaim(self, conn, age_timestamp, sync_timestamp):"},{"line_number":992,"context_line":"        marker \u003d \u0027\u0027"},{"line_number":993,"context_line":"        end_marker \u003d \u0027\u0027"},{"line_number":994,"context_line":"        offset \u003d 999"},{"line_number":995,"context_line":"        clean_batch_qry \u003d \u0027\u0027\u0027"},{"line_number":996,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":997,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_a4a12efb","line":994,"range":{"start_line":994,"start_character":17,"end_line":994,"end_character":20},"updated":"2020-05-15 16:25:44.000000000","message":"Why 999? I think the only reason we use that in other places is due to SQLITE_MAX_VARIABLE_NUMBER, which doesn\u0027t really apply here -- see https://sqlite.org/limits.html#max_variable_number\n\nI haven\u0027t done any benchmarking or anything, but I feel like we could go higher, like 10-100k, as long as we get down to only doing one batch per cycle (see below).","commit_id":"55a9028046399b4a92ca2a7c27879343442abfcf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fedc47e0f846a143fb48b7719739a721d3565c63","unresolved":false,"context_lines":[{"line_number":991,"context_line":"    def _reclaim(self, conn, age_timestamp, sync_timestamp):"},{"line_number":992,"context_line":"        marker \u003d \u0027\u0027"},{"line_number":993,"context_line":"        end_marker \u003d \u0027\u0027"},{"line_number":994,"context_line":"        offset \u003d 999"},{"line_number":995,"context_line":"        clean_batch_qry \u003d \u0027\u0027\u0027"},{"line_number":996,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":997,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_447f7214","line":994,"range":{"start_line":994,"start_character":17,"end_line":994,"end_character":20},"in_reply_to":"ff570b3c_a4a12efb","updated":"2020-05-15 16:33:53.000000000","message":"correct, no reason this shouldn\u0027t be it\u0027s own constraint\n\nI did some benchmarking in dev - no significant difference between 1K and 10K ... 100K is harder to test","commit_id":"55a9028046399b4a92ca2a7c27879343442abfcf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"49a945d067582c736d425fedd7939987b5b2b381","unresolved":false,"context_lines":[{"line_number":996,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":997,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"},{"line_number":998,"context_line":"        \u0027\u0027\u0027 % (self.db_contains_type, self.db_reclaim_timestamp)"},{"line_number":999,"context_line":"        while True:"},{"line_number":1000,"context_line":"            curs \u003d conn.execute(\u0027\u0027\u0027"},{"line_number":1001,"context_line":"                SELECT name FROM %s WHERE deleted \u003d 1"},{"line_number":1002,"context_line":"                AND name \u003e ?"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_64ba760a","line":999,"updated":"2020-05-15 16:25:44.000000000","message":"Wait, so we\u0027re still trying to reclaim *all* reclaimable rows every replicator cycle? I feel like it\u0027d be better to do one batch per cycle and write down `end_marker` somewhere (might be able to squeeze it into a sync table if we want to avoid a migration?) to use as `marker` for the next cycle.","commit_id":"55a9028046399b4a92ca2a7c27879343442abfcf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fedc47e0f846a143fb48b7719739a721d3565c63","unresolved":false,"context_lines":[{"line_number":996,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":997,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"},{"line_number":998,"context_line":"        \u0027\u0027\u0027 % (self.db_contains_type, self.db_reclaim_timestamp)"},{"line_number":999,"context_line":"        while True:"},{"line_number":1000,"context_line":"            curs \u003d conn.execute(\u0027\u0027\u0027"},{"line_number":1001,"context_line":"                SELECT name FROM %s WHERE deleted \u003d 1"},{"line_number":1002,"context_line":"                AND name \u003e ?"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_04973a3c","line":999,"in_reply_to":"ff570b3c_64ba760a","updated":"2020-05-15 16:33:53.000000000","message":"correct, KISS.\n\nthere\u0027s good reasons to do it all everytime - keep the OTP as small as possible, minimize transfer for reclaimable tombstone rows (i.e. smaller rsyncs)\n\nI don\u0027t want to amortize the reclaim further unless testing proves we have too.","commit_id":"55a9028046399b4a92ca2a7c27879343442abfcf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c98946dedd31b60dd8c0964204eef559bb05464b","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"                break"},{"line_number":1009,"context_line":"            marker, end_marker \u003d end_marker, row[0]"},{"line_number":1010,"context_line":"            conn.execute(clean_batch_qry + \u0027AND name \u003c ?\u0027, ("},{"line_number":1011,"context_line":"                marker, age_timestamp, end_marker))"},{"line_number":1012,"context_line":"        try:"},{"line_number":1013,"context_line":"            conn.execute(\u0027\u0027\u0027"},{"line_number":1014,"context_line":"                DELETE FROM outgoing_sync WHERE updated_at \u003c ?"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_5b962c4e","line":1011,"updated":"2020-05-15 23:29:09.000000000","message":"An explicit\n\n # Give container-server a chance to try to keep up with clients\n sleep(1)\n\nafter this might not be *so* bad...","commit_id":"55a9028046399b4a92ca2a7c27879343442abfcf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"43136b9e5530e26d8462585e207a8553e6ad9dd8","unresolved":false,"context_lines":[{"line_number":988,"context_line":"        while not finished:"},{"line_number":989,"context_line":"            with self.get() as conn:"},{"line_number":990,"context_line":"                marker \u003d self._reclaim(conn, age_timestamp, marker)"},{"line_number":991,"context_line":"                conn.commit()"},{"line_number":992,"context_line":"                if marker:"},{"line_number":993,"context_line":"                    continue"},{"line_number":994,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_5a33a3f6","line":991,"updated":"2020-05-19 18:42:44.000000000","message":"Should we move this down just before the continue and piggy-back off that final commit()?","commit_id":"86eab2f45f1be65c7538fb1ffd5374cf33a9d097"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48c85ae9a385814d6d076ee3ab2fa2ed00d3d4c6","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"        self._reclaim_metadata(conn, age_timestamp)"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def _reclaim(self, conn, age_timestamp, marker):"},{"line_number":1008,"context_line":"        RECLAIM_PAGE_SIZE \u003d 999"},{"line_number":1009,"context_line":"        clean_batch_qry \u003d \u0027\u0027\u0027"},{"line_number":1010,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":1011,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_4c9e3b07","line":1008,"updated":"2020-05-19 17:49:36.000000000","message":"This could almost definitely be bigger.\n\nI\u0027m open to making it either a constraint/constant or a tunable - there\u0027s definitely a trade off but a conservative default will trend smaller/slower.","commit_id":"86eab2f45f1be65c7538fb1ffd5374cf33a9d097"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"43136b9e5530e26d8462585e207a8553e6ad9dd8","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"        self._reclaim_metadata(conn, age_timestamp)"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def _reclaim(self, conn, age_timestamp, marker):"},{"line_number":1008,"context_line":"        RECLAIM_PAGE_SIZE \u003d 999"},{"line_number":1009,"context_line":"        clean_batch_qry \u003d \u0027\u0027\u0027"},{"line_number":1010,"context_line":"            DELETE FROM %s WHERE deleted \u003d 1"},{"line_number":1011,"context_line":"            AND name \u003e\u003d ? AND %s \u003c ?"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_2785e0cf","line":1008,"in_reply_to":"ff570b3c_4c9e3b07","updated":"2020-05-19 18:42:44.000000000","message":"Agreed. I feel like the 1M in the follow-on is probably toward the higher end of where we\u0027d want it to be, though. Just a gut feeling.\n\nI\u0027d lean toward a constant in this file -- seems not unlike the pending cap. OTOH, bug 1877665 also came out of this investigation... but with this change coming, how interested are we in trying to optimize that?","commit_id":"86eab2f45f1be65c7538fb1ffd5374cf33a9d097"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# records will be merged."},{"line_number":54,"context_line":"PENDING_CAP \u003d 131072"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"SQLITE_ARG_LIMIT \u003d 999"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def utf8encode(*args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_2be3a6a6","line":56,"updated":"2020-05-22 16:14:53.000000000","message":"Funny, we really don\u0027t use this in account/backend.py, do we?\n\nI guess there generally aren\u0027t enough containers to make the batching we do for containers worth it.","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                else:"},{"line_number":995,"context_line":"                    finished \u003d True"},{"line_number":996,"context_line":"                self._reclaim_other_stuff(conn, age_timestamp, sync_timestamp)"},{"line_number":997,"context_line":"                conn.commit()"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    def _reclaim_other_stuff(self, conn, age_timestamp, sync_timestamp):"},{"line_number":1000,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_8ba2b24a","line":997,"updated":"2020-05-22 16:14:53.000000000","message":"while not finished:\n    with self.get() as conn:\n        marker \u003d self._reclaim(...)\n        if not marker:\n            finished \u003d True\n            self._reclaim_other_stuff(...)\n        conn.commit()\n\n? *shrug* w/e","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"            conn.execute(clean_batch_qry, (marker, age_timestamp))"},{"line_number":1022,"context_line":"        else:"},{"line_number":1023,"context_line":"            end_marker \u003d row[0]"},{"line_number":1024,"context_line":"            conn.execute(clean_batch_qry + \u0027AND name \u003c\u003d ?\u0027, ("},{"line_number":1025,"context_line":"                marker, age_timestamp, end_marker))"},{"line_number":1026,"context_line":"        return end_marker"},{"line_number":1027,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_2b2d66a8","line":1024,"range":{"start_line":1024,"start_character":44,"end_line":1024,"end_character":47},"updated":"2020-05-22 16:14:53.000000000","message":"nit: Maybe add a space, so we aren\u0027t as dependent on the formatting of clean_batch_qry.","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48bf8dee95d4d965635956e607d8514b1f5687e3","unresolved":false,"context_lines":[{"line_number":991,"context_line":"                marker \u003d self._reclaim(conn, age_timestamp, marker)"},{"line_number":992,"context_line":"                if marker:"},{"line_number":993,"context_line":"                    conn.commit()"},{"line_number":994,"context_line":"                    continue"},{"line_number":995,"context_line":"                else:"},{"line_number":996,"context_line":"                    finished \u003d True"},{"line_number":997,"context_line":"                self._reclaim_other_stuff(conn, age_timestamp, sync_timestamp)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_fcd853f1","line":994,"updated":"2020-05-22 19:38:15.000000000","message":"I think you talked about flipping this around, I think that\u0027ll be better","commit_id":"c15b8af11f434a7b831e83348f1e9c6da5624b6b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48bf8dee95d4d965635956e607d8514b1f5687e3","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            end_marker \u003d row[0]"},{"line_number":1024,"context_line":"            conn.execute(clean_batch_qry + \u0027 AND name \u003c\u003d ?\u0027, ("},{"line_number":1025,"context_line":"                marker, age_timestamp, end_marker))"},{"line_number":1026,"context_line":"        return end_marker"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"    def _reclaim_sync(self, conn, sync_timestamp):"},{"line_number":1029,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_5cca1f1a","line":1026,"updated":"2020-05-22 19:38:15.000000000","message":"this reads pretty ok to me!","commit_id":"c15b8af11f434a7b831e83348f1e9c6da5624b6b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"88a398d112e88a3486e8f903b3a93a9672d5473e","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            conn.execute(clean_batch_qry + \u0027 AND name \u003c\u003d ?\u0027, ("},{"line_number":1021,"context_line":"                marker, age_timestamp, end_marker))"},{"line_number":1022,"context_line":"        else:"},{"line_number":1023,"context_line":"            # reset marker and delete off the end (it\u0027s probably a noop)"},{"line_number":1024,"context_line":"            end_marker \u003d \u0027\u0027"},{"line_number":1025,"context_line":"            conn.execute(clean_batch_qry, (marker, age_timestamp))"},{"line_number":1026,"context_line":"        return end_marker"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff570b3c_972bf02e","line":1023,"range":{"start_line":1023,"start_character":51,"end_line":1023,"end_character":71},"updated":"2020-05-22 19:52:40.000000000","message":"idk about that -- but at any rate, it can\u0027t be *that many* rows to delete.\n\nNote that this is the *only* delete that triggers if you have \u003c10k tombstone rows in the DB.","commit_id":"a5ce3bb76e3b86b8b5d7da090c0e12e6da9f640b"}],"swift/container/backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48c85ae9a385814d6d076ee3ab2fa2ed00d3d4c6","unresolved":false,"context_lines":[{"line_number":1581,"context_line":""},{"line_number":1582,"context_line":"    def _reclaim_other_stuff(self, conn, age_timestamp, sync_timestamp):"},{"line_number":1583,"context_line":"        super(ContainerBroker, self)._reclaim_other_stuff("},{"line_number":1584,"context_line":"            conn, age_timestamp, sync_timestamp)"},{"line_number":1585,"context_line":"        # populate instance cache, but use existing conn to avoid deadlock"},{"line_number":1586,"context_line":"        # when it has a pending update"},{"line_number":1587,"context_line":"        self._populate_instance_cache(conn\u003dconn)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_4ce91b7e","line":1584,"updated":"2020-05-19 17:49:36.000000000","message":"FWIW I think this is a trivially better interface for this hook anyway.","commit_id":"86eab2f45f1be65c7538fb1ffd5374cf33a9d097"}],"test/unit/account/test_backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"745b5b1d75e4fe1da9fa1d58479130d38852c24d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                broker.put_container(name, ts.internal, 0, 0, 0, pidx)"},{"line_number":207,"context_line":"        # This is intended divide the set of timestamps exactly in half"},{"line_number":208,"context_line":"        # regardless of the value of now"},{"line_number":209,"context_line":"        reclaim_age \u003d top_of_the_minute + 1 - (num_of_containers / 2 * 60)"},{"line_number":210,"context_line":"        with broker.get() as conn:"},{"line_number":211,"context_line":"            self.assertEqual(conn.execute("},{"line_number":212,"context_line":"                \"SELECT count(*) FROM container \""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_6b06f088","line":209,"updated":"2020-05-13 21:41:53.000000000","message":"does anyone know how to math?","commit_id":"eaf7e09de8d704a4a3417199c0f1cd0725749a25"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        broker.reclaim(Timestamp.now().internal, time())"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_big_reclaim(self):"},{"line_number":184,"context_line":"        num_of_containers \u003d 60 * 24 * 28"},{"line_number":185,"context_line":"        container_specs \u003d []"},{"line_number":186,"context_line":"        now \u003d time()"},{"line_number":187,"context_line":"        top_of_the_minute \u003d now - (now % 60)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_0644d7b6","line":184,"updated":"2020-05-22 16:14:53.000000000","message":"Do we strictly *need* 40k rows? Between account and container, each with the various database-migration subclasses, we\u0027ve got nine \"test_big_reclaim\" tests, each taking like 10-20s in the gate -- it\u0027s not the end of the world, but it\u0027s not exactly insignificant, either...\n\nIs the idea that we want to ensure we\u0027re doing the batching? What if we pull the constant up to the top of the file and patch it out in the test to be like 10 or something?","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        c \u003d itertools.cycle([True, False])"},{"line_number":189,"context_line":"        for m, is_deleted in six.moves.zip(range(num_of_containers), c):"},{"line_number":190,"context_line":"            offset \u003d top_of_the_minute - (m * 60)"},{"line_number":191,"context_line":"            container_specs.append((Timestamp(offset), is_deleted))"},{"line_number":192,"context_line":"        random.seed(now)"},{"line_number":193,"context_line":"        random.shuffle(container_specs)"},{"line_number":194,"context_line":"        policy_indexes \u003d list(p.idx for p in POLICIES)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_c61f7f6e","line":191,"range":{"start_line":191,"start_character":55,"end_line":191,"end_character":65},"updated":"2020-05-22 16:14:53.000000000","message":"Alternatively,\n\n m % 2 \u003d\u003d 0\n\n*shrug* Maybe that\u0027d be less clear...","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"66b107caf0189da78ef2b4f7e907ed1f486329f6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        for m, is_deleted in six.moves.zip(range(num_of_containers), c):"},{"line_number":190,"context_line":"            offset \u003d top_of_the_minute - (m * 60)"},{"line_number":191,"context_line":"            container_specs.append((Timestamp(offset), is_deleted))"},{"line_number":192,"context_line":"        random.seed(now)"},{"line_number":193,"context_line":"        random.shuffle(container_specs)"},{"line_number":194,"context_line":"        policy_indexes \u003d list(p.idx for p in POLICIES)"},{"line_number":195,"context_line":"        broker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027test_account\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_068e97cf","line":192,"updated":"2020-05-22 16:14:53.000000000","message":"Why the seed()?","commit_id":"8a24efa3c28e3326cc4179fb981e19a8bc727415"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48bf8dee95d4d965635956e607d8514b1f5687e3","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        broker.reclaim(Timestamp.now().internal, time())"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_batched_reclaim(self):"},{"line_number":184,"context_line":"        num_of_containers \u003d 60"},{"line_number":185,"context_line":"        container_specs \u003d []"},{"line_number":186,"context_line":"        now \u003d time()"},{"line_number":187,"context_line":"        top_of_the_minute \u003d now - (now % 60)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_dcd58fb9","line":184,"updated":"2020-05-22 19:38:15.000000000","message":"so much better","commit_id":"c15b8af11f434a7b831e83348f1e9c6da5624b6b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"88a398d112e88a3486e8f903b3a93a9672d5473e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                \"WHERE deleted \u003d 1 AND delete_timestamp \u003c ?\", (reclaim_age,)"},{"line_number":212,"context_line":"            ).fetchone()[0]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        # This is intended divide the set of timestamps exactly in half"},{"line_number":215,"context_line":"        # regardless of the value of now"},{"line_number":216,"context_line":"        reclaim_age \u003d top_of_the_minute + 1 - (num_of_containers / 2 * 60)"},{"line_number":217,"context_line":"        with broker.get() as conn:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff570b3c_f7e4ec10","line":214,"range":{"start_line":214,"start_character":18,"end_line":214,"end_character":33},"updated":"2020-05-22 19:52:40.000000000","message":"intended *to* divide","commit_id":"a5ce3bb76e3b86b8b5d7da090c0e12e6da9f640b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"88a398d112e88a3486e8f903b3a93a9672d5473e","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            trace.append((age_timestamp, marker,"},{"line_number":226,"context_line":"                          count_reclaimable(conn, age_timestamp)))"},{"line_number":227,"context_line":"            return orig__reclaim(conn, age_timestamp, marker)"},{"line_number":228,"context_line":"        broker._reclaim \u003d tracing_reclaim"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        with mock.patch.object(broker, \u0027_reclaim\u0027, new\u003dtracing_reclaim), \\"},{"line_number":231,"context_line":"                mock.patch(\u0027swift.common.db.RECLAIM_PAGE_SIZE\u0027, 10):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff570b3c_97e010fd","line":228,"range":{"start_line":228,"start_character":8,"end_line":228,"end_character":41},"updated":"2020-05-22 19:52:40.000000000","message":"Forgot to delete this ;-)","commit_id":"a5ce3bb76e3b86b8b5d7da090c0e12e6da9f640b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ec12ffaeb88e78c39977ee2186d83eb11aae77f3","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        with broker.get() as conn:"},{"line_number":233,"context_line":"            self.assertEqual(count_reclaimable(conn, reclaim_age), 0)"},{"line_number":234,"context_line":"        self.assertEqual(3, len(trace), trace)"},{"line_number":235,"context_line":"        self.assertEqual([ts for ts, marker, reclaimable in trace],"},{"line_number":236,"context_line":"                         [reclaim_age] * 3)"},{"line_number":237,"context_line":"        # markers are in-order"},{"line_number":238,"context_line":"        self.assertLess(trace[0][1], trace[1][1])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_628db830","line":235,"updated":"2020-05-22 21:03:49.000000000","message":"pep8: F812 list comprehension redefines \u0027ts\u0027 from line 202","commit_id":"58d441b9e2989a96c89f55ed387ac3b1a828e66f"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"48bf8dee95d4d965635956e607d8514b1f5687e3","unresolved":false,"context_lines":[{"line_number":606,"context_line":"            trace.append((age_timestamp, marker,"},{"line_number":607,"context_line":"                          count_reclaimable(conn, age_timestamp)))"},{"line_number":608,"context_line":"            return orig__reclaim(conn, age_timestamp, marker)"},{"line_number":609,"context_line":"        broker._reclaim \u003d tracing_reclaim"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        with mock.patch(\u0027swift.common.db.RECLAIM_PAGE_SIZE\u0027, 10):"},{"line_number":612,"context_line":"            broker.reclaim(reclaim_age, reclaim_age)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_7c93a301","line":609,"updated":"2020-05-22 19:38:15.000000000","message":"i guess it\u0027s only the instance, but a mock.patch might look less busy/dated","commit_id":"c15b8af11f434a7b831e83348f1e9c6da5624b6b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ec12ffaeb88e78c39977ee2186d83eb11aae77f3","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        with broker.get() as conn:"},{"line_number":615,"context_line":"            self.assertEqual(count_reclaimable(conn, reclaim_age), 0)"},{"line_number":616,"context_line":"        self.assertEqual(3, len(trace), trace)"},{"line_number":617,"context_line":"        self.assertEqual([ts for ts, marker, reclaimable in trace],"},{"line_number":618,"context_line":"                         [reclaim_age] * 3)"},{"line_number":619,"context_line":"        # markers are in-order"},{"line_number":620,"context_line":"        self.assertLess(trace[0][1], trace[1][1])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_c282c400","line":617,"updated":"2020-05-22 21:03:49.000000000","message":"pep8: F812 list comprehension redefines \u0027ts\u0027 from line 582","commit_id":"58d441b9e2989a96c89f55ed387ac3b1a828e66f"}]}
