)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"                                 for record in to_add.values())"},{"line_number":1233,"context_line":"                curs.executemany(sql, add_generator)"},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"        def _really_merge_items(conn):"},{"line_number":1236,"context_line":"            curs \u003d conn.cursor()"},{"line_number":1237,"context_line":"            curs.execute(\u0027BEGIN IMMEDIATE\u0027)"},{"line_number":1238,"context_line":"            if item_list:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_d04f26bc","side":"PARENT","line":1235,"updated":"2017-10-05 20:17:59.000000000","message":"*So* happy to not have both _merge_items and _really_merge_items!","commit_id":"e57ea584f2139a4d16974dc8ab201d823463fb6b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"            return result"},{"line_number":1114,"context_line":"        return None"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"    def merge_objects(self, item_list, source\u003dNone):"},{"line_number":1117,"context_line":"        \"\"\""},{"line_number":1118,"context_line":"        Merge items into the object table."},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f0cea281","line":1116,"range":{"start_line":1116,"start_character":8,"end_line":1116,"end_character":21},"updated":"2017-10-05 20:17:59.000000000","message":"Indeed, this name change is now the *only* change :-)","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1185,"context_line":"                \u0027\u0027\u0027, (sync_point, source))"},{"line_number":1186,"context_line":"                if curs.rowcount \u003c 1:"},{"line_number":1187,"context_line":"                    curs.execute(\u0027\u0027\u0027"},{"line_number":1188,"context_line":"                        INSERT INTO incoming_sync (sync_point, remote_id)"},{"line_number":1189,"context_line":"                        VALUES (?, ?)"},{"line_number":1190,"context_line":"                    \u0027\u0027\u0027, (sync_point, source))"},{"line_number":1191,"context_line":"            conn.commit()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_b0914af4","line":1188,"updated":"2017-10-05 20:17:59.000000000","message":"Right, and we don\u0027t need to worry about sync points in merge_shard_ranges because we always send all of the ranges.","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"    def merge_shard_ranges(self, item_list):"},{"line_number":1203,"context_line":"        \"\"\""},{"line_number":1204,"context_line":"        Merge items into the object or shard ranges tables."},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":"        :param item_list: list of dictionaries of {\u0027name\u0027, \u0027created_at\u0027,"},{"line_number":1207,"context_line":"                          \u0027lower\u0027, \u0027upper\u0027, \u0027object_count\u0027, \u0027bytes_used\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_70a072a6","line":1204,"range":{"start_line":1204,"start_character":25,"end_line":1204,"end_character":58},"updated":"2017-10-05 20:17:59.000000000","message":"Just the shard_ranges table now.","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"                chunk \u003d [record[\u0027name\u0027] for record"},{"line_number":1227,"context_line":"                         in item_list[offset:offset + SQLITE_ARG_LIMIT]]"},{"line_number":1228,"context_line":"                records.update("},{"line_number":1229,"context_line":"                    (rec[0], rec) for rec in curs.execute("},{"line_number":1230,"context_line":"                        \u0027SELECT %s FROM shard_ranges \u0027"},{"line_number":1231,"context_line":"                        \u0027WHERE deleted IN (0, 1) AND name IN (%s)\u0027 %"},{"line_number":1232,"context_line":"                        (\u0027, \u0027.join(keys), \u0027,\u0027.join(\u0027?\u0027 * len(chunk))), chunk))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_4b2a677e","line":1229,"range":{"start_line":1229,"start_character":20,"end_line":1229,"end_character":33},"updated":"2017-10-05 20:17:59.000000000","message":"Hmm... this used to be\n\n ((rec[0],), rec)\n\n... but I guess that\u0027s intentional, now that item_ident is a simple string.","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"                records.update("},{"line_number":1229,"context_line":"                    (rec[0], rec) for rec in curs.execute("},{"line_number":1230,"context_line":"                        \u0027SELECT %s FROM shard_ranges \u0027"},{"line_number":1231,"context_line":"                        \u0027WHERE deleted IN (0, 1) AND name IN (%s)\u0027 %"},{"line_number":1232,"context_line":"                        (\u0027, \u0027.join(keys), \u0027,\u0027.join(\u0027?\u0027 * len(chunk))), chunk))"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"            # Sort item_list into things that need adding and deleting, based"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_b076ea3d","line":1231,"range":{"start_line":1231,"start_character":31,"end_line":1231,"end_character":52},"updated":"2017-10-05 20:17:59.000000000","message":"This is fine, but note that we (currently) don\u0027t have any index to take advantage of.","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"023f5ca94fa5f12ebb3a887c5b9a8bc70e640ee1","unresolved":false,"context_lines":[{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"            if to_delete:"},{"line_number":1262,"context_line":"                curs.executemany("},{"line_number":1263,"context_line":"                    \u0027DELETE FROM shard_ranges WHERE deleted in (0, 1) \u0027"},{"line_number":1264,"context_line":"                    \u0027AND name \u003d ?\u0027,"},{"line_number":1265,"context_line":"                    ((item[\u0027name\u0027],) for item in to_delete.values()))"},{"line_number":1266,"context_line":"            if to_add:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_0be90fb6","line":1263,"range":{"start_line":1263,"start_character":52,"end_line":1263,"end_character":69},"updated":"2017-10-05 20:17:59.000000000","message":"Again, no index at the moment.","commit_id":"cc9ffcd9a4ae44dd7592a67fbf61b1204e4ff65a"}]}
