)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"resize and cold migration can be supported with using remote volumes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie8145705690789f940e1295770d554954336b13f"},{"line_number":15,"context_line":"Implements: blueprint baremetal-migration-evacuation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3f4b6375_85a227fb","line":15,"range":{"start_line":15,"start_character":42,"end_line":15,"end_character":52},"updated":"2017-10-25 14:18:01.000000000","message":"I\u0027m not sure why \"evacuation\" is part of the blueprint name - we\u0027re not talking about changes to the evacuate API for ironic here.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"resize and cold migration can be supported with using remote volumes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie8145705690789f940e1295770d554954336b13f"},{"line_number":15,"context_line":"Implements: blueprint baremetal-migration-evacuation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3f4b6375_db43293e","line":15,"range":{"start_line":15,"start_character":42,"end_line":15,"end_character":52},"in_reply_to":"3f4b6375_85a227fb","updated":"2017-10-27 08:45:56.000000000","message":"Initially, this blueprint mentioned 2 cases:\n  - migration for instance failure\n  - evacuation for compute host failure\nCurrently, this is focusing on migration.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"}],"specs/queens/approved/baremetal-migration-evacuation.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ea79d41050a05efb0df804f579c0accd27ecaa91","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    This API will power off the source node and detach VIFs and volumes from"},{"line_number":48,"context_line":"    the source node. This API will raise an exception when the instance is not"},{"line_number":49,"context_line":"    booted from remote volume."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* finish_migration()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_c58ba0bd","line":49,"updated":"2017-09-07 15:09:20.000000000","message":"We need a way to ensure that local disks were not used for anything valuable. I\u0027m not sure it\u0027s possible to achieve though.. Probably a big red warning in the docs will be enough.\n\nAnother idea we\u0027ve just discussed the Julia: extend ironic to support booting IPA on two nodes, and transfer all local data between them. Not possible, if the source node is broken, of course. This is for the future, I don\u0027t insist on doing that.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca8403ad0b24f3d5fb0a1550cd81c06d607cd35c","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    This API will power off the source node and detach VIFs and volumes from"},{"line_number":48,"context_line":"    the source node. This API will raise an exception when the instance is not"},{"line_number":49,"context_line":"    booted from remote volume."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* finish_migration()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_43a90a22","line":49,"in_reply_to":"7f287b81_c58ba0bd","updated":"2017-09-14 14:08:05.000000000","message":"Thank you for the suggestion.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e817ee7f0f8714e11b0632ab32c54914cd3ea956","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    undeployed by ironic before this API is called in a common process among"},{"line_number":69,"context_line":"    hypervisors. This API will reboot the source node after attaching the VIFs"},{"line_number":70,"context_line":"    and volumes."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Alternatives"},{"line_number":73,"context_line":"------------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_f662ff3d","line":71,"updated":"2017-09-14 05:11:14.000000000","message":"I might have missed it -- does this require any changes to ironic, or is ironic Pike (or whatever baremetal microversion is being used by this ironic driver) sufficient for this feature?","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca8403ad0b24f3d5fb0a1550cd81c06d607cd35c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    undeployed by ironic before this API is called in a common process among"},{"line_number":69,"context_line":"    hypervisors. This API will reboot the source node after attaching the VIFs"},{"line_number":70,"context_line":"    and volumes."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Alternatives"},{"line_number":73,"context_line":"------------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_a65c3ced","line":71,"in_reply_to":"5f2577a7_f662ff3d","updated":"2017-09-14 14:08:05.000000000","message":"This can be done with current ironic.\n\nI slightly wonder if a new state would be necessary in ironic for the RESIZED instance. While the instance is RESIZED (which needs confirmation or revert), the source node stays in ACTIVE state with the instance UUID unset.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e817ee7f0f8714e11b0632ab32c54914cd3ea956","unresolved":false,"context_lines":[{"line_number":81,"context_line":"a physical server related to the node object to another server by rewriting"},{"line_number":82,"context_line":"information such as IP address of BMC and setting resources like ports and"},{"line_number":83,"context_line":"volume connectors of the new physical server to the existing node resource."},{"line_number":84,"context_line":"This allows the nova instance to keep the same UUID of the ironic node. This"},{"line_number":85,"context_line":"option is more complicated."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"There are a few options in nova API for mapping this bare metal switch over."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_b6e7d7e4","line":84,"updated":"2017-09-14 05:11:14.000000000","message":"I\u0027m not sure I understand. Ironic doesn\u0027t allow two baremetal nodes to have the same UUID.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca8403ad0b24f3d5fb0a1550cd81c06d607cd35c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"a physical server related to the node object to another server by rewriting"},{"line_number":82,"context_line":"information such as IP address of BMC and setting resources like ports and"},{"line_number":83,"context_line":"volume connectors of the new physical server to the existing node resource."},{"line_number":84,"context_line":"This allows the nova instance to keep the same UUID of the ironic node. This"},{"line_number":85,"context_line":"option is more complicated."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"There are a few options in nova API for mapping this bare metal switch over."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_e3c476f7","line":84,"in_reply_to":"5f2577a7_b6e7d7e4","updated":"2017-09-14 14:08:05.000000000","message":"It is necessary to delete the old node or to change the UUID of the old node for the switch without affecting nova. This idea seems weird. So, I proposed the change to nova.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e817ee7f0f8714e11b0632ab32c54914cd3ea956","unresolved":false,"context_lines":[{"line_number":85,"context_line":"option is more complicated."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"There are a few options in nova API for mapping this bare metal switch over."},{"line_number":88,"context_line":"Rebuid is already implemented in ironic virt driver for re-deploying an"},{"line_number":89,"context_line":"instance with the same image like VMs. Evacuation works only when a compute"},{"line_number":90,"context_line":"node goes down. For ironic, instances don\u0027t stop if a compute node stops."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_36f40786","line":88,"updated":"2017-09-14 05:11:14.000000000","message":"nit s/Rebuid/Rebuild/","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e817ee7f0f8714e11b0632ab32c54914cd3ea956","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Other end user impact"},{"line_number":113,"context_line":"---------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"None"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Performance Impact"},{"line_number":118,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_3649a7cf","line":115,"updated":"2017-09-14 05:11:14.000000000","message":"Isn\u0027t it possible that the new instance will be missing local data from orig bare metal node?","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca8403ad0b24f3d5fb0a1550cd81c06d607cd35c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Other end user impact"},{"line_number":113,"context_line":"---------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"None"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Performance Impact"},{"line_number":118,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_636be61d","line":115,"in_reply_to":"5f2577a7_3649a7cf","updated":"2017-09-14 14:08:05.000000000","message":"You\u0027re right. The local data will be missing.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ea79d41050a05efb0df804f579c0accd27ecaa91","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":158,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":159,"context_line":"as bare metal servers."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Documentation Impact"},{"line_number":162,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_a5be5462","line":159,"updated":"2017-09-07 15:09:20.000000000","message":"are we going to run another job on nova? I guess we should run a non-voting BFV job anyway..","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca8403ad0b24f3d5fb0a1550cd81c06d607cd35c","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":158,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":159,"context_line":"as bare metal servers."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Documentation Impact"},{"line_number":162,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f2577a7_26fdecb0","line":159,"in_reply_to":"7f287b81_a5be5462","updated":"2017-09-14 14:08:05.000000000","message":"I\u0027m thinking of adding a test to BFV job.","commit_id":"1bf31255f159e554e2f91c8f25bd3a857d6c59f3"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"aded9bfbdcbb0bf8edbca25c84c19dec7f5e48ae","unresolved":false,"context_lines":[{"line_number":89,"context_line":"driver. When there are multiple compute hosts, the resize also works. The"},{"line_number":90,"context_line":"``host`` field of the instance is updated to the destination host if a node"},{"line_number":91,"context_line":"managed by another compute host is chosen as the destination by the scheduler."},{"line_number":92,"context_line":"Then, the instance gets to belong to the destination host."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Alternatives"},{"line_number":95,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_69d0e154","line":92,"updated":"2017-10-03 13:31:42.000000000","message":"It would be really good to understand what the failure mode looks like when someone calls this against an ironic provided compute that doesn\u0027t meet the criteria. Can we fail early in the API? Is it a silent fail? Is something going to go into error state?","commit_id":"3d226d19114d761847c0228cffe0b1ffc066ad90"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"When an API for resize or cold migration is called, most of the process"},{"line_number":52,"context_line":"doesn\u0027t depend on a hypervisor. For instance, a new ironic node is chosen by"},{"line_number":53,"context_line":"the scheduler in the same process as VM migration.A few driver APIs need to be"},{"line_number":54,"context_line":"implemented in ironic virt driver as follows."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* migrate_disk_and_power_off()"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_ff5168da","line":53,"updated":"2017-10-16 21:22:16.000000000","message":"nit s/migration.A/migration. A/","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"When an API for resize or cold migration is called, most of the process"},{"line_number":52,"context_line":"doesn\u0027t depend on a hypervisor. For instance, a new ironic node is chosen by"},{"line_number":53,"context_line":"the scheduler in the same process as VM migration.A few driver APIs need to be"},{"line_number":54,"context_line":"implemented in ironic virt driver as follows."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* migrate_disk_and_power_off()"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_5a53d36b","line":53,"in_reply_to":"5f4e5783_ff5168da","updated":"2017-10-18 02:42:56.000000000","message":"Done","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  This API stops the source node. It will power off the source node and detach"},{"line_number":59,"context_line":"  VIFs from the source node. Volumes will be detach out of this method after"},{"line_number":60,"context_line":"  this method is called. The source node will not be undeployed at this method"},{"line_number":61,"context_line":"  since the migration can be rolled back. When the migration is confirmed"},{"line_number":62,"context_line":"  later, the source node will be undeployed completely."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_3fd14024","line":60,"updated":"2017-10-16 21:22:16.000000000","message":"what do you mean by \u0027after this method is called\u0027? Is it detached when finish_migration() is called?\n\nI\u0027m guessing that when you ask ironic to power off the active node, that ironic will also detach the volumes.","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  This API stops the source node. It will power off the source node and detach"},{"line_number":59,"context_line":"  VIFs from the source node. Volumes will be detach out of this method after"},{"line_number":60,"context_line":"  this method is called. The source node will not be undeployed at this method"},{"line_number":61,"context_line":"  since the migration can be rolled back. When the migration is confirmed"},{"line_number":62,"context_line":"  later, the source node will be undeployed completely."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_7ace8f63","line":60,"in_reply_to":"5f4e5783_3fd14024","updated":"2017-10-18 02:42:56.000000000","message":"Nova calls cinder API to detach volumes[1] after migrate_disk_and_power_off(). As you told, volumes are detached when ironic powers off the node.\n\n[1] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L4105","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  VIFs to deployed nodes are also supported since Pike in ironic."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":69,"context_line":"  be took over to the destination node."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":72,"context_line":"  remote volume by checking if the instance has a block device mapping whose"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_3f238058","line":69,"updated":"2017-10-16 21:22:16.000000000","message":"maybe s/took over to the/used as the instance UUID for the/\n\nalthough I am guessing you mean s/took over to/taken over by/","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  VIFs to deployed nodes are also supported since Pike in ironic."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":69,"context_line":"  be took over to the destination node."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":72,"context_line":"  remote volume by checking if the instance has a block device mapping whose"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_bacf6727","line":69,"in_reply_to":"5f4e5783_3f238058","updated":"2017-10-18 02:42:56.000000000","message":"Done","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  This API will launch the destination node. It will deploy the destination"},{"line_number":80,"context_line":"  node to boot from a volume used by the source node. This is done by attaching"},{"line_number":81,"context_line":"  VIFs and volumes to the new node and ask ironic to deploy the new server with"},{"line_number":82,"context_line":"  he remote volume boot."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"After resize or cold migration, the VM state gets RESIZED. To confirm or revert"},{"line_number":85,"context_line":"the migration, the following driver APIs will be implemented in ironic virt"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_1fe56409","line":82,"updated":"2017-10-16 21:22:16.000000000","message":"nit s/he/the/","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  This API will launch the destination node. It will deploy the destination"},{"line_number":80,"context_line":"  node to boot from a volume used by the source node. This is done by attaching"},{"line_number":81,"context_line":"  VIFs and volumes to the new node and ask ironic to deploy the new server with"},{"line_number":82,"context_line":"  he remote volume boot."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"After resize or cold migration, the VM state gets RESIZED. To confirm or revert"},{"line_number":85,"context_line":"the migration, the following driver APIs will be implemented in ironic virt"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_9ad26bd0","line":82,"in_reply_to":"5f4e5783_1fe56409","updated":"2017-10-18 02:42:56.000000000","message":"Done","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  This API is called to resume the source node for reverting migration. The"},{"line_number":96,"context_line":"  destination node is undeployed by ironic before this API is called in a"},{"line_number":97,"context_line":"  common process among hypervisors. This API will reboot the source node after"},{"line_number":98,"context_line":"  attaching the VIFs and volumes to the source node."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_bfde500e","line":97,"updated":"2017-10-16 21:22:16.000000000","message":"I am not sure I understand this first sentence. What is this \u0027common process\u0027? Is it a method in nova?","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  This API is called to resume the source node for reverting migration. The"},{"line_number":96,"context_line":"  destination node is undeployed by ironic before this API is called in a"},{"line_number":97,"context_line":"  common process among hypervisors. This API will reboot the source node after"},{"line_number":98,"context_line":"  attaching the VIFs and volumes to the source node."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_5b0bc728","line":97,"in_reply_to":"5f4e5783_bfde500e","updated":"2017-10-18 02:42:56.000000000","message":"Yes, there is already code to call destroy method to undeploy the destination. I\u0027d like to say no change is necessary for undeploying the destination. I updated the sentence.","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":108,"context_line":"driver."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"When there are multiple compute hosts, the resize also works. It"},{"line_number":111,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes.The"},{"line_number":112,"context_line":"``host`` field of the instance is just updated to the destination host if a"},{"line_number":113,"context_line":"node managed by another compute host is chosen as the destination by the"},{"line_number":114,"context_line":"scheduler. Then, the instance gets to belong to the destination host. "}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_9fef141d","line":111,"updated":"2017-10-16 21:22:16.000000000","message":"nit s/nodes.The/nodes. The/","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"driver."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"When there are multiple compute hosts, the resize also works. It"},{"line_number":111,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes.The"},{"line_number":112,"context_line":"``host`` field of the instance is just updated to the destination host if a"},{"line_number":113,"context_line":"node managed by another compute host is chosen as the destination by the"},{"line_number":114,"context_line":"scheduler. Then, the instance gets to belong to the destination host. "}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_1ade7bd9","line":111,"in_reply_to":"5f4e5783_9fef141d","updated":"2017-10-18 02:42:56.000000000","message":"Done","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"73baf1de2383b1c4272399c7b742e56fb8888e09","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":203,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":204,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":205,"context_line":"the CI."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_ffb5e832","line":204,"updated":"2017-10-16 21:22:16.000000000","message":"What do you mean \u0027the ironic BFV job\u0027. In Nova\u0027s CI? I thought we only had one ironic test there, \u0027tempest-dsvm-ironic-ipa-wholedisk-bios-agent_ipmitool-tinyipa... Does that test include BFV too? OR are you proposing a new BFV job in nova?","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"fd13327a123c51edc6e75b31a8a7f46aa2549194","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":203,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":204,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":205,"context_line":"the CI."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_aeafdf92","line":204,"in_reply_to":"3f4b6375_c4069321","updated":"2017-10-19 06:09:38.000000000","message":"yes, with cinder + nova.","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"706cf8c694aa49565621939a747569d8641771c8","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":203,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":204,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":205,"context_line":"the CI."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_c4069321","line":204,"in_reply_to":"5f4e5783_5a3e33b8","updated":"2017-10-18 13:23:13.000000000","message":"ah, ironic works with cinder + nova, right? :)","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"70be8a59db7d54e1361ef223ab9ecf10258065a7","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":203,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":204,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":205,"context_line":"the CI."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_5a3e33b8","line":204,"in_reply_to":"5f4e5783_ffb5e832","updated":"2017-10-18 02:42:56.000000000","message":"I\u0027m thinking of a similar work to what we did in development of ironic BFV support to show the feature worked correctly. The test would be added to the tempest-ironic-bfv job in ironic where ironic works with cinder.","commit_id":"d8fe372d824a04a69216795f29ba0f1191f38efc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"43565615b6200b888381c419e2905f796e6aa9e5","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Ironic: Resize and cold migration support"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/baremetal-migration-evacuation"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since Pike release, ironic supports booting a server from a remote volume. It"},{"line_number":14,"context_line":"can separate servers and volumes. It enables to switch servers with keeping the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_3421f1fc","line":11,"range":{"start_line":11,"start_character":64,"end_line":11,"end_character":74},"updated":"2018-06-07 21:42:10.000000000","message":"Nit: This do not seem to be about evacuate, we should rename the BP and the path of the doc really. But its deadline day, so I am OK with that in a follow up change.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"When a bare metal instance is broken, a user cannot access the data in the"},{"line_number":22,"context_line":"instance till the physical server is recovered. Also, a bare metal instance"},{"line_number":23,"context_line":"cannot be scaled up with keeping the data stored. Now that ironic supports"},{"line_number":24,"context_line":"booting an instance from a remote volume since Pike, by booting another server"},{"line_number":25,"context_line":"from the same volume, we can provide resizing and quick switch over for bare"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_c585bf5b","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":47},"updated":"2017-10-25 14:18:01.000000000","message":"Couldn\u0027t an admin use the evacuate API for this scenario? However, I\u0027m not really sure how well evacuate actually works today with ironic, especially when it comes to resource tracking.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"When a bare metal instance is broken, a user cannot access the data in the"},{"line_number":22,"context_line":"instance till the physical server is recovered. Also, a bare metal instance"},{"line_number":23,"context_line":"cannot be scaled up with keeping the data stored. Now that ironic supports"},{"line_number":24,"context_line":"booting an instance from a remote volume since Pike, by booting another server"},{"line_number":25,"context_line":"from the same volume, we can provide resizing and quick switch over for bare"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_bb862d65","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":47},"in_reply_to":"3f4b6375_c585bf5b","updated":"2017-10-27 08:45:56.000000000","message":"Currently,evacuate doesn\u0027t work because evacuate works only when a compute service is down. When a bare metal instance goes down, the compute service is alive.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* An operator can let an instance work on another bare metal node by resizing"},{"line_number":33,"context_line":"  an instance (changing a flavor) for scaling-up or scaling-down."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* An operator can switch over an bare metal node to another node for a quick"},{"line_number":36,"context_line":"  recovery when a failure is detected. This switch over can be automated by"},{"line_number":37,"context_line":"  triggering this API from monitor tools."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_2596d394","line":37,"range":{"start_line":35,"start_character":2,"end_line":37,"end_character":41},"updated":"2017-10-25 14:18:01.000000000","message":"Again, this sounds like evacuate, not cold migration/resize.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* migrate_disk_and_power_off()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  This API stops the source node. It will power off the source node and detach"},{"line_number":59,"context_line":"  VIFs from the source node. Volumes will be detached by ironic when the node"},{"line_number":60,"context_line":"  is powered off, though nova calls cinder API to detach volumes later. The"},{"line_number":61,"context_line":"  source node will not be undeployed at this method since the migration can be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_c5613fab","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":33},"updated":"2017-10-25 14:18:01.000000000","message":"Thanks for pointing this out, I was wondering how you were going to handle this so that the source and dest weren\u0027t writing to the same volume at the same time.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  This API stops the source node. It will power off the source node and detach"},{"line_number":59,"context_line":"  VIFs from the source node. Volumes will be detached by ironic when the node"},{"line_number":60,"context_line":"  is powered off, though nova calls cinder API to detach volumes later. The"},{"line_number":61,"context_line":"  source node will not be undeployed at this method since the migration can be"},{"line_number":62,"context_line":"  rolled back. When the migration is confirmed later, the source node will be"},{"line_number":63,"context_line":"  undeployed completely."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_e5b9db14","line":60,"range":{"start_line":60,"start_character":18,"end_line":60,"end_character":71},"updated":"2017-10-25 14:18:01.000000000","message":"Will this fail since the volumes are already detached by ironic?","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  This API stops the source node. It will power off the source node and detach"},{"line_number":59,"context_line":"  VIFs from the source node. Volumes will be detached by ironic when the node"},{"line_number":60,"context_line":"  is powered off, though nova calls cinder API to detach volumes later. The"},{"line_number":61,"context_line":"  source node will not be undeployed at this method since the migration can be"},{"line_number":62,"context_line":"  rolled back. When the migration is confirmed later, the source node will be"},{"line_number":63,"context_line":"  undeployed completely."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_cc27f1c6","line":60,"range":{"start_line":60,"start_character":18,"end_line":60,"end_character":71},"in_reply_to":"3f4b6375_e5b9db14","updated":"2017-10-27 08:45:56.000000000","message":"This operation doesn\u0027t fail.\n\n[1] https://github.com/openstack/cinder/blob/859d3ac945ae4b6c9e8b7c933d1965cc7b5a51c1/cinder/volume/manager.py#L1276","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  ironic will unbind the VIFs from the source node. Attaching and detaching"},{"line_number":67,"context_line":"  VIFs to deployed nodes are also supported since Pike in ironic."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":70,"context_line":"  be used as the instance UUID for the destination node."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":73,"context_line":"  remote volume by checking if the instance has a block device mapping whose"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_056bd784","line":70,"range":{"start_line":69,"start_character":2,"end_line":70,"end_character":56},"updated":"2017-10-25 14:18:01.000000000","message":"Is this something tracked in ironic? Or what do you mean here?","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  ironic will unbind the VIFs from the source node. Attaching and detaching"},{"line_number":67,"context_line":"  VIFs to deployed nodes are also supported since Pike in ironic."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":70,"context_line":"  be used as the instance UUID for the destination node."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":73,"context_line":"  remote volume by checking if the instance has a block device mapping whose"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_e11ab66c","line":70,"range":{"start_line":69,"start_character":2,"end_line":70,"end_character":56},"in_reply_to":"3f4b6375_056bd784","updated":"2017-10-27 08:45:56.000000000","message":"Yes. ironic tracks the UUID. The same instance UUID cannot be set to multiple nodes.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":70,"context_line":"  be used as the instance UUID for the destination node."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":73,"context_line":"  remote volume by checking if the instance has a block device mapping whose"},{"line_number":74,"context_line":"  ``boot_index`` is ``0``. When the exception is raised, the caller can see the"},{"line_number":75,"context_line":"  result in the server action details since this method is called after the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_65484b86","line":72,"range":{"start_line":72,"start_character":2,"end_line":72,"end_character":10},"updated":"2017-10-25 14:18:01.000000000","message":"This is a bit confusing - the API won\u0027t actually return an error to the user at this point, as you mention below. Maybe say instead, \"The ironic driver will raise an exception...\".","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  The UUID of the instance will be removed from the source node. This UUID will"},{"line_number":70,"context_line":"  be used as the instance UUID for the destination node."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  This API will raise an exception when the instance is not booted from a"},{"line_number":73,"context_line":"  remote volume by checking if the instance has a block device mapping whose"},{"line_number":74,"context_line":"  ``boot_index`` is ``0``. When the exception is raised, the caller can see the"},{"line_number":75,"context_line":"  result in the server action details since this method is called after the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_2110ce56","line":72,"range":{"start_line":72,"start_character":2,"end_line":72,"end_character":10},"in_reply_to":"3f4b6375_65484b86","updated":"2017-10-27 08:45:56.000000000","message":"I\u0027ll fix.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"706cf8c694aa49565621939a747569d8641771c8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  API will reboot the source node after attaching the VIFs and volumes to the"},{"line_number":98,"context_line":"  source node.  On the other hand, no change is necessary for undeploying the"},{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_2404477b","line":100,"updated":"2017-10-18 13:23:13.000000000","message":"If I understand (because I\u0027m not familiar with nova code), you\u0027re saying that this finish_revert_migration() doesn\u0027t need to deal with undeploying the destination node, right? Because some other nova code calls destroy() on the destination node, prior or after this finish_revert_migration() is invoked.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"fd13327a123c51edc6e75b31a8a7f46aa2549194","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  API will reboot the source node after attaching the VIFs and volumes to the"},{"line_number":98,"context_line":"  source node.  On the other hand, no change is necessary for undeploying the"},{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_6e91e752","line":100,"in_reply_to":"3f4b6375_2404477b","updated":"2017-10-19 06:09:38.000000000","message":"Yes. destroy() for the destination is called prior to the finish_revert_migration().","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  API will reboot the source node after attaching the VIFs and volumes to the"},{"line_number":98,"context_line":"  source node.  On the other hand, no change is necessary for undeploying the"},{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_403d3dc2","line":100,"in_reply_to":"3f4b6375_6e91e752","updated":"2017-10-25 14:18:01.000000000","message":"Here: https://github.com/openstack/nova/blob/df9fbbfec97a1ce13364d025bcd66621725bb7e4/nova/compute/manager.py#L3775","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"220a3a579560efb4e14821f6506820ba1400fc94","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"},{"line_number":104,"context_line":"request if there is no ironic node which satisfies the requested flavor since"},{"line_number":105,"context_line":"the API is synchronous till the destination is selected."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_d5042217","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":25},"updated":"2017-10-26 18:37:16.000000000","message":"Are you talking about instance create or the resize operation? You seem to say the former, but that is _not_ synchronous with the scheduling call.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"},{"line_number":104,"context_line":"request if there is no ironic node which satisfies the requested flavor since"},{"line_number":105,"context_line":"the API is synchronous till the destination is selected."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_ec906def","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":25},"in_reply_to":"3f4b6375_d5042217","updated":"2017-10-27 08:45:56.000000000","message":"I intended to mention resize operation. I will fix the sentence.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09440714410df59b3aa6fe04c4f7d5dabe184d59","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  destination node since destroy() method, which is used at deleting an"},{"line_number":100,"context_line":"  instance, can be used."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Regarding the scheduling, a destination node will be selected by the scheduler"},{"line_number":103,"context_line":"as an instance is created. A bad request error (400) will be returned to the API"},{"line_number":104,"context_line":"request if there is no ironic node which satisfies the requested flavor since"},{"line_number":105,"context_line":"the API is synchronous till the destination is selected."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Migrating to the same host will be supported because both a source node and a"},{"line_number":108,"context_line":"destination node can be managed by the same compute host. This is enabled by"},{"line_number":109,"context_line":"setting ``supports_migrate_to_same_host`` to ``True`` in the ironic virt"},{"line_number":110,"context_line":"driver."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"When there are multiple compute hosts, the resize also works. It"},{"line_number":113,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes. The"},{"line_number":114,"context_line":"``host`` field of the instance is just updated to the destination host if a"},{"line_number":115,"context_line":"node managed by another compute host is chosen as the destination by the"},{"line_number":116,"context_line":"scheduler. Then, the instance gets to belong to the destination host."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Alternatives"},{"line_number":119,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_650bab23","line":116,"range":{"start_line":102,"start_character":0,"end_line":116,"end_character":69},"updated":"2017-10-25 13:49:10.000000000","message":"Scheduling and resource allocation tracking with Placement are my main concerns with this spec because for move operations, nova has historically assumed ironic doesn\u0027t support them so we blindly take the first compute node in a list for a given host. That especially doesn\u0027t work when we bypass the scheduler because of the force flags on the live migrate and evacuate APIs:\n\nhttps://github.com/openstack/nova/blob/df9fbbfec97a1ce13364d025bcd66621725bb7e4/nova/compute/api.py#L3958\n\nAnd we have a spec for allowing an admin to pass a dest host during cold migration, but we said we wouldn\u0027t add a force option for that API, so actually I think in the case of cold migrate with a dest host we\u0027d be OK for ironic here since we\u0027ll still have to go through the scheduler with the specified host and the scheduler will have to pick a node for the destination.\n\nAs for resource allocation tracking in Placement, we track allocations and inventory against the compute node uuid, not the host, so that should also work for ironic.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":123,"context_line":"migration can reduce effects of the switch over. For example, users can use the"},{"line_number":124,"context_line":"same instance UUID and IP address after switch over."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Another option is developing a new switching API in ironic. For switching nodes"},{"line_number":127,"context_line":"without affecting nova, the node UUID should be taken over to the destination"},{"line_number":128,"context_line":"node. Though this could be done by swapping UUIDs between nodes, it doesn\u0027t"},{"line_number":129,"context_line":"seems a good solution."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Regarding implementation in nova, there are a few options in nova API for"},{"line_number":132,"context_line":"mapping this bare metal switch over. Rebuild is already implemented in ironic"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_206801b7","line":129,"range":{"start_line":126,"start_character":0,"end_line":129,"end_character":22},"updated":"2017-10-25 14:18:01.000000000","message":"Yeah this is a bad idea - it\u0027s an out of band style of migration in the \"hypervisor\" (ironic in this case) which would likely mess up nova\u0027s resource tracking of where the instance is actually consuming resources.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"node. Though this could be done by swapping UUIDs between nodes, it doesn\u0027t"},{"line_number":129,"context_line":"seems a good solution."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Regarding implementation in nova, there are a few options in nova API for"},{"line_number":132,"context_line":"mapping this bare metal switch over. Rebuild is already implemented in ironic"},{"line_number":133,"context_line":"virt driver for re-deploying an instance with the same image like VMs."},{"line_number":134,"context_line":"Evacuation sounds appropriate for the switch over. However this API works only"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_40b09d43","line":131,"updated":"2017-10-25 14:18:01.000000000","message":"Hmm, should probably make this a bit more clear above where I was asking about evacuate too.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":128,"context_line":"node. Though this could be done by swapping UUIDs between nodes, it doesn\u0027t"},{"line_number":129,"context_line":"seems a good solution."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Regarding implementation in nova, there are a few options in nova API for"},{"line_number":132,"context_line":"mapping this bare metal switch over. Rebuild is already implemented in ironic"},{"line_number":133,"context_line":"virt driver for re-deploying an instance with the same image like VMs."},{"line_number":134,"context_line":"Evacuation sounds appropriate for the switch over. However this API works only"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_8c0a19cf","line":131,"in_reply_to":"3f4b6375_40b09d43","updated":"2017-10-27 08:45:56.000000000","message":"I\u0027ll mention it above.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"REST API impact"},{"line_number":144,"context_line":"---------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"None. The existing APIs will get available for bare metal instances."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Security impact"},{"line_number":149,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_a08ab166","line":146,"range":{"start_line":146,"start_character":6,"end_line":146,"end_character":68},"updated":"2017-10-25 14:18:01.000000000","message":"I\u0027d remove this.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"REST API impact"},{"line_number":144,"context_line":"---------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"None. The existing APIs will get available for bare metal instances."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Security impact"},{"line_number":149,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_8752f211","line":146,"range":{"start_line":146,"start_character":6,"end_line":146,"end_character":68},"in_reply_to":"3f4b6375_a08ab166","updated":"2017-10-27 08:45:56.000000000","message":"Sure.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Other end user impact"},{"line_number":159,"context_line":"---------------------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Users should not store any important data to the local storage of the instance"},{"line_number":162,"context_line":"if the switch over is expected. This warning will be documented."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Performance Impact"},{"line_number":165,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_20db617c","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":64},"updated":"2017-10-25 14:18:01.000000000","message":"What scenarios could happen here? Can you elaborate? Do you mean like creating an ironic instance with ephemeral/swap disks via the flavor? Is that possible today?","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Other end user impact"},{"line_number":159,"context_line":"---------------------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Users should not store any important data to the local storage of the instance"},{"line_number":162,"context_line":"if the switch over is expected. This warning will be documented."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Performance Impact"},{"line_number":165,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_0c018938","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":64},"in_reply_to":"3f4b6375_15163a4a","updated":"2017-10-27 08:45:56.000000000","message":"I mean data stored in a local storage will be lost.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"220a3a579560efb4e14821f6506820ba1400fc94","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Other end user impact"},{"line_number":159,"context_line":"---------------------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Users should not store any important data to the local storage of the instance"},{"line_number":162,"context_line":"if the switch over is expected. This warning will be documented."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Performance Impact"},{"line_number":165,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_15163a4a","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":64},"in_reply_to":"3f4b6375_20db617c","updated":"2017-10-26 18:37:16.000000000","message":"I think it is possible today, and unlike virt where those disks are copied during a resize, they wouldn\u0027t be here. That\u0027s a really ugly user experience wart, IMHO.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":196,"context_line":"Dependencies"},{"line_number":197,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"None. Ironic already supports booting from a remote volume."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Testing"},{"line_number":202,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_803e9588","line":199,"range":{"start_line":199,"start_character":6,"end_line":199,"end_character":59},"updated":"2017-10-25 14:18:01.000000000","message":"I\u0027d remove this part. \"None\" is sufficient.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"Dependencies"},{"line_number":197,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"None. Ironic already supports booting from a remote volume."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Testing"},{"line_number":202,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_e748865c","line":199,"range":{"start_line":199,"start_character":6,"end_line":199,"end_character":59},"in_reply_to":"3f4b6375_803e9588","updated":"2017-10-27 08:45:56.000000000","message":"Sure.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f43ee34b1d5a443250d273d46be9f041e5dd34a0","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Testing"},{"line_number":202,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":205,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":206,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":207,"context_line":"the ironic CI."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_c006cdce","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":41},"updated":"2017-10-25 14:18:01.000000000","message":"Tempest already has tests for resize so I don\u0027t think you\u0027d need to add anything to Tempest, you\u0027d just need to enable it in the Ironic CI right? The only tricky part I guess would be the Tempest resize tests are probably not doing boot from volume.\n\nYou might need to add this test to an ironic tempest plugin instead of the main tempest repo.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8811b2fbee7a0b04ba6704bb55bda5d4f3d1ee7c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Testing"},{"line_number":202,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"A scenario test will be added to Tempest. This switch over can be tested in an"},{"line_number":205,"context_line":"All-In-One DevStack environment with ironic virt driver where VMs are deployed"},{"line_number":206,"context_line":"as bare metal servers. The added test will be added to the ironic BFV job in"},{"line_number":207,"context_line":"the ironic CI."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_2ca565a2","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":41},"in_reply_to":"3f4b6375_c006cdce","updated":"2017-10-27 08:45:56.000000000","message":"Testing resize with BFV will be added to ironic tempest plugin.","commit_id":"16c59ed9b10893abb0a16cc74acda1c7d8eabdb0"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"fbe82741fc774f3a6b221a945bee15681e8dfab2","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* An operator can switch over an bare metal node to another node for a quick"},{"line_number":44,"context_line":"  recovery when a failure is detected. This switch over can be automated by"},{"line_number":45,"context_line":"  triggering this API from monitor tools."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Proposed change"},{"line_number":48,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_1d7a47b9","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":21},"updated":"2017-11-02 06:41:10.000000000","message":"I think \"this API\" here refers to the proposal down or there is anything already existing for the \"switch over automation\"?","commit_id":"6fddeaa6adb3f0d148b252789f9b081cc7bada7a"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"fbe82741fc774f3a6b221a945bee15681e8dfab2","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* finish_migration()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  This method will launch the destination node. It will deploy the destination"},{"line_number":92,"context_line":"  node to boot from a volume used by the source node. This is done by attaching"},{"line_number":93,"context_line":"  VIFs and volumes to the new node and ask ironic to deploy the new server with"},{"line_number":94,"context_line":"  the remote volume boot."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"After resize or cold migration, the VM state gets RESIZED. To confirm or revert"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_68397bd5","line":93,"range":{"start_line":92,"start_character":54,"end_line":93,"end_character":6},"updated":"2017-11-02 06:41:10.000000000","message":"Would the server IP address remain same as it was on the source node?","commit_id":"6fddeaa6adb3f0d148b252789f9b081cc7bada7a"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"fbe82741fc774f3a6b221a945bee15681e8dfab2","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Migrating to the same host will be supported because both a source node and a"},{"line_number":120,"context_line":"destination node can be managed by the same compute host. This is enabled by"},{"line_number":121,"context_line":"setting ``supports_migrate_to_same_host`` to ``True`` in the ironic virt"},{"line_number":122,"context_line":"driver."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"When there are multiple compute hosts, the resize/migration also works. It"},{"line_number":125,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes. The"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_a8589330","line":122,"range":{"start_line":121,"start_character":54,"end_line":122,"end_character":7},"updated":"2017-11-02 06:41:10.000000000","message":"i think it should be \"in nova.conf\".","commit_id":"6fddeaa6adb3f0d148b252789f9b081cc7bada7a"}],"specs/rocky/approved/ironic-instance-switchover.rst":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"26b8d17244da2b0c4883cff6cb6d0044ed25df02","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Another option is developing a new switching API in ironic. For switching nodes"},{"line_number":139,"context_line":"without affecting nova, the node UUID should be taken over to the destination"},{"line_number":140,"context_line":"node. Though this could be done by swapping UUIDs between nodes, it doesn\u0027t"},{"line_number":141,"context_line":"seems a good solution."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Regarding implementation in nova, there are a few options in nova API for"},{"line_number":144,"context_line":"mapping this bare metal switch over. Rebuild is already implemented in ironic"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa0c359_20674628","line":141,"range":{"start_line":140,"start_character":6,"end_line":141,"end_character":22},"updated":"2018-02-15 14:51:31.000000000","message":"Could you explain why you think that this isn\u0027t a good solution? From my limited knowledge of ironic, it certainly sounds simpler.","commit_id":"d2f9ea010010c889f46a539c55001a3b63e7c93b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f6390c5cd93bee709194ac373400fbe8a6c8d5bf","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Another option is developing a new switching API in ironic. For switching nodes"},{"line_number":139,"context_line":"without affecting nova, the node UUID should be taken over to the destination"},{"line_number":140,"context_line":"node. Though this could be done by swapping UUIDs between nodes, it doesn\u0027t"},{"line_number":141,"context_line":"seems a good solution."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Regarding implementation in nova, there are a few options in nova API for"},{"line_number":144,"context_line":"mapping this bare metal switch over. Rebuild is already implemented in ironic"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3fa0c359_c3a30c00","line":141,"range":{"start_line":140,"start_character":6,"end_line":141,"end_character":22},"in_reply_to":"3fa0c359_20674628","updated":"2018-02-15 14:54:03.000000000","message":"Because two bare metal nodes are never the same - they are physical, not virtual entities. By reassigning a UUID you can fix this case but break quite a few more (e.g. integration with a 3rd party inventory service).","commit_id":"d2f9ea010010c889f46a539c55001a3b63e7c93b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Virtual machines can be recreated on hosts. This enables migration, resize,"},{"line_number":22,"context_line":"evacuation and so on. These features are not supported for bare metal"},{"line_number":23,"context_line":"instances. When a bare metal instance is broken, a user cannot access the data"},{"line_number":24,"context_line":"in the instance till the physical server is recovered. Also, a bare metal"},{"line_number":25,"context_line":"instance cannot be scaled up with keeping the data stored. Now that ironic"},{"line_number":26,"context_line":"supports booting an instance from a remote volume since Pike, by booting"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b37fd2dc","line":23,"range":{"start_line":22,"start_character":22,"end_line":23,"end_character":10},"updated":"2018-10-23 19:20:25.000000000","message":"Are you sure that evacuate is not support for ironic instances, because I\u0027d think it is since the ironic driver is the only one that implements the rebuild virt driver API. Either way, it\u0027s just a destroy/spawn of the node on a new compute host.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"43565615b6200b888381c419e2905f796e6aa9e5","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"For the purpose of the recovery from a server failure, evacuation seems"},{"line_number":30,"context_line":"appropriate to support. However, since evacuation is designed for VMs,"},{"line_number":31,"context_line":"it works only when a compute host is down. Regarding bare metal, a failure"},{"line_number":32,"context_line":"of a compute host doesn\u0027t cause a failure to bare metal instances. Bare metal"},{"line_number":33,"context_line":"instances go down independently with compute hosts. Alternatively, cold"},{"line_number":34,"context_line":"migration and resize can be implemented to ironic virt driver for switching"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5f7c97a3_4f06e722","line":31,"range":{"start_line":31,"start_character":14,"end_line":31,"end_character":41},"updated":"2018-06-07 21:42:10.000000000","message":"It probably makes sense for \"when ironic node is in maintenance mode, and powered off\", to allow evacuate for ironic, but I will keep reading...\n\nHowever that is a separate spec, this one is still useful for other reasons.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"For the purpose of the recovery from a server failure, evacuation seems"},{"line_number":30,"context_line":"appropriate to support. However, since evacuation is designed for VMs,"},{"line_number":31,"context_line":"it works only when a compute host is down. Regarding bare metal, a failure"},{"line_number":32,"context_line":"of a compute host doesn\u0027t cause a failure to bare metal instances. Bare metal"},{"line_number":33,"context_line":"instances go down independently with compute hosts. Alternatively, cold"},{"line_number":34,"context_line":"migration and resize can be implemented to ironic virt driver for switching"},{"line_number":35,"context_line":"bare metal servers behind an instance. See the \"Alternative\" section for the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f3c78a10","line":32,"range":{"start_line":32,"start_character":2,"end_line":32,"end_character":65},"updated":"2018-10-23 19:20:25.000000000","message":"There is an API to manually force a compute service \"down\" such that you can evacuate from it:\n\nhttps://developer.openstack.org/api-ref/compute/?expanded\u003dupdate-forced-down-detail#update-forced-down\n\nCouldn\u0027t that be used for ironic instances also?","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"  This method stops the source node not to let the node access the remote"},{"line_number":68,"context_line":"  volume. It will power off the source node and detach VIFs from the source"},{"line_number":69,"context_line":"  node. Volumes will be detached by ironic when the node is powered off, though"},{"line_number":70,"context_line":"  nova calls cinder API to detach volumes later (The nova call doesn\u0027t cause"},{"line_number":71,"context_line":"  any error). The source node will not be undeployed at this method since the"},{"line_number":72,"context_line":"  migration can be rolled back. When the migration is confirmed later, the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b36912f8","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":71},"updated":"2018-10-23 19:20:25.000000000","message":"Will the root volume be fully detached and made available during the resize from the source to dest host? Because that would leave a window of time where the volume could be attached to another server.\n\nSince Queens, we\u0027ll create volume attachment records on the dest so that the volume remains in-use (or at least reserved) during the cold migration when the old source attachments are removed. I would think we\u0027d want similar functionality with ironic server resize. In other words, I worry that if ironic (the service) detaches the volume, the volume attachment update here might fail:\n\nhttps://github.com/openstack/nova/blob/297de7fb9fbabe74b5305ef0aa82e196d5f48d5e/nova/compute/manager.py#L4582","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"43565615b6200b888381c419e2905f796e6aa9e5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  This method stops the source node not to let the node access the remote"},{"line_number":68,"context_line":"  volume. It will power off the source node and detach VIFs from the source"},{"line_number":69,"context_line":"  node. Volumes will be detached by ironic when the node is powered off, though"},{"line_number":70,"context_line":"  nova calls cinder API to detach volumes later (The nova call doesn\u0027t cause"},{"line_number":71,"context_line":"  any error). The source node will not be undeployed at this method since the"},{"line_number":72,"context_line":"  migration can be rolled back. When the migration is confirmed later, the"},{"line_number":73,"context_line":"  source node will be undeployed completely."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5f7c97a3_523450de","line":70,"range":{"start_line":70,"start_character":2,"end_line":70,"end_character":47},"updated":"2018-06-07 21:42:10.000000000","message":"This bit really worries me, after all the work to improve how Nova and Cinder interact, I worry we are going to break things here. I guess it works because you detach an already detached thing, which doesn\u0027t fail... Seems a bit odd.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"43565615b6200b888381c419e2905f796e6aa9e5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"destination node can be managed by the same compute host. This is enabled by"},{"line_number":122,"context_line":"changing ``supports_migrate_to_same_host`` to ``True`` in the ironic virt"},{"line_number":123,"context_line":"driver code. In operation, ``allow_resize_to_same_host`` parameter in the"},{"line_number":124,"context_line":"configuration file needs to be set to ``True``."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"When there are multiple compute hosts, the resize/migration also works. It"},{"line_number":127,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes. The"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5f7c97a3_129a58c4","line":124,"updated":"2018-06-07 21:42:10.000000000","message":"We should probably change the code so that checks for a resource provider, rather than checking the host. That would mean it \"just works\" for ironic.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":121,"context_line":"destination node can be managed by the same compute host. This is enabled by"},{"line_number":122,"context_line":"changing ``supports_migrate_to_same_host`` to ``True`` in the ironic virt"},{"line_number":123,"context_line":"driver code. In operation, ``allow_resize_to_same_host`` parameter in the"},{"line_number":124,"context_line":"configuration file needs to be set to ``True``."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"When there are multiple compute hosts, the resize/migration also works. It"},{"line_number":127,"context_line":"doesn\u0027t affect the hash-ring which maps compute hosts to ironic nodes. The"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_1e2d6d8f","line":124,"in_reply_to":"5f7c97a3_129a58c4","updated":"2018-10-23 19:20:25.000000000","message":"I\u0027m not really following your comment John. supports_migrate_to_same_host is checking the instance.host, which would be the nova-compute service host, not the ironic node, so wouldn\u0027t that do the job?","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":128,"context_line":"``host`` field of the instance is just updated to the destination host if a"},{"line_number":129,"context_line":"node managed by another compute host is chosen as the destination by the"},{"line_number":130,"context_line":"scheduler. Then, the instance gets to belong to the destination host."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Alternatives"},{"line_number":133,"context_line":"------------"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_1e89ed6e","line":131,"updated":"2018-10-23 19:20:25.000000000","message":"Can this support microversion 2.56 which allows specifying the target host name during a cold migration? I\u0027m thinking about this code which assumes there is only one compute node record for a given host:\n\nhttps://github.com/openstack/nova/blob/297de7fb9fbabe74b5305ef0aa82e196d5f48d5e/nova/compute/api.py#L3460\n\nBut that\u0027s not the case with ironic where we have 1:M host:node mappings. I think that would break here:\n\nhttps://github.com/openstack/nova/blob/297de7fb9fbabe74b5305ef0aa82e196d5f48d5e/nova/compute/api.py#L3564","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"REST API impact"},{"line_number":166,"context_line":"---------------"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Security impact"},{"line_number":171,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_de3295c0","line":168,"updated":"2018-10-23 19:20:25.000000000","message":"I would think we should have a new REST API microversion for this otherwise how would users with ironic instances know they can resize their server or not? It\u0027s definitely a behavior change.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Upgrade impact"},{"line_number":205,"context_line":"--------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"None"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Implementation"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_be0b19d2","line":207,"updated":"2018-10-23 19:20:25.000000000","message":"Obviously you can\u0027t resize/cold migrate an ironic instance that is running on an older compute, so how would that fail? Would the API have a temporary check, removed in T, to see if it\u0027s an ironic instance and if so that the source compute host it\u0027s running on is new enough to perform this operation? Clearly we have the same issue with selecting a destination host if the operator is doing rolling upgrades and some of the compute hosts are running Rocky code. How would we solve that? Would we add some policy rule so operators can disable this operation for ironic instances until they are upgraded? Would we decorate compute node resource providers in placement with some kind of capability/trait to indicate they can resize baremetal instances and then add a pre-request placement filter to only select target nodes with that trait?","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a67d360339732863270c439fededac7eb41486f","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Upgrade impact"},{"line_number":205,"context_line":"--------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"None"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Implementation"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_feb8b1c7","line":207,"in_reply_to":"3f79a3b5_be0b19d2","updated":"2018-10-23 19:25:32.000000000","message":"\u003e Obviously you can\u0027t resize/cold migrate an ironic instance that is running on an older compute, so how would that fail?\n\nWithout any changes to the API or scheduler for this, just looking at the code quickly, I think we\u0027d get down to the ComputeManager._resize_instance method which calls driver.migrate_disk_and_power_off() which would raise NotImplementedError. That would revert the instance.task_state, set the migration status to \u0027error\u0027, record a fault (and failed instance action event record) on the instance, and reset the instance.vm_state to whatever it was originally (active or stopped). That doesn\u0027t seem so bad, so maybe we don\u0027t need anything to check for rolling upgrades while doing this.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7fae24e7c568ca98f2396eb655824720a10170d","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"   * - Release Name"},{"line_number":255,"context_line":"     - Description"},{"line_number":256,"context_line":"   * - Rocky"},{"line_number":257,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_be247960","line":257,"range":{"start_line":256,"start_character":3,"end_line":257,"end_character":17},"updated":"2018-10-23 19:20:25.000000000","message":"This needs to be re-targeted for Stein.","commit_id":"cbaa50f0b210ac19049b06703b719bd5265ea56b"}]}
