)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b38a28ac5fe28614b9dd2f936906004d3590233","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add prep_snapshot_based_resize_at_dest compute method"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new method to the compute service which will"},{"line_number":10,"context_line":"be synchronously RPC called from (super)conductor when"},{"line_number":11,"context_line":"preparing for a cross-cell resize which will perform an"},{"line_number":12,"context_line":"RT.resize_claim() which will claim things like PCI devices"},{"line_number":13,"context_line":"and/or NUMA topology resources which are not otherwise \"claimed\""},{"line_number":14,"context_line":"in the placement service during scheduling. The MigrationContext"},{"line_number":15,"context_line":"is created in the target cell DB as part of this claim."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Notifications, fault and instance action event creation should"},{"line_number":18,"context_line":"be consistent with the traditional \"prep_resize\" method. One"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"7faddb67_3eccc487","line":15,"range":{"start_line":9,"start_character":0,"end_line":15,"end_character":55},"updated":"2019-08-19 14:37:19.000000000","message":"This being one sentence is pretty hard to read. After a few passes I think I got it, but.. oof.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164bf18754887fdacce442d52fdde5317c0547d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add prep_snapshot_based_resize_at_dest compute method"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new method to the compute service which will"},{"line_number":10,"context_line":"be synchronously RPC called from (super)conductor when"},{"line_number":11,"context_line":"preparing for a cross-cell resize which will perform an"},{"line_number":12,"context_line":"RT.resize_claim() which will claim things like PCI devices"},{"line_number":13,"context_line":"and/or NUMA topology resources which are not otherwise \"claimed\""},{"line_number":14,"context_line":"in the placement service during scheduling. The MigrationContext"},{"line_number":15,"context_line":"is created in the target cell DB as part of this claim."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Notifications, fault and instance action event creation should"},{"line_number":18,"context_line":"be consistent with the traditional \"prep_resize\" method. One"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"7faddb67_30cc5aba","line":15,"range":{"start_line":9,"start_character":0,"end_line":15,"end_character":55},"in_reply_to":"7faddb67_3eccc487","updated":"2019-08-27 18:55:28.000000000","message":"Will try to tweak this.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"696a76654a75f90980d1772c522092e47a025f9e","unresolved":false,"context_lines":[{"line_number":4195,"context_line":"                    context, instance, claim.migration, image,"},{"line_number":4196,"context_line":"                    instance_type, clean_shutdown)"},{"line_number":4197,"context_line":""},{"line_number":4198,"context_line":"    def _send_prep_resize_notifications("},{"line_number":4199,"context_line":"            self, context, instance, phase, flavor):"},{"line_number":4200,"context_line":"        \"\"\"Send \"resize.prep.*\" notifications."},{"line_number":4201,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_125a4f4e","line":4198,"range":{"start_line":4198,"start_character":8,"end_line":4198,"end_character":39},"updated":"2019-01-25 23:00:55.000000000","message":"Could split this out into a helper method and drop it at the bottom of the series so it could merge faster.","commit_id":"6c9e1856b7b13fd1a93e6407465d9ddd93d54778"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac12677a58bfb1e09a77338c5e6bdc63c29f0807","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"            # not re-scheduling"},{"line_number":4323,"context_line":"            six.reraise(*exc_info)"},{"line_number":4324,"context_line":""},{"line_number":4325,"context_line":"    def _try_volume_connect(self, ctxt, instance, bdm, connector):"},{"line_number":4326,"context_line":"        \"\"\"Updates the volume attachment for bdm and checks if the compute"},{"line_number":4327,"context_line":"        driver can connect the volume to this host."},{"line_number":4328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_cdbe6a64","line":4325,"range":{"start_line":4325,"start_character":8,"end_line":4325,"end_character":27},"updated":"2019-01-26 00:26:36.000000000","message":"This name is maybe too generic for how tightly coupled this is to the other method - suggestions welcome, but that\u0027s why I called out the relationship in the description.","commit_id":"bae399a82f8e6f37ae8e32d7aef85c9b66bed388"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac12677a58bfb1e09a77338c5e6bdc63c29f0807","unresolved":false,"context_lines":[{"line_number":4411,"context_line":"                # this host and checking if we can connect them."},{"line_number":4412,"context_line":"                connector \u003d self.driver.get_volume_connector(instance)"},{"line_number":4413,"context_line":"                for bdm in bdms:"},{"line_number":4414,"context_line":"                    if bdm.is_volume:"},{"line_number":4415,"context_line":"                        # NOTE(mriedem): Do we really need to check that all"},{"line_number":4416,"context_line":"                        # volumes attached to the server need to be able to"},{"line_number":4417,"context_line":"                        # connect? Is one good enough? Or at least one per"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_adbbe66f","line":4414,"range":{"start_line":4414,"start_character":20,"end_line":4414,"end_character":37},"updated":"2019-01-26 00:26:36.000000000","message":"We can remove this since conductor only passes in volume BDMs.","commit_id":"bae399a82f8e6f37ae8e32d7aef85c9b66bed388"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7517e26080b5157db636859e015e1eddd9cb69c3","unresolved":false,"context_lines":[{"line_number":4411,"context_line":"                # this host and checking if we can connect them."},{"line_number":4412,"context_line":"                connector \u003d self.driver.get_volume_connector(instance)"},{"line_number":4413,"context_line":"                for bdm in bdms:"},{"line_number":4414,"context_line":"                    if bdm.is_volume:"},{"line_number":4415,"context_line":"                        # NOTE(mriedem): Do we really need to check that all"},{"line_number":4416,"context_line":"                        # volumes attached to the server need to be able to"},{"line_number":4417,"context_line":"                        # connect? Is one good enough? Or at least one per"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_70e5a008","line":4414,"range":{"start_line":4414,"start_character":20,"end_line":4414,"end_character":37},"in_reply_to":"9fdfeff1_adbbe66f","updated":"2019-01-29 23:52:09.000000000","message":"Done","commit_id":"bae399a82f8e6f37ae8e32d7aef85c9b66bed388"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"303dff20896503d8027cbd1374209a208fb5e26d","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4365,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4366,"context_line":"        # attachment."},{"line_number":4367,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4368,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4369,"context_line":"        # Now try to connect this volume via the driver."},{"line_number":4370,"context_line":"        return self.driver.can_connect_volume("},{"line_number":4371,"context_line":"            ctxt, attach_ref[\u0027connection_info\u0027], instance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_ff29ebf1","line":4368,"range":{"start_line":4367,"start_character":8,"end_line":4368,"end_character":75},"updated":"2019-02-05 23:18:24.000000000","message":"This might be wrong because we shouldn\u0027t update the same volume attachment more than once but that\u0027s what we\u0027d do if we took this attachment and ran it through _prep_block_device during finish_snapshot_based_resize_at_dest.","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d487ae116bac6cc61b812ac5c6abbdab3f609f79","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4365,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4366,"context_line":"        # attachment."},{"line_number":4367,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4368,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4369,"context_line":"        # Now try to connect this volume via the driver."},{"line_number":4370,"context_line":"        return self.driver.can_connect_volume("},{"line_number":4371,"context_line":"            ctxt, attach_ref[\u0027connection_info\u0027], instance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_ba261168","line":4368,"range":{"start_line":4367,"start_character":8,"end_line":4368,"end_character":75},"in_reply_to":"9fdfeff1_ff29ebf1","updated":"2019-02-06 00:07:37.000000000","message":"Added TODO.","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2de6160b2a73bfabde2843a788898695d5d676a0","unresolved":false,"context_lines":[{"line_number":4425,"context_line":"            # will create the MigrationContext object. Do the other validation"},{"line_number":4426,"context_line":"            # within the MoveClaim context so we can drop the claim if anything"},{"line_number":4427,"context_line":"            # fails."},{"line_number":4428,"context_line":"            with self.rt.resize_claim("},{"line_number":4429,"context_line":"                    ctxt, instance, flavor, nodename, migration,"},{"line_number":4430,"context_line":"                    image_meta\u003dinstance.image_meta, limits\u003dlimits):"},{"line_number":4431,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_a8ef4f1b","line":4428,"updated":"2019-02-12 01:05:08.000000000","message":"To properly track the migration / resource usage on this host at this point, we need to have the instance.new_flavor set before we call resize_claim.","commit_id":"305a8d9c9b475713300f9f061b328a48bf16731f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e658786e1a86cc51f36fafc5eb11364f5f031ba3","unresolved":false,"context_lines":[{"line_number":4425,"context_line":"            # will create the MigrationContext object. Do the other validation"},{"line_number":4426,"context_line":"            # within the MoveClaim context so we can drop the claim if anything"},{"line_number":4427,"context_line":"            # fails."},{"line_number":4428,"context_line":"            with self.rt.resize_claim("},{"line_number":4429,"context_line":"                    ctxt, instance, flavor, nodename, migration,"},{"line_number":4430,"context_line":"                    image_meta\u003dinstance.image_meta, limits\u003dlimits):"},{"line_number":4431,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_20292689","line":4428,"in_reply_to":"9fdfeff1_a8ef4f1b","updated":"2019-02-12 18:24:15.000000000","message":"Done","commit_id":"305a8d9c9b475713300f9f061b328a48bf16731f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48ee25b451e4458655e6e020c06a811098c29561","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4365,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4366,"context_line":"        # attachment."},{"line_number":4367,"context_line":"        # TODO(mriedem): This might be wrong because we shouldn\u0027t update the"},{"line_number":4368,"context_line":"        # same volume attachment more than once but that\u0027s what we\u0027d do if we"},{"line_number":4369,"context_line":"        # took this attachment and ran it through _prep_block_device during"},{"line_number":4370,"context_line":"        # finish_snapshot_based_resize_at_dest."},{"line_number":4371,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4372,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4373,"context_line":"        # Now try to connect this volume via the driver."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_9ab15f47","line":4370,"range":{"start_line":4367,"start_character":8,"end_line":4370,"end_character":47},"updated":"2019-02-25 23:43:17.000000000","message":"Either in prep_snapshot_based_resize_at_dest or conductor we should probably call _terminate_volume_connections which will create a new empty attachment and then delete the attachment we just updated, which would leave us with fresh attachments for finish_snapshot_based_resize_at_dest to update and complete during _prep_block_device. That\u0027s also similar to what resize_instance does during a normal resize (that method runs on the source host, but it gets the volume attachments ready for finish_resize at the dest).","commit_id":"d51642fd85d20f208f884efad6dc319b023bebe4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3f755a24c6b3f830a964d6584615522470dd990a","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4365,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4366,"context_line":"        # attachment."},{"line_number":4367,"context_line":"        # TODO(mriedem): This might be wrong because we shouldn\u0027t update the"},{"line_number":4368,"context_line":"        # same volume attachment more than once but that\u0027s what we\u0027d do if we"},{"line_number":4369,"context_line":"        # took this attachment and ran it through _prep_block_device during"},{"line_number":4370,"context_line":"        # finish_snapshot_based_resize_at_dest."},{"line_number":4371,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4372,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4373,"context_line":"        # Now try to connect this volume via the driver."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_b0679225","line":4370,"range":{"start_line":4367,"start_character":8,"end_line":4370,"end_character":47},"in_reply_to":"9fdfeff1_9ab15f47","updated":"2019-02-26 19:01:58.000000000","message":"Done","commit_id":"d51642fd85d20f208f884efad6dc319b023bebe4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1689684ed3fabbc22e236c7646313b903877f193","unresolved":false,"context_lines":[{"line_number":4429,"context_line":"                    ctxt, instance, flavor, nodename, migration,"},{"line_number":4430,"context_line":"                    image_meta\u003dinstance.image_meta, limits\u003dlimits):"},{"line_number":4431,"context_line":""},{"line_number":4432,"context_line":"                # NOTE(mriedem): We currently do not do anything with the port"},{"line_number":4433,"context_line":"                # bindings on the target host but bindings_by_port_id is passed"},{"line_number":4434,"context_line":"                # in case we need to in the future."},{"line_number":4435,"context_line":""},{"line_number":4436,"context_line":"                # Validate storage for volumes by updating attachments against"},{"line_number":4437,"context_line":"                # this host and checking if we can connect them."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_7a9a7b6f","line":4434,"range":{"start_line":4432,"start_character":16,"end_line":4434,"end_character":51},"updated":"2019-02-25 23:55:59.000000000","message":"We should just remove it - it\u0027s easy to add in later if needed. We can also get the bindings by host ID if we need to (from neutron).","commit_id":"d51642fd85d20f208f884efad6dc319b023bebe4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3f755a24c6b3f830a964d6584615522470dd990a","unresolved":false,"context_lines":[{"line_number":4429,"context_line":"                    ctxt, instance, flavor, nodename, migration,"},{"line_number":4430,"context_line":"                    image_meta\u003dinstance.image_meta, limits\u003dlimits):"},{"line_number":4431,"context_line":""},{"line_number":4432,"context_line":"                # NOTE(mriedem): We currently do not do anything with the port"},{"line_number":4433,"context_line":"                # bindings on the target host but bindings_by_port_id is passed"},{"line_number":4434,"context_line":"                # in case we need to in the future."},{"line_number":4435,"context_line":""},{"line_number":4436,"context_line":"                # Validate storage for volumes by updating attachments against"},{"line_number":4437,"context_line":"                # this host and checking if we can connect them."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_10769ed9","line":4434,"range":{"start_line":4432,"start_character":16,"end_line":4434,"end_character":51},"in_reply_to":"9fdfeff1_7a9a7b6f","updated":"2019-02-26 19:01:58.000000000","message":"Done","commit_id":"d51642fd85d20f208f884efad6dc319b023bebe4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a1e2d304956177f7d3c719fb7d8f1eceac1abc26","unresolved":false,"context_lines":[{"line_number":4418,"context_line":"                # this host and checking if we can connect them."},{"line_number":4419,"context_line":"                connector \u003d self.driver.get_volume_connector(instance)"},{"line_number":4420,"context_line":"                for bdm in volume_bdms:"},{"line_number":4421,"context_line":"                    # NOTE(mriedem): Do we really need to check that all"},{"line_number":4422,"context_line":"                    # volumes attached to the server need to be able to"},{"line_number":4423,"context_line":"                    # connect? Is one good enough? Or at least one per"},{"line_number":4424,"context_line":"                    # volume type?"},{"line_number":4425,"context_line":"                    can_connect \u003d self._try_volume_connect("},{"line_number":4426,"context_line":"                        ctxt, instance, bdm, connector)"},{"line_number":4427,"context_line":"                    if not can_connect:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5fc1f717_69769cdb","line":4424,"range":{"start_line":4421,"start_character":20,"end_line":4424,"end_character":34},"updated":"2019-03-07 09:46:07.000000000","message":"maybe we should do per volume type to be safer, but does it really matter? is this a time consuming process? it will make the logic complexier.","commit_id":"4da2c7109e9337676e522f5dcb47ebd776df21e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"96d341b60b2a44c012ac156a56d5b51ad809f47d","unresolved":false,"context_lines":[{"line_number":4474,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4475,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4476,"context_line":"        # attachment."},{"line_number":4477,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4478,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4479,"context_line":"        # Now try to connect this volume via the driver."},{"line_number":4480,"context_line":"        return self.driver.can_connect_volume("}],"source_content_type":"text/x-python","patch_set":29,"id":"dfbec78f_38e719af","line":4477,"updated":"2019-05-13 16:04:46.000000000","message":"Looks like this is failing in the gate run:\n\nhttp://logs.openstack.org/56/656656/9/check/nova-multi-cell/874d09b/controller/logs/screen-n-super-cond.txt.gz#_May_11_22_54_05_758189\n\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]: WARNING nova.scheduler.utils [None req-a1202453-8a68-4f73-a73c-40f0405083b4 tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] Failed to compute_task_migrate_server: Migration pre-check error: Pre-checks failed on host \u0027ubuntu-bionic-ovh-bhs1-0006102084\u0027. Error: Invalid input received: Invalid volume: Volume b2aba195-6570-40c4-82bb-46d3557fceeb status must be available or downloading to reserve, but the current status is attaching. (HTTP 400) (Request-ID: req-1f8bf477-4491-412b-853e-8ebf2d584273)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]: Traceback (most recent call last):\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/server.py\", line 229, in inner\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     return func(*args, **kwargs)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/exception_wrapper.py\", line 79, in wrapped\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     function_name, call_dict, binary, tb)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     self.force_reraise()\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     six.reraise(self.type_, self.value, self.tb)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/exception_wrapper.py\", line 69, in wrapped\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     return f(self, context, *args, **kw)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/compute/utils.py\", line 1349, in decorated_function\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     return function(self, context, *args, **kwargs)\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/compute/manager.py\", line 215, in decorated_function\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     kwargs[\u0027instance\u0027], e, sys.exc_info())\nMay 11 22:54:05.758189 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     self.force_reraise()\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     six.reraise(self.type_, self.value, self.tb)\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/compute/manager.py\", line 203, in decorated_function\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     return function(self, context, *args, **kwargs)\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:   File \"/opt/stack/nova/nova/compute/manager.py\", line 4887, in prep_snapshot_based_resize_at_dest\nMay 11 22:54:05.759459 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]:     {\u0027host\u0027: self.host, \u0027error\u0027: err}))\n\nThe volume is in \"attaching\" status because we create the empty volume attachment for it in conductor first:\n\nhttp://logs.openstack.org/56/656656/9/check/nova-multi-cell/874d09b/controller/logs/screen-n-super-cond.txt.gz#_May_11_22_53_58_855817\n\nMay 11 22:53:58.855817 ubuntu-bionic-ovh-bhs1-0006102082 nova-conductor[27367]: DEBUG nova.conductor.tasks.cross_cell_migrate [None req-a1202453-8a68-4f73-a73c-40f0405083b4 tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] Creating volume attachments for destination host ubuntu-bionic-ovh-bhs1-0006102084 {{(pid\u003d28122) _create_volume_attachments /opt/stack/nova/nova/conductor/tasks/cross_cell_migrate.py:276}}\n\nLooking at the cinder-api logs, it looks like this is the PUT to update the attachment:\n\nhttp://logs.openstack.org/56/656656/9/check/nova-multi-cell/874d09b/controller/logs/screen-c-api.txt.gz#_May_11_22_54_01_571678\n\nMay 11 22:54:01.571678 ubuntu-bionic-ovh-bhs1-0006102082 devstack@c-api.service[29621]: INFO cinder.api.openstack.wsgi [req-a1202453-8a68-4f73-a73c-40f0405083b4 req-cd7b047b-42c8-4a60-9712-c84d59a828ee tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] PUT https://158.69.65.232/volume/v3/bbc1e52dd26e457ca89a2037cf723858/attachments/ffd50332-56d1-4500-a5bd-bfde93a56361\nMay 11 22:54:01.572677 ubuntu-bionic-ovh-bhs1-0006102082 devstack@c-api.service[29621]: DEBUG cinder.api.openstack.wsgi [req-a1202453-8a68-4f73-a73c-40f0405083b4 req-cd7b047b-42c8-4a60-9712-c84d59a828ee tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] Action: \u0027update\u0027, calling method: version_select, body: {\"attachment\": {\"connector\": {\"initiator\": \"iqn.1993-08.org.debian:01:f737ea147066\", \"ip\": \"158.69.65.120\", \"system uuid\": \"D706EC5B-8250-4F60-BAB1-566D7F843114\", \"platform\": \"x86_64\", \"host\": \"ubuntu-bionic-ovh-bhs1-0006102084\", \"do_local_attach\": false, \"mountpoint\": \"/dev/vda\", \"os_type\": \"linux2\", \"multipath\": false}}} {{(pid\u003d29623) _process_stack /opt/stack/cinder/cinder/api/openstack/wsgi.py:870}}\n\nOr is that maybe the initial root volume update before the resize? Because I see another attachment create later here:\n\nMay 11 22:54:04.126970 ubuntu-bionic-ovh-bhs1-0006102082 devstack@c-api.service[29621]: INFO cinder.api.openstack.wsgi [req-a1202453-8a68-4f73-a73c-40f0405083b4 req-1f8bf477-4491-412b-853e-8ebf2d584273 tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] POST https://158.69.65.232/volume/v3/bbc1e52dd26e457ca89a2037cf723858/attachments\n\nAnd that returns a 400:\n\nMay 11 22:54:04.202109 ubuntu-bionic-ovh-bhs1-0006102082 devstack@c-api.service[29621]: INFO cinder.api.openstack.wsgi [req-a1202453-8a68-4f73-a73c-40f0405083b4 req-1f8bf477-4491-412b-853e-8ebf2d584273 tempest-ServerActionsTestJSON-1210534967 tempest-ServerActionsTestJSON-1210534967] https://158.69.65.232/volume/v3/bbc1e52dd26e457ca89a2037cf723858/attachments returned with HTTP 400\n\nBut that\u0027s a different volume from the one that failed above (b2aba195-6570-40c4-82bb-46d3557fceeb).\n\nI can\u0027t really make sense out of the request IDs in the cinder logs.","commit_id":"e5e2e7d4d8463098474c6b19b595c5387aba9712"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ce3ab429dd5b91b0934f8790d2e2ab6deda4eaf","unresolved":false,"context_lines":[{"line_number":4474,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4475,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4476,"context_line":"        # attachment."},{"line_number":4477,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4478,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4479,"context_line":"        # Now try to connect this volume via the driver."},{"line_number":4480,"context_line":"        return self.driver.can_connect_volume("}],"source_content_type":"text/x-python","patch_set":29,"id":"dfbec78f_fb773bd3","line":4477,"in_reply_to":"dfbec78f_38e719af","updated":"2019-05-13 16:42:46.000000000","message":"OK so the issue is we can\u0027t update the dest host attachment while the source host attachment is still on the volume. Normal resize will create the empty dest host attachment and delete the source host attachment during resize_instance, we\u0027re not doing that same kind of thing. Details after discussing this with Sean McGinnis:\n\n(11:08:18 AM) mriedem: so i thought i knew how this worked in cinder but i might have forgotten. if i boot from volume i\u0027ve got an in-use volume. then if i\u0027m going to migrate the server, nova will create an \"empty\" volume attachment for the dest host - this is a volume attachment without a connector, and the volume status changes to \"attaching\",\n(11:09:11 AM) mriedem: now when nova updates the dest host attachment with the connector, it should make the volume as in-use again right? i\u0027m seeing a failure like this instead: \"Invalid input received: Invalid volume: Volume  b2aba195-6570-40c4-82bb-46d3557fceeb status must be available or  downloading to reserve, but the current status is attaching.\"\n(11:09:39 AM) mriedem: maybe the issue is i haven\u0027t deleted the source host attachment yet?\n(11:12:58 AM) smcginnis: mriedem: Looking at blame in the code, doesn\u0027t appear we\u0027ve ever allowed that with the new attach APIs.\n(11:12:59 AM) mriedem: ah yeah i think that\u0027s the problem. looking at how nova does a migration, we create the empty dest host attachment first which reserves the volume, then we delete the source host attachment, and once we migrate to the dest host, we update the dest host attachment with the connector and finally complete it to mark the volume as in-use\n(11:13:17 AM) smcginnis: We sepcifically only check for available or downloading and also allow in-use only if multiattach is set.\n(11:13:46 AM) mriedem: yeah...shazbot, my cross-cell stuff has hit a snag for volume-backed servers then...\n(11:14:34 AM) mriedem: i\u0027m trying to sniff out if a dest host is going to work in another cell by creating an export there first (updating the attachment using the dest host connector), but i haven\u0027t deleted the existing source host attachment for the volume, which is different from how normal resize works\n(11:15:00 AM) smcginnis: Yeah, that could be tricky.\n(11:15:36 AM) smcginnis: We could add \"attaching\", but I think we would need to enforce that the update is for the same host that started the attachment or something to prevent a race of someone else coming in and attaching it.\n(11:15:37 AM) mriedem: i\u0027d have to (1) create the dest host empty attachment, (2) delete the source host attachment, (3) update the dest host attachment with the dest host connector, and failing that, re-connect the source host attachment\n(11:15:47 AM) smcginnis: Which I think defeats the purpose of having that \"reserved\" state.\n(11:16:04 AM) smcginnis: mriedem: That sounds reasonable.\n(11:16:18 AM) mriedem: reasonable, but pretty sucky\n(11:16:24 AM) mriedem: i.e. lots of things to go wrong there\n(11:17:46 AM) mriedem: but without creating the export on the dest host we don\u0027t really have a good pre-check that that host will work\n(11:17:47 AM) mriedem: right?\n(11:18:38 AM) smcginnis: I think you are right.\n(11:18:59 AM) smcginnis: We would have to add a new API call to validate that beforehand.","commit_id":"e5e2e7d4d8463098474c6b19b595c5387aba9712"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8bc6e3f44e68aad2c0b155d9877dd5b980398ce1","unresolved":false,"context_lines":[{"line_number":4474,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4475,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4476,"context_line":"        # attachment."},{"line_number":4477,"context_line":"        attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4478,"context_line":"            ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"},{"line_number":4479,"context_line":"        # Now try to connect this volume via the driver."},{"line_number":4480,"context_line":"        return self.driver.can_connect_volume("}],"source_content_type":"text/x-python","patch_set":29,"id":"dfbec78f_1b5ecf43","line":4477,"in_reply_to":"dfbec78f_fb773bd3","updated":"2019-05-13 16:43:52.000000000","message":"The first thing I should probably do is enhance the cinder fixture used in the functional tests to not allow updating a volume attachment while there is already another completed volume attachment for the same volume.","commit_id":"e5e2e7d4d8463098474c6b19b595c5387aba9712"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"caf5b127de44e63eff53852a6b10e89a4cb6bc30","unresolved":false,"context_lines":[{"line_number":4546,"context_line":"                # called once per attachment (even though the API does not"},{"line_number":4547,"context_line":"                # enforce it) because each attachment_update call creates an"},{"line_number":4548,"context_line":"                # export in the storage backend."},{"line_number":4549,"context_line":"                # TODO(mriedem): Tracking attachment_update calls in"},{"line_number":4550,"context_line":"                # CinderFixtureNewAttachFlow and raising if called more than"},{"line_number":4551,"context_line":"                # once per attachment would be useful for test coverage."},{"line_number":4552,"context_line":"                self._terminate_volume_connections(ctxt, instance, volume_bdms)"},{"line_number":4553,"context_line":""},{"line_number":4554,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dfbec78f_445464fe","line":4551,"range":{"start_line":4549,"start_character":16,"end_line":4551,"end_character":72},"updated":"2019-05-13 18:42:15.000000000","message":"Yup.","commit_id":"e5e2e7d4d8463098474c6b19b595c5387aba9712"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a9744bf6dfe3fd5b1701496762abb5ddd9fae1e1","unresolved":false,"context_lines":[{"line_number":4472,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4473,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4474,"context_line":"        # attachment."},{"line_number":4475,"context_line":"        # FIXME(mriedem): This will fail unless the source host attachment"},{"line_number":4476,"context_line":"        # is deleted first."},{"line_number":4477,"context_line":"        # attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4478,"context_line":"        #     ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"}],"source_content_type":"text/x-python","patch_set":30,"id":"dfbec78f_0f78c5c1","line":4475,"updated":"2019-05-13 20:09:56.000000000","message":"IRC log of conversation with dansmith about this:\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2019-05-13.log.html#t2019-05-13T19:41:11\n\ntl;dr this pre-validation of the dest host regarding the volume connection is something normal resize could fail with today, so if we\u0027re going to do it, we should likely do it for all resizes and not worry so much about it just for cross-cell resize.","commit_id":"cff1e39abc6e07529fc6776b85fafa6fda82b3be"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8c36fedb4421fb36fe95bd889feefd7ac2e36bb","unresolved":false,"context_lines":[{"line_number":4472,"context_line":"        # connection_info details to try and connect the volume on this host."},{"line_number":4473,"context_line":"        # If any of this fails, conductor is responsible for cleaning up the"},{"line_number":4474,"context_line":"        # attachment."},{"line_number":4475,"context_line":"        # FIXME(mriedem): This will fail unless the source host attachment"},{"line_number":4476,"context_line":"        # is deleted first."},{"line_number":4477,"context_line":"        # attach_ref \u003d self.volume_api.attachment_update("},{"line_number":4478,"context_line":"        #     ctxt, bdm.attachment_id, connector, mountpoint\u003dbdm.device_name)"}],"source_content_type":"text/x-python","patch_set":30,"id":"dfbec78f_415e9176","line":4475,"in_reply_to":"dfbec78f_0f78c5c1","updated":"2019-05-13 23:29:21.000000000","message":"With this commented out I was able to get a pass on the volume-backed resize confirm tempest test:\n\nhttp://logs.openstack.org/56/656656/10/check/nova-multi-cell/f1def72/testr_results.html.gz","commit_id":"cff1e39abc6e07529fc6776b85fafa6fda82b3be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"30dc0f63987189ddb605c6e83d3c770d51e71e4e","unresolved":false,"context_lines":[{"line_number":4599,"context_line":""},{"line_number":4600,"context_line":"        Performs a resize_claim for resources that are not claimed in placement"},{"line_number":4601,"context_line":"        like PCI devices and NUMA topology."},{"line_number":4602,"context_line":""},{"line_number":4603,"context_line":"        :param ctxt: user auth request context"},{"line_number":4604,"context_line":"        :param instance: the instance being resized"},{"line_number":4605,"context_line":"        :param flavor: the flavor being resized to (unchanged for cold migrate)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_1ce84614","line":4602,"updated":"2019-08-13 15:09:33.000000000","message":"Adding the note about not reverting task state here from the commit message would be good","commit_id":"61a147217c9453b2b1680c4ba91636b64ef2a6b7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d352221aecba565598a405e35b0392c18ad7f1ac","unresolved":false,"context_lines":[{"line_number":4599,"context_line":""},{"line_number":4600,"context_line":"        Performs a resize_claim for resources that are not claimed in placement"},{"line_number":4601,"context_line":"        like PCI devices and NUMA topology."},{"line_number":4602,"context_line":""},{"line_number":4603,"context_line":"        :param ctxt: user auth request context"},{"line_number":4604,"context_line":"        :param instance: the instance being resized"},{"line_number":4605,"context_line":"        :param flavor: the flavor being resized to (unchanged for cold migrate)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_d244d576","line":4602,"in_reply_to":"7faddb67_1ce84614","updated":"2019-08-13 16:28:14.000000000","message":"Ack, can do that if/when I rebase or in a follow up.","commit_id":"61a147217c9453b2b1680c4ba91636b64ef2a6b7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164bf18754887fdacce442d52fdde5317c0547d","unresolved":false,"context_lines":[{"line_number":4599,"context_line":""},{"line_number":4600,"context_line":"        Performs a resize_claim for resources that are not claimed in placement"},{"line_number":4601,"context_line":"        like PCI devices and NUMA topology."},{"line_number":4602,"context_line":""},{"line_number":4603,"context_line":"        :param ctxt: user auth request context"},{"line_number":4604,"context_line":"        :param instance: the instance being resized"},{"line_number":4605,"context_line":"        :param flavor: the flavor being resized to (unchanged for cold migrate)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_10c91eab","line":4602,"in_reply_to":"7faddb67_d244d576","updated":"2019-08-27 18:55:28.000000000","message":"Done","commit_id":"61a147217c9453b2b1680c4ba91636b64ef2a6b7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b38a28ac5fe28614b9dd2f936906004d3590233","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"    @wrap_instance_fault"},{"line_number":4592,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":4593,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits):"},{"line_number":4594,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"        This runs on the destination host in a cross-cell resize operation"},{"line_number":4597,"context_line":"        before the resize is actually started."}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_3ecda45c","line":4594,"range":{"start_line":4594,"start_character":11,"end_line":4594,"end_character":76},"updated":"2019-08-19 14:37:19.000000000","message":"This makes it sound to me like it does some specific cross-cell resize sanity checks, but AFAICT, it does not. All this is doing is claiming (and the associated notifications) right?","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3449a8ec39fb59e226174bbfdb3fcf74e174d4f6","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"    @wrap_instance_fault"},{"line_number":4592,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":4593,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits):"},{"line_number":4594,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"        This runs on the destination host in a cross-cell resize operation"},{"line_number":4597,"context_line":"        before the resize is actually started."}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_75673db9","line":4594,"range":{"start_line":4594,"start_character":11,"end_line":4594,"end_character":76},"in_reply_to":"7faddb67_39385ed1","updated":"2019-08-26 15:17:39.000000000","message":"Oh and this also used to update volume attachments to get a new connection_info for this host and make a connection to the volume on the host but I had to remove that for complicated reasons (the attachment counting and tracking gets messed up). So anyway, point is this used to do more than the claim.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4097db67e3987fab85f58c522a73a9fe8a116ea","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"    @wrap_instance_fault"},{"line_number":4592,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":4593,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits):"},{"line_number":4594,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"        This runs on the destination host in a cross-cell resize operation"},{"line_number":4597,"context_line":"        before the resize is actually started."}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_39385ed1","line":4594,"range":{"start_line":4594,"start_character":11,"end_line":4594,"end_character":76},"in_reply_to":"7faddb67_3ecda45c","updated":"2019-08-19 14:56:55.000000000","message":"Yeah, this docstring is likely an artifact of when this method had cross_cell in the name. Can re-word this in a follow up, but also didn\u0027t really want this being confused with prep_resize for same-cell resize. Trying to tip-toe around these new methods as only being used for cross-cell resize/migrate but calling them snapshot-based is kind of difficult, since there are some assumptions built into these methods about how they are being used during a cross-cell resize flow.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164bf18754887fdacce442d52fdde5317c0547d","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"    @wrap_instance_fault"},{"line_number":4592,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":4593,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits):"},{"line_number":4594,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"        This runs on the destination host in a cross-cell resize operation"},{"line_number":4597,"context_line":"        before the resize is actually started."}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_f0bd6203","line":4594,"range":{"start_line":4594,"start_character":11,"end_line":4594,"end_character":76},"in_reply_to":"7faddb67_75673db9","updated":"2019-08-27 18:55:28.000000000","message":"Done","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b38a28ac5fe28614b9dd2f936906004d3590233","unresolved":false,"context_lines":[{"line_number":4637,"context_line":"                ctxt, instance, fields.NotificationPhase.END, flavor)"},{"line_number":4638,"context_line":""},{"line_number":4639,"context_line":"        # ResourceTracker.resize_claim() sets instance.migration_context."},{"line_number":4640,"context_line":"        return instance.migration_context"},{"line_number":4641,"context_line":""},{"line_number":4642,"context_line":"    @wrap_exception()"},{"line_number":4643,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_7e831ccc","line":4640,"range":{"start_line":4640,"start_character":8,"end_line":4640,"end_character":41},"updated":"2019-08-19 14:37:19.000000000","message":"This seems like an odd thing to return, as it\u0027s nearly an internal piece of the instance. I guess I need to go see what you do with this when you actually call this later in the series, but I would expect an instance.refresh() at the caller might be better.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4097db67e3987fab85f58c522a73a9fe8a116ea","unresolved":false,"context_lines":[{"line_number":4637,"context_line":"                ctxt, instance, fields.NotificationPhase.END, flavor)"},{"line_number":4638,"context_line":""},{"line_number":4639,"context_line":"        # ResourceTracker.resize_claim() sets instance.migration_context."},{"line_number":4640,"context_line":"        return instance.migration_context"},{"line_number":4641,"context_line":""},{"line_number":4642,"context_line":"    @wrap_exception()"},{"line_number":4643,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_993632b4","line":4640,"range":{"start_line":4640,"start_character":8,"end_line":4640,"end_character":41},"in_reply_to":"7faddb67_7e831ccc","updated":"2019-08-19 14:56:55.000000000","message":"I\u0027ll check your comments on the task code that uses this. In my mind the caller needs to know about the migration_context either way, so if the caller gets the value back directly or refreshes to get it, we\u0027re tightly coupled to behavior in this method, e.g. refreshing in conductor means we have a contract on this method storing the instance.migration_context anyway. I feel like the explicit return is more straight-forward - and faster than a fresh pull from the DB with all the already-joined fields.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ebbe13d8b88421ea343f4694ff2f3930ed33b904","unresolved":false,"context_lines":[{"line_number":4731,"context_line":"        self._send_prep_resize_notifications("},{"line_number":4732,"context_line":"            ctxt, instance, fields.NotificationPhase.START, flavor)"},{"line_number":4733,"context_line":"        allocations \u003d self.reportclient.get_allocs_for_consumer("},{"line_number":4734,"context_line":"            ctxt, instance.uuid)[\u0027allocations\u0027]"},{"line_number":4735,"context_line":"        try:"},{"line_number":4736,"context_line":"            # Claim resources on this target host using the new flavor which"},{"line_number":4737,"context_line":"            # will create the MigrationContext object. Note that in the future"}],"source_content_type":"text/x-python","patch_set":48,"id":"3fa7e38b_65d492be","line":4734,"range":{"start_line":4734,"start_character":32,"end_line":4734,"end_character":47},"updated":"2019-10-02 13:47:30.000000000","message":"This seems a little dangerous. get_allocs_for_consumer() returns the raw response from placement if things seemed to succeed. Ideally that will always be stable (or we get an exception) but if we were to change that format and iterate the global placement microversion we use, we could forget to change this and crash here.\n\nAlso note that this could raise ConsumerAllocationRetrievalFailed, which your docstring doesn\u0027t say is expected (nor probably should it). Maybe this should go one line down so we raise MigrationPreCheckError in case that happens?","commit_id":"4fe479d06c97dd87110455875c9d2e42060b56ee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"00a9aa42c88b73fbf791c5db5117db8a90a3043c","unresolved":false,"context_lines":[{"line_number":4731,"context_line":"        self._send_prep_resize_notifications("},{"line_number":4732,"context_line":"            ctxt, instance, fields.NotificationPhase.START, flavor)"},{"line_number":4733,"context_line":"        allocations \u003d self.reportclient.get_allocs_for_consumer("},{"line_number":4734,"context_line":"            ctxt, instance.uuid)[\u0027allocations\u0027]"},{"line_number":4735,"context_line":"        try:"},{"line_number":4736,"context_line":"            # Claim resources on this target host using the new flavor which"},{"line_number":4737,"context_line":"            # will create the MigrationContext object. Note that in the future"}],"source_content_type":"text/x-python","patch_set":48,"id":"3fa7e38b_c870f3df","line":4734,"range":{"start_line":4734,"start_character":32,"end_line":4734,"end_character":47},"in_reply_to":"3fa7e38b_65d492be","updated":"2019-10-02 22:27:26.000000000","message":"I was just following what _prep_resize does but I guess that uses get_allocations_for_consumer and I used get_allocs_for_consumer since there is a todo on get_allocations_for_consumer not to use it. But get_allocations_for_consumer calls get_allocs_for_consumer and just returns the [\u0027allocations\u0027] entry. But I can move this within the try/except to make it result in a migration error if it blows up.","commit_id":"4fe479d06c97dd87110455875c9d2e42060b56ee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ece738a178081c33acf6a960b3c891df2d8bb28","unresolved":false,"context_lines":[{"line_number":4731,"context_line":"        self._send_prep_resize_notifications("},{"line_number":4732,"context_line":"            ctxt, instance, fields.NotificationPhase.START, flavor)"},{"line_number":4733,"context_line":"        allocations \u003d self.reportclient.get_allocs_for_consumer("},{"line_number":4734,"context_line":"            ctxt, instance.uuid)[\u0027allocations\u0027]"},{"line_number":4735,"context_line":"        try:"},{"line_number":4736,"context_line":"            # Claim resources on this target host using the new flavor which"},{"line_number":4737,"context_line":"            # will create the MigrationContext object. Note that in the future"}],"source_content_type":"text/x-python","patch_set":48,"id":"3fa7e38b_9dec69f4","line":4734,"range":{"start_line":4734,"start_character":32,"end_line":4734,"end_character":47},"in_reply_to":"3fa7e38b_c870f3df","updated":"2019-10-03 20:11:59.000000000","message":"Done and added a test to make sure we get the allocations within the try/except block.","commit_id":"4fe479d06c97dd87110455875c9d2e42060b56ee"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"210b396d78920848c6fa269b0cee6e00f79d50bd","unresolved":false,"context_lines":[{"line_number":4739,"context_line":"            # will create the MigrationContext object. Note that in the future"},{"line_number":4740,"context_line":"            # if we want to do other validation here we should do it within"},{"line_number":4741,"context_line":"            # the MoveClaim context so we can drop the claim if anything fails."},{"line_number":4742,"context_line":"            self.rt.resize_claim("},{"line_number":4743,"context_line":"                ctxt, instance, flavor, nodename, migration, allocations,"},{"line_number":4744,"context_line":"                image_meta\u003dinstance.image_meta, limits\u003dlimits)"},{"line_number":4745,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3fa7e38b_eb40fe09","line":4742,"updated":"2019-10-08 13:43:20.000000000","message":"Looked it a bit deeper into what would it take to support qos port during cross cell resize.\n\n* Populating of the request_spec.requested_resource is done before the MigrationTask is forking out to the CrossCellMigrationTask [2]. Nothing to do there.\n\n* Calculating the request group rp mapping is done also in the MigrationTask._schedule() call before forking out to the CrossCellMigrationTask. Nothing to do there.\n\n* At finish resize we need to update the neutron port binding with the allocation key based on the mapping. You have a TODO in [3]. But I added some comments there as you need to extend the RPC call with the RequestSpec to be able to implement the TODO.\n\n* InstancePciRequests needs to be updated here, before the resize_claim() call, to driver the pci_claim during resize_claim to allocate VFs from the same PF as the bandwidth was allocated from. Same as what we do in prep_resize [1]. To do that you need to have access to the RequestSpec so prep_snapshot_based_resize_at_dest needs to be extended.\n\n[1] https://github.com/openstack/nova/blob/7058fac53b8e6f5ca31baa4afa1b8994a487914c/nova/compute/manager.py#L4618\n[2] https://review.opendev.org/#/c/635668/45/nova/conductor/tasks/migrate.py@341\n[3] https://review.opendev.org/#/c/635080/43/nova/compute/manager.py@5375","commit_id":"9bd0f5f6274cdb4b683d4e05d5c7288e46fbc269"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b276bdfb0ec862f59e57238d4598f69d9094fa50","unresolved":false,"context_lines":[{"line_number":4739,"context_line":"            # will create the MigrationContext object. Note that in the future"},{"line_number":4740,"context_line":"            # if we want to do other validation here we should do it within"},{"line_number":4741,"context_line":"            # the MoveClaim context so we can drop the claim if anything fails."},{"line_number":4742,"context_line":"            self.rt.resize_claim("},{"line_number":4743,"context_line":"                ctxt, instance, flavor, nodename, migration, allocations,"},{"line_number":4744,"context_line":"                image_meta\u003dinstance.image_meta, limits\u003dlimits)"},{"line_number":4745,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3fa7e38b_41d6d129","line":4742,"in_reply_to":"3fa7e38b_eb40fe09","updated":"2019-10-08 14:25:15.000000000","message":"Done - added the request_spec parameter and a TODO.","commit_id":"9bd0f5f6274cdb4b683d4e05d5c7288e46fbc269"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"52392dc1f2cabf3aed6253897c418e850a597115","unresolved":false,"context_lines":[{"line_number":521,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":522,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    target \u003d messaging.Target(version\u003d\u00275.4\u0027)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def __init__(self, compute_driver\u003dNone, *args, **kwargs):"},{"line_number":527,"context_line":"        \"\"\"Load configuration options and connect to the hypervisor.\"\"\""}],"source_content_type":"text/x-python","patch_set":50,"id":"3fa7e38b_f6a2c8fb","line":524,"range":{"start_line":524,"start_character":39,"end_line":524,"end_character":42},"updated":"2019-10-14 14:06:28.000000000","message":"Unfortunately (for you) I won this one.","commit_id":"2b9e4cdaacf41542bde5ce94954456ac545ab6ad"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b38a28ac5fe28614b9dd2f936906004d3590233","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        # TODO(jaypipes): Move claimed_numa_topology out of the Claim\u0027s"},{"line_number":312,"context_line":"        # constructor flow so the Claim constructor only tests whether"},{"line_number":313,"context_line":"        # resources can be claimed, not consume the resources directly."},{"line_number":314,"context_line":"        # TODO(mriedem): If move_type is \u0027resize\u0027 should we set old_flavor"},{"line_number":315,"context_line":"        # and new_flavor on the MigrationContext so that we can avoid the"},{"line_number":316,"context_line":"        # crufty old/new_flavor hacks in _prep_resize and _finish_resize"},{"line_number":317,"context_line":"        # because then instance.apply_migration_context could just set those"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_1ea2289b","line":314,"range":{"start_line":314,"start_character":50,"end_line":314,"end_character":59},"updated":"2019-08-19 14:37:19.000000000","message":"This makes it sound like you\u0027re asking a question, yet this (long) sentence isn\u0027t a question. Are you saying we should do this?","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4097db67e3987fab85f58c522a73a9fe8a116ea","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        # TODO(jaypipes): Move claimed_numa_topology out of the Claim\u0027s"},{"line_number":312,"context_line":"        # constructor flow so the Claim constructor only tests whether"},{"line_number":313,"context_line":"        # resources can be claimed, not consume the resources directly."},{"line_number":314,"context_line":"        # TODO(mriedem): If move_type is \u0027resize\u0027 should we set old_flavor"},{"line_number":315,"context_line":"        # and new_flavor on the MigrationContext so that we can avoid the"},{"line_number":316,"context_line":"        # crufty old/new_flavor hacks in _prep_resize and _finish_resize"},{"line_number":317,"context_line":"        # because then instance.apply_migration_context could just set those"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_f9fac6b7","line":314,"range":{"start_line":314,"start_character":50,"end_line":314,"end_character":59},"in_reply_to":"7faddb67_1ea2289b","updated":"2019-08-19 14:56:55.000000000","message":"Kind of a note-to-self / question for other reviewers while I was writing all of this, since I went back and forth a few times on storing the old/new flavor information in the migration context but then eventually just dropped that because it was more trouble than it was worth to just copy the way we already stash the old/new flavor for same-cell resize. I still think long-term it\u0027d be cleaner to store that information on the MigrationContext like we do for PCI, but it\u0027s likely not something anyone is going to do anytime soon, so I could/should just drop this comment.","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164bf18754887fdacce442d52fdde5317c0547d","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        # TODO(jaypipes): Move claimed_numa_topology out of the Claim\u0027s"},{"line_number":312,"context_line":"        # constructor flow so the Claim constructor only tests whether"},{"line_number":313,"context_line":"        # resources can be claimed, not consume the resources directly."},{"line_number":314,"context_line":"        # TODO(mriedem): If move_type is \u0027resize\u0027 should we set old_flavor"},{"line_number":315,"context_line":"        # and new_flavor on the MigrationContext so that we can avoid the"},{"line_number":316,"context_line":"        # crufty old/new_flavor hacks in _prep_resize and _finish_resize"},{"line_number":317,"context_line":"        # because then instance.apply_migration_context could just set those"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_90518edc","line":314,"range":{"start_line":314,"start_character":50,"end_line":314,"end_character":59},"in_reply_to":"7faddb67_f9fac6b7","updated":"2019-08-27 18:55:28.000000000","message":"Done","commit_id":"b46bafc4169180f1603dd99e747dbf1f875a5ee9"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac12677a58bfb1e09a77338c5e6bdc63c29f0807","unresolved":false,"context_lines":[{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":762,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits,"},{"line_number":763,"context_line":"            bindings_by_port_id, bdms, destination):"},{"line_number":764,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"        This runs on the destination host in a cross-cell resize operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0dac7232","line":763,"range":{"start_line":763,"start_character":33,"end_line":763,"end_character":37},"updated":"2019-01-26 00:26:36.000000000","message":"Maybe rename this to volume_bdms?","commit_id":"bae399a82f8e6f37ae8e32d7aef85c9b66bed388"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7517e26080b5157db636859e015e1eddd9cb69c3","unresolved":false,"context_lines":[{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def prep_snapshot_based_resize_at_dest("},{"line_number":762,"context_line":"            self, ctxt, instance, flavor, nodename, migration, limits,"},{"line_number":763,"context_line":"            bindings_by_port_id, bdms, destination):"},{"line_number":764,"context_line":"        \"\"\"Performs pre-cross-cell resize checks on the targeted destination"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"        This runs on the destination host in a cross-cell resize operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_30eb98dc","line":763,"range":{"start_line":763,"start_character":33,"end_line":763,"end_character":37},"in_reply_to":"9fdfeff1_0dac7232","updated":"2019-01-29 23:52:09.000000000","message":"Done","commit_id":"bae399a82f8e6f37ae8e32d7aef85c9b66bed388"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0c899f0814a967a5464ccf48fcdfd60e7d33d840","unresolved":false,"context_lines":[{"line_number":801,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":802,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":803,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":804,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":805,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":806,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":807,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_d43e4ed9","line":804,"range":{"start_line":804,"start_character":44,"end_line":804,"end_character":60},"updated":"2019-02-05 22:31:59.000000000","message":"Should update the config option help for this:\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.long_rpc_timeout","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d487ae116bac6cc61b812ac5c6abbdab3f609f79","unresolved":false,"context_lines":[{"line_number":801,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":802,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":803,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":804,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":805,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":806,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":807,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_7a20a94a","line":804,"range":{"start_line":804,"start_character":44,"end_line":804,"end_character":60},"in_reply_to":"9fdfeff1_d43e4ed9","updated":"2019-02-06 00:07:37.000000000","message":"Done","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"af46b1d76dca2e02b5f234976bcc6fdfe9dcd27d","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        * 5.2 - Add request_spec parameter for the following: resize_instance,"},{"line_number":368,"context_line":"                finish_resize, revert_resize, finish_revert_resize,"},{"line_number":369,"context_line":"                unshelve_instance"},{"line_number":370,"context_line":"        * 5.3 - Add prep_snapshot_based_resize_at_dest()"},{"line_number":371,"context_line":"    \u0027\u0027\u0027"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    VERSION_ALIASES \u003d {"}],"source_content_type":"text/x-python","patch_set":47,"id":"5faad753_e271c845","line":370,"updated":"2019-09-13 15:39:07.000000000","message":"I\u0027m going to have to rebase this again:\n\nhttps://review.opendev.org/#/c/634606/","commit_id":"4d36298d66c31ca5bfb5573d0b7fa1fe5d626f2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"52392dc1f2cabf3aed6253897c418e850a597115","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        if not client.can_send_version(version):"},{"line_number":885,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":886,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":887,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":888,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":889,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":890,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":891,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":50,"id":"3fa7e38b_d6c22c85","line":888,"range":{"start_line":887,"start_character":31,"end_line":888,"end_character":60},"updated":"2019-10-14 14:06:28.000000000","message":"Why are we making this a long-call? Because we could take a while to call placement for the allocs? I mean, we could make all our calls long-calls I think, I\u0027m just curious what you\u0027re specifically worried about here.","commit_id":"2b9e4cdaacf41542bde5ce94954456ac545ab6ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc70aa347ed40c04786a2bbb919713fe68d49db6","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        if not client.can_send_version(version):"},{"line_number":885,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":886,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":887,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":888,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":889,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":890,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":891,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":50,"id":"3fa7e38b_d6e30c04","line":888,"range":{"start_line":887,"start_character":31,"end_line":888,"end_character":60},"in_reply_to":"3fa7e38b_9614b4ea","updated":"2019-10-14 14:11:38.000000000","message":"Oh I guess you\u0027re not asking why this is a call, just why is it a long call? It doesn\u0027t really have to be I guess, I wouldn\u0027t expect getting allocations or the resize claim to take longer than 60 seconds, so IDK, I guess it\u0027s just the pattern I set into with this series.","commit_id":"2b9e4cdaacf41542bde5ce94954456ac545ab6ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0003a4f53bba8311d7505006dad2b1972a90c156","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        if not client.can_send_version(version):"},{"line_number":885,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":886,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":887,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":888,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":889,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":890,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":891,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":50,"id":"3fa7e38b_9614b4ea","line":888,"range":{"start_line":887,"start_character":31,"end_line":888,"end_character":60},"in_reply_to":"3fa7e38b_d6c22c85","updated":"2019-10-14 14:09:40.000000000","message":"Per the spec, everything is a blocking call in the cross-cell resize flow once we get to the new task(s) in conductor that drive the operation. The computes aren\u0027t casting back and forth like same-cell resize and the computes aren\u0027t casting back to the superconductor when they are done.","commit_id":"2b9e4cdaacf41542bde5ce94954456ac545ab6ad"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"636cf23f3efde08ea127eae22d38e6418515938a","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        if not client.can_send_version(version):"},{"line_number":885,"context_line":"            raise exception.MigrationPreCheckError(reason\u003d_(\u0027Compute too old\u0027))"},{"line_number":886,"context_line":"        cctxt \u003d client.prepare(server\u003ddestination, version\u003dversion,"},{"line_number":887,"context_line":"                               call_monitor_timeout\u003dCONF.rpc_response_timeout,"},{"line_number":888,"context_line":"                               timeout\u003dCONF.long_rpc_timeout)"},{"line_number":889,"context_line":"        return cctxt.call(ctxt, \u0027prep_snapshot_based_resize_at_dest\u0027,"},{"line_number":890,"context_line":"                          instance\u003dinstance, flavor\u003dflavor, nodename\u003dnodename,"},{"line_number":891,"context_line":"                          migration\u003dmigration, limits\u003dlimits,"}],"source_content_type":"text/x-python","patch_set":50,"id":"3fa7e38b_f79f1f4d","line":888,"range":{"start_line":887,"start_character":31,"end_line":888,"end_character":60},"in_reply_to":"3fa7e38b_d6e30c04","updated":"2019-10-14 18:09:07.000000000","message":"Right.","commit_id":"2b9e4cdaacf41542bde5ce94954456ac545ab6ad"}],"nova/objects/service.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8cc61b77813c7f5e7864b4339e57249b8ddef695","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":152,"context_line":"    # Version 37: prep_resize takes a RequestSpec object"},{"line_number":153,"context_line":"    {\u0027compute_rpc\u0027: \u00275.1\u0027},"},{"line_number":154,"context_line":"    # Version 38: Compute RPC version 5.1; +prep_snapshot_based_resize_at_dest"},{"line_number":155,"context_line":"    {\u0027compute_rpc\u0027: \u00275.2\u0027},"},{"line_number":156,"context_line":")"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_b4814ac6","line":154,"range":{"start_line":154,"start_character":38,"end_line":154,"end_character":41},"updated":"2019-02-05 22:17:09.000000000","message":"5.2","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d487ae116bac6cc61b812ac5c6abbdab3f609f79","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":152,"context_line":"    # Version 37: prep_resize takes a RequestSpec object"},{"line_number":153,"context_line":"    {\u0027compute_rpc\u0027: \u00275.1\u0027},"},{"line_number":154,"context_line":"    # Version 38: Compute RPC version 5.1; +prep_snapshot_based_resize_at_dest"},{"line_number":155,"context_line":"    {\u0027compute_rpc\u0027: \u00275.2\u0027},"},{"line_number":156,"context_line":")"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_badb714d","line":154,"range":{"start_line":154,"start_character":38,"end_line":154,"end_character":41},"in_reply_to":"9fdfeff1_b4814ac6","updated":"2019-02-06 00:07:37.000000000","message":"Done","commit_id":"29d8b9b47dca311365dbdd4444dc306ee4781d9c"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"30dc0f63987189ddb605c6e83d3c770d51e71e4e","unresolved":false,"context_lines":[{"line_number":9179,"context_line":"        # Setup mocks."},{"line_number":9180,"context_line":"        flavor \u003d self.instance.flavor"},{"line_number":9181,"context_line":"        limits \u003d objects.SchedulerLimits()"},{"line_number":9182,"context_line":"        ex1 \u003d exception.ComputeResourcesUnavailable(reason\u003d\u0027numa\u0027)"},{"line_number":9183,"context_line":"        with test.nested("},{"line_number":9184,"context_line":"            mock.patch.object(self.compute, \u0027_send_prep_resize_notifications\u0027),"},{"line_number":9185,"context_line":"            mock.patch.object(self.compute.rt, \u0027resize_claim\u0027, side_effect\u003dex1)"}],"source_content_type":"text/x-python","patch_set":44,"id":"7faddb67_3c918247","line":9182,"range":{"start_line":9182,"start_character":60,"end_line":9182,"end_character":64},"updated":"2019-08-13 15:09:33.000000000","message":"so true.","commit_id":"61a147217c9453b2b1680c4ba91636b64ef2a6b7"}]}
