)]}'
{"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c27ac272bfbd1f181f7638ac2b69277a44229460","unresolved":false,"context_lines":[{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        :param shard_range: a :class:`~swift.common.utils.ShardRange`"},{"line_number":603,"context_line":"        \"\"\""},{"line_number":604,"context_line":"        record \u003d dict(shard_range, deleted\u003d1, storage_policy_index\u003d0,"},{"line_number":605,"context_line":"                      record_type\u003dRECORD_TYPE_SHARD_NODE)"},{"line_number":606,"context_line":"        self.put_record(record)"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_fc91ed9a","line":604,"range":{"start_line":604,"start_character":35,"end_line":604,"end_character":42},"updated":"2017-10-11 18:14:29.000000000","message":"Good, so we can call\n\n broker.delete_shard_range(existing_shard_range)\n\nand it\u0027ll behave as expected even though existing_shard_range.deleted \u003d\u003d 0","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c27ac272bfbd1f181f7638ac2b69277a44229460","unresolved":false,"context_lines":[{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        :param shard_range: a :class:`~swift.common.utils.ShardRange`"},{"line_number":613,"context_line":"        \"\"\""},{"line_number":614,"context_line":"        record \u003d dict(shard_range, storage_policy_index\u003d0,"},{"line_number":615,"context_line":"                      record_type\u003dRECORD_TYPE_SHARD_NODE)"},{"line_number":616,"context_line":"        self.put_record(record)"},{"line_number":617,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_bce9351b","line":614,"range":{"start_line":614,"start_character":22,"end_line":614,"end_character":33},"updated":"2017-10-11 18:14:29.000000000","message":"...but here, we can call\n\n broker.put_shard_range(deleted_shard_range)\n\nand it\u0027ll still be deleted... intended?","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f2d2d94940a11a20a8d50b55cafa6c63c36f7e5","unresolved":false,"context_lines":[{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        :param shard_range: a :class:`~swift.common.utils.ShardRange`"},{"line_number":613,"context_line":"        \"\"\""},{"line_number":614,"context_line":"        record \u003d dict(shard_range, storage_policy_index\u003d0,"},{"line_number":615,"context_line":"                      record_type\u003dRECORD_TYPE_SHARD_NODE)"},{"line_number":616,"context_line":"        self.put_record(record)"},{"line_number":617,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_0f36c4e7","line":614,"range":{"start_line":614,"start_character":22,"end_line":614,"end_character":33},"in_reply_to":"5f4e5783_bce9351b","updated":"2017-10-11 21:55:23.000000000","message":"nope. I wonder if we should just have put_shard_range and the caller must set ShardRange.deleted to achieve desired result, then scrap delete_Shard_range?","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c27ac272bfbd1f181f7638ac2b69277a44229460","unresolved":false,"context_lines":[{"line_number":1448,"context_line":"        return shard_ranges"},{"line_number":1449,"context_line":""},{"line_number":1450,"context_line":"    def get_other_replication_items(self):"},{"line_number":1451,"context_line":"        # TODO: do we need storage policy index?"},{"line_number":1452,"context_line":"        return [dict(sr, record_type\u003dRECORD_TYPE_SHARD_NODE, storage_policy\u003d0)"},{"line_number":1453,"context_line":"                for sr in self.get_shard_ranges(include_deleted\u003dTrue)]"},{"line_number":1454,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_7cf3bd0b","line":1451,"updated":"2017-10-11 18:14:29.000000000","message":"Well, tests still pass without it... but we\u0027re still working on getting that to inspire confidence :-)\n\nStill, it all gets plumbed to merge_items eventually, yeah? Which doesn\u0027t care. It may *also* go through make_tuple_for_pickle/_commit_puts_load, but we\u0027ve (smartly) got our padding localized to those already.","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"}],"swift/container/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c27ac272bfbd1f181f7638ac2b69277a44229460","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def shard_range_from_headers(name, headers):"},{"line_number":86,"context_line":"    return ShardRange(name,"},{"line_number":87,"context_line":"                      headers.get(\u0027x-backend-timestamp\u0027),"},{"line_number":88,"context_line":"                      headers.get(\u0027x-backend-shard-lower\u0027),"},{"line_number":89,"context_line":"                      headers.get(\u0027x-backend-shard-upper\u0027),"},{"line_number":90,"context_line":"                      headers.get(\u0027x-backend-shard-objects\u0027, 0),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_9c3af995","line":87,"range":{"start_line":87,"start_character":35,"end_line":87,"end_character":54},"updated":"2017-10-11 18:14:29.000000000","message":"So if this one\u0027s missing, we\u0027ll throw a TypeError... probably reasonable?","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f2d2d94940a11a20a8d50b55cafa6c63c36f7e5","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def shard_range_from_headers(name, headers):"},{"line_number":86,"context_line":"    return ShardRange(name,"},{"line_number":87,"context_line":"                      headers.get(\u0027x-backend-timestamp\u0027),"},{"line_number":88,"context_line":"                      headers.get(\u0027x-backend-shard-lower\u0027),"},{"line_number":89,"context_line":"                      headers.get(\u0027x-backend-shard-upper\u0027),"},{"line_number":90,"context_line":"                      headers.get(\u0027x-backend-shard-objects\u0027, 0),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_af50d00b","line":87,"range":{"start_line":87,"start_character":35,"end_line":87,"end_character":54},"in_reply_to":"5f4e5783_9c3af995","updated":"2017-10-11 21:55:23.000000000","message":"ah, so that was another motivation for using ShardRange to encapsulate i.e. because it does a bunch of useful validation - except I didn\u0027t put any error handling in place :/","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"}],"test/unit/container/test_replicator.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c27ac272bfbd1f181f7638ac2b69277a44229460","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            info \u003d broker.get_replication_info()"},{"line_number":1168,"context_line":"            success \u003d daemon._repl_to_node(node, from_broker, part, info)"},{"line_number":1169,"context_line":"            self.assertTrue(success)"},{"line_number":1170,"context_line":"            self.assertEqual("},{"line_number":1171,"context_line":"                [dict(sr) for sr in expected_shard_ranges],"},{"line_number":1172,"context_line":"                [dict(sr) for sr in to_broker.get_shard_ranges("},{"line_number":1173,"context_line":"                    include_deleted\u003dTrue)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_bcbc95dc","line":1170,"updated":"2017-10-11 18:14:29.000000000","message":"Makes me wonder if having a\n\n def assertShardRangesEqual(self, a, b):\n     self.assertEqual([dict(sr) for sr in a],\n                      [dict(sr) for sr in b])\n\nhelper might be useful... although, come to think of it, we\u0027ve got a ShardRange.__eq__ -- can we just do\n\n self.assertEqual(expected_shard_ranges, to_broker.get_shard_ranges(...))\n\nhere?","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5f52c27f41793c72fe192a9b48b2de6f0d47bba6","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            info \u003d broker.get_replication_info()"},{"line_number":1168,"context_line":"            success \u003d daemon._repl_to_node(node, from_broker, part, info)"},{"line_number":1169,"context_line":"            self.assertTrue(success)"},{"line_number":1170,"context_line":"            self.assertEqual("},{"line_number":1171,"context_line":"                [dict(sr) for sr in expected_shard_ranges],"},{"line_number":1172,"context_line":"                [dict(sr) for sr in to_broker.get_shard_ranges("},{"line_number":1173,"context_line":"                    include_deleted\u003dTrue)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_842bad80","line":1170,"in_reply_to":"5f4e5783_af4fb090","updated":"2017-10-12 09:08:17.000000000","message":"The ShardRange class was originally only written to handle a range, so upper, lower, contains, overlaps, {\u003c,\u003e} item or another range, etc. Then stats and more timestamps where added then the consistency engine and tracking root stats came to light and the _eq_ just never got updated.","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f2d2d94940a11a20a8d50b55cafa6c63c36f7e5","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            info \u003d broker.get_replication_info()"},{"line_number":1168,"context_line":"            success \u003d daemon._repl_to_node(node, from_broker, part, info)"},{"line_number":1169,"context_line":"            self.assertTrue(success)"},{"line_number":1170,"context_line":"            self.assertEqual("},{"line_number":1171,"context_line":"                [dict(sr) for sr in expected_shard_ranges],"},{"line_number":1172,"context_line":"                [dict(sr) for sr in to_broker.get_shard_ranges("},{"line_number":1173,"context_line":"                    include_deleted\u003dTrue)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_cf842c61","line":1170,"in_reply_to":"5f4e5783_bcbc95dc","updated":"2017-10-11 21:55:23.000000000","message":"I got into the habit of casting to dict because ShardRange.__eq__ only compares the upper/lower. Maybe that is not intentional and we can include all attrs in the __eq__ - I\u0027m not sure what the intent was there?\n\ndefinitely scope for a helper method though, at least.","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5aaa8a53f0d60899130156899f3d76c616e14249","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            info \u003d broker.get_replication_info()"},{"line_number":1168,"context_line":"            success \u003d daemon._repl_to_node(node, from_broker, part, info)"},{"line_number":1169,"context_line":"            self.assertTrue(success)"},{"line_number":1170,"context_line":"            self.assertEqual("},{"line_number":1171,"context_line":"                [dict(sr) for sr in expected_shard_ranges],"},{"line_number":1172,"context_line":"                [dict(sr) for sr in to_broker.get_shard_ranges("},{"line_number":1173,"context_line":"                    include_deleted\u003dTrue)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4e5783_af4fb090","line":1170,"in_reply_to":"5f4e5783_cf842c61","updated":"2017-10-11 22:39:49.000000000","message":"Oh, right -- good call. You can tell I hadn\u0027t bothered to actually *look* at the __eq__ :P\n\nHelper method it is.","commit_id":"b48a8f634d2539d7eb0ac51b2ed2afc6ffc79c29"}]}
