)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fb63700e12c7105faee1b3c26766fb889b2cb8a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"other methods within the libvirt driver for Liberty."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"libvirt: Remove unnecessary JSON conversions"},{"line_number":22,"context_line":"https://review.openstack.org/#/c/177437/6"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: #1558697"},{"line_number":25,"context_line":"Change-Id: Icfe1f23cc3af2d0166dac82109111e341623fc4a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1af94dfe_b537f4fd","line":22,"updated":"2016-03-17 21:01:01.000000000","message":"Yeah, this also had a regression in it fixed here:\n\nhttps://review.openstack.org/#/c/214816/","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a65d514a6ffd6c7f6b451ccf484c67d66bb54043","unresolved":false,"context_lines":[{"line_number":10,"context_line":"disk_info is always a plain, decoded list. However prior to Liberty"},{"line_number":11,"context_line":"when preforming a live block migration the compute manager populates"},{"line_number":12,"context_line":"disk_info with an encoded JSON string when calling"},{"line_number":13,"context_line":"self.driver.get_instance_disk_info. In the live migration case without"},{"line_number":14,"context_line":"block migration disk_info remains a plain decoded list."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As a result we should always decode disk_info when a block migration"},{"line_number":17,"context_line":"is called for to ensure that we can iterate over the disks and rebuild"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1af94dfe_bbefde85","line":14,"range":{"start_line":13,"start_character":36,"end_line":14,"end_character":55},"updated":"2016-03-18 00:26:10.000000000","message":"It\u0027s actually just None:\n\nhttps://github.com/openstack/nova/blob/stable/kilo/nova/compute/manager.py#L5310","commit_id":"cae19643fb1bf09a1a83c118ab700d3ac5e3e306"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f901d4dbc23576745a11268c4ca4a03aa2ffb6c3","unresolved":false,"context_lines":[{"line_number":6614,"context_line":"                        \u0027is_shared_instance_path\u0027: False,"},{"line_number":6615,"context_line":"                        \u0027block_migration\u0027: True,"},{"line_number":6616,"context_line":"                        \u0027instance_relative_path\u0027: \u0027/some/path/\u0027}"},{"line_number":6617,"context_line":"        disk_info \u003d u\u0027[{\"disk_size\": 5368709120, \"type\": \"raw\", \\"},{"line_number":6618,"context_line":"                      \"virt_disk_size\": 5368709120, \\"},{"line_number":6619,"context_line":"                      \"path\": \"/some/path/disk\", \\"},{"line_number":6620,"context_line":"                      \"backing_file\": \"\", \"over_committed_disk_size\": 0}, \\"},{"line_number":6621,"context_line":"                      {\"disk_size\": 1073741824, \"type\": \"raw\", \\"},{"line_number":6622,"context_line":"                      \"virt_disk_size\": 1073741824, \\"},{"line_number":6623,"context_line":"                      \"path\": \"/some/path/disk.eph0\", \\"},{"line_number":6624,"context_line":"                      \"backing_file\": \"\", \"over_committed_disk_size\": 0}]\u0027"},{"line_number":6625,"context_line":"        image_disk_info \u003d {\u0027/some/path/disk\u0027: \u0027raw\u0027,"},{"line_number":6626,"context_line":"                           \u0027/some/path/disk.eph0\u0027: \u0027raw\u0027}"},{"line_number":6627,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_436cfa34","line":6624,"range":{"start_line":6617,"start_character":8,"end_line":6624,"end_character":74},"updated":"2016-03-17 21:37:13.000000000","message":"nit: would probably be simpler to just leave the disk_info variable as the decoded dict, and use jsonutils.dumps(disk_info) to create a disk_info_str variable, which you pass to pre_live_migration.","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661e0d7bbfdd627f072a55c79e7c8fddde111f60","unresolved":false,"context_lines":[{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"        migrate_data \u003d {\u0027is_shared_block_storage\u0027: False,"},{"line_number":6614,"context_line":"                        \u0027is_shared_instance_path\u0027: False,"},{"line_number":6615,"context_line":"                        \u0027block_migration\u0027: False,"},{"line_number":6616,"context_line":"                        \u0027instance_relative_path\u0027: \u0027/some/path/\u0027}"},{"line_number":6617,"context_line":"        disk_info \u003d [{\u0027disk_size\u0027: 5368709120, \u0027type\u0027: \u0027raw\u0027,"},{"line_number":6618,"context_line":"                      \u0027virt_disk_size\u0027: 5368709120,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_7b18b61e","line":6615,"range":{"start_line":6615,"start_character":24,"end_line":6615,"end_character":49},"updated":"2016-03-18 00:07:40.000000000","message":"This shouldn\u0027t change.","commit_id":"cae19643fb1bf09a1a83c118ab700d3ac5e3e306"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661e0d7bbfdd627f072a55c79e7c8fddde111f60","unresolved":false,"context_lines":[{"line_number":6640,"context_line":"            drvr.pre_live_migration(self.context, instance,"},{"line_number":6641,"context_line":"                                    block_device_info\u003dNone,"},{"line_number":6642,"context_line":"                                    network_info\u003d[],"},{"line_number":6643,"context_line":"                                    disk_info\u003ddisk_info,"},{"line_number":6644,"context_line":"                                    migrate_data\u003dmigrate_data)"},{"line_number":6645,"context_line":"            write_to_file.assert_called_with(disk_info_path,"},{"line_number":6646,"context_line":"                                             jsonutils.dumps(image_disk_info))"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_db28ea35","line":6643,"range":{"start_line":6643,"start_character":36,"end_line":6643,"end_character":56},"updated":"2016-03-18 00:07:40.000000000","message":"Encode it here. The test was wrong to begin with (for kilo), it needs to be sending an encoded json string. We don\u0027t need to handle both the json and non-json string cases, it should just be the json case. Then we don\u0027t need the new block below.","commit_id":"cae19643fb1bf09a1a83c118ab700d3ac5e3e306"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f901d4dbc23576745a11268c4ca4a03aa2ffb6c3","unresolved":false,"context_lines":[{"line_number":5829,"context_line":"            # imagebackend from recreating it incorrectly by inspecting the"},{"line_number":5830,"context_line":"            # contents of each file when using the Raw backend."},{"line_number":5831,"context_line":"            if disk_info:"},{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info may be encoded in the block"},{"line_number":5833,"context_line":"                # migration case so always attempt to decode before use."},{"line_number":5834,"context_line":"                disk_info_text \u003d jsonutils.loads(disk_info)"},{"line_number":5835,"context_line":"                image_disk_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_0301526a","line":5832,"range":{"start_line":5832,"start_character":44,"end_line":5832,"end_character":50},"updated":"2016-03-17 21:37:13.000000000","message":"may be? or will be? if it may be, then we need a type check probably.","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f901d4dbc23576745a11268c4ca4a03aa2ffb6c3","unresolved":false,"context_lines":[{"line_number":5831,"context_line":"            if disk_info:"},{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info may be encoded in the block"},{"line_number":5833,"context_line":"                # migration case so always attempt to decode before use."},{"line_number":5834,"context_line":"                disk_info_text \u003d jsonutils.loads(disk_info)"},{"line_number":5835,"context_line":"                image_disk_info \u003d {}"},{"line_number":5836,"context_line":"                for info in disk_info_text:"},{"line_number":5837,"context_line":"                    image_file \u003d os.path.basename(info[\u0027path\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_03eaf2ab","line":5834,"range":{"start_line":5834,"start_character":16,"end_line":5834,"end_character":30},"updated":"2016-03-17 21:37:13.000000000","message":"This is a tad confusing since this is a dict now. I don\u0027t know if we should just re-assign the disk_info variable here or not, it shouldn\u0027t hurt.","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9109c121df5956209405c081808ea43273d51f34","unresolved":false,"context_lines":[{"line_number":5831,"context_line":"            if disk_info:"},{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info may be encoded in the block"},{"line_number":5833,"context_line":"                # migration case so always attempt to decode before use."},{"line_number":5834,"context_line":"                disk_info_text \u003d jsonutils.loads(disk_info)"},{"line_number":5835,"context_line":"                image_disk_info \u003d {}"},{"line_number":5836,"context_line":"                for info in disk_info_text:"},{"line_number":5837,"context_line":"                    image_file \u003d os.path.basename(info[\u0027path\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_c3cdaa32","line":5834,"range":{"start_line":5834,"start_character":16,"end_line":5834,"end_character":30},"in_reply_to":"1af94dfe_03eaf2ab","updated":"2016-03-17 21:39:08.000000000","message":"Although if we re-assigned the disk_info variable, that could have implications for how it\u0027s used below...yeah we can\u0027t do that because _create_images_and_backing expects a json string.\n\nidk, rename this to disk_info_dict or just do the jsonutils.loads in the for loop and avoid the 2nd variable.","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fb63700e12c7105faee1b3c26766fb889b2cb8a","unresolved":false,"context_lines":[{"line_number":6140,"context_line":"                              \u0027backing_file\u0027: backing_file,"},{"line_number":6141,"context_line":"                              \u0027disk_size\u0027: dk_size,"},{"line_number":6142,"context_line":"                              \u0027over_committed_disk_size\u0027: over_commit_size})"},{"line_number":6143,"context_line":"        return jsonutils.dumps(disk_info)"},{"line_number":6144,"context_line":""},{"line_number":6145,"context_line":"    def get_instance_disk_info(self, instance,"},{"line_number":6146,"context_line":"                               block_device_info\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_f82211a2","line":6143,"updated":"2016-03-17 21:01:01.000000000","message":"Which returns a serialized json string here.","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fb63700e12c7105faee1b3c26766fb889b2cb8a","unresolved":false,"context_lines":[{"line_number":6142,"context_line":"                              \u0027over_committed_disk_size\u0027: over_commit_size})"},{"line_number":6143,"context_line":"        return jsonutils.dumps(disk_info)"},{"line_number":6144,"context_line":""},{"line_number":6145,"context_line":"    def get_instance_disk_info(self, instance,"},{"line_number":6146,"context_line":"                               block_device_info\u003dNone):"},{"line_number":6147,"context_line":"        try:"},{"line_number":6148,"context_line":"            dom \u003d self._host.get_domain(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_981b0d73","line":6145,"updated":"2016-03-17 21:01:01.000000000","message":"disk_info comes from here\n\nhttps://github.com/openstack/nova/blob/stable/kilo/nova/compute/manager.py#L5307","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fb63700e12c7105faee1b3c26766fb889b2cb8a","unresolved":false,"context_lines":[{"line_number":6158,"context_line":"            LOG.warn(msg)"},{"line_number":6159,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.name)"},{"line_number":6160,"context_line":""},{"line_number":6161,"context_line":"        return self._get_instance_disk_info(instance.name, xml,"},{"line_number":6162,"context_line":"                                            block_device_info)"},{"line_number":6163,"context_line":""},{"line_number":6164,"context_line":"    def _get_disk_over_committed_size_total(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_d82755b4","line":6161,"updated":"2016-03-17 21:01:01.000000000","message":"Which calls this...","commit_id":"cd8960b62b185abd855af12207f432e5726ffd1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b867af4f376584faffe62ef9360a30e1dd8c7cf9","unresolved":false,"context_lines":[{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info may be encoded in the block"},{"line_number":5833,"context_line":"                # migration case so always attempt to decode before use."},{"line_number":5834,"context_line":"                disk_info_list \u003d disk_info"},{"line_number":5835,"context_line":"                if isinstance(disk_info, str):"},{"line_number":5836,"context_line":"                    disk_info_list \u003d jsonutils.loads(disk_info)"},{"line_number":5837,"context_line":"                image_disk_info \u003d {}"},{"line_number":5838,"context_line":"                for info in disk_info_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_446c0035","line":5835,"range":{"start_line":5835,"start_character":41,"end_line":5835,"end_character":44},"updated":"2016-03-17 23:03:14.000000000","message":"If you\u0027re going to have a type check in here (I\u0027m not sure it\u0027s actually necessary, we\u0027ve traced the failure, it\u0027s pretty obvious), you should probably use six.text_type.","commit_id":"83b4483f49e45680cf18f265d14c89802874ebde"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7f1bf8c19331de88e69a546e661c4ab03477d9aa","unresolved":false,"context_lines":[{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info may be encoded in the block"},{"line_number":5833,"context_line":"                # migration case so always attempt to decode before use."},{"line_number":5834,"context_line":"                disk_info_list \u003d disk_info"},{"line_number":5835,"context_line":"                if isinstance(disk_info, str):"},{"line_number":5836,"context_line":"                    disk_info_list \u003d jsonutils.loads(disk_info)"},{"line_number":5837,"context_line":"                image_disk_info \u003d {}"},{"line_number":5838,"context_line":"                for info in disk_info_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_f81dec62","line":5835,"range":{"start_line":5835,"start_character":41,"end_line":5835,"end_character":44},"in_reply_to":"1af94dfe_446c0035","updated":"2016-03-17 23:17:05.000000000","message":"So just replace this with a is_block_migration check?","commit_id":"83b4483f49e45680cf18f265d14c89802874ebde"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661e0d7bbfdd627f072a55c79e7c8fddde111f60","unresolved":false,"context_lines":[{"line_number":5829,"context_line":"            # imagebackend from recreating it incorrectly by inspecting the"},{"line_number":5830,"context_line":"            # contents of each file when using the Raw backend."},{"line_number":5831,"context_line":"            if disk_info:"},{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info will be an encoded string in"},{"line_number":5833,"context_line":"                # the block migration case so decode it before use."},{"line_number":5834,"context_line":"                disk_info_list \u003d disk_info"},{"line_number":5835,"context_line":"                if is_block_migration:"},{"line_number":5836,"context_line":"                    disk_info_list \u003d jsonutils.loads(disk_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_9b0b02d6","line":5833,"range":{"start_line":5832,"start_character":16,"end_line":5833,"end_character":67},"updated":"2016-03-18 00:07:40.000000000","message":"I think we can remove this comment. disk_info will be None if not is_block_migration. And disk_info has to be an encoded json str in any other case because of the other methods it\u0027s passed to in here. So I don\u0027t think we need to explicitly call that out.","commit_id":"cae19643fb1bf09a1a83c118ab700d3ac5e3e306"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661e0d7bbfdd627f072a55c79e7c8fddde111f60","unresolved":false,"context_lines":[{"line_number":5831,"context_line":"            if disk_info:"},{"line_number":5832,"context_line":"                # NOTE(lyarwood): disk_info will be an encoded string in"},{"line_number":5833,"context_line":"                # the block migration case so decode it before use."},{"line_number":5834,"context_line":"                disk_info_list \u003d disk_info"},{"line_number":5835,"context_line":"                if is_block_migration:"},{"line_number":5836,"context_line":"                    disk_info_list \u003d jsonutils.loads(disk_info)"},{"line_number":5837,"context_line":"                image_disk_info \u003d {}"},{"line_number":5838,"context_line":"                for info in disk_info_list:"},{"line_number":5839,"context_line":"                    image_file \u003d os.path.basename(info[\u0027path\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_3bfbcec2","line":5836,"range":{"start_line":5834,"start_character":16,"end_line":5836,"end_character":63},"updated":"2016-03-18 00:07:40.000000000","message":"Let\u0027s just simplify this and decode it in the for loop:\n\n  for info in jsonutils.loads(disk_info):","commit_id":"cae19643fb1bf09a1a83c118ab700d3ac5e3e306"}]}
