)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"305775b57762714d98ab79f22f4d92623b72f700","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"                    \"values (?, \u0027pivted_remove\u0027, ?, 0, \u0027\u0027, ?)\""},{"line_number":1583,"context_line":"                conn.execute(sql, (max_row, Timestamp.now().internal,"},{"line_number":1584,"context_line":"                                   \u002768b329da9893e34099c7d8ad5cb9c940\u0027))"},{"line_number":1585,"context_line":"                # TODO: what is this hash ^^^^^ ?"},{"line_number":1586,"context_line":"                conn.execute(\u0027DELETE FROM object WHERE ROWID \u003d %d\u0027 % max_row)"},{"line_number":1587,"context_line":"                conn.commit()"},{"line_number":1588,"context_line":"            except sqlite3.OperationalError as err:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_4f9a2162","line":1585,"updated":"2017-10-09 18:06:34.000000000","message":"md5(\u0027\\n\u0027)\n\nWhy? IDK.\n\nI\u0027d kinda prefer we just use swift.common.utils.MD5_OF_EMPTY_STRING for this sort of placeholder stuff.","commit_id":"8a615cd67d0e70df355db40d3528e14020925e4f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b04166e8f5ddce1bc41df55130ff757231330c10","unresolved":false,"context_lines":[{"line_number":1582,"context_line":"                    \"values (?, \u0027pivted_remove\u0027, ?, 0, \u0027\u0027, ?)\""},{"line_number":1583,"context_line":"                conn.execute(sql, (max_row, Timestamp.now().internal,"},{"line_number":1584,"context_line":"                                   \u002768b329da9893e34099c7d8ad5cb9c940\u0027))"},{"line_number":1585,"context_line":"                # TODO: what is this hash ^^^^^ ?"},{"line_number":1586,"context_line":"                conn.execute(\u0027DELETE FROM object WHERE ROWID \u003d %d\u0027 % max_row)"},{"line_number":1587,"context_line":"                conn.commit()"},{"line_number":1588,"context_line":"            except sqlite3.OperationalError as err:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_67f4815c","line":1585,"in_reply_to":"7f515b1d_4f9a2162","updated":"2017-10-10 09:05:36.000000000","message":"+1 and maybe a comment","commit_id":"8a615cd67d0e70df355db40d3528e14020925e4f"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"305775b57762714d98ab79f22f4d92623b72f700","unresolved":false,"context_lines":[{"line_number":2741,"context_line":"            self.assertEqual(broker.get_shard_ranges(), shard_ranges)"},{"line_number":2742,"context_line":""},{"line_number":2743,"context_line":"        def check_broker_info(actual_info):"},{"line_number":2744,"context_line":"            # TODO: created_at and hash should not be exceptions"},{"line_number":2745,"context_line":"            for key in (\u0027created_at\u0027, \u0027hash\u0027, \u0027db_state\u0027, \u0027id\u0027):"},{"line_number":2746,"context_line":"                actual_info.pop(key, None)"},{"line_number":2747,"context_line":"                original_info.pop(key, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_2136d952","line":2744,"range":{"start_line":2744,"start_character":35,"end_line":2744,"end_character":39},"updated":"2017-10-09 18:06:34.000000000","message":"Why? What is hash and how is it used? A quick glance makes it seem like it\u0027s a checksum on the object operations performed on the DB -- presumably, when the hashes match, we then don\u0027t need to replicate. Moving into sharding, we definitely want to replicate, so... consciously resetting the hash seems not crazy?","commit_id":"8a615cd67d0e70df355db40d3528e14020925e4f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3f517210d160807737d67f5df10ac5c244cecce8","unresolved":false,"context_lines":[{"line_number":2741,"context_line":"            self.assertEqual(broker.get_shard_ranges(), shard_ranges)"},{"line_number":2742,"context_line":""},{"line_number":2743,"context_line":"        def check_broker_info(actual_info):"},{"line_number":2744,"context_line":"            # TODO: created_at and hash should not be exceptions"},{"line_number":2745,"context_line":"            for key in (\u0027created_at\u0027, \u0027hash\u0027, \u0027db_state\u0027, \u0027id\u0027):"},{"line_number":2746,"context_line":"                actual_info.pop(key, None)"},{"line_number":2747,"context_line":"                original_info.pop(key, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_470e25e6","line":2744,"range":{"start_line":2744,"start_character":35,"end_line":2744,"end_character":39},"in_reply_to":"7f515b1d_2136d952","updated":"2017-10-10 08:56:13.000000000","message":"ok, thanks for digging into it some more. So long as the hash is not meant to be faithful to the current state of the object table, but just an indicator for replication, seems ok to reset.","commit_id":"8a615cd67d0e70df355db40d3528e14020925e4f"}]}
