)]}'
{"nova/compute/background.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8de80dfe246be0b2e76c3d23fe506d02c4bdcece","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d cfg.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class ComputeProcessState(object):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        self.local_state_path \u003d os.path.join(CONF.state_path, \u0027local_state\u0027)"},{"line_number":30,"context_line":"        self._load_state()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_051c0d76","line":27,"updated":"2016-03-14 10:47:22.000000000","message":"I am in favour of something like. There are plenty of places we could use it, live migration being an obvious one.\n\nHowever, this needs careful design. This is not a small feature to be shoehorned into another patch. We need to consider how it will be used, and by what. Its existence strongly infers some kind of service startup handling which I haven\u0027t seen, yet. It has upgrade implications which need to be thought through very carefully.\n\nAlso, bear in mind my other query about conductor. With this local task state it becomes architecturally possible for a user to query whether a thing which is supposed to be happening is actually still happening. This is vital for service HA amongst other things. This is only possible, though, because the process owner is addressable. Conductor is not addressable. As soon as we bounce through conductor we\u0027re not only adding additional load, we\u0027re also giving up the ability to query the component which is supposed to be executing whether it\u0027s actually still doing that.\n\nThis need to be separated out, and needs its own spec.","commit_id":"76c44603c2677856538e0329435ce981d67b063c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9b4f0214c9dec1ceffdd43ee77f4c393a8e24f10","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class ComputeProcessState(object):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        self.local_state_path \u003d os.path.join(CONF.state_path, \u0027local_state\u0027)"},{"line_number":30,"context_line":"        self._load_state()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def save_state(self, instance, task_type, current_step):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_4a6af51a","line":29,"updated":"2016-04-29 15:17:54.000000000","message":"This is not okay, IMHO.","commit_id":"64e4f328c8b9d2699f410855d048f3d913d41368"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9b4f0214c9dec1ceffdd43ee77f4c393a8e24f10","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # NOTE(tdurakov): we assume here that amount of migrations will be"},{"line_number":48,"context_line":"        # relatively small, so simple read here, without buffering"},{"line_number":49,"context_line":"        with open(self.local_state_path, \u0027r\u0027) as f:"},{"line_number":50,"context_line":"            self.local_state \u003d msgpack.unpack(f.read(), use_list\u003dFalse)"},{"line_number":51,"context_line":"        if self.local_state is None:"},{"line_number":52,"context_line":"            self.local_state \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_4a515561","line":50,"updated":"2016-04-29 15:17:54.000000000","message":"We have ways to serialize state, but this is not suitable for upgrade, IMHO","commit_id":"64e4f328c8b9d2699f410855d048f3d913d41368"}],"nova/compute/manager.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5467,"context_line":""},{"line_number":5468,"context_line":"        # NOTE(timello): make sure we update available resources on source"},{"line_number":5469,"context_line":"        # host even before next periodic task."},{"line_number":5470,"context_line":"        self.update_available_resource(ctxt)"},{"line_number":5471,"context_line":""},{"line_number":5472,"context_line":"        self._update_scheduler_instance_info(ctxt, instance)"},{"line_number":5473,"context_line":"        self._notify_about_instance_usage(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_a1493b33","side":"PARENT","line":5470,"updated":"2016-03-10 15:24:17.000000000","message":"Because we haven\u0027t done post_live_migration_at_destination yet, instance.host is still set to the source, so this isn\u0027t going to have the (presumably) desired effect. This seems to have been important to somebody at some point, so worth investigating.","commit_id":"0a4a54bce12cf123db870125bad431612e4e5039"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5469,"context_line":"        # host even before next periodic task."},{"line_number":5470,"context_line":"        self.update_available_resource(ctxt)"},{"line_number":5471,"context_line":""},{"line_number":5472,"context_line":"        self._update_scheduler_instance_info(ctxt, instance)"},{"line_number":5473,"context_line":"        self._notify_about_instance_usage(ctxt, instance,"},{"line_number":5474,"context_line":"                                          \"live_migration._post.end\","},{"line_number":5475,"context_line":"                                          network_info\u003dnetwork_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_619bb366","side":"PARENT","line":5472,"updated":"2016-03-10 15:24:17.000000000","message":"Ditto, maybe? Haven\u0027t looked in great depth.","commit_id":"0a4a54bce12cf123db870125bad431612e4e5039"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5155,"context_line":"        LOG.debug(\u0027source check data is %s\u0027, result)"},{"line_number":5156,"context_line":"        return result"},{"line_number":5157,"context_line":""},{"line_number":5158,"context_line":"    def _normalize_migrate_data(self, migrate_data):"},{"line_number":5159,"context_line":"        was_transformed \u003d False"},{"line_number":5160,"context_line":"        if not isinstance(migrate_data, migrate_data_obj.LiveMigrateData):"},{"line_number":5161,"context_line":"            migrate_data \u003d migrate_data_obj.LiveMigrateData.\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_3fcd4c31","line":5158,"updated":"2016-03-10 15:24:17.000000000","message":"Don\u0027t want to harp on, but there are a couple of changes in here which use _normalize_migrate_data. They aren\u0027t core to the patch and they add noise. The patch is already complex enough to read. Any chance you could put them in a preceding patch?","commit_id":"40d88d182b78c20c8174dfef555272ca842d9996"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5221,"context_line":"            LOG.debug(\u0027pre_live_migration_async result data is %s\u0027,"},{"line_number":5222,"context_line":"                      migrate_data)"},{"line_number":5223,"context_line":"            self.compute_task_api.live_migration_async(context, instance,"},{"line_number":5224,"context_line":"                                                   migrate_data)"},{"line_number":5225,"context_line":"        except Exception:"},{"line_number":5226,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":5227,"context_line":"                LOG.exception(_LE(\u0027Pre_live_migration_async failed at %s\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_522f6f3e","line":5224,"updated":"2016-03-10 15:24:17.000000000","message":"nit: indentation","commit_id":"40d88d182b78c20c8174dfef555272ca842d9996"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5348,"context_line":"            self.driver.live_migration(context, instance, dest,"},{"line_number":5349,"context_line":"                self._post_live_migration_async,"},{"line_number":5350,"context_line":"                self.compute_task_api.rollback_live_migration_async,"},{"line_number":5351,"context_line":"                                       block_migration, migrate_data)"},{"line_number":5352,"context_line":"        except Exception:"},{"line_number":5353,"context_line":"            # Executing live migration"},{"line_number":5354,"context_line":"            # live_migration might raises exceptions, but"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_8b1ffe59","line":5351,"updated":"2016-03-10 15:24:17.000000000","message":"nit: indentation","commit_id":"40d88d182b78c20c8174dfef555272ca842d9996"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":5436,"context_line":"        return (do_cleanup, destroy_disks)"},{"line_number":5437,"context_line":""},{"line_number":5438,"context_line":"    def _do_post_live_migration_source(self, ctxt, instance,"},{"line_number":5439,"context_line":"                            dest, migrate_data\u003dNone):"},{"line_number":5440,"context_line":"        LOG.info(_LI(\u0027_post_live_migration() is started..\u0027),"},{"line_number":5441,"context_line":"                 instance\u003dinstance)"},{"line_number":5442,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_52a48fb8","line":5439,"updated":"2016-03-10 15:24:17.000000000","message":"nit: indentation","commit_id":"40d88d182b78c20c8174dfef555272ca842d9996"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2937a3ad6a69192efe370c281fa8d1c91cd559d8","unresolved":false,"context_lines":[{"line_number":5493,"context_line":""},{"line_number":5494,"context_line":"        # NOTE(timello): make sure we update available resources on source"},{"line_number":5495,"context_line":"        # host even before next periodic task."},{"line_number":5496,"context_line":"        self.update_available_resource(ctxt)"},{"line_number":5497,"context_line":""},{"line_number":5498,"context_line":"        self._update_scheduler_instance_info(ctxt, instance)"},{"line_number":5499,"context_line":"        self._notify_about_instance_usage(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_20901743","side":"PARENT","line":5496,"updated":"2016-03-14 10:56:02.000000000","message":"Don\u0027t want to lose the comment from: https://review.openstack.org/#/c/291161/1/nova/compute/manager.py\n\nI think that moving the above code breaks this.","commit_id":"61054eb6de03042daac4fc3386b1f3a7c05792a5"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8de80dfe246be0b2e76c3d23fe506d02c4bdcece","unresolved":false,"context_lines":[{"line_number":5166,"context_line":"        is_volume_backed \u003d self.compute_api.is_volume_backed_instance(ctxt,"},{"line_number":5167,"context_line":"                                                                      instance)"},{"line_number":5168,"context_line":"        dest_check_data, was_transformed \u003d \\"},{"line_number":5169,"context_line":"            self._normalize_migrate_data(dest_check_data)"},{"line_number":5170,"context_line":"        dest_check_data.is_volume_backed \u003d is_volume_backed"},{"line_number":5171,"context_line":"        block_device_info \u003d self._get_instance_block_device_info("},{"line_number":5172,"context_line":"                            ctxt, instance, refresh_conn_info\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_4fe116fe","line":5169,"updated":"2016-03-14 10:47:22.000000000","message":"Still prefer these were in a different patch.","commit_id":"76c44603c2677856538e0329435ce981d67b063c"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f1a59f845d0c4c1f56f1ed383c9ff7ee04f5f636","unresolved":false,"context_lines":[{"line_number":5253,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":5254,"context_line":"                    LOG.exception(_LE(\u0027Pre_live_migration_async failed at %s\u0027),"},{"line_number":5255,"context_line":"                                  migrate_data.dest_compute, instance\u003dinstance)"},{"line_number":5256,"context_line":"                    self._set_migration_status(migrate_data.migration, \u0027failed\u0027)"},{"line_number":5257,"context_line":"                    self.compute_task_api.rollback_live_migration_source_async("},{"line_number":5258,"context_line":"                        context, instance, migrate_data)"},{"line_number":5259,"context_line":"                    self.compute_task_api.rollback_live_migration_dest_async("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_37c4995d","line":5256,"updated":"2016-04-19 19:36:11.000000000","message":"Line too long","commit_id":"d7dbb824a06d0c3b0c62aa967fa7826edf6ecbd1"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f1a59f845d0c4c1f56f1ed383c9ff7ee04f5f636","unresolved":false,"context_lines":[{"line_number":5388,"context_line":"                # nothing must be recovered in this version."},{"line_number":5389,"context_line":"                LOG.exception(_LE(\u0027Live migration failed.\u0027), instance\u003dinstance)"},{"line_number":5390,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":5391,"context_line":"                     self._set_migration_status(migrate_data.migration,"},{"line_number":5392,"context_line":"                                                \u0027failed\u0027)"},{"line_number":5393,"context_line":"        self.local_state.save_state(instance.uuid, \u0027live_migration\u0027,"},{"line_number":5394,"context_line":"                                    \u0027live_migration_async\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_d780c5f9","line":5391,"range":{"start_line":5391,"start_character":16,"end_line":5391,"end_character":21},"updated":"2016-04-19 19:36:11.000000000","message":"Bad indentation - should be 4 instead of 5 spaces.","commit_id":"d7dbb824a06d0c3b0c62aa967fa7826edf6ecbd1"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f1a59f845d0c4c1f56f1ed383c9ff7ee04f5f636","unresolved":false,"context_lines":[{"line_number":5392,"context_line":"                                                \u0027failed\u0027)"},{"line_number":5393,"context_line":"        self.local_state.save_state(instance.uuid, \u0027live_migration\u0027,"},{"line_number":5394,"context_line":"                                    \u0027live_migration_async\u0027)"},{"line_number":5395,"context_line":"        utils.spawn_n(live_migration_async_worker, context, instance, migrate_data)"},{"line_number":5396,"context_line":""},{"line_number":5397,"context_line":"    @wrap_exception()"},{"line_number":5398,"context_line":"    @wrap_instance_event"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_77961140","line":5395,"range":{"start_line":5395,"start_character":76,"end_line":5395,"end_character":83},"updated":"2016-04-19 19:36:11.000000000","message":"Line too long","commit_id":"d7dbb824a06d0c3b0c62aa967fa7826edf6ecbd1"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f1a59f845d0c4c1f56f1ed383c9ff7ee04f5f636","unresolved":false,"context_lines":[{"line_number":5604,"context_line":"    def post_live_migration_async(self, context, instance, migrate_data):"},{"line_number":5605,"context_line":"        def post_live_migration_async_worker(*args, **kwargs):"},{"line_number":5606,"context_line":"            self.post_live_migration_at_destination(context, instance,"},{"line_number":5607,"context_line":"                                                    migrate_data.block_migration)"},{"line_number":5608,"context_line":"        self.local_state(instance.uuid, \u0027live_migration\u0027,"},{"line_number":5609,"context_line":"                         \u0027post_live_migration_async\u0027)"},{"line_number":5610,"context_line":"        utils.spawn_n(post_live_migration_async_worker, context, instance,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_77bd71b6","line":5607,"range":{"start_line":5607,"start_character":77,"end_line":5607,"end_character":80},"updated":"2016-04-19 19:36:11.000000000","message":"Line too long","commit_id":"d7dbb824a06d0c3b0c62aa967fa7826edf6ecbd1"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"f1a59f845d0c4c1f56f1ed383c9ff7ee04f5f636","unresolved":false,"context_lines":[{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":"LAST_VERSION \u003d None"},{"line_number":44,"context_line":"LIVE_MIGRATION_ASYNC_VERSION \u003d \u00274.13\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _compute_host(host, instance):"},{"line_number":47,"context_line":"    \u0027\u0027\u0027Get the destination host for a message."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_770bb18e","line":45,"updated":"2016-04-19 19:36:11.000000000","message":"2 empty lines are expected","commit_id":"d7dbb824a06d0c3b0c62aa967fa7826edf6ecbd1"}],"nova/conductor/manager.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"98549aa1897752ea2015c581758b0dec65ca2229","unresolved":false,"context_lines":[{"line_number":601,"context_line":""},{"line_number":602,"context_line":"    def pre_live_migration_async(self, context, instance, migrate_data):"},{"line_number":603,"context_line":"        self.compute_rpcapi.pre_live_migration_async(context, instance,"},{"line_number":604,"context_line":"                                                      migrate_data)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def post_live_migration_async(self, context, instance, migrate_data):"},{"line_number":607,"context_line":"        self.compute_rpcapi.post_live_migration_async(context, instance,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_064925d0","line":604,"updated":"2016-03-10 15:24:17.000000000","message":"The thing I like most about this patch is that it distributes both work and ownership of the task. The work of a migration is entirely done by 2 computes. Adding conductor into the mix just adds an addition point of failure, and additional load on 2 centralised resources: rabbit and conductor.\n\nIf there\u0027s no architectural reason to use conductor (and I can\u0027t think of one immediately), I\u0027d very much prefer it if this just bounced directly between computes. The little bit of code below in rollback_live_migration_async could move into compute.","commit_id":"40d88d182b78c20c8174dfef555272ca842d9996"}]}
