)]}'
{"cinder/objects/volume.py":[{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"e22ad8ddc539e0560835a4014c69989416a3c14e","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        # We swap fields between source (i.e. self) and destination at the"},{"line_number":324,"context_line":"        # end of migration because we want to keep the original volume id"},{"line_number":325,"context_line":"        # in the DB but now pointing to the migrated volume."},{"line_number":326,"context_line":"        for key, value in dest_volume.iteritems():"},{"line_number":327,"context_line":"            value_to_dst \u003d getattr(self, key)"},{"line_number":328,"context_line":"            if key in [\u0027id\u0027, \u0027provider_location\u0027] + self.obj_extra_fields:"},{"line_number":329,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_c8e9451c","line":326,"updated":"2015-12-15 13:55:31.000000000","message":"Don\u0027t we plan to drop CinderObjectDictCompat (which iteritems is part of) from Volume object sooner or later? Could be replaced with\n\n  for key in dest_volume.fields.keys():\n    value \u003d getattr(dest_volume, key)\n\nYou could also use sth like this:\n\n  skip \u003d {\u0027id\u0027, \u0027provider_location\u0027, \u0027_name_id\u0027}\n  for key in set(dest_volume.fields.keys()) - skip:\n    ...\n  dest_volume.display_description \u003d \u0027migration src for \u0027 + self.id\n  dest_volume.status \u003d \u0027deleting\u0027\n  ...\n\nto avoid if checks with every iteration.","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"d1aa4da5570b26e285efaf2f3937fd8f002958c6","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        # We swap fields between source (i.e. self) and destination at the"},{"line_number":324,"context_line":"        # end of migration because we want to keep the original volume id"},{"line_number":325,"context_line":"        # in the DB but now pointing to the migrated volume."},{"line_number":326,"context_line":"        for key, value in dest_volume.iteritems():"},{"line_number":327,"context_line":"            value_to_dst \u003d getattr(self, key)"},{"line_number":328,"context_line":"            if key in [\u0027id\u0027, \u0027provider_location\u0027] + self.obj_extra_fields:"},{"line_number":329,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_e16217d8","line":326,"in_reply_to":"5a710552_c8e9451c","updated":"2015-12-15 15:09:31.000000000","message":"CinderObjectDictCompat will eventually be removed, but I highly doubt it will be any time soon.  I can replace iteritems with fields.keys and the loop as you suggested.","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"b4bf02238d7e4fa745ba1411fe5b036c5acaa4fb","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        # We swap fields between source (i.e. self) and destination at the"},{"line_number":324,"context_line":"        # end of migration because we want to keep the original volume id"},{"line_number":325,"context_line":"        # in the DB but now pointing to the migrated volume."},{"line_number":326,"context_line":"        for key, value in dest_volume.iteritems():"},{"line_number":327,"context_line":"            value_to_dst \u003d getattr(self, key)"},{"line_number":328,"context_line":"            if key in [\u0027id\u0027, \u0027provider_location\u0027] + self.obj_extra_fields:"},{"line_number":329,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_21d25f01","line":326,"in_reply_to":"5a710552_e16217d8","updated":"2015-12-15 15:13:46.000000000","message":"Yeah, your right, thanks anyway :)","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"ed02f219b842bf4f93c6c2e61954f8c45bdaf06f","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        # We swap fields between source (i.e. self) and destination at the"},{"line_number":379,"context_line":"        # end of migration because we want to keep the original volume id"},{"line_number":380,"context_line":"        # in the DB but now pointing to the migrated volume."},{"line_number":381,"context_line":"        skip \u003d {\u0027id\u0027, \u0027provider_location\u0027, \u0027glance_metadata\u0027} |\\"},{"line_number":382,"context_line":"            set(self.obj_extra_fields)"},{"line_number":383,"context_line":"        for key in set(dest_volume.fields.keys()) - skip:"},{"line_number":384,"context_line":"            # Only swap attributes that are already set.  We do not want to"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_d39fc54e","line":381,"range":{"start_line":381,"start_character":63,"end_line":381,"end_character":64},"updated":"2016-01-07 20:43:19.000000000","message":"Can\u0027t we use () instead of \\?","commit_id":"ae7ab5daf7f771f5332e8233df0ea86ed3a80123"}],"cinder/tests/unit/objects/test_volume.py":[{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"e22ad8ddc539e0560835a4014c69989416a3c14e","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        # finish_volume_migration"},{"line_number":317,"context_line":"        ignore_keys \u003d (\u0027id\u0027, \u0027provider_location\u0027, \u0027_name_id\u0027,"},{"line_number":318,"context_line":"                       \u0027migration_status\u0027, \u0027display_description\u0027, \u0027status\u0027)"},{"line_number":319,"context_line":"        dest_vol_filtered \u003d {(k, v)"},{"line_number":320,"context_line":"                             for k, v in expected_dest_volume.iteritems()"},{"line_number":321,"context_line":"                             if k not in ignore_keys}"},{"line_number":322,"context_line":"        src_vol_filtered \u003d {(k, v)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_8eeca5c8","line":319,"updated":"2015-12-15 13:55:31.000000000","message":"Any specific reason to create set of tuples instead of dict?","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"d1aa4da5570b26e285efaf2f3937fd8f002958c6","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        # finish_volume_migration"},{"line_number":317,"context_line":"        ignore_keys \u003d (\u0027id\u0027, \u0027provider_location\u0027, \u0027_name_id\u0027,"},{"line_number":318,"context_line":"                       \u0027migration_status\u0027, \u0027display_description\u0027, \u0027status\u0027)"},{"line_number":319,"context_line":"        dest_vol_filtered \u003d {(k, v)"},{"line_number":320,"context_line":"                             for k, v in expected_dest_volume.iteritems()"},{"line_number":321,"context_line":"                             if k not in ignore_keys}"},{"line_number":322,"context_line":"        src_vol_filtered \u003d {(k, v)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_e1be97fe","line":319,"in_reply_to":"5a710552_8eeca5c8","updated":"2015-12-15 15:09:31.000000000","message":"No reason, pep8 was complaining earlier about using dict(), so I changed to {}, but I forgot to change it to \"k: v\".","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7f57414f80995d78fafe1b38fc800ee5ed70aa2c","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            expected_attrs\u003d[\u0027metadata\u0027, \u0027glance_metadata\u0027])"},{"line_number":336,"context_line":"        updated_dest_volume \u003d src_volume.finish_volume_migration("},{"line_number":337,"context_line":"            dest_volume)"},{"line_number":338,"context_line":"        self.assertEqual(updated_dest_volume.migration_status, \u0027deleting\u0027)"},{"line_number":339,"context_line":"        self.assertEqual(updated_dest_volume.display_description,"},{"line_number":340,"context_line":"                         \u0027migration src for \u0027 + src_volume.id)"},{"line_number":341,"context_line":"        self.assertEqual(updated_dest_volume._name_id, src_volume.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_4bb743f5","line":338,"updated":"2016-01-08 19:17:33.000000000","message":"Please switch these assertEqual calls to have the arguments in the order (EXPECTED, ACTUAL)","commit_id":"3e22913f2541ae5049c660b467b6e49c5e9094a9"}],"cinder/volume/manager.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"692847db6db46defaafe27df21ce0becebc3f4a5","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        # FIXME(thangp): Remove this in v2.0 of RPC API."},{"line_number":1817,"context_line":"        if volume is None:"},{"line_number":1818,"context_line":"            # For older clients, mimic the old behavior and look up the volume"},{"line_number":1819,"context_line":"            # by its volume_id."},{"line_number":1820,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume_id)"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_3c94c689","line":1819,"updated":"2015-12-15 15:23:01.000000000","message":"I know it has nothing to do with this patch, but this is a blocking mistake here, introduced by the VO refactor. It causes retype failure. \n\ncontext should be replaced with ctxt.","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7e443a8c6198ffe14cf586f86c630a284d6774c1","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        # FIXME(thangp): Remove this in v2.0 of RPC API."},{"line_number":1817,"context_line":"        if volume is None:"},{"line_number":1818,"context_line":"            # For older clients, mimic the old behavior and look up the volume"},{"line_number":1819,"context_line":"            # by its volume_id."},{"line_number":1820,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume_id)"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_7cb00ef5","line":1819,"in_reply_to":"5a710552_3c94c689","updated":"2015-12-15 15:26:49.000000000","message":"Ok, I will add it to the patch.  The reason CI did not catch it was because we always have the volume kwargs specified, but it would fail if it was running in backwards compat mode.","commit_id":"a38b723089afad220da7ae942bb0d6ea6d6913f6"}]}
