)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-03-27 14:50:41 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Scheduler filters evaluated even forced host"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I0a543214b975110bb323db48857d13818c299908"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_16964240","line":8,"updated":"2019-03-29 14:37:24.000000000","message":"Link to the blueprint and add the APIImpact tag on separate lines, like:\n\n   APIImpact\n   Spec for blueprint scheduler-filters-evaluated-even-forced-host","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"}],"specs/train/approved/add-host-and-hypervisor-hostname-flag-to-create-server.rst":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2e781356cfeb2678adbc6c34cb7c585529238cba","unresolved":false,"context_lines":[{"line_number":22,"context_line":"When an admin user specify the `forced_host/forced_node`_ to create"},{"line_number":23,"context_line":"a server, nova will bypass the scheduler filters and directly boot"},{"line_number":24,"context_line":"the server on the target host. Without the scheduler filters, a successful"},{"line_number":25,"context_line":"instance may break the server_group policy (affinity/anti-affinity)"},{"line_number":26,"context_line":"and a failure instance may waste effort trying to boot when failure"},{"line_number":27,"context_line":"is inevitable because of network provider, PCI device, NUMA topology, etc."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_cce150d2","line":25,"updated":"2019-04-09 14:13:03.000000000","message":"No, because we do a anti-affinity late check on the compute service, ie. we verify that we don\u0027t break the anti-affinity policy.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":22,"context_line":"When an admin user specify the `forced_host/forced_node`_ to create"},{"line_number":23,"context_line":"a server, nova will bypass the scheduler filters and directly boot"},{"line_number":24,"context_line":"the server on the target host. Without the scheduler filters, a successful"},{"line_number":25,"context_line":"instance may break the server_group policy (affinity/anti-affinity)"},{"line_number":26,"context_line":"and a failure instance may waste effort trying to boot when failure"},{"line_number":27,"context_line":"is inevitable because of network provider, PCI device, NUMA topology, etc."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e9d99555","line":25,"in_reply_to":"5fc1f717_cce150d2","updated":"2019-04-09 18:33:01.000000000","message":"True: https://github.com/openstack/nova/blob/d42a007425d9adb691134137e1e0b7dda356df62/nova/compute/manager.py#L2202\n\nBut the rest of this is true, we could be trying to claim resources on the host that aren\u0027t available, and/or unintentionally over-subscribing the host because without running the filters we don\u0027t pass down any limits for the resource claim.\n\nI don\u0027t think we bypass placement though because of this logic:\n\nhttps://github.com/openstack/nova/blob/d42a007425d9adb691134137e1e0b7dda356df62/nova/scheduler/manager.py#L128\n\nWe just don\u0027t run filters because of this:\n\nhttps://github.com/openstack/nova/blob/d42a007425d9adb691134137e1e0b7dda356df62/nova/scheduler/host_manager.py#L583","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"When an admin user specify the `forced_host/forced_node`_ to create"},{"line_number":23,"context_line":"a server, nova will bypass the scheduler filters and directly boot"},{"line_number":24,"context_line":"the server on the target host. Without the scheduler filters, a successful"},{"line_number":25,"context_line":"instance may break the server_group policy (affinity/anti-affinity)"},{"line_number":26,"context_line":"and a failure instance may waste effort trying to boot when failure"},{"line_number":27,"context_line":"is inevitable because of network provider, PCI device, NUMA topology, etc."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_ec843560","line":25,"in_reply_to":"5fc1f717_cce150d2","updated":"2019-04-10 08:28:53.000000000","message":"Yeah, you\u0027re right. After I test again, I found nova will do late group check. So it will not break the group policy as Matt said below. :P","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"When an admin user specify the `forced_host/forced_node`_ to create"},{"line_number":23,"context_line":"a server, nova will bypass the scheduler filters and directly boot"},{"line_number":24,"context_line":"the server on the target host. Without the scheduler filters, a successful"},{"line_number":25,"context_line":"instance may break the server_group policy (affinity/anti-affinity)"},{"line_number":26,"context_line":"and a failure instance may waste effort trying to boot when failure"},{"line_number":27,"context_line":"is inevitable because of network provider, PCI device, NUMA topology, etc."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_0c88a16e","line":25,"in_reply_to":"5fc1f717_e9d99555","updated":"2019-04-10 08:28:53.000000000","message":"Done.\nChange some description on the base of your comments.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"This change adds the following use case to the system:"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* The admin can create a server with a target host."},{"line_number":35,"context_line":"* The admin can create a server with a target hypervisor hostname."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":"5fc1f717_a995cd41","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":66},"updated":"2019-04-09 18:33:01.000000000","message":"Well technically the admin can already do this with both the availability_zone hack mentioned above and the JsonFilter mentioned in the alternatives section.\n\nThe use case is really, \"As an admin, I want to request that a server is created on a specific compute host and/or node and have the request validated by the scheduler rather than forced.\"\n\nThis is essentially the same thing as we did for the live migration API in 2.30 and evacuate in 2.29 which before those microversions specifying a host would bypass the scheduler.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"This change adds the following use case to the system:"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* The admin can create a server with a target host."},{"line_number":35,"context_line":"* The admin can create a server with a target hypervisor hostname."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Proposed change"},{"line_number":38,"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":"5fc1f717_ec8af518","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":66},"in_reply_to":"5fc1f717_a995cd41","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d69e23db163ba586968977f13efcdcc5a51d215f","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Add ``host`` and ``hypervisor_hostname`` to the REST API ``POST /servers``."},{"line_number":41,"context_line":"* Limit ``host`` and ``hypervisor_hostname`` only for admin, just re-use"},{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e75ea711","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":45},"updated":"2019-04-09 14:23:33.000000000","message":"I guess we shouldn\u0027t reuse that, since it use the confuse word \u0027forced\u0027","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Add ``host`` and ``hypervisor_hostname`` to the REST API ``POST /servers``."},{"line_number":41,"context_line":"* Limit ``host`` and ``hypervisor_hostname`` only for admin, just re-use"},{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_ccb139e2","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":45},"in_reply_to":"5fc1f717_a97e2d16","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Add ``host`` and ``hypervisor_hostname`` to the REST API ``POST /servers``."},{"line_number":41,"context_line":"* Limit ``host`` and ``hypervisor_hostname`` only for admin, just re-use"},{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_acae2d7e","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":45},"in_reply_to":"5fc1f717_e75ea711","updated":"2019-04-10 08:28:53.000000000","message":"Done.\nAdd new policy \u0027requested_destination\u0027 as Matt said below. :)","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* Add ``host`` and ``hypervisor_hostname`` to the REST API ``POST /servers``."},{"line_number":41,"context_line":"* Limit ``host`` and ``hypervisor_hostname`` only for admin, just re-use"},{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_a97e2d16","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":45},"in_reply_to":"5fc1f717_e75ea711","updated":"2019-04-09 18:33:01.000000000","message":"We could use \u0027requested_destination\u0027 to match the field in the RequestSpec.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2e781356cfeb2678adbc6c34cb7c585529238cba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"},{"line_number":48,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_ec43ecae","line":45,"updated":"2019-04-09 14:13:03.000000000","message":"you\u0027re missing a crucial point, which would be :\n- remove the horrible AZ hack that creates force_hosts/force_nodes\n- deprecate force_hosts/force_nodes fields in the ReqSpec object\n\nOne other controversial point could be (but I\u0027m open to comments whether we need it) :\n- add a force flag that would do the same logic that forced_hosts","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"},{"line_number":48,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_4cff8901","line":45,"in_reply_to":"5fc1f717_e9e3d5d6","updated":"2019-04-10 08:28:53.000000000","message":"\u003e Alternatively we could just defer the decision and say we leave the\n \u003e AZ hack in this new microversion as well so you have the option of\n \u003e either forcing the target during server create or requesting the\n \u003e target. I think I\u0027d be OK with either.\n\nAdd notes in \"Proposed change\".","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  ``os_compute_api:servers:create:forced_host`` policy."},{"line_number":43,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":44,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":45,"context_line":"  filters."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"},{"line_number":48,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e9e3d5d6","line":45,"in_reply_to":"5fc1f717_ec43ecae","updated":"2019-04-09 18:33:01.000000000","message":"\u003e deprecate force_hosts/force_nodes fields in the ReqSpec object\n\nYou can\u0027t really \"deprecate\" those because you have to support those fields for older microversions where you can force the host during server create.\n\n\u003e add a force flag that would do the same logic that forced_hosts\n\n-2, please god no. In Stein we specifically deprecated the force options in the live migrate and evacuate APIs, essentially reverting what was added in 2.29 and 2.30:\n\nhttps://blueprints.launchpad.net/nova/+spec/remove-force-flag-from-live-migrate-and-evacuate\n\nSo I would not be in favor of adding host/hypervisor_hostname in a new microversion but also add a force parameter. If the admin really wants to force it, they can use the AZ hack from before the microversion.\n\n\u003e remove the horrible AZ hack that creates force_hosts/force_nodes\n\nAlternatively we could just defer the decision and say we leave the AZ hack in this new microversion as well so you have the option of either forcing the target during server create or requesting the target. I think I\u0027d be OK with either.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. The Filter"},{"line_number":51,"context_line":"Scheduler supports filtering and weighting to make informed decisions on where"},{"line_number":52,"context_line":"a new instance should be created. This Scheduler supports working with Compute"},{"line_number":53,"context_line":"Nodes only."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e931955a","line":52,"range":{"start_line":52,"start_character":39,"end_line":52,"end_character":48},"updated":"2019-04-09 18:33:01.000000000","message":"filter?","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. The Filter"},{"line_number":51,"context_line":"Scheduler supports filtering and weighting to make informed decisions on where"},{"line_number":52,"context_line":"a new instance should be created. This Scheduler supports working with Compute"},{"line_number":53,"context_line":"Nodes only."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e3ff68fe","line":52,"range":{"start_line":52,"start_character":39,"end_line":52,"end_character":48},"in_reply_to":"5fc1f717_e931955a","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":55,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"},{"line_number":56,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/user/filter-scheduler.html"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Data model impact"},{"line_number":61,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_4918e9d1","line":58,"updated":"2019-04-09 18:33:01.000000000","message":"I think a better link would be this one:\n\nhttps://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#jsonfilter\n\nWhich gives a warning about using that filter, which is probably sufficient justification for saying this is not a great alternative.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"},{"line_number":56,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/user/filter-scheduler.html"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Data model impact"},{"line_number":61,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_432d1c8d","line":58,"in_reply_to":"5fc1f717_4918e9d1","updated":"2019-04-10 08:28:53.000000000","message":"Done.\nBetter link :)","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2e781356cfeb2678adbc6c34cb7c585529238cba","unresolved":false,"context_lines":[{"line_number":56,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/user/filter-scheduler.html"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Data model impact"},{"line_number":61,"context_line":"-----------------"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_0c48b8b0","line":59,"updated":"2019-04-09 14:13:03.000000000","message":"you can also use aggregates or many many other ways to trick the destination if you still want it.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/user/filter-scheduler.html"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Data model impact"},{"line_number":61,"context_line":"-----------------"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_890ec32f","line":59,"in_reply_to":"5fc1f717_0c48b8b0","updated":"2019-04-10 08:28:53.000000000","message":"Another way is to use AggregateInstanceExtraSpecsFilter with aggregate and flavor metadata. Now I have added it.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2e781356cfeb2678adbc6c34cb7c585529238cba","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \"server\": {"},{"line_number":77,"context_line":"            ..."},{"line_number":78,"context_line":"            \"host\": \"openstack-node\","},{"line_number":79,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_2cda54e8","line":79,"updated":"2019-04-09 14:13:03.000000000","message":"both should be optional, I don\u0027t see it here","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \"server\": {"},{"line_number":77,"context_line":"            ..."},{"line_number":78,"context_line":"            \"host\": \"openstack-node\","},{"line_number":79,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_770ed232","line":79,"in_reply_to":"5fc1f717_2cda54e8","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \"server\": {"},{"line_number":77,"context_line":"            ..."},{"line_number":78,"context_line":"            \"host\": \"openstack-node\","},{"line_number":79,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e97f55dc","line":79,"in_reply_to":"5fc1f717_2cda54e8","updated":"2019-04-09 18:33:01.000000000","message":"That\u0027s really a question for the schema, but yeah \"required\" list would not change from 2.37:\n\nhttps://github.com/openstack/nova/blob/d42a007425d9adb691134137e1e0b7dda356df62/nova/api/openstack/compute/schemas/servers.py#L282","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2e781356cfeb2678adbc6c34cb7c585529238cba","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"As the admin with ``host`` and ``hypervisor_hostname`` will evaluate"},{"line_number":104,"context_line":"scheduler filters when booting instances, so boot will take a bit"},{"line_number":105,"context_line":"more time as Nova will call the scheduler."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Other deployer impact"},{"line_number":108,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_ccf4f05d","line":105,"updated":"2019-04-09 14:13:03.000000000","message":"Just say None, please. I don\u0027t think it\u0027s an issue.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"As the admin with ``host`` and ``hypervisor_hostname`` will evaluate"},{"line_number":104,"context_line":"scheduler filters when booting instances, so boot will take a bit"},{"line_number":105,"context_line":"more time as Nova will call the scheduler."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Other deployer impact"},{"line_number":108,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_e34d2872","line":105,"in_reply_to":"5fc1f717_a96dcd32","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed0c32500caf84133c202c384c24b50102084e16","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"As the admin with ``host`` and ``hypervisor_hostname`` will evaluate"},{"line_number":104,"context_line":"scheduler filters when booting instances, so boot will take a bit"},{"line_number":105,"context_line":"more time as Nova will call the scheduler."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Other deployer impact"},{"line_number":108,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_a96dcd32","line":105,"in_reply_to":"5fc1f717_ccf4f05d","updated":"2019-04-09 18:33:01.000000000","message":"Agree with Sylain.","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"83642d12230a2cdde2ddbe7cd3a87b15a8c9630b","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"As the admin with ``host`` and ``hypervisor_hostname`` will evaluate"},{"line_number":104,"context_line":"scheduler filters when booting instances, so boot will take a bit"},{"line_number":105,"context_line":"more time as Nova will call the scheduler."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Other deployer impact"},{"line_number":108,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fc1f717_a353a015","line":105,"in_reply_to":"5fc1f717_ccf4f05d","updated":"2019-04-10 08:28:53.000000000","message":"Done","commit_id":"a66aae22e8f1034ade1492234d7c2a94ab77a897"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"477dddbdc269406c93810706adce587c95dad3da","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":48,"context_line":"  filters."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"**Notes: We still leave the format az:host:node in this new microversion**"},{"line_number":51,"context_line":"**as well as you have the option of either forcing the target during server**"},{"line_number":52,"context_line":"**creates or requesting the target.**"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_c27fbddc","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":8},"updated":"2019-04-10 14:24:12.000000000","message":"You can drop the bold formatting on all of this and just do:\n\n.. note:: We still leave the format ....","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1c2785e7fc723e00308f6161e8190af3c70e32e3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":48,"context_line":"  filters."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"**Notes: We still leave the format az:host:node in this new microversion**"},{"line_number":51,"context_line":"**as well as you have the option of either forcing the target during server**"},{"line_number":52,"context_line":"**creates or requesting the target.**"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fce034c_6604b2c7","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":8},"in_reply_to":"5fc1f717_c27fbddc","updated":"2019-04-11 03:20:32.000000000","message":"Done","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"477dddbdc269406c93810706adce587c95dad3da","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Alternatives"},{"line_number":55,"context_line":"------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"With the help of ``Filter Scheduler``, maybe we can do the same end."},{"line_number":58,"context_line":"The Filter Scheduler supports filtering and weighting to make informed"},{"line_number":59,"context_line":"decisions on where a new instance should be created. This Scheduler supports"},{"line_number":60,"context_line":"working with Compute Nodes only."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. This"},{"line_number":63,"context_line":"filter allows simple JSON-based grammar for selecting hosts."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_a2687120","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":32},"updated":"2019-04-10 14:24:12.000000000","message":"I\u0027m not sure what this is trying to say - maybe just remove this paragraph.","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1c2785e7fc723e00308f6161e8190af3c70e32e3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Alternatives"},{"line_number":55,"context_line":"------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"With the help of ``Filter Scheduler``, maybe we can do the same end."},{"line_number":58,"context_line":"The Filter Scheduler supports filtering and weighting to make informed"},{"line_number":59,"context_line":"decisions on where a new instance should be created. This Scheduler supports"},{"line_number":60,"context_line":"working with Compute Nodes only."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. This"},{"line_number":63,"context_line":"filter allows simple JSON-based grammar for selecting hosts."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fce034c_26ff8a68","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":32},"in_reply_to":"5fc1f717_a2687120","updated":"2019-04-11 03:20:32.000000000","message":"Just introduce the concept of \u0027Filter Scheduler\u0027.\nYeah, I have removed it. It is not necessary for this \u0027alternatives\u0027 paragraph.","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"477dddbdc269406c93810706adce587c95dad3da","unresolved":false,"context_lines":[{"line_number":62,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. This"},{"line_number":63,"context_line":"filter allows simple JSON-based grammar for selecting hosts."},{"line_number":64,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"},{"line_number":65,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There is a filter named `AggregateInstanceExtraSpecsFilter`_ which is not used"},{"line_number":68,"context_line":"by default. This filter checks that the aggregate metadata satisfies any extra"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_c2581d8b","line":65,"range":{"start_line":65,"start_character":71,"end_line":65,"end_character":72},"updated":"2019-04-10 14:24:12.000000000","message":"I would maybe add to this paragraph, \"In addition to the warnings in the documentation for this filter, since it is configurable it may or may not be present in all clouds and thus cannot be guaranteed for interoperability.\"","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1c2785e7fc723e00308f6161e8190af3c70e32e3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"There is a filter named `JsonFilter`_ which is not used by default. This"},{"line_number":63,"context_line":"filter allows simple JSON-based grammar for selecting hosts."},{"line_number":64,"context_line":"For example, if we want to specify the host named \"openstack-node\", we can add"},{"line_number":65,"context_line":"the params like this: ``--hint query\u003d\u0027[\"\u003d\",\"$host\",\"openstack-node\"]\u0027``."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There is a filter named `AggregateInstanceExtraSpecsFilter`_ which is not used"},{"line_number":68,"context_line":"by default. This filter checks that the aggregate metadata satisfies any extra"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fce034c_06692e24","line":65,"range":{"start_line":65,"start_character":71,"end_line":65,"end_character":72},"in_reply_to":"5fc1f717_c2581d8b","updated":"2019-04-11 03:20:32.000000000","message":"Done","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"477dddbdc269406c93810706adce587c95dad3da","unresolved":false,"context_lines":[{"line_number":73,"context_line":"set metadata for this aggregate with ``host\u003dopenstack-node``. At last, we"},{"line_number":74,"context_line":"create a flavor and set metadata for this flavor with"},{"line_number":75,"context_line":"``aggregate_instance_extra_specs:host\u003dopenstack-node``. So when we choose the"},{"line_number":76,"context_line":"flavor to create instances, all will be on the host \"openstack-node\"."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#jsonfilter"},{"line_number":79,"context_line":".. _AggregateInstanceExtraSpecsFilter: https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#aggregateinstanceextraspecsfilter"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_42faed42","line":76,"updated":"2019-04-10 14:24:12.000000000","message":"You should explain why a particular alternative is not ideal, or your proposed change is better than the alternative. I think in this case creating an aggregate and flavor pinned to that aggregate for every host/node in a large cloud is not manageable and would also potentially leak deployment details about the cloud - and also confuse users when you have so many availability zones to model those aggregates. It\u0027s just not a realistic option for this use case in a large cloud.","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1c2785e7fc723e00308f6161e8190af3c70e32e3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"set metadata for this aggregate with ``host\u003dopenstack-node``. At last, we"},{"line_number":74,"context_line":"create a flavor and set metadata for this flavor with"},{"line_number":75,"context_line":"``aggregate_instance_extra_specs:host\u003dopenstack-node``. So when we choose the"},{"line_number":76,"context_line":"flavor to create instances, all will be on the host \"openstack-node\"."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#jsonfilter"},{"line_number":79,"context_line":".. _AggregateInstanceExtraSpecsFilter: https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#aggregateinstanceextraspecsfilter"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fce034c_813bc89a","line":76,"in_reply_to":"5fc1f717_42faed42","updated":"2019-04-11 03:20:32.000000000","message":"Done","commit_id":"dab7c816e361729e67d138d0283d0a67519d48dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ef239e022d38490bded8ab5cfaad2bd99a6a2ab","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":".. note::"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  We still leave the format az:host:node in this new microversion as well as"},{"line_number":54,"context_line":"  you have the option of either forcing the target during server creates or"},{"line_number":55,"context_line":"  requesting the target."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_de20c3fa","line":54,"range":{"start_line":53,"start_character":66,"end_line":54,"end_character":5},"updated":"2019-04-11 14:51:42.000000000","message":"so users have the option","commit_id":"146c4521b1859a9490a06b812b19f4cf69eceeea"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b93e642615a63c64fe503b26d5b8963a58744c6a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"In this case, creating an aggregate and flavor pinned to that aggregate for"},{"line_number":81,"context_line":"every host/node in a large cloud is not manageable and would also potentially"},{"line_number":82,"context_line":"leak deployment details about the cloud, and also confuse users when we have"},{"line_number":83,"context_line":"so many availability zones to model those aggregates. It\u0027s just a realistic"},{"line_number":84,"context_line":"option for this use case in a large cloud."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":".. _JsonFilter: https://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#jsonfilter"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_9eb79bd9","line":83,"range":{"start_line":83,"start_character":64,"end_line":83,"end_character":65},"updated":"2019-04-11 14:50:31.000000000","message":"not a :)","commit_id":"146c4521b1859a9490a06b812b19f4cf69eceeea"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ae1099bd00c212147eae79a95665804c09462236","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  when failure is inevitable because of network provider, PCI device, NUMA"},{"line_number":27,"context_line":"  topology, etc."},{"line_number":28,"context_line":"* We could be trying to claim resources on the host that aren\u0027t available,"},{"line_number":29,"context_line":"  and/or, unintentionally over-subscribing the host because without running"},{"line_number":30,"context_line":"  the filters we don\u0027t pass down any limits for the resource claim."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fce034c_68f54ecb","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":9},"updated":"2019-04-11 22:42:30.000000000","message":"strike","commit_id":"85ee07ced650a7386c6ff1497b3c6b652203bd18"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1ccc54d01008a49221656ee31860adc17104f115","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  when failure is inevitable because of network provider, PCI device, NUMA"},{"line_number":27,"context_line":"  topology, etc."},{"line_number":28,"context_line":"* We could be trying to claim resources on the host that aren\u0027t available,"},{"line_number":29,"context_line":"  and/or, unintentionally over-subscribing the host because without running"},{"line_number":30,"context_line":"  the filters we don\u0027t pass down any limits for the resource claim."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fce034c_5ee36806","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":9},"in_reply_to":"3fce034c_68f54ecb","updated":"2019-04-12 01:59:41.000000000","message":"Done.","commit_id":"85ee07ced650a7386c6ff1497b3c6b652203bd18"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ae1099bd00c212147eae79a95665804c09462236","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* An admin wants to request that a server is created on a specified compute"},{"line_number":38,"context_line":"  host and/or node and have the request validated by the scheduler rather than"},{"line_number":39,"context_line":"  forced."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"},{"line_number":42,"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":12,"id":"3fce034c_a813360d","line":39,"updated":"2019-04-11 22:42:30.000000000","message":"it took me until here to realize that what we were trying to do is force to a host/node without bypassing filters. That could stand to be added to the intro paragraph.","commit_id":"85ee07ced650a7386c6ff1497b3c6b652203bd18"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1ccc54d01008a49221656ee31860adc17104f115","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* An admin wants to request that a server is created on a specified compute"},{"line_number":38,"context_line":"  host and/or node and have the request validated by the scheduler rather than"},{"line_number":39,"context_line":"  forced."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"},{"line_number":42,"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":12,"id":"3fce034c_9eba30dc","line":39,"in_reply_to":"3fce034c_a813360d","updated":"2019-04-12 01:59:41.000000000","message":"\u003e it took me until here to realize that what we were trying to do is\n \u003e force to a host/node without bypassing filters. That could stand to\n \u003e be added to the intro paragraph.\n\nGreat. I read the intro paragraph again and find it is really not very clearly for readers to know the spec\u0027s meaning.","commit_id":"85ee07ced650a7386c6ff1497b3c6b652203bd18"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"1ccc54d01008a49221656ee31860adc17104f115","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When admin users specify the `forced_host/forced_node`_ to create servers,"},{"line_number":14,"context_line":"nova will bypass the scheduler filters. This spec proposes to add two new"},{"line_number":15,"context_line":"params ``host`` and ``hypervisor_hostname`` as specified host and node to"},{"line_number":16,"context_line":"create servers without bypassing the scheduler filters in a new REST API"},{"line_number":17,"context_line":"microversion."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_7e98a469","line":16,"range":{"start_line":15,"start_character":44,"end_line":16,"end_character":54},"updated":"2019-04-12 01:59:41.000000000","message":"More clearly for readers to realize the spec\u0027s meaning.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"995dcaaf41678bcd1d34bbfa440f4388939fdfa4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_f9f26e9a","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"updated":"2019-04-12 04:18:12.000000000","message":"in the end, we won\u0027t persistent this. Since we may resize, migrate the instance again.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"d7e0bf94b35675e6ae267ab4e7483ef21ae62032","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_cf3244a8","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_14561f2b","updated":"2019-04-12 08:23:55.000000000","message":"\u003e Maybe we should persistent, but removed when the instance is\n \u003e running, consider this spec https://review.openstack.org/648686\n \u003e proposal, if we failed at first time boot, we can rebuild, so we\n \u003e still hope that rebuild on the specific host.\n\nOne thing is if the instance failed to boot because of lack of resources(cpu and/or mem). At this time, we will still fail to boot it later. So I think it is not a good idea to persistent it into requested_destination field to rebuild next time.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ac0e9652e23c949ff4d0c0b7ea88f1454ac38f7d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_6fb550ee","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_14561f2b","updated":"2019-04-12 07:17:08.000000000","message":"I think whether we persistent requested_destination should be the implementation detail. We just need to clarify the behavior here.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"240718b191784fef86e57700908bcfbd9fee9de2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_7e9cf95c","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_b36f1ec4","updated":"2019-04-15 14:03:36.000000000","message":"\u003e I think we can persistent it, since we will reset it when we do the\n \u003e migration https://github.com/openstack/nova/blob/master/nova/conductor/manager.py#L1034\n\nThat\u0027s not requested_destination, that\u0027s the force_host/force_node case, and really that should also not be persisted and is why we have to reset that field during every move operation, which is a pain.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"884820cb5e008b984653d826a5649066692150a3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_4bd2b35e","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_b36f1ec4","updated":"2019-04-13 12:53:56.000000000","message":"Done.\nI find the migration operation which will reset the requested_destination is include cold migration, live migration and unshelve. I did not describe detailed migration in this paragraph. Is it necessary? Did I miss some other migrations which do reset?","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"79924efac2cbf587d550868d91a0714f12b27aa5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_f0a03ca8","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_cf3244a8","updated":"2019-04-12 08:52:06.000000000","message":"\u003e \u003e Maybe we should persistent, but removed when the instance is\n \u003e \u003e running, consider this spec https://review.openstack.org/648686\n \u003e \u003e proposal, if we failed at first time boot, we can rebuild, so we\n \u003e \u003e still hope that rebuild on the specific host.\n \u003e \n \u003e One thing is if the instance failed to boot because of lack of\n \u003e resources(cpu and/or mem). At this time, we will still fail to boot\n \u003e it later. So I think it is not a good idea to persistent it into\n \u003e requested_destination field to rebuild next time.\n\nWe may failed at first time, but then there are other instances removed from that host, and then we rebuild instance may get enough resource.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"3256b52e0cceda7c43713ccfcb06edf8c16ea084","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_f375a699","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_f0a03ca8","updated":"2019-04-12 09:24:44.000000000","message":"\u003e We may failed at first time, but then there are other instances\n \u003e removed from that host, and then we rebuild instance may get enough\n \u003e resource.\n\nYeah, I missed this scene. :P\nThanks, Alex.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7fcdeeb171dca6fc639a99fa1cd95dc56e161be2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_b36f1ec4","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_f0a03ca8","updated":"2019-04-12 09:25:10.000000000","message":"I think we can persistent it, since we will reset it when we do the migration https://github.com/openstack/nova/blob/master/nova/conductor/manager.py#L1034","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"d7e0bf94b35675e6ae267ab4e7483ef21ae62032","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_6fdc7046","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_f9f26e9a","updated":"2019-04-12 08:23:55.000000000","message":"\u003e in the end, we won\u0027t persistent this. Since we may resize, migrate\n \u003e the instance again.\n\nDo not persistent this.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"041bb8f6b3974e5b23f1c0b4c1a1bfc6a72659e5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_14561f2b","line":49,"range":{"start_line":49,"start_character":2,"end_line":49,"end_character":35},"in_reply_to":"3fce034c_f9f26e9a","updated":"2019-04-12 06:51:56.000000000","message":"Maybe we should persistent, but removed when the instance is running, consider this spec https://review.openstack.org/648686 proposal, if we failed at first time boot, we can rebuild, so we still hope that rebuild on the specific host.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"162885421054d4c6769df7f14fc3a3c2b6f82f1a","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  We still leave the format az:host:node in this new microversion so users"},{"line_number":55,"context_line":"  have the option of either forcing the target during server creates or"},{"line_number":56,"context_line":"  requesting the target."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Alternatives"},{"line_number":59,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_542107b4","line":56,"range":{"start_line":54,"start_character":2,"end_line":56,"end_character":24},"updated":"2019-04-12 06:53:52.000000000","message":"what is happening, when the user both use this new way and the old az:host:node? I guess we can ask the API return 409, say you can specify this two parameter at same time.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"d7e0bf94b35675e6ae267ab4e7483ef21ae62032","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  We still leave the format az:host:node in this new microversion so users"},{"line_number":55,"context_line":"  have the option of either forcing the target during server creates or"},{"line_number":56,"context_line":"  requesting the target."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Alternatives"},{"line_number":59,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_ef1aa015","line":56,"range":{"start_line":54,"start_character":2,"end_line":56,"end_character":24},"in_reply_to":"3fce034c_542107b4","updated":"2019-04-12 08:23:55.000000000","message":"\u003e what is happening, when the user both use this new way and the old\n \u003e az:host:node? I guess we can ask the API return 409, say you can\n \u003e specify this two parameter at same time.\n\nGood point. Done.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"995dcaaf41678bcd1d34bbfa440f4388939fdfa4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"        \"server\": {"},{"line_number":107,"context_line":"            ..."},{"line_number":108,"context_line":"            \"host\": \"openstack-node\","},{"line_number":109,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_59f62292","line":109,"range":{"start_line":108,"start_character":12,"end_line":109,"end_character":51},"updated":"2019-04-12 04:18:12.000000000","message":"It\u0027s also we write the schema for this two field. For the host, it is easy, we can reuse existed schema from other API, like evacuate. For the \u0027hypervisor_hostanme\u0027, I guess it is same with host?","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"457970c72caac50cf71b637e1a46bd2fcc739eac","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"        \"server\": {"},{"line_number":107,"context_line":"            ..."},{"line_number":108,"context_line":"            \"host\": \"openstack-node\","},{"line_number":109,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_af75789a","line":109,"range":{"start_line":108,"start_character":12,"end_line":109,"end_character":51},"updated":"2019-04-12 06:58:36.000000000","message":"One thing I\u0027m thinking, if we failed to boot at first, then our show API will still show this two fields is empty. In that case, there is no way to get those two values back. But it should be ok.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"995dcaaf41678bcd1d34bbfa440f4388939fdfa4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"        \"server\": {"},{"line_number":107,"context_line":"            ..."},{"line_number":108,"context_line":"            \"host\": \"openstack-node\","},{"line_number":109,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_19a97a7a","line":109,"range":{"start_line":108,"start_character":12,"end_line":109,"end_character":51},"updated":"2019-04-12 04:18:12.000000000","message":"one thing I think we should clarify, what is the behavior when the user fill an non-existed host name.\n\nThere are two options\n1. we return early, by checking the DB.\n2. scheduler tell as there no valid host, and set the instance to error status.\n\nI prefer choice the #1.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"d7e0bf94b35675e6ae267ab4e7483ef21ae62032","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"        \"server\": {"},{"line_number":107,"context_line":"            ..."},{"line_number":108,"context_line":"            \"host\": \"openstack-node\","},{"line_number":109,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_4fe3b406","line":109,"range":{"start_line":108,"start_character":12,"end_line":109,"end_character":51},"in_reply_to":"3fce034c_19a97a7a","updated":"2019-04-12 08:23:55.000000000","message":"\u003e 1. we return early, by checking the DB.\n \u003e 2. scheduler tell as there no valid host, and set the instance to\n \u003e error status.\n \u003e \n \u003e I prefer choice the #1.\n\nMe too.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"d7e0bf94b35675e6ae267ab4e7483ef21ae62032","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"        \"server\": {"},{"line_number":107,"context_line":"            ..."},{"line_number":108,"context_line":"            \"host\": \"openstack-node\","},{"line_number":109,"context_line":"            \"hypervisor_hostname\": \"openstack-node\""},{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fce034c_8fbafcdb","line":109,"range":{"start_line":108,"start_character":12,"end_line":109,"end_character":51},"in_reply_to":"3fce034c_59f62292","updated":"2019-04-12 08:23:55.000000000","message":"Use the parameter_types.hostname both for \u0027host\u0027 and \u0027hypervisor_hostname\u0027.","commit_id":"5331efbac901e83c3ba00b0e8d9550e2ebdd2663"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5fdf1e2c737daae0b8a995801083f7611afbcf0c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. In the end, we won\u0027t persistent this requested_destination here."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_30ac848b","line":50,"range":{"start_line":50,"start_character":11,"end_line":50,"end_character":75},"updated":"2019-04-12 09:00:29.000000000","message":"I would say something like: \u0027the requested_destination won\u0027t be available for next time migration\u0027 (but please don\u0027t trust my english :) )\n\nThen we needn\u0027t mention the implement detail whether we should persistent it or not.","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"3256b52e0cceda7c43713ccfcb06edf8c16ea084","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. In the end, we won\u0027t persistent this requested_destination here."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_700d2c3d","line":50,"range":{"start_line":50,"start_character":11,"end_line":50,"end_character":75},"in_reply_to":"3fce034c_30ac848b","updated":"2019-04-12 09:24:44.000000000","message":"Done","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"673bafb6f11295e1d0330e2b96e0df7eaa0b84e4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. In the end, we won\u0027t persistent this requested_destination here."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":".. note::"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_de9e4d62","line":50,"range":{"start_line":50,"start_character":11,"end_line":50,"end_character":75},"in_reply_to":"3fce034c_30ac848b","updated":"2019-04-15 13:54:55.000000000","message":"requested_destination should never be persisted, it\u0027s already explicitly *not* persisted in the RequestSpec.","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5fdf1e2c737daae0b8a995801083f7611afbcf0c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. note::"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"  If admin users given both this new way and the old az:host:node, we will"},{"line_number":61,"context_line":"  ask the API to return an 409 HTTP Conflict. So we can only use one way"},{"line_number":62,"context_line":"  of them."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Alternatives"},{"line_number":65,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_b0ff1466","line":62,"range":{"start_line":60,"start_character":1,"end_line":62,"end_character":10},"updated":"2019-04-12 09:00:29.000000000","message":"The api impact section is good place to describe this.","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"3256b52e0cceda7c43713ccfcb06edf8c16ea084","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. note::"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"  If admin users given both this new way and the old az:host:node, we will"},{"line_number":61,"context_line":"  ask the API to return an 409 HTTP Conflict. So we can only use one way"},{"line_number":62,"context_line":"  of them."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Alternatives"},{"line_number":65,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_900a1824","line":62,"range":{"start_line":60,"start_character":1,"end_line":62,"end_character":10},"in_reply_to":"3fce034c_b0ff1466","updated":"2019-04-12 09:24:44.000000000","message":"Done","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5fdf1e2c737daae0b8a995801083f7611afbcf0c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"the actions are as followed:"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":123,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, we"},{"line_number":124,"context_line":"  will return ``NoValidHost`` exception early and an HTTP 400 Bad Request"},{"line_number":125,"context_line":"  will be served to Admin users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_b0e634e8","line":124,"range":{"start_line":123,"start_character":64,"end_line":124,"end_character":45},"updated":"2019-04-12 09:00:29.000000000","message":"I guess it should be an exception by the db call, like ComputeNodeNotFound something. But I think we needn\u0027t mention what exception will be raised, we just say what status code return at here.","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"3256b52e0cceda7c43713ccfcb06edf8c16ea084","unresolved":false,"context_lines":[{"line_number":120,"context_line":"the actions are as followed:"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":123,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, we"},{"line_number":124,"context_line":"  will return ``NoValidHost`` exception early and an HTTP 400 Bad Request"},{"line_number":125,"context_line":"  will be served to Admin users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_3007a41f","line":124,"range":{"start_line":123,"start_character":64,"end_line":124,"end_character":45},"in_reply_to":"3fce034c_b0e634e8","updated":"2019-04-12 09:24:44.000000000","message":"Done","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5fdf1e2c737daae0b8a995801083f7611afbcf0c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":120,"context_line":"the actions are as followed:"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":123,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, we"},{"line_number":124,"context_line":"  will return ``NoValidHost`` exception early and an HTTP 400 Bad Request"},{"line_number":125,"context_line":"  will be served to Admin users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":128,"context_line":"  first to check whether we can fetch a compute node by this"},{"line_number":129,"context_line":"  ``hypervisor_hostname`` from DB. If not, we will return ``NoValidHost``"},{"line_number":130,"context_line":"  exception early and an HTTP 400 Bad Request will be served to Admin users."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"- If both ``host`` and ``hypervisor_hostname`` are supplied in request body,"},{"line_number":133,"context_line":"  Compute API will first to check whether we can fetch a compute node by"},{"line_number":134,"context_line":"  ``host`` and ``hypervisor_hostname`` from DB. If not, we will return"},{"line_number":135,"context_line":"  ``NoValidHost`` exception early and an HTTP 400 Bad Request will be served"},{"line_number":136,"context_line":"  to Admin users."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Only show new parameters changed JSON schema definition for body"},{"line_number":139,"context_line":"  data of ``server``:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fce034c_70d0ccf8","line":136,"range":{"start_line":122,"start_character":0,"end_line":136,"end_character":17},"updated":"2019-04-12 09:00:29.000000000","message":"nice, thanks","commit_id":"d6d9a879fbc74042838de5433598b6fa2c2b0d8b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When admin users specify the `forced_host/forced_node`_ to create servers,"},{"line_number":14,"context_line":"nova will bypass the scheduler filters. This spec proposes to add two new"},{"line_number":15,"context_line":"params ``host`` and ``hypervisor_hostname`` as specified host and node to"},{"line_number":16,"context_line":"create servers without bypassing the scheduler filters in a new REST API"},{"line_number":17,"context_line":"microversion."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_5eb25de8","line":15,"range":{"start_line":15,"start_character":44,"end_line":15,"end_character":70},"updated":"2019-04-15 14:05:38.000000000","message":"to specify the host and/or node","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When admin users specify the `forced_host/forced_node`_ to create servers,"},{"line_number":14,"context_line":"nova will bypass the scheduler filters. This spec proposes to add two new"},{"line_number":15,"context_line":"params ``host`` and ``hypervisor_hostname`` as specified host and node to"},{"line_number":16,"context_line":"create servers without bypassing the scheduler filters in a new REST API"},{"line_number":17,"context_line":"microversion."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_595a77f3","line":15,"range":{"start_line":15,"start_character":44,"end_line":15,"end_character":70},"in_reply_to":"3fce034c_5eb25de8","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  topology, etc."},{"line_number":29,"context_line":"* We could be trying to claim resources on the host that aren\u0027t available,"},{"line_number":30,"context_line":"  and/or unintentionally over-subscribing the host because without running"},{"line_number":31,"context_line":"  the filters we don\u0027t pass down any limits for the resource claim."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_3320eab0","line":31,"range":{"start_line":31,"start_character":13,"end_line":31,"end_character":43},"updated":"2019-04-15 13:49:25.000000000","message":"Technically, only NUMATopologyFilter now passes down a limits parameter now that {Disk/Core/RAM}Filter are deprecated but okay (at least AFAIK)","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"This change adds the following use case to the system:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"* An admin wants to request that a server is created on a specified compute"},{"line_number":39,"context_line":"  host and/or node and have the request validated by the scheduler filter"},{"line_number":40,"context_line":"  rather than forced."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_f329029b","line":39,"range":{"start_line":39,"start_character":67,"end_line":39,"end_character":73},"updated":"2019-04-15 13:49:25.000000000","message":"nit: filters","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"This change adds the following use case to the system:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"* An admin wants to request that a server is created on a specified compute"},{"line_number":39,"context_line":"  host and/or node and have the request validated by the scheduler filter"},{"line_number":40,"context_line":"  rather than forced."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_f9fd63b1","line":39,"range":{"start_line":39,"start_character":67,"end_line":39,"end_character":73},"in_reply_to":"3fce034c_f329029b","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* Add ``host`` and ``hypervisor_hostname`` to the REST API ``POST /servers``."},{"line_number":46,"context_line":"* Add a new policy ``os_compute_api:servers:create:requested_destination`` to"},{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_b31dba74","line":46,"updated":"2019-04-15 13:49:25.000000000","message":"++","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_d307261c","line":50,"range":{"start_line":50,"start_character":19,"end_line":50,"end_character":29},"updated":"2019-04-15 13:49:25.000000000","message":"nit: persist","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_d948a7cd","line":50,"range":{"start_line":50,"start_character":19,"end_line":50,"end_character":29},"in_reply_to":"3fce034c_d307261c","updated":"2019-04-15 15:39:38.000000000","message":"Will remove it.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"240718b191784fef86e57700908bcfbd9fee9de2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_1e6db531","line":51,"range":{"start_line":50,"start_character":11,"end_line":51,"end_character":52},"updated":"2019-04-15 14:03:36.000000000","message":"I really don\u0027t think we should be persisting this per-operation information. The RequestSpec is specifically not persisting this field along with several other per-operation fields because of the mess it causes in later move operations and we have had several bugs as a result of the fact that RequestSpec originally persisted everything (including force_hosts and force_nodes). Off my head here are examples:\n\nhttps://launchpad.net/bugs/1669054\n\nhttps://bugs.launchpad.net/nova/+bug/1797580\n\nhttps://bugs.launchpad.net/nova/+bug/1738094\n\nhttps://bugs.launchpad.net/nova/+bug/1815153\n\nNot to mention we have to call reset_forced_destinations in all move operations because we made the mistake of persisting force_hosts and force_nodes. Persisting anything in the request spec that can affect later move operations is a really bad idea, and I\u0027ve been dealing with having to fix it for a long time now.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_0bc5765b","line":51,"range":{"start_line":50,"start_character":11,"end_line":51,"end_character":52},"in_reply_to":"3fce034c_1e6db531","updated":"2019-04-15 15:39:38.000000000","message":"\u003e I really don\u0027t think we should be persisting this per-operation\n \u003e information. The RequestSpec is specifically not persisting this\n \u003e field along with several other per-operation fields because of the\n \u003e mess it causes in later move operations and we have had several\n \u003e bugs as a result of the fact that RequestSpec originally persisted\n \u003e everything (including force_hosts and force_nodes).\n\nI will remove this sentence.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8b911ae40ed4409950f99a2c8c2ae8a7c0e0d47d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_7e495989","line":51,"range":{"start_line":50,"start_character":11,"end_line":51,"end_character":52},"in_reply_to":"3fce034c_1e6db531","updated":"2019-04-15 14:09:27.000000000","message":"My initial point is also just ensuring we can migration the instance after initial spawn. Maybe we just need to confirm the behaviour we expect at here. We needn\u0027t metion persistent it or not at here, since that is kind of implementation detail. But yes, I messed up with the detail.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_ab2b02e9","line":51,"range":{"start_line":50,"start_character":11,"end_line":51,"end_character":52},"in_reply_to":"3fce034c_5909172a","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02a95a42056703db5187cc563c438115184dfed9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  limit ``host`` and ``hypervisor_hostname`` only for admin."},{"line_number":48,"context_line":"* Translate ``host`` and ``hypervisor_hostname`` to a"},{"line_number":49,"context_line":"  RequestSpec.requested_destination which still goes through the scheduler"},{"line_number":50,"context_line":"  filters. We will persistent this requested_destination\u0027s value into DB"},{"line_number":51,"context_line":"  because we will reset it when we do the migration."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. note::"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_5909172a","line":51,"range":{"start_line":50,"start_character":11,"end_line":51,"end_character":52},"in_reply_to":"3fce034c_7e495989","updated":"2019-04-15 14:11:25.000000000","message":"\u003e My initial point is also just ensuring we can migration the\n \u003e instance after initial spawn. Maybe we just need to confirm the\n \u003e behaviour we expect at here. We needn\u0027t metion persistent it or not\n \u003e at here, since that is kind of implementation detail. But yes, I\n \u003e messed up with the detail.\n\nSure, so let\u0027s just say that will be supported and add a bullet in the testing section that we\u0027ll test those scenarios (create a server on a requested host/node and then move it - live migrate, evacuate, cold migrate and unshelve - to make sure it moves to another host and isn\u0027t restricted to the original requested destination).","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"``host\u003dopenstack-node``. At last, we create a flavor and set metadata for"},{"line_number":78,"context_line":"this flavor with ``aggregate_instance_extra_specs:host\u003dopenstack-node``. So"},{"line_number":79,"context_line":"when we choose the flavor to create instances, all will be on the host"},{"line_number":80,"context_line":"\"openstack-node\"."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"In this case, creating an aggregate and flavor pinned to that aggregate for"},{"line_number":83,"context_line":"every host/node in a large cloud is not manageable and would also potentially"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_9eff6500","line":80,"updated":"2019-04-15 13:49:25.000000000","message":"Not sure you need to explain how the filter works but... okay","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        }"},{"line_number":112,"context_line":"    }"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_5ee7bde5","line":114,"range":{"start_line":114,"start_character":21,"end_line":114,"end_character":25},"updated":"2019-04-15 14:05:38.000000000","message":"how","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        }"},{"line_number":112,"context_line":"    }"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_b917dba3","line":114,"range":{"start_line":114,"start_character":21,"end_line":114,"end_character":25},"in_reply_to":"3fce034c_5ee7bde5","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_be090196","line":117,"range":{"start_line":117,"start_character":26,"end_line":117,"end_character":28},"updated":"2019-04-15 14:05:38.000000000","message":"in the","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_7e039974","line":117,"range":{"start_line":117,"start_character":66,"end_line":117,"end_character":68},"updated":"2019-04-15 14:05:38.000000000","message":"strike","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_598357cd","line":117,"range":{"start_line":117,"start_character":66,"end_line":117,"end_character":68},"in_reply_to":"3fce034c_7e039974","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_196dcf31","line":117,"range":{"start_line":117,"start_character":26,"end_line":117,"end_character":28},"in_reply_to":"3fce034c_be090196","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_feeea9b2","line":118,"range":{"start_line":118,"start_character":38,"end_line":118,"end_character":40},"updated":"2019-04-15 14:05:38.000000000","message":"for","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_99c77f13","line":118,"range":{"start_line":118,"start_character":38,"end_line":118,"end_character":40},"in_reply_to":"3fce034c_feeea9b2","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_be2ee1f7","line":119,"range":{"start_line":119,"start_character":41,"end_line":119,"end_character":46},"updated":"2019-04-15 14:05:38.000000000","message":"Probably not necessary to say \"to admin users\" since we\u0027ve already made it clear that only admins can use these new fields.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_9e2be5e9","line":119,"range":{"start_line":119,"start_character":31,"end_line":119,"end_character":37},"updated":"2019-04-15 14:05:38.000000000","message":"returned","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_b9ca7b17","line":119,"range":{"start_line":119,"start_character":31,"end_line":119,"end_character":37},"in_reply_to":"3fce034c_9e2be5e9","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_19db8fed","line":119,"range":{"start_line":119,"start_character":41,"end_line":119,"end_character":46},"in_reply_to":"3fce034c_be2ee1f7","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"},{"line_number":123,"context_line":"  ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad Request will"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_1e3ff525","line":120,"updated":"2019-04-15 14:05:38.000000000","message":"above grammar issues apply to the following bullets too.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"},{"line_number":123,"context_line":"  ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad Request will"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_2b3f1226","line":120,"in_reply_to":"3fce034c_1e3ff525","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"},{"line_number":123,"context_line":"  ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad Request will"},{"line_number":124,"context_line":"  be served to Admin users."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"- If both ``host`` and ``hypervisor_hostname`` are supplied in request body,"},{"line_number":127,"context_line":"  Compute API will first to check whether we can fetch a compute node by"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_be3a6195","line":124,"range":{"start_line":117,"start_character":0,"end_line":124,"end_character":27},"updated":"2019-04-15 13:49:25.000000000","message":"I\u0027m not super happy with only accepting one of the two parameters. There can be situations where :\n- there are multiple nodes per service and in this case you would get more than one record with the \u0027host\u0027 parameter\n- there can be multiple services potentially having the same node name and in this case you could get multiple records when passing only \u0027hypervisor_hostname\u0027\n\nFor those reasons, I think we should *EITHER* only accept a tuple (host, hypervisor_hostname) as a way to say the target name *OR* returning HTTP400 if there are multiple records with each of the above.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbeb922150eaa49332cb37b921b639485e4b3cba","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Depending on whether/what the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":115,"context_line":"the actions are as followed:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"- If ``host`` is supplied in request body, Compute API will first to check"},{"line_number":118,"context_line":"  whether we can fetch a compute node by this ``host`` from DB. If not, an"},{"line_number":119,"context_line":"  HTTP 400 Bad Request will be served to Admin users."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"- If ``hypervisor_hostname`` is supplied in request body, Compute API will"},{"line_number":122,"context_line":"  first to check whether we can fetch a compute node by this"},{"line_number":123,"context_line":"  ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad Request will"},{"line_number":124,"context_line":"  be served to Admin users."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"- If both ``host`` and ``hypervisor_hostname`` are supplied in request body,"},{"line_number":127,"context_line":"  Compute API will first to check whether we can fetch a compute node by"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_bebfc1ce","line":124,"range":{"start_line":117,"start_character":0,"end_line":124,"end_character":27},"in_reply_to":"3fce034c_be3a6195","updated":"2019-04-15 13:54:08.000000000","message":"\u003e there are multiple nodes per service and in this case you would get more than one record with the \u0027host\u0027 parameter\n\nYou can already get this today with the az hack though. What happens during scheduling in that case? We should just be picking the one node that matches force_nodes right? And for ironic (which is our only 1:M driver like this) that should be an exact match since the node name is a UUID.\n\n\u003e there can be multiple services potentially having the same node name and in this case you could get multiple records when passing only \u0027hypervisor_hostname\u0027\n\nHow can that be true when the node names are UUIDs? Is this a real case or just something you\u0027re worried about because the data model allows it?","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":128,"context_line":"  ``host`` and ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad"},{"line_number":129,"context_line":"  Request will be served to Admin users."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Only show new parameters changed JSON schema definition for body"},{"line_number":132,"context_line":"  data of ``server``:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_5e0edd8d","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":1},"updated":"2019-04-15 14:05:38.000000000","message":"-","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"  ``host`` and ``hypervisor_hostname`` from DB. If not, an HTTP 400 Bad"},{"line_number":129,"context_line":"  Request will be served to Admin users."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Only show new parameters changed JSON schema definition for body"},{"line_number":132,"context_line":"  data of ``server``:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_f9a6c353","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":1},"in_reply_to":"3fce034c_5e0edd8d","updated":"2019-04-15 15:39:38.000000000","message":"Remove this symbol. Change the situation of this paragraph.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  Request will be served to Admin users."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Only show new parameters changed JSON schema definition for body"},{"line_number":132,"context_line":"  data of ``server``:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_3e23d107","line":132,"updated":"2019-04-15 14:05:38.000000000","message":"I don\u0027t understand this sentence.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  Request will be served to Admin users."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* Only show new parameters changed JSON schema definition for body"},{"line_number":132,"context_line":"  data of ``server``:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_2b41523a","line":132,"in_reply_to":"3fce034c_3e23d107","updated":"2019-04-15 15:39:38.000000000","message":"I just indicate json schema definition for new parameters. More json schema definition of creating server are not displayed here.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"733cc995d270f140d7072f752068bb3b1691b21a","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"  If admin users given both this new way and the old az:host:node, we will"},{"line_number":142,"context_line":"  ask the API to return an 409 HTTP Conflict. So we can only use one way"},{"line_number":143,"context_line":"  of them."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_5e41fd0a","line":143,"updated":"2019-04-15 13:49:25.000000000","message":"++","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f2d07df1ba41d356c9341844a8223d6cd9c16a58","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":".. note::"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"  If admin users given both this new way and the old az:host:node, we will"},{"line_number":142,"context_line":"  ask the API to return an 409 HTTP Conflict. So we can only use one way"},{"line_number":143,"context_line":"  of them."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_1e56155e","line":143,"range":{"start_line":141,"start_character":2,"end_line":143,"end_character":10},"updated":"2019-04-15 14:05:38.000000000","message":"Suggest reword:\n\nThe new (``host``/``hypervisor_hostname``) and old (``az:host:node``) mechanisms are mutually exclusive. If both are specified in the same request, the API will return a 409 HTTP Conflict error.","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"44b52f44fb62a1eabf430f2a7442f57cf20cd32e","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":".. note::"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"  If admin users given both this new way and the old az:host:node, we will"},{"line_number":142,"context_line":"  ask the API to return an 409 HTTP Conflict. So we can only use one way"},{"line_number":143,"context_line":"  of them."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fce034c_6b351a46","line":143,"range":{"start_line":141,"start_character":2,"end_line":143,"end_character":10},"in_reply_to":"3fce034c_1e56155e","updated":"2019-04-15 15:39:38.000000000","message":"Done","commit_id":"940067cbc4627e677c01d76d970727bdc0813278"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d433c88bd40f85851e7fec9d7c869f588ee561af","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  We still leave the format az:host:node in this new microversion so users"},{"line_number":55,"context_line":"  have the option of either forcing the target during server creates or"},{"line_number":56,"context_line":"  requesting the target."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Alternatives"},{"line_number":59,"context_line":"------------"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_f0632ddb","line":57,"updated":"2019-04-15 19:48:29.000000000","message":"I think Alex also wanted the spec to say that moving the server after the initial create will be supported and not restricted by any requested destination when the server was created. Implementation details don\u0027t need to be in the spec, but I think he\u0027s looking for that to be clarified.\n\nIt is implied by the functional test wrinkle below though, so maybe that is sufficient.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"398ae9abd515de0f46296958164c62985f292923","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  We still leave the format az:host:node in this new microversion so users"},{"line_number":55,"context_line":"  have the option of either forcing the target during server creates or"},{"line_number":56,"context_line":"  requesting the target."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Alternatives"},{"line_number":59,"context_line":"------------"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_bff81149","line":57,"in_reply_to":"3fce034c_1c5a93f2","updated":"2019-04-16 03:04:06.000000000","message":"ok. When coding to implement this spec, I will add more scenarios tests to cover them. thanks @matt @alex :)","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d4a4c633f7c729478d8ed8980416f81c9899c883","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  We still leave the format az:host:node in this new microversion so users"},{"line_number":55,"context_line":"  have the option of either forcing the target during server creates or"},{"line_number":56,"context_line":"  requesting the target."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Alternatives"},{"line_number":59,"context_line":"------------"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_1c5a93f2","line":57,"in_reply_to":"3fce034c_f0632ddb","updated":"2019-04-15 23:31:28.000000000","message":"yea.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d433c88bd40f85851e7fec9d7c869f588ee561af","unresolved":false,"context_lines":[{"line_number":117,"context_line":"  \u0027host\u0027: parameter_types.hostname"},{"line_number":118,"context_line":"  \u0027hypervisor_hostname\u0027: parameter_types.hostname"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Depending on whether/how the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":121,"context_line":"the actions are as followed:"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_509321a4","line":120,"updated":"2019-04-15 19:48:29.000000000","message":"Today we don\u0027t do this kind of validation for the az:host:node case (force host/node), but that likely means we just fail with NoValidHost if you specify a host and/or node that doesn\u0027t exist, and I suppose it\u0027s better to fail fast in the API with a clear response to the user.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d433c88bd40f85851e7fec9d7c869f588ee561af","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Depending on whether/how the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":121,"context_line":"the actions are as followed:"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"},{"line_number":124,"context_line":"  whether we can fetch a compute node for this ``host`` from DB. If not, an"},{"line_number":125,"context_line":"  HTTP 400 Bad Request will be returned to users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_d0ecf12a","line":125,"range":{"start_line":123,"start_character":0,"end_line":125,"end_character":49},"updated":"2019-04-15 19:48:29.000000000","message":"What if \u0027host\u0027 is specified but \u0027hypervisor_hostname\u0027 is not specified and the host resolves to multiple compute nodes (the ironic case)? Will we just continue to pass through to the scheduler and let it pick any node from that host? Or will we fail with a 400 error? As written I assume we\u0027ll do the former.\n\nI\u0027m OK with letting the scheduler pick from one of the nodes on the specified host, but I don\u0027t think the scheduler code works that way today (it assumes that if requested_destination is set with a host the nodename will also be set):\n\nhttps://github.com/openstack/nova/blob/78e742662edd164c46382c31e106884762fed029/nova/scheduler/host_manager.py#L541\n\nSo that would have to be adjusted to handle node being None.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"1e04f901eb2a535641450cc37517c8ae472cc7bc","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Depending on whether/how the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":121,"context_line":"the actions are as followed:"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"},{"line_number":124,"context_line":"  whether we can fetch a compute node for this ``host`` from DB. If not, an"},{"line_number":125,"context_line":"  HTTP 400 Bad Request will be returned to users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_0056a15d","line":125,"range":{"start_line":123,"start_character":0,"end_line":125,"end_character":49},"in_reply_to":"3fce034c_9f80b58d","updated":"2019-04-16 08:58:44.000000000","message":"If multiple compute nodes are found in the DB in the API layer, *I* would leave the destination.node field empty in the api layer and amend the post filter [1] in scheduler layer to deal with cases where destination.node is empty. (Now the filter [1] assumes both destination.host and destination.node have values)\n[1] https://github.com/openstack/nova/blob/master/nova/scheduler/host_manager.py#L541\n\n@bauzas may say something about this because he suggests 400 bad request for this.\n\n\u003e now there is no function for us to get one compute node with hypervisor_hostname\n\nThe hypervisor_name exact matching compute node’s DB function is what I\u0027m working on in [2]. \n\n[2] https://review.openstack.org/#/c/650877/","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"398ae9abd515de0f46296958164c62985f292923","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Depending on whether/how the ``host`` and ``hypervisor_hostname`` is set,"},{"line_number":121,"context_line":"the actions are as followed:"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"},{"line_number":124,"context_line":"  whether we can fetch a compute node for this ``host`` from DB. If not, an"},{"line_number":125,"context_line":"  HTTP 400 Bad Request will be returned to users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_9f80b58d","line":125,"range":{"start_line":123,"start_character":0,"end_line":125,"end_character":49},"in_reply_to":"3fce034c_d0ecf12a","updated":"2019-04-16 03:04:06.000000000","message":"\u003e What if \u0027host\u0027 is specified but \u0027hypervisor_hostname\u0027 is not\n \u003e specified and the host resolves to multiple compute nodes (the\n \u003e ironic case)?\n\nAs far as know, in general, host:node is 1:1. Only for ironic deployments, host:node is 1:M.\n\nFor the compute_node object, I see that we have a function named `get_first_node_by_host_for_old_compat`[1]. In ironic deployments, when we pass a host to get compute nodes, we will get more than one compute nodes per host and we return the first node of them here.\n\nSo can I re-use the function for that scene when I only pass `host` param and no `hypervisor_hostname` to get one compute node?\n[1] https://github.com/openstack/nova/blob/master/nova/objects/compute_node.py#L275\n\nAnother case is that we pass `hypervisor_hostname` and no `host`, now there is no function for us to get one compute node with hypervisor_hostname(somewhere called nodename too). So I think we can add a new function for compute_node obejct to do that.\n\nLast case is that we pass both `host` and `hypervisor_hostname` params, so we can call the get_by_host_and_nodename[2] function to get one compute node.\n\n[2] https://github.com/openstack/nova/blob/master/nova/objects/compute_node.py#L268","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d433c88bd40f85851e7fec9d7c869f588ee561af","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  The new (``host`` and/or ``hypervisor_hostname``) and the old"},{"line_number":140,"context_line":"  (``az:host:node``) mechanisms are mutually exclusive. If both are specified"},{"line_number":141,"context_line":"  in the same request, the API will return a 409 HTTP Conflict error."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Security impact"},{"line_number":144,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_90a8a9db","line":141,"range":{"start_line":141,"start_character":45,"end_line":141,"end_character":62},"updated":"2019-04-15 19:48:29.000000000","message":"I don\u0027t know if 409 is really correct here, 400 might be better, but it\u0027s probably a question for cdent and/or edleafe.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"398ae9abd515de0f46296958164c62985f292923","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  The new (``host`` and/or ``hypervisor_hostname``) and the old"},{"line_number":140,"context_line":"  (``az:host:node``) mechanisms are mutually exclusive. If both are specified"},{"line_number":141,"context_line":"  in the same request, the API will return a 409 HTTP Conflict error."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Security impact"},{"line_number":144,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_0a84850b","line":141,"range":{"start_line":141,"start_character":45,"end_line":141,"end_character":62},"in_reply_to":"3fce034c_1017d9ef","updated":"2019-04-16 03:04:06.000000000","message":"Done","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e3db2b8712510391212fe1f0455848d11b900a9b","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  The new (``host`` and/or ``hypervisor_hostname``) and the old"},{"line_number":140,"context_line":"  (``az:host:node``) mechanisms are mutually exclusive. If both are specified"},{"line_number":141,"context_line":"  in the same request, the API will return a 409 HTTP Conflict error."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Security impact"},{"line_number":144,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fce034c_1017d9ef","line":141,"range":{"start_line":141,"start_character":45,"end_line":141,"end_character":62},"in_reply_to":"3fce034c_90a8a9db","updated":"2019-04-15 19:56:18.000000000","message":"409 is only used for otherwise valid requests that can\u0027t be fulfilled because \"something else happened\". Example: you send a valid request to change a status, but some other request already changed it.\n\nThis case is a plain old invalid request, so 400 is correct.","commit_id":"7fe8bb73bb9fdc5263e3f9ce0f36476f176f6cda"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e44a746025fa53a9887564ee640d9d4ffe56db4","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"},{"line_number":124,"context_line":"  whether we can fetch a compute node for this ``host`` from DB. If not, an"},{"line_number":125,"context_line":"  ``HTTP 400 Bad Request`` will be returned to users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fce034c_5d7012dd","line":125,"updated":"2019-04-16 08:37:23.000000000","message":"I left some concerns on PS16 that are still valid IMHO. Of course, you can use the horrible and legacy object method to get only one compute node (the first record) but this method is there just because the previous behaviours were not thinking about this problem.\n\nSo, OK, let\u0027s not discuss more about this, but FWIW, I\u0027d like to see the implementation be providing a HTTP400 if we find more than one node for the host.","commit_id":"eb3afea28eba5fb74cf137e556abd2f47981d1c7"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"a96be6fc8deb573b319c2ae973b42002983aa6fa","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"- If ``host`` is supplied in the request body, at first Compute API will check"},{"line_number":124,"context_line":"  whether we can fetch a compute node for this ``host`` from DB. If not, an"},{"line_number":125,"context_line":"  ``HTTP 400 Bad Request`` will be returned to users."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fce034c_d371510e","line":125,"in_reply_to":"3fce034c_5d7012dd","updated":"2019-04-16 09:45:08.000000000","message":"\u003e I left some concerns on PS16 that are still valid IMHO. Of course,\n \u003e you can use the horrible and legacy object method to get only one\n \u003e compute node (the first record) but this method is there just\n \u003e because the previous behaviours were not thinking about this\n \u003e problem.\n \u003e \n \u003e So, OK, let\u0027s not discuss more about this, but FWIW, I\u0027d like to\n \u003e see the implementation be providing a HTTP400 if we find more than\n \u003e one node for the host.\n\nYeah, I agree with you for the Ironic deployments then host:node is 1:M. So we will get more than one compute node if we only supply host.","commit_id":"eb3afea28eba5fb74cf137e556abd2f47981d1c7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6e44a746025fa53a9887564ee640d9d4ffe56db4","unresolved":false,"context_lines":[{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"},{"line_number":129,"context_line":"  ``hypervisor_hostname`` from DB. If not, an ``HTTP 400 Bad Request`` will"},{"line_number":130,"context_line":"  be returned to users."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"- If both ``host`` and ``hypervisor_hostname`` are supplied in the request"},{"line_number":133,"context_line":"  body, at first Compute API will check whether we can fetch a compute node"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fce034c_dd29629b","line":130,"updated":"2019-04-16 08:37:23.000000000","message":"And here, the same.\nOh, and FWIW, even if Ironic passes UUIDs for node names, you could possibly have two different tuples with (host1, UUID1) vs. (host2, UUID1) where host1 and host2 would be different compute services and UUID1 only one Ironic node.","commit_id":"eb3afea28eba5fb74cf137e556abd2f47981d1c7"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"a96be6fc8deb573b319c2ae973b42002983aa6fa","unresolved":false,"context_lines":[{"line_number":127,"context_line":"- If ``hypervisor_hostname`` is supplied in the request body, at first"},{"line_number":128,"context_line":"  Compute API will check whether we can fetch a compute node for this"},{"line_number":129,"context_line":"  ``hypervisor_hostname`` from DB. If not, an ``HTTP 400 Bad Request`` will"},{"line_number":130,"context_line":"  be returned to users."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"- If both ``host`` and ``hypervisor_hostname`` are supplied in the request"},{"line_number":133,"context_line":"  body, at first Compute API will check whether we can fetch a compute node"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3fce034c_7395fde3","line":130,"in_reply_to":"3fce034c_dd29629b","updated":"2019-04-16 09:45:08.000000000","message":"\u003e And here, the same.\n \u003e Oh, and FWIW, even if Ironic passes UUIDs for node names, you could\n \u003e possibly have two different tuples with (host1, UUID1) vs. (host2,\n \u003e UUID1) where host1 and host2 would be different compute services\n \u003e and UUID1 only one Ironic node.\n\nBut I do not agree with this option. In Ironic deployments, we will get host:node to M:1 ? It is concern for me.\nThanks @sbauza :)","commit_id":"eb3afea28eba5fb74cf137e556abd2f47981d1c7"}],"specs/train/approved/scheduler-filters-evaluated-even-forced-host.rst":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"29c4e20f7b8fa7f641ac74818e3601b81cef86ec","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Proposed change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* Add ``force_scheduler`` to the REST API ``POST /servers``."},{"line_number":40,"context_line":"* Get ``force_scheduler`` from spec_obj in function get_filtered_hosts. Then"},{"line_number":41,"context_line":"  judge the value of it, for example(pseudo-code):"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_4a7bf78a","line":39,"range":{"start_line":39,"start_character":2,"end_line":39,"end_character":60},"updated":"2019-03-27 04:18:48.000000000","message":"JSON request body should be described.\n\ne.g.\n{\n    \"server\" : {\n        ...\n    },\n    \"force_scheduler\": true\n}","commit_id":"51bfe31a587dc8aae7e348ef186d19284aa2ecb4"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"953c2ba199762ce11d5f3f287ce13f31b53b4ae0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Proposed change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* Add ``force_scheduler`` to the REST API ``POST /servers``."},{"line_number":40,"context_line":"* Get ``force_scheduler`` from spec_obj in function get_filtered_hosts. Then"},{"line_number":41,"context_line":"  judge the value of it, for example(pseudo-code):"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_de000c37","line":39,"range":{"start_line":39,"start_character":2,"end_line":39,"end_character":60},"in_reply_to":"5fc1f717_4a7bf78a","updated":"2019-03-27 06:57:28.000000000","message":"Done","commit_id":"51bfe31a587dc8aae7e348ef186d19284aa2ecb4"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"29c4e20f7b8fa7f641ac74818e3601b81cef86ec","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    if not force_scheduler:"},{"line_number":47,"context_line":"        return NonFilter(force_hosts) or []"},{"line_number":48,"context_line":"    return SchedulerFilter(force_hosts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Alternatives"},{"line_number":51,"context_line":"------------"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_aa6b7bb4","line":49,"updated":"2019-03-27 04:18:48.000000000","message":"Can \"force_scheduler\" be specified administrator only?","commit_id":"51bfe31a587dc8aae7e348ef186d19284aa2ecb4"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"953c2ba199762ce11d5f3f287ce13f31b53b4ae0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    if not force_scheduler:"},{"line_number":47,"context_line":"        return NonFilter(force_hosts) or []"},{"line_number":48,"context_line":"    return SchedulerFilter(force_hosts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Alternatives"},{"line_number":51,"context_line":"------------"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5fc1f717_5ec3bced","line":49,"in_reply_to":"5fc1f717_aa6b7bb4","updated":"2019-03-27 06:57:28.000000000","message":"Yeah. As the forced_host/forced_node is only for admin, so that the \"force_scheduler\" should only for administrator.\n\n:) Add policy to limit the param only for admin.\nTakashi, thanks for your review. :P","commit_id":"51bfe31a587dc8aae7e348ef186d19284aa2ecb4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/scheduler-filters-evaluated-even-forced-host"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When an admin user specify the ``forced_host/forced_node`` to create a server,"},{"line_number":14,"context_line":"nova will bypass the scheduler filters. This spec proposes to evaluate"},{"line_number":15,"context_line":"scheduler filters even with forced_host/forced_node. Add a new param"},{"line_number":16,"context_line":"``force_scheduler`` to create servers in a new REST API microversion."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_d6475a1e","line":13,"range":{"start_line":13,"start_character":32,"end_line":13,"end_character":56},"updated":"2019-03-29 14:37:24.000000000","message":"This is code-speak, not something someone familiar with the API but not the code might understand. I\u0027d recommend referencing https://docs.openstack.org/nova/latest/admin/availability-zones.html for clarity and use that in your examples.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/scheduler-filters-evaluated-even-forced-host"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When an admin user specify the ``forced_host/forced_node`` to create a server,"},{"line_number":14,"context_line":"nova will bypass the scheduler filters. This spec proposes to evaluate"},{"line_number":15,"context_line":"scheduler filters even with forced_host/forced_node. Add a new param"},{"line_number":16,"context_line":"``force_scheduler`` to create servers in a new REST API microversion."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_705e9877","line":13,"range":{"start_line":13,"start_character":32,"end_line":13,"end_character":56},"in_reply_to":"5fc1f717_d6475a1e","updated":"2019-04-01 09:24:43.000000000","message":"Done.\nAdd the link to introduce az:host:node","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Problem description"},{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"When an admin user specify the ``forced_host/forced_node`` to create a server,"},{"line_number":23,"context_line":"nova will bypass the scheduler filters and directly boot the server on the"},{"line_number":24,"context_line":"target host. Without the scheduler filters, a successful instance may break"},{"line_number":25,"context_line":"the server_group policy (affinity/anti-affinity) and a failure instance may"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_9651d2dc","line":22,"updated":"2019-03-29 14:37:24.000000000","message":"same","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Problem description"},{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"When an admin user specify the ``forced_host/forced_node`` to create a server,"},{"line_number":23,"context_line":"nova will bypass the scheduler filters and directly boot the server on the"},{"line_number":24,"context_line":"target host. Without the scheduler filters, a successful instance may break"},{"line_number":25,"context_line":"the server_group policy (affinity/anti-affinity) and a failure instance may"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_1053946e","line":22,"in_reply_to":"5fc1f717_9651d2dc","updated":"2019-04-01 09:24:43.000000000","message":"Done","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    {"},{"line_number":45,"context_line":"        \"server\": {"},{"line_number":46,"context_line":"            ...;"},{"line_number":47,"context_line":"            \"force_scheduler\": true"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_f6e056fb","line":47,"updated":"2019-03-29 14:37:24.000000000","message":"I really don\u0027t like this. What I\u0027d probably do in a new microversion is add two new parameters to replace forced_host/forced_node:\n\n* host - for forced_host, which also matches OS-EXT-SRV-ATTR:host in the response\n* hypervisor_hostname - for forced_node which matches OS-EXT-SRV-ATTR:hypervisor_hostname in the GET /servers/{server_id} response\n\nIf those are specified, the get translated to a RequestSpec.requested_destination which still goes through the scheduler filters, much like how cold/live migration and evacuate work with a target host specified.\n\nThe existing zone:host:node behavior could either be deprecated in the new microversion or left as-is, that\u0027s probably something worth discussing at the PTG. Meaning, if we have an alternative in the server create API to create a server on a specific host/node do we need to leave the old forced behavior which is likely dangerous, as noted for the cases in the problem description. I think as we\u0027ve moved closer to dropping support for \u0027forcing\u0027 servers onto hosts, we might want to consider dropping that zone:host:node forced support in the same microversion. Probably a discussion for the PTG though.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    {"},{"line_number":45,"context_line":"        \"server\": {"},{"line_number":46,"context_line":"            ...;"},{"line_number":47,"context_line":"            \"force_scheduler\": true"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_b0c080e2","line":47,"in_reply_to":"5fc1f717_f6e056fb","updated":"2019-04-01 09:24:43.000000000","message":"ok. Change it to add two params: host and hypervisor_hostname for the body to create instances.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"953c2ba199762ce11d5f3f287ce13f31b53b4ae0","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Add policy to limit ``force_scheduler`` only for admin."},{"line_number":52,"context_line":"* Get ``force_scheduler`` from spec_obj in function get_filtered_hosts. Then"},{"line_number":53,"context_line":"  judge the value of it, for example(pseudo-code):"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_5e689cf3","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":57},"updated":"2019-03-27 06:57:28.000000000","message":"Add policy limit into this spec here.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Add policy to limit ``force_scheduler`` only for admin."},{"line_number":52,"context_line":"* Get ``force_scheduler`` from spec_obj in function get_filtered_hosts. Then"},{"line_number":53,"context_line":"  judge the value of it, for example(pseudo-code):"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_966a327f","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":57},"in_reply_to":"5fc1f717_5e689cf3","updated":"2019-03-29 14:37:24.000000000","message":"We already have os_compute_api:servers:create:forced_host so why wouldn\u0027t we just re-use that?","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Add policy to limit ``force_scheduler`` only for admin."},{"line_number":52,"context_line":"* Get ``force_scheduler`` from spec_obj in function get_filtered_hosts. Then"},{"line_number":53,"context_line":"  judge the value of it, for example(pseudo-code):"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_50b59c7d","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":57},"in_reply_to":"5fc1f717_966a327f","updated":"2019-04-01 09:24:43.000000000","message":"Remove it. If we supply the \u0027host\u0027 and \u0027hypervisor_hostname\u0027, just re-use the policy of \u0027create:force_host\u0027 :)","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    force_scheduler \u003d spec_object.get(\u0027force_scheduler\u0027, False)"},{"line_number":58,"context_line":"    if not force_scheduler:"},{"line_number":59,"context_line":"        return NonFilter(force_hosts) or []"},{"line_number":60,"context_line":"    return SchedulerFilter(force_hosts)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_b6eaced5","line":59,"updated":"2019-03-29 14:37:24.000000000","message":"We have RequestSpec.requested_destination for just this reason.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    force_scheduler \u003d spec_object.get(\u0027force_scheduler\u0027, False)"},{"line_number":58,"context_line":"    if not force_scheduler:"},{"line_number":59,"context_line":"        return NonFilter(force_hosts) or []"},{"line_number":60,"context_line":"    return SchedulerFilter(force_hosts)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_10af142c","line":59,"in_reply_to":"5fc1f717_b6eaced5","updated":"2019-04-01 09:24:43.000000000","message":"Done","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Data model impact"},{"line_number":68,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_56028abc","line":65,"updated":"2019-03-29 14:37:24.000000000","message":"As noted in the mailing list, you could use the JsonFilter to specify a host or node and still run through the scheduler filters.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Data model impact"},{"line_number":68,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_f0a5a848","line":65,"in_reply_to":"5fc1f717_56028abc","updated":"2019-04-01 09:24:43.000000000","message":"Done","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"REST API impact"},{"line_number":73,"context_line":"---------------"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"In a new microversion add the ``force_scheduler`` flag from the API:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* POST /servers"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_56b92aea","line":75,"range":{"start_line":75,"start_character":55,"end_line":75,"end_character":59},"updated":"2019-03-29 14:37:24.000000000","message":"to","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"REST API impact"},{"line_number":73,"context_line":"---------------"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"In a new microversion add the ``force_scheduler`` flag from the API:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* POST /servers"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_9060e40f","line":75,"range":{"start_line":75,"start_character":55,"end_line":75,"end_character":59},"in_reply_to":"5fc1f717_56b92aea","updated":"2019-04-01 09:24:43.000000000","message":"Done","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"In a new microversion add the ``force_scheduler`` flag from the API:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* POST /servers"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Security impact"},{"line_number":80,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_f6c93679","line":77,"updated":"2019-03-29 14:37:24.000000000","message":"You should also specify the request schema for any new parameters to the API. I suspect you\u0027d just use the same request schema for the cold/live migrate and evacuate \u0027host\u0027 parameter.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"In a new microversion add the ``force_scheduler`` flag from the API:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* POST /servers"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Security impact"},{"line_number":80,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_b065e01f","line":77,"in_reply_to":"5fc1f717_f6c93679","updated":"2019-04-01 09:24:43.000000000","message":"Done","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"Security impact"},{"line_number":80,"context_line":"---------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"None"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Notifications impact"},{"line_number":85,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_76a306b3","line":82,"updated":"2019-03-29 14:37:24.000000000","message":"If you add a new policy rule, which I\u0027m not sure is needed, you should list it here.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"Security impact"},{"line_number":80,"context_line":"---------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"None"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Notifications impact"},{"line_number":85,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_d07d0cb3","line":82,"in_reply_to":"5fc1f717_76a306b3","updated":"2019-04-01 09:24:43.000000000","message":"No more policy will be added. So None here.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edb5cb6bfd02a52f8bf1ed0b80b18de6bc9221d3","unresolved":false,"context_lines":[{"line_number":141,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"* Add functional api_sample tests."},{"line_number":144,"context_line":"* Add microversion related test to tempest."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_d67afa23","line":144,"updated":"2019-03-29 14:37:24.000000000","message":"I doubt we actually need any tempest testing for this, we can test this sufficiently with in-tree functional tests, including negative scenarios like trying to specify creating a server in an anti-affinity group to a compute host where there is another server from the same group already on that host and verify it results in NoValidHost rather than violate the group policy.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"},{"author":{"_account_id":28706,"name":"Boxiang Zhu","email":"bxzhu_5355@163.com","username":"ZhuBoxiang"},"change_message_id":"2a7bf51b839ab03ce725acc9f3cef60e161012c5","unresolved":false,"context_lines":[{"line_number":141,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"* Add functional api_sample tests."},{"line_number":144,"context_line":"* Add microversion related test to tempest."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_50435c6d","line":144,"in_reply_to":"5fc1f717_d67afa23","updated":"2019-04-01 09:24:43.000000000","message":"Great. Only functional and unit test will be added.","commit_id":"851d16197ae17281824db0302d0fd1105e279d2f"}]}
