)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"},{"line_number":11,"context_line":"overwrite the value read from the compute agent driver."},{"line_number":12,"context_line":"This available bandwidth will change depending on every new port"},{"line_number":13,"context_line":"created/deleted/modified with a minimum bandwidth QoS network policy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f515b1d_6b80f5f5","line":10,"range":{"start_line":10,"start_character":41,"end_line":10,"end_character":47},"updated":"2017-10-02 00:14:18.000000000","message":"defined","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rodolfo Alonso Hernandez \u003crodolfo.alonso.hernandez@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-03 15:39:06 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_cf5a354f","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":17},"updated":"2017-10-03 15:49:33.000000000","message":"bandwidth","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"},{"line_number":11,"context_line":"overwrite the value read from the compute agent driver."},{"line_number":12,"context_line":"This available bandwidth will change depending on every new port"},{"line_number":13,"context_line":"created/deleted/modified with a minimum bandwidth QoS network policy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_4f3405fc","line":10,"range":{"start_line":10,"start_character":15,"end_line":10,"end_character":53},"updated":"2017-10-03 15:49:33.000000000","message":"s/hardware device or a user define value/network backend/","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"},{"line_number":11,"context_line":"overwrite the value read from the compute agent driver."},{"line_number":12,"context_line":"This available bandwidth will change depending on every new port"},{"line_number":13,"context_line":"created/deleted/modified with a minimum bandwidth QoS network policy"},{"line_number":14,"context_line":"defined."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_2f39c9f1","line":11,"range":{"start_line":10,"start_character":53,"end_line":11,"end_character":55},"updated":"2017-10-03 15:49:33.000000000","message":"remove this part of the sentence. it\u0027s not necessary in the commit message.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rodolfo Alonso Hernandez \u003crodolfo.alonso.hernandez@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-04 18:15:39 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_eabc986d","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":17},"updated":"2017-10-04 20:29:45.000000000","message":"bandwidth :)","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"},{"line_number":11,"context_line":"overwrite the value read from the compute agent driver."},{"line_number":12,"context_line":"This available bandwidth will change depending on every new port"},{"line_number":13,"context_line":"created/deleted/modified with a minimum bandwidth QoS network policy"},{"line_number":14,"context_line":"defined."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_4a5bac53","line":11,"range":{"start_line":10,"start_character":15,"end_line":11,"end_character":55},"updated":"2017-10-04 20:29:45.000000000","message":"replace all of this highlighted text with \"network backend\"","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"26f72771a53cafce9eadc880d2ad20dec4ffb6d9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rodolfo Alonso Hernandez \u003crodolfo.alonso.hernandez@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-05 16:32:04 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Network bandwitdh resource provider"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This resource provider will model the total amount of bandwidth"},{"line_number":10,"context_line":"available in a hardware device or a user define value, which will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7f515b1d_ab1c4677","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":17},"updated":"2017-10-05 15:35:36.000000000","message":"I think this is the 5th straight revision I\u0027ve pointed out this spelling mistake :)","commit_id":"086481d1a6a824965d8f30842d911cdf719a32be"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"eef37202b1f5a18ab90afb49db3004a6504674ee","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes adding new resource classes representing network"},{"line_number":10,"context_line":"bandwidth and modeling network backends as resource providers in"},{"line_number":11,"context_line":"placement. As well as adding scheduling support for the new resources in Nova."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"blueprint bandwidth-resource-provider"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"9f6a8fd7_215e4d12","line":11,"range":{"start_line":11,"start_character":73,"end_line":11,"end_character":78},"updated":"2018-05-01 02:49:11.000000000","message":"nit: line too long","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes adding new resource classes representing network"},{"line_number":10,"context_line":"bandwidth and modeling network backends as resource providers in"},{"line_number":11,"context_line":"placement. As well as adding scheduling support for the new resources in Nova."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"blueprint bandwidth-resource-provider"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"9f6a8fd7_bdf49e88","line":11,"range":{"start_line":11,"start_character":73,"end_line":11,"end_character":78},"in_reply_to":"9f6a8fd7_215e4d12","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"}],"specs/queens/approved/bandwidth-resource-provider.rst":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/bandwidth-resource-provider"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_eba3c5b0","line":13,"range":{"start_line":13,"start_character":69,"end_line":13,"end_character":76},"updated":"2017-10-02 00:14:18.000000000","message":"I would remove this","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/bandwidth-resource-provider"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_e13d0bbb","line":13,"range":{"start_line":13,"start_character":69,"end_line":13,"end_character":76},"in_reply_to":"7f515b1d_eba3c5b0","updated":"2017-10-03 14:40:09.000000000","message":"You are right, it\u0027s duplicated","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/bandwidth-resource-provider"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_cba6c9c1","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":12},"updated":"2017-10-02 00:14:18.000000000","message":"the placement","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/bandwidth-resource-provider"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_a143933e","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":12},"in_reply_to":"7f515b1d_cba6c9c1","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_aba94d90","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":20},"updated":"2017-10-02 00:14:18.000000000","message":"I would remove this. overly redundant","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider defined"},{"line_number":14,"context_line":"in placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the network bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_8178978f","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":20},"in_reply_to":"7f515b1d_aba94d90","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","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":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_8bac519f","line":22,"range":{"start_line":22,"start_character":32,"end_line":22,"end_character":36},"updated":"2017-10-02 00:14:18.000000000","message":"in the Nova","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","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":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_2171e3a8","line":22,"range":{"start_line":22,"start_character":32,"end_line":22,"end_character":36},"in_reply_to":"7f515b1d_8bac519f","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7be677df2da78810b7a7c4f1f0e70b3b32ba09e6","unresolved":false,"context_lines":[{"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":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df6247ed_898d597d","line":23,"range":{"start_line":23,"start_character":35,"end_line":23,"end_character":37},"updated":"2017-09-19 21:17:49.000000000","message":"shouldn\u0027t be \"on a host\"?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"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":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_6b97d549","line":23,"range":{"start_line":23,"start_character":35,"end_line":23,"end_character":37},"in_reply_to":"df6247ed_898d597d","updated":"2017-10-02 00:14:18.000000000","message":"I think in is fine","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_4b92d958","line":24,"range":{"start_line":24,"start_character":64,"end_line":24,"end_character":73},"updated":"2017-10-02 00:14:18.000000000","message":"available bandwidth","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Currently there is no method in Nova scheduler to allocate an instance based"},{"line_number":23,"context_line":"on the network bandwidth available in a host. Nova host information doesn\u0027t"},{"line_number":24,"context_line":"track the different network back-ends present in a host and its bandwidth."},{"line_number":25,"context_line":"Nova is supposed not to store or have defined any network topology."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_c161efd4","line":24,"range":{"start_line":24,"start_character":64,"end_line":24,"end_character":73},"in_reply_to":"7f515b1d_4b92d958","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"---------"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":31,"context_line":"wants a defined guaranteed bandwidth for this port. Nova scheduler must"},{"line_number":32,"context_line":"select a host which satisfies this request."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_2b9d5d65","line":31,"range":{"start_line":31,"start_character":52,"end_line":31,"end_character":56},"updated":"2017-10-02 00:14:18.000000000","message":"The Nova","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":28,"context_line":"---------"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":31,"context_line":"wants a defined guaranteed bandwidth for this port. Nova scheduler must"},{"line_number":32,"context_line":"select a host which satisfies this request."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_81865765","line":31,"range":{"start_line":31,"start_character":52,"end_line":31,"end_character":56},"in_reply_to":"7f515b1d_2b9d5d65","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Proposed change"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"This spec proposes a new Resource Class to define the available network"},{"line_number":44,"context_line":"bandwidth in a network device or resource. This new standard Resource Class"},{"line_number":45,"context_line":"will have a enumerate topic in `ResourceClass` located in nova.objects.fields:"},{"line_number":46,"context_line":"`NETWORK_BW_KBPS`. This represents the total amount of kilobits per second"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_0b986172","line":43,"range":{"start_line":43,"start_character":64,"end_line":43,"end_character":71},"updated":"2017-10-02 00:14:18.000000000","message":"I think this is redundant","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Proposed change"},{"line_number":41,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"This spec proposes a new Resource Class to define the available network"},{"line_number":44,"context_line":"bandwidth in a network device or resource. This new standard Resource Class"},{"line_number":45,"context_line":"will have a enumerate topic in `ResourceClass` located in nova.objects.fields:"},{"line_number":46,"context_line":"`NETWORK_BW_KBPS`. This represents the total amount of kilobits per second"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_61891b73","line":43,"range":{"start_line":43,"start_character":64,"end_line":43,"end_character":71},"in_reply_to":"7f515b1d_0b986172","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"`NETWORK_BW_KBPS`. This represents the total amount of kilobits per second"},{"line_number":47,"context_line":"ready to be allocated by a virtual machine network interface."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Network bandwidth description in placement API"},{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_8b857109","line":49,"updated":"2017-10-02 00:14:18.000000000","message":"The description in this section and the next one doesn\u0027t seem to match what is described in the corresponding Neutron spec: https://review.openstack.org/#/c/508149. Should this spec should be updated in light of what is being proposed in the Neutron side? Why not use the same diagram that I found very helpful in the Neutron spec? Or am I misunderstanding?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":46,"context_line":"`NETWORK_BW_KBPS`. This represents the total amount of kilobits per second"},{"line_number":47,"context_line":"ready to be allocated by a virtual machine network interface."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Network bandwidth description in placement API"},{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_bcc73c64","line":49,"in_reply_to":"7f515b1d_8b857109","updated":"2017-10-03 14:40:09.000000000","message":"You are right. This is the problem of writing you consecutive specs and changing the scope in the second one. I\u0027ll modify this section to match the Neutron spec.\n\nBTW, I\u0027ll add the diagram from the Neutron spec.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7be677df2da78810b7a7c4f1f0e70b3b32ba09e6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"},{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."}],"source_content_type":"text/x-rst","patch_set":2,"id":"df6247ed_e9f735d4","line":53,"updated":"2017-09-19 21:17:49.000000000","message":"Will it be only value for egress traffic or for both? Maybe You should have different values for ingress and egress bandwidth?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"},{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_c1bd6f02","line":53,"in_reply_to":"7f515b1d_76b68e8c","updated":"2017-10-03 14:40:09.000000000","message":"... and I agree with these names. I also prefer using bits per second instead of using any multiple","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"},{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_019a67b7","line":53,"in_reply_to":"df6247ed_e9f735d4","updated":"2017-10-03 14:40:09.000000000","message":"Good catch Slawek! Thanks.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"----------------------------------------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Each network resource, with available bandwidth information, will have one"},{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_76b68e8c","line":53,"in_reply_to":"df6247ed_e9f735d4","updated":"2017-10-02 20:25:24.000000000","message":"Yes, agreed. I had suggested NET_BANDWIDTH_INGRESS_BITS_SEC and NET_BANDWIDTH_EGRESS_BITS_SEC on the mailing list.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":59,"context_line":"  independent network resource."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_f6a95e23","line":56,"range":{"start_line":56,"start_character":5,"end_line":56,"end_character":21},"updated":"2017-10-02 20:25:24.000000000","message":"there is no such thing :)\n\nLet\u0027s be explicit here. How about saying \"The amount of NET_BANDWIDTH_INGRESS_BITS_SEC resources exposed to the guest will depend on the network backend. There will be at least one resource provider record created for each network backend supported by the host.\"","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":53,"context_line":"Resource Provider instance of `NETWORK_BW_KBPS`. The Inventory of this Resource"},{"line_number":54,"context_line":"provider will contain an integer number of available kbps."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Each network resource will depend on the network back-end used."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":59,"context_line":"  independent network resource."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_fc2934e5","line":56,"range":{"start_line":56,"start_character":5,"end_line":56,"end_character":21},"in_reply_to":"7f515b1d_f6a95e23","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":62,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":63,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":64,"context_line":"  attached and a reported bandwit. In the same way, the tunnel endpoint will"},{"line_number":65,"context_line":"  have a reported bandwidth modeled by a `NETWORK_BW_KBPS` Resource Provider."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Producer and consumer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_eb8ce536","line":64,"range":{"start_line":64,"start_character":26,"end_line":64,"end_character":33},"updated":"2017-10-02 00:14:18.000000000","message":"bandwidth","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":62,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":63,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":64,"context_line":"  attached and a reported bandwit. In the same way, the tunnel endpoint will"},{"line_number":65,"context_line":"  have a reported bandwidth modeled by a `NETWORK_BW_KBPS` Resource Provider."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Producer and consumer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_bc1f3cb5","line":64,"range":{"start_line":64,"start_character":26,"end_line":64,"end_character":33},"in_reply_to":"7f515b1d_eb8ce536","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"It is important to define which OpenStack service is going to produce and"},{"line_number":71,"context_line":"consume those resources."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_d6a4224d","line":73,"range":{"start_line":73,"start_character":10,"end_line":73,"end_character":15},"updated":"2017-10-02 20:25:24.000000000","message":"logical","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"It is important to define which OpenStack service is going to produce and"},{"line_number":71,"context_line":"consume those resources."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_b6652620","line":73,"range":{"start_line":73,"start_character":51,"end_line":73,"end_character":56},"updated":"2017-10-02 20:25:24.000000000","message":"which is called by the nova-scheduler when","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":70,"context_line":"It is important to define which OpenStack service is going to produce and"},{"line_number":71,"context_line":"consume those resources."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_1c8410d2","line":73,"range":{"start_line":73,"start_character":51,"end_line":73,"end_character":56},"in_reply_to":"7f515b1d_b6652620","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":70,"context_line":"It is important to define which OpenStack service is going to produce and"},{"line_number":71,"context_line":"consume those resources."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_fc6ed42c","line":73,"range":{"start_line":73,"start_character":10,"end_line":73,"end_character":15},"in_reply_to":"7f515b1d_d6a4224d","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_566ef2ff","line":76,"range":{"start_line":76,"start_character":20,"end_line":76,"end_character":42},"updated":"2017-10-02 20:25:24.000000000","message":"return only those hosts having","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1c5f3d984457ce56b14d27ab5c1dcebcea400aa5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_cb8fe927","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":9},"updated":"2017-10-02 00:14:18.000000000","message":"the Placement","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_dc8558ae","line":76,"range":{"start_line":76,"start_character":20,"end_line":76,"end_character":42},"in_reply_to":"7f515b1d_566ef2ff","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The first logic consumer will be the placement API while scheduling a virtual"},{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_5c9a8813","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":9},"in_reply_to":"7f515b1d_cb8fe927","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_367936c7","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":14},"updated":"2017-10-02 20:25:24.000000000","message":"not device, but backend.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":74,"context_line":"machine to be spawned. If a Neutron port with a QoS policy containing a"},{"line_number":75,"context_line":"minimum bandwidth rule (that means requesting a minimum guaranteed bandwidth),"},{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_9c8b60be","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":14},"in_reply_to":"7f515b1d_367936c7","updated":"2017-10-03 14:40:09.000000000","message":"Right!","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_d679c2c4","line":79,"range":{"start_line":79,"start_character":25,"end_line":79,"end_character":29},"updated":"2017-10-02 20:25:24.000000000","message":"boot *or move*. for example, migration, resize, unshelve etc","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Placement API will request from every host the available bandwidth from each"},{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_7cc0a4e1","line":79,"range":{"start_line":79,"start_character":25,"end_line":79,"end_character":29},"in_reply_to":"7f515b1d_d679c2c4","updated":"2017-10-03 14:40:09.000000000","message":"You are right","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7be677df2da78810b7a7c4f1f0e70b3b32ba09e6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"},{"line_number":83,"context_line":"host won\u0027t be selected. If the boot request commands doesn\u0027t have a minimum"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df6247ed_c91d9110","line":80,"updated":"2017-09-19 21:17:49.000000000","message":"why only when boot command is done with port which have QoS policy? Can\u0027t it be the same if e.g. You pass net-id instead of port and this network have got QoS policy assigned? IMO it should also works here.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":77,"context_line":"network device."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"This only applies when a boot command is sent along with a port and this port"},{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"},{"line_number":83,"context_line":"host won\u0027t be selected. If the boot request commands doesn\u0027t have a minimum"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_a6c3a638","line":80,"in_reply_to":"df6247ed_c91d9110","updated":"2017-10-03 14:40:09.000000000","message":"You are right Slawek. Not only a port but also a network can have a QoS policy (and min BW rule) attached. I need to add this too.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"},{"line_number":83,"context_line":"host won\u0027t be selected. If the boot request commands doesn\u0027t have a minimum"},{"line_number":84,"context_line":"bandwidth restriction, placement API won\u0027t filter by available bandwidth."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The second consumer will be each Neutron ML2 plugin. When a QoS minimum"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_96510a39","line":83,"range":{"start_line":83,"start_character":53,"end_line":83,"end_character":61},"updated":"2017-10-02 20:25:24.000000000","message":"don\u0027t","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":80,"context_line":"has a QoS policy with a minimum bandwidth rule. In this case placement API will"},{"line_number":81,"context_line":"list all bandwidth inventories in the each host to fit this request. If no"},{"line_number":82,"context_line":"Resource Provider is defined or these doesn\u0027t provide enough bandwidth, the"},{"line_number":83,"context_line":"host won\u0027t be selected. If the boot request commands doesn\u0027t have a minimum"},{"line_number":84,"context_line":"bandwidth restriction, placement API won\u0027t filter by available bandwidth."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The second consumer will be each Neutron ML2 plugin. When a QoS minimum"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_dcae782c","line":83,"range":{"start_line":83,"start_character":53,"end_line":83,"end_character":61},"in_reply_to":"7f515b1d_96510a39","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7be677df2da78810b7a7c4f1f0e70b3b32ba09e6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"bandwidth restriction, placement API won\u0027t filter by available bandwidth."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The second consumer will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":87,"context_line":"bandwidth rule is modified, the plugin will check if any binded port has this"},{"line_number":88,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":89,"context_line":"limits."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df6247ed_29b54def","line":87,"range":{"start_line":87,"start_character":57,"end_line":87,"end_character":63},"updated":"2017-09-19 21:17:49.000000000","message":"shouldn\u0027t be \"bound\"?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":84,"context_line":"bandwidth restriction, placement API won\u0027t filter by available bandwidth."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"The second consumer will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":87,"context_line":"bandwidth rule is modified, the plugin will check if any binded port has this"},{"line_number":88,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":89,"context_line":"limits."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_fcb37496","line":87,"range":{"start_line":87,"start_character":57,"end_line":87,"end_character":63},"in_reply_to":"df6247ed_29b54def","updated":"2017-10-03 14:40:09.000000000","message":"My English teacher gave up months ago...","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":89,"context_line":"limits."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The producer of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":92,"context_line":"explained in the following section."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_d652e234","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":12},"updated":"2017-10-02 20:25:24.000000000","message":"I would say \"creator of the resource provider records\" and \"reader of inventory records\" instead of Producer and Consumer. Producer and consumer have connotations with message queuing that aren\u0027t applicable here.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":88,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":89,"context_line":"limits."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The producer of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":92,"context_line":"explained in the following section."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_1c6e50ff","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":12},"in_reply_to":"7f515b1d_d652e234","updated":"2017-10-03 14:40:09.000000000","message":"You are right. Is better not to mix concepts.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2217a006d3e710583e7357ba4f4c414524a1638","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The producer of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":92,"context_line":"explained in the following section."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Operation: Resource Provider creation and update."},{"line_number":96,"context_line":"-------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_9cb80011","line":93,"updated":"2017-10-03 11:43:44.000000000","message":"Does the current neutron QoS limit based on physical bandwidth or logical bandwidth. Does the end user needs to calculate the network virtualization overhead when setting the QoS limit or it is automatically added by the neutron backend?\n\nIn nova for example the memory overhead of QEMU does not automatically calculated by nova. The operator need to reserve memory on the compute host for that overhead. Will this be the case for the bandwidth resource as well? Does neutron will create a resource provider for bandwidth with some reserved bandwidth for any overhead?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The producer of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":92,"context_line":"explained in the following section."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Operation: Resource Provider creation and update."},{"line_number":96,"context_line":"-------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_c9d7d54f","line":93,"in_reply_to":"7f515b1d_9cb80011","updated":"2017-10-03 14:40:09.000000000","message":"\u003e Does the current neutron QoS limit based on physical bandwidth or logical bandwidth\n\nPhysical. The QoS rules are directly translated to driver calls (SRIOV, LB or OVS) to set the bw limit.\n\nWith network backend you don\u0027t have a hard limit like in memory. Network bw oversubscription is not as critical as memory.\n\nHaving said that, if you take a look at Neutron specs [1] and [2], you can see the network available BW is defined both by reading the device driver (e.g.: using ethtool) and a config parameter. This is the way an administrator can set a maximum available BW below the physical device BW.\n\n[1]https://review.openstack.org/#/c/508149\n[2]https://review.openstack.org/#/c/396297","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The producer of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":92,"context_line":"explained in the following section."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Operation: Resource Provider creation and update."},{"line_number":96,"context_line":"-------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_6feea18c","line":93,"in_reply_to":"7f515b1d_c9d7d54f","updated":"2017-10-03 16:13:28.000000000","message":"Thanks. This means that the end user creating a port on the neutron API needs to be aware that the requested minBW is not exactly the same as the BW its VM will be able to send/receive as there is a virtualization overhead that also needs to fit into the port\u0027s minBW. However end user will not know how big is this overhead so she cannot calculate with it when creating the port. Anyhow this is not heavily related to this nova spec so I stop digging this.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":103,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Port binding: when a port is bound to a network back-end, the correspondent"},{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_7639eeef","line":105,"range":{"start_line":105,"start_character":62,"end_line":105,"end_character":75},"updated":"2017-10-02 20:25:24.000000000","message":"corresponding","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":102,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":103,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Port binding: when a port is bound to a network back-end, the correspondent"},{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_7c65441d","line":105,"range":{"start_line":105,"start_character":62,"end_line":105,"end_character":75},"in_reply_to":"7f515b1d_7639eeef","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Port binding: when a port is bound to a network back-end, the correspondent"},{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_b9019907","line":106,"range":{"start_line":106,"start_character":6,"end_line":106,"end_character":52},"updated":"2017-10-02 20:25:24.000000000","message":"No, when an amount of resources are claimed, it is the scheduler that will have already created allocation records in the placement API for the various resource classes in the request. So by the time the port is bound, the bandwidth allocated to the instance will have already been recorded. The only thing the agent will be responsible for is calling `tc` or whatever is needed to set the QoS on the network device appropriately.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c549156107c6a95145384ed764638c7c17c585c5","unresolved":false,"context_lines":[{"line_number":103,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Port binding: when a port is bound to a network back-end, the correspondent"},{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_efaf3129","line":106,"range":{"start_line":106,"start_character":6,"end_line":106,"end_character":52},"in_reply_to":"7f515b1d_2681f6c4","updated":"2017-10-03 15:34:32.000000000","message":"*before* the port binding :) port binding occurs on the compute host and by the time we get there, the scheduler has already claimed all appropriate resources for the instance against the providers of those resources (one of which will be the network backend providing bandwidth)","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":103,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Port binding: when a port is bound to a network back-end, the correspondent"},{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_2681f6c4","line":106,"range":{"start_line":106,"start_character":6,"end_line":106,"end_character":52},"in_reply_to":"7f515b1d_b9019907","updated":"2017-10-03 14:40:09.000000000","message":"You are right: the resource claim is done by the scheduler during the port binding.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_7920c19b","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"updated":"2017-10-02 20:25:24.000000000","message":"Can you elaborate on this a bit more? What is the expected call sequence here? Remember that the overcommit ability on resources is controlled with the inventory record\u0027s allocation_ratio field. So, if anything, the ML2 agent would adjust this ratio as needed. It would not create or delete allocation records against the resource provider.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_8cdfabd5","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_5c33a8ab","updated":"2017-10-03 14:40:09.000000000","message":"I don\u0027t think this should be a resize operation. This is going to be manage by the ML2 agent and the placement API. Nova shouldn\u0027t be involved in this operation (assuming placement won\u0027t be in Nova in near future).\n\nIf a QoS minBW rule is changed and a port has this rule attached, the ML2 agent will interrogate the Placement API for available BW and then will update the inventory.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2217a006d3e710583e7357ba4f4c414524a1638","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_5c33a8ab","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_7920c19b","updated":"2017-10-03 11:43:44.000000000","message":"Could this be a port resize operation? I mean I have booted an instance with a port that has 1kbit/sec minimum bandwidth rule attached but I want to increase that limit to 2kbit/sec. It is pretty similar to the case when somebody wants to resize a instance to a bigger flavor.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_2c5af782","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_7920c19b","updated":"2017-10-03 14:40:09.000000000","message":"I\u0027ll try to ping you in IRC to talk about this topic.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c549156107c6a95145384ed764638c7c17c585c5","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_af7ed9ac","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_8cdfabd5","updated":"2017-10-03 15:34:32.000000000","message":"Correct. The ML2 agent will be responsible for reporting inventory records. Nova (scheduler) is responsible for creating allocation records (resource claims).","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_da39d53f","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_8cdfabd5","updated":"2017-10-03 16:13:28.000000000","message":"Does this also mean that the change in the QoS minBW will be rejected if there is not enough BW in the currently used ResourceProvider inventory? This would be different from how nova resizes memory usage. There nova tries to find a compute host (i.e. ResourceProvider) that has enough memory for the increased need. I\u0027m not suggesting that do this with port minBW resize as well just want to state it explicitly what is expected and what is not.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":106,"context_line":"plugin will update the Inventory available bandwidth according to the QoS"},{"line_number":107,"context_line":"minimum bandwidth rule value."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":110,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":111,"context_line":"attached and will update the Inventory value."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_9a711d10","line":111,"range":{"start_line":109,"start_character":31,"end_line":111,"end_character":45},"in_reply_to":"7f515b1d_af7ed9ac","updated":"2017-10-03 16:13:28.000000000","message":"@Jay: but when the QoS policy associated to a neutron port changes then it is not an inventory change but an allocation change in my head.\n\nIn the other hand when the deployer changes the maximum allowed bandwidth on a physical port the that is the Inventory change.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17df6a0d9c56c017a86bc9e8594408c9a0d7c30d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Along with the feature `Nested Resource Providers` [2]_, some of the bandwidth"},{"line_number":117,"context_line":"resources could be defined inside this tree structure due to the physical"},{"line_number":118,"context_line":"dependencies they have with other resources."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"For example, SR-IOV physical function bandwidth could be defined under the"},{"line_number":121,"context_line":"physical function resource provider instance."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Open vSwitch and Linux Bridge network resources could be defined under a new"},{"line_number":124,"context_line":"Resouce Class that could be the network back-end itself."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_795561f9","line":121,"range":{"start_line":116,"start_character":0,"end_line":121,"end_character":45},"updated":"2017-10-02 20:25:24.000000000","message":"Regardless of whether this particular spec goes forward, this nested resource providers work will still be moving forward :)","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c549156107c6a95145384ed764638c7c17c585c5","unresolved":false,"context_lines":[{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Along with the feature `Nested Resource Providers` [2]_, some of the bandwidth"},{"line_number":117,"context_line":"resources could be defined inside this tree structure due to the physical"},{"line_number":118,"context_line":"dependencies they have with other resources."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"For example, SR-IOV physical function bandwidth could be defined under the"},{"line_number":121,"context_line":"physical function resource provider instance."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Open vSwitch and Linux Bridge network resources could be defined under a new"},{"line_number":124,"context_line":"Resouce Class that could be the network back-end itself."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_6f4a2184","line":121,"range":{"start_line":116,"start_character":0,"end_line":121,"end_character":45},"in_reply_to":"7f515b1d_46cab21a","updated":"2017-10-03 15:34:32.000000000","message":"k, cool with me.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":113,"context_line":"Alternatives"},{"line_number":114,"context_line":"------------"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Along with the feature `Nested Resource Providers` [2]_, some of the bandwidth"},{"line_number":117,"context_line":"resources could be defined inside this tree structure due to the physical"},{"line_number":118,"context_line":"dependencies they have with other resources."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"For example, SR-IOV physical function bandwidth could be defined under the"},{"line_number":121,"context_line":"physical function resource provider instance."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Open vSwitch and Linux Bridge network resources could be defined under a new"},{"line_number":124,"context_line":"Resouce Class that could be the network back-end itself."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_46cab21a","line":121,"range":{"start_line":116,"start_character":0,"end_line":121,"end_character":45},"in_reply_to":"7f515b1d_795561f9","updated":"2017-10-03 14:40:09.000000000","message":"I changed the spec. This is not an alternative anymore. In fact, Nested RP are mandatory to implement this feature.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7be677df2da78810b7a7c4f1f0e70b3b32ba09e6","unresolved":false,"context_lines":[{"line_number":131,"context_line":"REST API impact"},{"line_number":132,"context_line":"---------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"No changes are needed. This feature uses the placemente API definition."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Security impact"},{"line_number":137,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df6247ed_899af96b","line":134,"range":{"start_line":134,"start_character":45,"end_line":134,"end_character":55},"updated":"2017-09-19 21:17:49.000000000","message":"s/placemente/placement","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":131,"context_line":"REST API impact"},{"line_number":132,"context_line":"---------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"No changes are needed. This feature uses the placemente API definition."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Security impact"},{"line_number":137,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_e6d87ef1","line":134,"range":{"start_line":134,"start_character":45,"end_line":134,"end_character":55},"in_reply_to":"df6247ed_899af96b","updated":"2017-10-03 14:40:09.000000000","message":"Done","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2217a006d3e710583e7357ba4f4c414524a1638","unresolved":false,"context_lines":[{"line_number":132,"context_line":"---------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"No changes are needed. This feature uses the placemente API definition."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Security impact"},{"line_number":137,"context_line":"---------------"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_1cde503d","line":135,"updated":"2017-10-03 11:43:44.000000000","message":"Will nova read the QoS value of the port an instance is booted with from the existing neutron port API to be able to construct a proper GET /allocation_candidates request towards placement?","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":132,"context_line":"---------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"No changes are needed. This feature uses the placemente API definition."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Security impact"},{"line_number":137,"context_line":"---------------"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_8c99eb7a","line":135,"in_reply_to":"7f515b1d_1cde503d","updated":"2017-10-03 14:40:09.000000000","message":"Yes, Nova will read the port/network QoS policy and rule (min BW) to make the corresponding resource claim.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2217a006d3e710583e7357ba4f4c414524a1638","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Neutron placement API adoption: [5]_"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* If alternative option is choosen, Nested Resource Providers are needed: [2]_"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_dc91d853","line":192,"updated":"2017-10-03 11:43:44.000000000","message":"I thought that modelling bandwidth will be done as a nested resource provider as plan A. I don\u0027t see what else we can done today.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Neutron placement API adoption: [5]_"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* If alternative option is choosen, Nested Resource Providers are needed: [2]_"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_0cedfb8a","line":192,"in_reply_to":"7f515b1d_dc91d853","updated":"2017-10-03 14:40:09.000000000","message":"Yes, I\u0027ll change this. This dependency is mandatory.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2217a006d3e710583e7357ba4f4c414524a1638","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Testing"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"(To be defined)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_5c8f2829","line":198,"updated":"2017-10-03 11:43:44.000000000","message":"At least the existing nova functional tests that checking the  resource allocations during different instance operations (e.g. boot, resize, evacuate) needs to be enhanced to use a neutron port with minimum bandwidth limit. For that we need to enhance the current neutron fixture.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"647429a045b43df88d1e3b94a2712cd6702ec0ec","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Testing"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"(To be defined)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_ccac8337","line":198,"in_reply_to":"7f515b1d_5c8f2829","updated":"2017-10-03 14:40:09.000000000","message":"The resize operation won\u0027t affect the requested BW. Boot and move operations will be added to the testing FW.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Testing"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"(To be defined)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_4f98851a","line":198,"in_reply_to":"7f515b1d_ccac8337","updated":"2017-10-03 16:13:28.000000000","message":"Interestingly in nova resize is a move operation ;). Anyhow what you added to the testing section covers that.","commit_id":"2c2e34517c27b1282044357c309fd9094508d3d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider in the"},{"line_number":14,"context_line":"placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0f3e0dda","line":15,"range":{"start_line":15,"start_character":39,"end_line":15,"end_character":48},"updated":"2017-10-03 15:49:33.000000000","message":"allocated","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider in the"},{"line_number":14,"context_line":"placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the bandwidth available to be scheduled for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_5aca851a","line":15,"range":{"start_line":15,"start_character":39,"end_line":15,"end_character":48},"in_reply_to":"7f515b1d_0f3e0dda","updated":"2017-10-03 17:02:41.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"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"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec proposes a new Resource Class to define the available bandwidth in"},{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_cf08f52e","line":44,"range":{"start_line":44,"start_character":19,"end_line":44,"end_character":24},"updated":"2017-10-03 15:49:33.000000000","message":"two new resource classes :)","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"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"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec proposes a new Resource Class to define the available bandwidth in"},{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_9adfddd5","line":44,"range":{"start_line":44,"start_character":19,"end_line":44,"end_character":24},"in_reply_to":"7f515b1d_cf08f52e","updated":"2017-10-03 17:02:41.000000000","message":"I missed this one!","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":42,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec proposes a new Resource Class to define the available bandwidth in"},{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"},{"line_number":48,"context_line":"will represent available bandwidth in bits per second, in each traffic"},{"line_number":49,"context_line":"direction, ready to be allocated by a virtual machine using this network"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7afd4107","line":46,"range":{"start_line":45,"start_character":30,"end_line":46,"end_character":71},"updated":"2017-10-03 15:49:33.000000000","message":"I would just remove this and say:\n\n\"This spec proposes two new resource classes defining bandwidth constraints on a network backend: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`.\"","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec proposes a new Resource Class to define the available bandwidth in"},{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"},{"line_number":48,"context_line":"will represent available bandwidth in bits per second, in each traffic"},{"line_number":49,"context_line":"direction, ready to be allocated by a virtual machine using this network"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3a9d890a","line":46,"range":{"start_line":45,"start_character":30,"end_line":46,"end_character":71},"in_reply_to":"7f515b1d_7afd4107","updated":"2017-10-03 17:02:41.000000000","message":"Thanks!","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"},{"line_number":48,"context_line":"will represent available bandwidth in bits per second, in each traffic"},{"line_number":49,"context_line":"direction, ready to be allocated by a virtual machine using this network"},{"line_number":50,"context_line":"interface."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_1a0c0d3a","line":48,"range":{"start_line":48,"start_character":15,"end_line":48,"end_character":24},"updated":"2017-10-03 15:49:33.000000000","message":"technically they represent the *total* bandwidth allocatable in bits per second. *Available* bandwidth is technically the total minus the used.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"a network device or resource. This new standard Resource Class will have two"},{"line_number":46,"context_line":"new enumerate topics in `ResourceClass` located in nova.objects.fields:"},{"line_number":47,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`. These"},{"line_number":48,"context_line":"will represent available bandwidth in bits per second, in each traffic"},{"line_number":49,"context_line":"direction, ready to be allocated by a virtual machine using this network"},{"line_number":50,"context_line":"interface."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_daac3537","line":48,"range":{"start_line":48,"start_character":15,"end_line":48,"end_character":24},"in_reply_to":"7f515b1d_1a0c0d3a","updated":"2017-10-03 17:02:41.000000000","message":"Yes, total is more accurate.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":53,"context_line":"----------------------------------------------"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Each network resource, with available bandwidth information, will have two"},{"line_number":56,"context_line":"Resource Provider instances of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":57,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_fa101152","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":27},"updated":"2017-10-03 15:49:33.000000000","message":"this should read \"two inventory records, one for each of\"","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":53,"context_line":"----------------------------------------------"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Each network resource, with available bandwidth information, will have two"},{"line_number":56,"context_line":"Resource Provider instances of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":57,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3a6b49f2","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":27},"in_reply_to":"7f515b1d_fa101152","updated":"2017-10-03 17:02:41.000000000","message":"My bad, you are right.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b0082227b2045d80eae26ffe8ed2d2b2d04a07dd","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Each network resource, with available bandwidth information, will have two"},{"line_number":56,"context_line":"Resource Provider instances of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":57,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":60,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC` resources exposed to the guest will depend on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_2f6e69c9","line":57,"updated":"2017-10-03 14:57:16.000000000","message":"The sentence, and a few others, confuses what a resource provider is with resource classes. What I think you want in this paragraph, and might make things more clear for other paragraphs is:\n\nEach network resource with available bandwidth information will be a resource provider with at least two classes of inventory: `NET_BANDWIDTH_INGRESS_BITS_SEC` and\n`NET_BANDWIDTH_EGRESS_BITS_SEC`.\n\nOr to ask it another way: Why are you modelling things so that an interface has two different providers. You can put two classes of inventory on the same resource provider.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Each network resource, with available bandwidth information, will have two"},{"line_number":56,"context_line":"Resource Provider instances of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":57,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":60,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC` resources exposed to the guest will depend on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d5d526b9","line":57,"in_reply_to":"7f515b1d_2f6e69c9","updated":"2017-10-03 17:02:41.000000000","message":"You are right. I changed the description. I was mixing concepts.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":60,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC` resources exposed to the guest will depend on"},{"line_number":61,"context_line":"the network backend. There will be at least one Resource Provider record"},{"line_number":62,"context_line":"created for each network backend supported by the host."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_9a17dd46","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":48},"updated":"2017-10-03 15:49:33.000000000","message":"no, there will be zero or one provider per backend :)","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":60,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC` resources exposed to the guest will depend on"},{"line_number":61,"context_line":"the network backend. There will be at least one Resource Provider record"},{"line_number":62,"context_line":"created for each network backend supported by the host."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b5a98a25","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":48},"in_reply_to":"7f515b1d_9a17dd46","updated":"2017-10-03 17:02:41.000000000","message":"Now it\u0027s already explained in the previous paragraph. Thanks!","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":61,"context_line":"the network backend. There will be at least one Resource Provider record"},{"line_number":62,"context_line":"created for each network backend supported by the host."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_ba33b9f6","line":65,"range":{"start_line":64,"start_character":70,"end_line":65,"end_character":31},"updated":"2017-10-03 15:49:33.000000000","message":"s/is an independent network resource./may be a separate resource provider/","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"the network backend. There will be at least one Resource Provider record"},{"line_number":62,"context_line":"created for each network backend supported by the host."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_15497e8a","line":65,"range":{"start_line":64,"start_character":70,"end_line":65,"end_character":31},"in_reply_to":"7f515b1d_ba33b9f6","updated":"2017-10-03 17:02:41.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_da3675e8","line":67,"range":{"start_line":67,"start_character":62,"end_line":67,"end_character":71},"updated":"2017-10-03 15:49:33.000000000","message":"endpoint","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_6fd10130","line":67,"range":{"start_line":67,"start_character":7,"end_line":67,"end_character":13},"updated":"2017-10-03 15:11:47.000000000","message":"vSwitch","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d55ac64e","line":67,"range":{"start_line":67,"start_character":7,"end_line":67,"end_character":13},"in_reply_to":"7f515b1d_6fd10130","updated":"2017-10-03 17:02:41.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b5574a27","line":67,"range":{"start_line":67,"start_character":62,"end_line":67,"end_character":71},"in_reply_to":"7f515b1d_da3675e8","updated":"2017-10-03 17:02:41.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":64,"context_line":"* SR-IOV: each physical function (defined by a PCI address or a UUID) is an"},{"line_number":65,"context_line":"  independent network resource."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7a4b015f","line":68,"range":{"start_line":67,"start_character":72,"end_line":68,"end_character":21},"updated":"2017-10-03 15:49:33.000000000","message":"may be a separate resource provider.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_5a50450b","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":17},"updated":"2017-10-03 15:49:33.000000000","message":"resource providers.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b52ceaac","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":17},"in_reply_to":"7f515b1d_5a50450b","updated":"2017-10-03 17:02:41.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_ba48595c","line":70,"range":{"start_line":69,"start_character":18,"end_line":70,"end_character":35},"updated":"2017-10-03 15:49:33.000000000","message":"I would rewrite this last sentence like so:\n\n\"Each physical network can therefore have bandwidth controlled separately with resource providers representing each physical network and those resource providers having inventory records of NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC.\"","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"19d6393e231951f509eff695313c55fbf90abfd9","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Open vSwith, Linux Bridge: each physical network and tunnel end point will be"},{"line_number":68,"context_line":"  a network resource. A virtual machine port can consume bandwidth from one of"},{"line_number":69,"context_line":"  these resources. Each physical network will have physical network device"},{"line_number":70,"context_line":"  attached and a reported bandwith."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d51f666e","line":70,"range":{"start_line":69,"start_character":18,"end_line":70,"end_character":35},"in_reply_to":"7f515b1d_ba48595c","updated":"2017-10-03 17:02:41.000000000","message":"Cool!","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b0082227b2045d80eae26ffe8ed2d2b2d04a07dd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"         |"},{"line_number":89,"context_line":"         |"},{"line_number":90,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":91,"context_line":"         +\u003e | Resource Provider    |  | Inventory  |  | Resource Class |"},{"line_number":92,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":93,"context_line":"         |  | Physnet 1            |  | BW \u003d xx    |  | EGRESS_BW      |"},{"line_number":94,"context_line":"         |  +----------------------+  +------------+  +----------------+"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_4fd52543","line":91,"updated":"2017-10-03 14:57:16.000000000","message":"This table implies that inventory and resource class are separate things. They are not. An inventory is a description of an available count of some resource class.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":88,"context_line":"         |"},{"line_number":89,"context_line":"         |"},{"line_number":90,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":91,"context_line":"         +\u003e | Resource Provider    |  | Inventory  |  | Resource Class |"},{"line_number":92,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":93,"context_line":"         |  | Physnet 1            |  | BW \u003d xx    |  | EGRESS_BW      |"},{"line_number":94,"context_line":"         |  +----------------------+  +------------+  +----------------+"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_be9ef8b5","line":91,"in_reply_to":"7f515b1d_3aa34903","updated":"2017-10-04 17:16:18.000000000","message":"@Chris and @Jay: you are right, my drawing is not accurate and doesn\u0027t reflect the correct relationship between RP and Inventories.\n\nBecause there is no constraint to physnet names between agents (that means, you can have the same physnet name in two agents) and I need a way to find the Network Resource without storing the RP uuid in the Neutron DB, I propose to have an Agent RP with uuid \u003d (Neutron DB agent ID) [1]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/models/agent.py#L21","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29738662fea46628362837149a4b05100d11a067","unresolved":false,"context_lines":[{"line_number":88,"context_line":"         |"},{"line_number":89,"context_line":"         |"},{"line_number":90,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":91,"context_line":"         +\u003e | Resource Provider    |  | Inventory  |  | Resource Class |"},{"line_number":92,"context_line":"         |  +----------------------+  +------------+  +----------------+"},{"line_number":93,"context_line":"         |  | Physnet 1            |  | BW \u003d xx    |  | EGRESS_BW      |"},{"line_number":94,"context_line":"         |  +----------------------+  +------------+  +----------------+"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3aa34903","line":91,"in_reply_to":"7f515b1d_4fd52543","updated":"2017-10-03 15:49:33.000000000","message":"Agree with Chris. Feel free to use efried\u0027s ASCII drawing of the relationships between resource providers here:\n\n Compute host RP\n      |\n      +-\u003e Network Resource RP {\n      |       traits: [CUSTOM_PHYSNET_1]\n      |       inventory: {\n      |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,\n      |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000\n      |       }\n      |   }\n      |\n      +-\u003e Network Resource RP {\n              traits: [CUSTOM_PHYSNET_2]\n              inventory: {\n                  NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,\n                  NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000\n              }\n          }","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            +----------------------+  +------------+  +----------------+"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Each Neutron agent will create a Resouce Provider identifying itself. Under"},{"line_number":114,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":115,"context_line":"network and traffic direction."},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_cfe115ff","line":113,"range":{"start_line":113,"start_character":33,"end_line":113,"end_character":40},"updated":"2017-10-03 15:11:47.000000000","message":"Resource","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            +----------------------+  +------------+  +----------------+"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Each Neutron agent will create a Resouce Provider identifying itself. Under"},{"line_number":114,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":115,"context_line":"network and traffic direction."},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b4c177e7","line":113,"range":{"start_line":113,"start_character":33,"end_line":113,"end_character":40},"in_reply_to":"7f515b1d_cfe115ff","updated":"2017-10-04 17:16:18.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":124,"context_line":"consume those resources."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The first logical reader will be the placement API, which is called by the"},{"line_number":127,"context_line":"Nova Scheduler when a virtual machine to be spawned. If a Neutron port with a"},{"line_number":128,"context_line":"QoS policy containing a minimum bandwidth rule (that means requesting a"},{"line_number":129,"context_line":"minimum guaranteed bandwidth), the Placement API will return only those hosts"},{"line_number":130,"context_line":"having the available bandwidth from each network back-end."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_efcdf186","line":127,"range":{"start_line":127,"start_character":38,"end_line":127,"end_character":43},"updated":"2017-10-03 15:11:47.000000000","message":"\"is to be\" or \"will be\"","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":124,"context_line":"consume those resources."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The first logical reader will be the placement API, which is called by the"},{"line_number":127,"context_line":"Nova Scheduler when a virtual machine to be spawned. If a Neutron port with a"},{"line_number":128,"context_line":"QoS policy containing a minimum bandwidth rule (that means requesting a"},{"line_number":129,"context_line":"minimum guaranteed bandwidth), the Placement API will return only those hosts"},{"line_number":130,"context_line":"having the available bandwidth from each network back-end."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_f4a6cf53","line":127,"range":{"start_line":127,"start_character":38,"end_line":127,"end_character":43},"in_reply_to":"7f515b1d_efcdf186","updated":"2017-10-04 17:16:18.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":133,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":134,"context_line":"this case placement API will list all bandwidth inventories in the each host"},{"line_number":135,"context_line":"to fit this request. If no Resource Provider is defined or these doesn\u0027t"},{"line_number":136,"context_line":"provide enough bandwidth, the host won\u0027t be selected. If the boot request"},{"line_number":137,"context_line":"commands don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_6f9fc165","line":134,"range":{"start_line":134,"start_character":63,"end_line":134,"end_character":66},"updated":"2017-10-03 15:11:47.000000000","message":"strike","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":133,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":134,"context_line":"this case placement API will list all bandwidth inventories in the each host"},{"line_number":135,"context_line":"to fit this request. If no Resource Provider is defined or these doesn\u0027t"},{"line_number":136,"context_line":"provide enough bandwidth, the host won\u0027t be selected. If the boot request"},{"line_number":137,"context_line":"commands don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_b44f3791","line":134,"range":{"start_line":134,"start_character":63,"end_line":134,"end_character":66},"in_reply_to":"7f515b1d_6f9fc165","updated":"2017-10-04 17:16:18.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":133,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":134,"context_line":"this case placement API will list all bandwidth inventories in the each host"},{"line_number":135,"context_line":"to fit this request. If no Resource Provider is defined or these doesn\u0027t"},{"line_number":136,"context_line":"provide enough bandwidth, the host won\u0027t be selected. If the boot request"},{"line_number":137,"context_line":"commands don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter"},{"line_number":138,"context_line":"by available bandwidth."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_4fa405ba","line":135,"range":{"start_line":135,"start_character":65,"end_line":135,"end_character":72},"updated":"2017-10-03 15:11:47.000000000","message":"don\u0027t","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":132,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":133,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":134,"context_line":"this case placement API will list all bandwidth inventories in the each host"},{"line_number":135,"context_line":"to fit this request. If no Resource Provider is defined or these doesn\u0027t"},{"line_number":136,"context_line":"provide enough bandwidth, the host won\u0027t be selected. If the boot request"},{"line_number":137,"context_line":"commands don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter"},{"line_number":138,"context_line":"by available bandwidth."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d42f53a5","line":135,"range":{"start_line":135,"start_character":65,"end_line":135,"end_character":72},"in_reply_to":"7f515b1d_4fa405ba","updated":"2017-10-04 17:16:18.000000000","message":"Done","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Port binding: before the port binding, the Nova Scheduler has already made a"},{"line_number":160,"context_line":"resource claim. By the time the port is bound, the bandwidth allocated to the"},{"line_number":161,"context_line":"instance is already recorded. Nova will send this information to Neutron."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_1a12cd0a","line":161,"range":{"start_line":161,"start_character":30,"end_line":161,"end_character":73},"updated":"2017-10-03 16:13:28.000000000","message":"Which information? The actual allocation nova scheduler created in the placement API during the claim? Why neutron needs that? If neutron needs that then neutron can query that  from placement API.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Port binding: before the port binding, the Nova Scheduler has already made a"},{"line_number":160,"context_line":"resource claim. By the time the port is bound, the bandwidth allocated to the"},{"line_number":161,"context_line":"instance is already recorded. Nova will send this information to Neutron."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_6de20d04","line":161,"range":{"start_line":161,"start_character":30,"end_line":161,"end_character":73},"in_reply_to":"7f515b1d_1a12cd0a","updated":"2017-10-04 17:16:18.000000000","message":"I need to clarify this point. I\u0027ll rewrite the paragraph.\n\nJust in bullet points:\n- Nova request a port (create/get) to Neutron\n- Neutron return inside the port information the Resource Class and Allocation quantity needed (if Neutron supports it)\n- Nova selects compute host and pre binds the port.\n- Neutron returns port binding info including agent id which determines the Resource Provider\n- Nova, if this information is present (should be once Nova starts to use the new port binding API), make an allocation.\n- Nova will update the portbinding with Allocation ID when it ativate the binding \n  -\u003e with this information Neutron knows the port update request (from Nova) comes with an Allocation register, so Neutron doesn\u0027t query Placement API to create/modify the Allocation register.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":165,"context_line":"attached and will update the Inventory value."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_5abf25d0","line":165,"range":{"start_line":165,"start_character":29,"end_line":165,"end_character":38},"updated":"2017-10-03 16:13:28.000000000","message":"Isn\u0027t it Allocation instead of Inventory as we are talking about bound neutron ports? I guess those ports will have an associated Allocation record in placement. So when the QoS policy of a port is changed that related allocation record needs to be updated.\n\nBTW, in general an Allocation record is identified by a consumer_uuid. So far we have the instance_uuid as consumer_uuid for every allocation of an instance. And we are planning to use the migration_uuid during the migration of the instance as consumer_uuid of the second set of allocations that is needed during the move operation of that instance. However port is a separate entity that has a uuid so I can imaging that the specific allocation record that allocates NET_BANDWIDTH_INGRESS_BITS_SEC resource has a consumer_uuid set to the port_uuid instead of the instance_uuid.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":165,"context_line":"attached and will update the Inventory value."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0d2a79e6","line":165,"range":{"start_line":165,"start_character":29,"end_line":165,"end_character":38},"in_reply_to":"7f515b1d_5abf25d0","updated":"2017-10-04 17:16:18.000000000","message":"My explanation is awful.\n- Allocation instead of Inventory\n- Each allocation (per Resource Class) request will have a port_id as a consumer_id, as you said. A port is the only possible network BW consumer and port_id is unique.\n\nI\u0027ll rewrite this section.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":165,"context_line":"attached and will update the Inventory value."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatives"},{"line_number":169,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7a88a121","line":166,"updated":"2017-10-03 16:13:28.000000000","message":"There is another case. AFAIK the deployer can define the total bandwidth of a physical port in the neutron config and that will become the Inventory value of the NET_BANDWIDTH_INGRESS_BITS_SEC resource. Now as this is a configuration therefore it can change and if it changes then Neutron needs to update the related ResourceProvider\u0027s Inventory with the new total value. However that cannot be set lower with the sum of the Allocations of the NET_BANDWIDTH_INGRESS_BITS_SEC resource against that ResourceProvider. How can we signal to the deployer that he set a config value that cannot be accepted as it smaller than the sum of the already existing allocations?","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":164,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":165,"context_line":"attached and will update the Inventory value."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatives"},{"line_number":169,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0d195987","line":166,"in_reply_to":"7f515b1d_7a88a121","updated":"2017-10-04 17:16:18.000000000","message":"Well, I don\u0027t know how to address this (I never though about it).\n\nTo avoid any disruption, my proposal is:\n- To read the config parameter in Neutron\n- Read all Allocations per RProvider and RClass\n- Sum the value\n- If sum(current allocation values) \u003e config_parameter:\n  - Write a warning message\n  - Write in Inventory(of RClass).value \u003d sum(current allocation values)\n- Else:\n  - Work as usual.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b0082227b2045d80eae26ffe8ed2d2b2d04a07dd","unresolved":false,"context_lines":[{"line_number":174,"context_line":"Data model impact"},{"line_number":175,"context_line":"-----------------"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"A new standard Resource Class will be defined, named as `NETWORK_BW_KBPS`."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"REST API impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_afbdb903","line":177,"updated":"2017-10-03 14:57:16.000000000","message":"This isn\u0027t aligned with the statements above.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":174,"context_line":"Data model impact"},{"line_number":175,"context_line":"-----------------"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"A new standard Resource Class will be defined, named as `NETWORK_BW_KBPS`."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"REST API impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_10fe1005","line":177,"in_reply_to":"7f515b1d_afbdb903","updated":"2017-10-04 17:16:18.000000000","message":"No, I missed this part. Thanks!","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":175,"context_line":"-----------------"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"A new standard Resource Class will be defined, named as `NETWORK_BW_KBPS`."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"REST API impact"},{"line_number":180,"context_line":"---------------"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_ba5299dd","line":178,"updated":"2017-10-03 16:13:28.000000000","message":"I suggest to describe how nova scheduler will get the information that it needs to ask for NET_BANDWIDTH_INGRESS_BITS_SEC resource from the placement API. AFAIK currently the only way to request resources from the scheduler is via the RequestSpec object that holds a flavor. So I guess we have to extend the RequestSpec to hold the minBW request as well and that is a Data model impact.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":175,"context_line":"-----------------"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"A new standard Resource Class will be defined, named as `NETWORK_BW_KBPS`."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"REST API impact"},{"line_number":180,"context_line":"---------------"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d3440277","line":178,"in_reply_to":"7f515b1d_ba5299dd","updated":"2017-10-04 17:16:18.000000000","message":"But this belongs to the implementation process. This could be checked during the code review.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef3436e3330b49f89f159f6a27e2ff1c1a6c91ea","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Other deployer impact"},{"line_number":205,"context_line":"---------------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"None"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Developer impact"},{"line_number":210,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_1aeacdab","line":207,"updated":"2017-10-03 16:13:28.000000000","message":"Is there an upgrade impact? Could there be any existing ports with QoS minBW limits in Pike in neutron? If yes then those ports needs to have an associated allocation in the Placement API in Queens to have proper accounting of allocated BW resource.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Other deployer impact"},{"line_number":205,"context_line":"---------------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"None"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Developer impact"},{"line_number":210,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_fef34572","line":207,"in_reply_to":"7f515b1d_1aeacdab","updated":"2017-10-04 17:16:18.000000000","message":"You are right and I should document it. Quickly:\n- Both Nova and Neutron must be updated. If Neutron doesn\u0027t have the new port binding API or doesn\u0027t report the Resource Providers created by the agents, Nova Resource Tracker won\u0027t filter by bandwidth.\n- Neutron will implement, in several phases, the support for this feature in the in-tree plugins (LB, OVS and SR-IOV). To enable this feature in Neutron (create the Resource Providers, Inventories and inform to Nova), there will be a global variable in Neutron, set to False by default. If the administrator wants to enable this feature (regardless of whether all plugins are updated or not), the variable must be set to True.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b825ca77f57e9fd6a2a7488bc99c5799ae58ae5e","unresolved":false,"context_lines":[{"line_number":209,"context_line":"Developer impact"},{"line_number":210,"context_line":"----------------"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"(To be discussed in Denver PTG)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_6f88e121","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":31},"updated":"2017-10-03 15:11:47.000000000","message":"And was it?  What was the outcome?","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34e35bf29c580b71ff05fa6e2957ee2054adae45","unresolved":false,"context_lines":[{"line_number":209,"context_line":"Developer impact"},{"line_number":210,"context_line":"----------------"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"(To be discussed in Denver PTG)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7e3cf5be","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":31},"in_reply_to":"7f515b1d_6f88e121","updated":"2017-10-04 17:16:18.000000000","message":"You are right. Many things were discussed in Denver, basically the dependencies of this feature and how is going to be implemented.\n\nBut I don\u0027t see any particular developer impact.","commit_id":"b437ef271e8523d42f39e893c194e1558669b72b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider in the"},{"line_number":14,"context_line":"placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the bandwidth available to be allocated for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_a525b1ad","line":15,"updated":"2017-10-04 20:29:45.000000000","message":"I would replace this paragraph with this:\n\n\"This spec proposes adding two new resource classes representing network bandwidth and modeling network backends as resource providers.\"","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to define a `Network Bandwidth` resource provider in the"},{"line_number":14,"context_line":"placement service. This resource provider will define for each network"},{"line_number":15,"context_line":"back-end the bandwidth available to be allocated for a new instance"},{"line_number":16,"context_line":"[1]_."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_d7016e08","line":15,"in_reply_to":"7f515b1d_a525b1ad","updated":"2017-10-05 15:32:19.000000000","message":"Brief and concise","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":31,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":32,"context_line":"wants a defined guaranteed bandwidth for this port. The Nova scheduler must"},{"line_number":33,"context_line":"select a host which satisfies this request."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"},{"line_number":36,"context_line":"prevent network bandwidth oversubscription, Nova scheduler must check if"},{"line_number":37,"context_line":"the requested port bandwidth could be satisfied with the available"},{"line_number":38,"context_line":"bandwidth per host."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c56e6dc8","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":19},"updated":"2017-10-04 20:29:45.000000000","message":"Recommend removing this one. It\u0027s the same as the first use case and simpler is better here.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":31,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":32,"context_line":"wants a defined guaranteed bandwidth for this port. The Nova scheduler must"},{"line_number":33,"context_line":"select a host which satisfies this request."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"},{"line_number":36,"context_line":"prevent network bandwidth oversubscription, Nova scheduler must check if"},{"line_number":37,"context_line":"the requested port bandwidth could be satisfied with the available"},{"line_number":38,"context_line":"bandwidth per host."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_dcd2de34","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":19},"in_reply_to":"5f4e5783_5883a405","updated":"2017-10-11 16:36:43.000000000","message":"Well, I already removed this use case. And I think the first one is enough to document the spec.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":32,"context_line":"wants a defined guaranteed bandwidth for this port. The Nova scheduler must"},{"line_number":33,"context_line":"select a host which satisfies this request."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"},{"line_number":36,"context_line":"prevent network bandwidth oversubscription, Nova scheduler must check if"},{"line_number":37,"context_line":"the requested port bandwidth could be satisfied with the available"},{"line_number":38,"context_line":"bandwidth per host."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_5883a405","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":19},"in_reply_to":"7f515b1d_c2d1aa59","updated":"2017-10-10 11:44:33.000000000","message":"the second form would be\n\nAs an operator, I want to provide minimum bandwidth guarantees to my tenants.To facilitate that across multiple network backends i require the nova scheduler to prevent oversubscription of host bandwidth.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"A user wants to spawn a virtual machine with a network port. The user also"},{"line_number":32,"context_line":"wants a defined guaranteed bandwidth for this port. The Nova scheduler must"},{"line_number":33,"context_line":"select a host which satisfies this request."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"In the same terms, if a user wants to spawn a virtual machine and wants to"},{"line_number":36,"context_line":"prevent network bandwidth oversubscription, Nova scheduler must check if"},{"line_number":37,"context_line":"the requested port bandwidth could be satisfied with the available"},{"line_number":38,"context_line":"bandwidth per host."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c2d1aa59","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":19},"in_reply_to":"7f515b1d_c56e6dc8","updated":"2017-10-05 15:32:19.000000000","message":"Done","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Network bandwidth description in placement API"},{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c5a30d00","line":53,"range":{"start_line":53,"start_character":13,"end_line":53,"end_character":21},"updated":"2017-10-04 20:29:45.000000000","message":"backend","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Network bandwidth description in placement API"},{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_85ad15ec","line":53,"range":{"start_line":53,"start_character":59,"end_line":53,"end_character":60},"updated":"2017-10-04 20:29:45.000000000","message":"no need for this comma.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Network bandwidth description in placement API"},{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_82cbb2a3","line":53,"range":{"start_line":53,"start_character":59,"end_line":53,"end_character":60},"in_reply_to":"7f515b1d_85ad15ec","updated":"2017-10-05 15:32:19.000000000","message":"Done","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Network bandwidth description in placement API"},{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c2364ab5","line":53,"range":{"start_line":53,"start_character":13,"end_line":53,"end_character":21},"in_reply_to":"7f515b1d_c5a30d00","updated":"2017-10-05 15:32:19.000000000","message":"Done","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_05e80514","line":54,"range":{"start_line":54,"start_character":14,"end_line":54,"end_character":47},"updated":"2017-10-04 20:29:45.000000000","message":"s/at least two classes of Inventory:/an inventory record for either or both of these resource classes:/","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"----------------------------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Each network resource, with available bandwidth information, will be a Resource"},{"line_number":54,"context_line":"Provider with at least two classes of Inventory:"},{"line_number":55,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_026d8297","line":54,"range":{"start_line":54,"start_character":14,"end_line":54,"end_character":47},"in_reply_to":"7f515b1d_05e80514","updated":"2017-10-05 15:32:19.000000000","message":"Done","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_aa8220ff","line":69,"updated":"2017-10-04 21:22:21.000000000","message":"I think (hope) what you\u0027re saying, and demonstrating below by having both an SR-IOV RP and an OVS RP on physnet 1, is that that particular SR-IOV PF and OVS endpoint truly represent separate network paths with their own bandwidth.  Otherwise, you\u0027ve got a situation where you can overcommit.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_e6828a4f","line":69,"in_reply_to":"5f4e5783_186c0c35","updated":"2017-10-11 16:36:43.000000000","message":"To answer again to Eric, in Neutron you can define for each physnet how much BW do you want to assign. If you are going to share the same physnet in two backends (LB and OVS, for example), you can split via config option the BW for each backend physnet. E.g.:\nLB: physnet1: 5Gb\nOVS: physnet1: 5Gb\n\nAnd NIC interface is 10Gb.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"74b86010344312ffe92e0975229b032a1fa11a1b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_9dd30039","line":69,"in_reply_to":"5f4e5783_41749a68","updated":"2017-10-12 11:11:11.000000000","message":"I understand your design but there are some drawbacks:\n\n* Although a network interface could be shared between several backends, this is not *common at all*.\nAt the end, we\u0027ll have several port RP with only one agent RP under them. If we have one backend with three physnets, will have the physnet RPs with three separate agent RPs.\n\n* The agent RP, holding the port Inventory, doesn\u0027t depend on the NIC/physnet or the number of them. E.g.: in SRIOV I can have several PFs and VFs per PF. If I select a host, Nova will choose a free VF from this host regardless of the PF and, in the future, of the affinity. The tree definition presented in PS9 doesn\u0027t limit the VF affinity assignation.\n\n* The NIC RP (actually physnet), is defined individually for each backend and there is no logical conexion between them. That means, I can\u0027t link physnet1 in LB with physnet1 in OVS because there is no dependency. We can\u0027t know if physnet1 in LB and OVS are the same NIC or not. \n\n* Along with the same idea, although your tree definition is acceptable, how can we define a unique BW for each physnet in case this physnet is shared between two backends? Let me rephrase this from a different angle: why we need to defined a single BW for eahc physnet in case a physnet is shared? If we have the same physnet in two backends (the same NIC), how is presented now in Neutron spec is for each agent you will specify how much BW you want to assign to this physnet and backend: LB: physnet1 -\u003e 5gb, OVS: physnet1 -\u003e 5gb, physnet1 \u003d\u003d NIC 10gb\n\n* This is a logical way to represent the RP tree: the physnets \"belong\" to the backends, not the opposite. This is the aim of nested resource providers.\n\n* Using the tree definition in PS9, it\u0027s easier to find the physnets associated to a backend (agent) because we are going to use the agent ID as the agennt RP uuid, passed in the non-active port binding.\n\n\"Those are my principles, and if you don\u0027t like them... well, I have others\"  Groucho Marx  :)","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8f828b9ad2d61986600218fa1be034f7f501f2e1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_d3c96978","line":69,"in_reply_to":"5f4e5783_9dd30039","updated":"2017-10-12 12:31:42.000000000","message":"Okay, cool.  I was trying to tackle what you restated in the 5th bullet above: if there\u0027s some piece of the model (a NIC port? a physnet?) that\u0027s got a total of 10gb, and that bandwidth can be consumed by two backends, then you\u0027re creating an artificial limitation by arbitrarily splitting it into two 5gb inventories.  But if, as you say, that\u0027s an unusual setup, then I agree you\u0027re better off designing to the more common case.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7685d5fbb3efe498273ee62d5fdaf51b918e4796","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_41749a68","line":69,"in_reply_to":"5f4e5783_e6828a4f","updated":"2017-10-11 17:35:57.000000000","message":"That may be necessary under the current/proposed Queens infrastructure, but doesn\u0027t seem ideal.  What you would really want in that case is to put your bandwidth inventory on the NIC RP and your port inventory on your leaf backend RPs:\n\n NIC RP { BW\u003d10 }\n    |\n    +-\u003e LB_RP { PORTS\u003d4 }\n    |\n    +-\u003e OVS_RP { PORTS\u003d8 }\n\nThat way you don\u0027t artificially limit your ability to use one backend type more than the other.\n\nBUT that would rely on the ability to express that you want your BW and PORTS resources from RPs that are at most \"once removed\" from each other.  You can do that with traits, awkwardly, if you model carefully (basically you have to give each NIC a unique trait, and then specify that trait in your flavor; so you need multiple permutations of the otherwise-same flavor).  Or you can wait for \"affinity\" support like what\u0027s discussed here: https://review.openstack.org/#/c/510244/3/specs/queens/approved/granular-resource-requests.rst@170 which is really the right way to do it.\n\nBut that\u0027s the inverse (sort of) of what you\u0027ve got proposed as of PS9.\n\nAnother thought is to break out of the tree shape and its concomitant restrictions by making your NICs separate \"shared resource providers\".  Course, then you\u0027re waiting til Rocky.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_186c0c35","line":69,"in_reply_to":"7f515b1d_82dcd246","updated":"2017-10-10 11:44:33.000000000","message":"technically it is possible to share pf between ovs and sriov however that is not recommended. when you run in that model the vswitch and VFs are contending on the physical function mac and vlan filters on the PF. e.g. the more mac and vlans programmed for VFs the less that can be used by ovs to to hardware off loading/preclassifcation. this also assumse kernel ovs as with dpdk the pf cannot be shared as libvirt cannot manage the VFs via the PF if the PF is bound to a DPDK PMD.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":67,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":68,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_82dcd246","line":69,"in_reply_to":"7f515b1d_aa8220ff","updated":"2017-10-05 15:32:19.000000000","message":"Both physnets are different but nothing prevents to nominate them the same. That\u0027s why every agent (back-end) will have it\u0027s own RP and the physnet RP under it.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"},{"line_number":73,"context_line":"Provider map will look like::"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_8a9c045e","line":72,"range":{"start_line":72,"start_character":52,"end_line":72,"end_character":56},"updated":"2017-10-04 21:22:21.000000000","message":"I think that spec needs to be updated accordingly.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"},{"line_number":73,"context_line":"Provider map will look like::"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c2bbeae2","line":72,"range":{"start_line":72,"start_character":52,"end_line":72,"end_character":56},"in_reply_to":"7f515b1d_8a9c045e","updated":"2017-10-05 15:32:19.000000000","message":"Sure, I\u0027m on it.\n\nActually what I\u0027m doing is addressing comments on both at the same time and using in both specs the same examples and descriptions.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_a544911c","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"updated":"2017-10-04 20:29:45.000000000","message":"I actually don\u0027t see a need to create these intermediate resource providers for the agents. The agents aren\u0027t providing any resources themselves and the Network Resource RPs can all just be parented by the compute host RP. Removing a level of nesting will make things easier to reason/think about IMHO.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_c6dc2e76","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"in_reply_to":"5f4e5783_1d5f5e42","updated":"2017-10-11 16:36:43.000000000","message":"answer in L115","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_629b1666","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"in_reply_to":"7f515b1d_259ae16d","updated":"2017-10-05 15:32:19.000000000","message":"Answer in L115","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_1d5f5e42","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"in_reply_to":"7f515b1d_a2910e49","updated":"2017-10-10 11:44:33.000000000","message":"the top agent level resouce provider is require because in it will provid an inventory of VIFs.\n\nin the ovs-dpdk case we can have 1024 vhost-user port regardless of the physnet/tunnel network they are associated with. as such we cannot model this at the physnet/tunnel child resouce provider.\n\nin the sriov case we could move the vifs one level down though i think having this level may be useful for grouping physical cards together. so that we can do anti affinity at the pci card level for lacp in the future.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_259ae16d","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"in_reply_to":"7f515b1d_a544911c","updated":"2017-10-04 21:22:21.000000000","message":"Agree, *maybe*.  See comments below.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  Compute host RP"},{"line_number":76,"context_line":"      |"},{"line_number":77,"context_line":"      +-\u003e Agent SR-IOV RP"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_a2910e49","line":77,"range":{"start_line":77,"start_character":10,"end_line":77,"end_character":25},"in_reply_to":"7f515b1d_a544911c","updated":"2017-10-05 15:32:19.000000000","message":"Answer in L115","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_ca7c3ced","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"updated":"2017-10-04 21:22:21.000000000","message":"The PF will also have a limited number of possible VFs, which should also be presented within the inventory.  That is, it\u0027s possible to run out of VFs *before* you\u0027ve exhausted your total bandwidth, just as it\u0027s possible e.g. to run out of ingress bandwidth before you run out of egress bandwidth.  This also affects whether you need the intervening \"agent\" RPs - see discussion below.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_98759c9b","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"in_reply_to":"5f4e5783_04126b59","updated":"2017-10-10 11:44:33.000000000","message":"the VIF inventory will be express via this inventory yes.\nit was left out for brevity but i have discussed that with rodolfo previsously and we discussed it at the ptg also.\n\nwe can add it in the next version.\nthat said for ovs or at least ovs-dpdk\nit will be modeled at the Agent OVS RP\nas i mentioned on line 77","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_66e33a35","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"in_reply_to":"5f4e5783_98759c9b","updated":"2017-10-11 16:36:43.000000000","message":"answer in L115","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"487dfdf410b4bfdb73601a4934121a461597c820","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_04126b59","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"in_reply_to":"7f515b1d_29e4deab","updated":"2017-10-10 08:17:39.000000000","message":"\u003e \"both inventories will be independent\"\n\nI don\u0027t see where I wrote this, sorry.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"740880d7cfe00dcdaa70f2df2776f1c4cec3feae","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_29e4deab","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"in_reply_to":"7f515b1d_c213eab7","updated":"2017-10-05 16:32:42.000000000","message":"Well, okay.  This is related to the \"mix and match\" discussion below.  Nevertheless, it will be important for you to express the VF/OVS-port inventory in these RPs in the eventual implementation, so I think it\u0027s appropriate to include that in this spec (within this model).  Not sure what you mean by, \"both inventories will be independent.\"  They\u0027ll be separate resource classes, yes; but they\u0027ll be on the same resource provider.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"},{"line_number":83,"context_line":"      |        |           NET_BANDWIDTH_EGRESS_BITS_SEC \u003d 1000000000"},{"line_number":84,"context_line":"      |        |       }"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c213eab7","line":81,"range":{"start_line":81,"start_character":23,"end_line":81,"end_character":32},"in_reply_to":"7f515b1d_ca7c3ced","updated":"2017-10-05 15:32:19.000000000","message":"I understand what you mean here.\n\nFor each PF, will have several VFs and some available BW. But both Inventories will be independent:\n- If you run out of VFs, of course you can\u0027t create more ports.\n- If you run out of BW, you still can create more ports WITHOUT assigned BW.\n\nIMO, you can add the VF Inventory to this RP structure without any problem.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":92,"context_line":"      |                }"},{"line_number":93,"context_line":"      |            }"},{"line_number":94,"context_line":"      |"},{"line_number":95,"context_line":"      +-\u003e Agent OVS RP"},{"line_number":96,"context_line":"               |"},{"line_number":97,"context_line":"               +-\u003e Network Resource RP {"},{"line_number":98,"context_line":"               |       traits: [CUSTOM_PHYSNET_1]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_f846d021","line":95,"range":{"start_line":95,"start_character":10,"end_line":95,"end_character":22},"updated":"2017-10-10 11:44:33.000000000","message":"incidentally i expect to attach several traits to this resource provider to express capability such as supports virtio feature flags to support live migration between ovs version(this is required for both kernel and dpdk)\n\ni do not see a reason to duplicate those trait to the child RPs as they will be switch wide.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_2a2d10a8","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"updated":"2017-10-04 21:22:21.000000000","message":"As written, there\u0027s no need for the intervening \"agent\" RP *unless* that guy is going to have traits (and/or inventory) of its own.  Options:\n\n1) The network resource RPs provide their port inventory under backend-specific resource classes: SRIOV_NET_VF and an as-yet nonexistent OVS equivalent like OVS_NET_PORT.  This forces you to tie your request to a particular network type.\n\n2) The agent RP has a trait describing the kind of network resource it provides (SR-IOV or OVS) and the network resource RP supplies its port inventory via some generic (as-yet-nonexistent) resource class.\n\nIf you want to be able to ask for a port and don\u0027t care what the backend type is, you need #2 - which also supports requesting a specific backend by including that specific trait with your request.\n\nBut if you know you\u0027ll always want to specify the backend type, you can do #1, and the intervening RPs are unnecessary.\n\n(Note that technically you could implement #2 by duplicating the backend-type trait in each network resource RP, and not need the agent RPs.  But that\u0027s icky, and doesn\u0027t take advantage of the power of nested RPs.)","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_b803b80f","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"in_reply_to":"5f4e5783_91945fea","updated":"2017-10-10 11:44:33.000000000","message":"the current spec has made certain simplification for clarity\nby placing some of the other usecase is discussed at the PTG out of scope of the usecase discussed however we should not pessimise our ability to cater to them by removing the agent RP. \n\nRemoving the agent RP will complicate the discovery process form neutron as we will always have to retive the root resource provider for the host and walk the tree to discover the child RPs owned by the agent.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_70008668","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"in_reply_to":"5f4e5783_b803b80f","updated":"2017-10-11 16:36:43.000000000","message":"Sean\u0027s arguments are reasonable. It makes sense to add a RP for the agents. Those RP will have its own Inventories.\n\nAlso having those agent RP will make easier the discovery process, as Sean justified.\n\nI\u0027m going to take back the agent RP and I\u0027ll add a trait per agent type. For example, SRIOV_BACKEND or something like that.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"740880d7cfe00dcdaa70f2df2776f1c4cec3feae","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c44f6f68","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"in_reply_to":"7f515b1d_02e462ab","updated":"2017-10-05 16:32:42.000000000","message":"I wasn\u0027t suggesting using SRIOV_NET_VF as a trait.  That\u0027s a resource class.  You would have used that in option #1 to expose your VF inventory.  And then you would have needed an equivalent for the OVS port inventory.\n\nBut if you\u0027re going with #2, as seems to be the case, you\u0027ll need to come up with a new resource class for the VF-or-OVS-port inventory that encompasses both (in fact all) types.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_02e462ab","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"in_reply_to":"7f515b1d_2a2d10a8","updated":"2017-10-05 15:32:19.000000000","message":"Ok, I agree. So, instead of creating the agent RP with physnet RP, what we can do is to create physnet RP with the following traits:\n- CUSTOM_\u003cphysnet name\u003e\n- \u003cbackend specific\u003e_NET.\n\nI don\u0027t agree with using SRIOV_NET_VF: the BW is defined by the PF, not the VF. Furthemore, with are defining physical networks attached to backends. \u003cbackend specific\u003e_NET makes more sense.\n\nAs you say:\n- We can reduce the RP nesting.\n- We can search for an specific backend just adding the backend trait to the call.\n\nPerfect! I prefer this definition.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"487dfdf410b4bfdb73601a4934121a461597c820","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_91945fea","line":115,"range":{"start_line":114,"start_character":71,"end_line":115,"end_character":72},"in_reply_to":"7f515b1d_c44f6f68","updated":"2017-10-10 08:17:39.000000000","message":"What I\u0027m using now in PS6 is the physical network trait (SRIOV_NET, LB_NET, OVS_NET) because the network is the Resource Provider; in this case is BW but could be VF (in SRIOV) or bridge ports (in LB or OVS).\n\nI think this architecture is valid to contain port Inventories too.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_6ad9c8f2","line":116,"range":{"start_line":116,"start_character":12,"end_line":116,"end_character":29},"updated":"2017-10-04 21:22:21.000000000","message":"Not per traffic direction.  Each RP will have both traffic directions.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Each Neutron agent will create a Resource Provider identifying itself. Under"},{"line_number":115,"context_line":"each Neutron agent Resource Provider there will be one Resource Provider per"},{"line_number":116,"context_line":"network and traffic direction."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_029ea262","line":116,"range":{"start_line":116,"start_character":12,"end_line":116,"end_character":29},"in_reply_to":"7f515b1d_6ad9c8f2","updated":"2017-10-05 15:32:19.000000000","message":"Yes, you are right.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_005fd3e5","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"updated":"2017-10-04 21:22:21.000000000","message":"It may be worth noting that you really shouldn\u0027t mix and match bandwith-restricted and -unrestricted usage in the same cloud.  Cause the unrestricted ones will consume some bandwidth that won\u0027t be accounted for in the allocations, making the results of subsequent restricted requests inaccurate.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_d3bbf60b","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"in_reply_to":"5f4e5783_91bd7f6a","updated":"2017-10-10 11:44:33.000000000","message":"well no we have the reserved feild to cater for this unrestricted bandwidth allocation.\n\nin the sriov case our nics will guarantee that the minimums are enforced. in an ovs case its also ok to mix restricted and unrestricted interfaces though you should not do so on the same host as ovs today cannot enforce minimum bandwidth allocations we can simply prevent over subscription.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_f048f6cc","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"in_reply_to":"5f4e5783_d3bbf60b","updated":"2017-10-11 16:36:43.000000000","message":"IMO, this warning note to the admin is fair in any case, regardless if the backend driver can or not enforce the min BW (SRIOV can, LB and OVS cannot now).","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_1d0de734","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"in_reply_to":"7f515b1d_005fd3e5","updated":"2017-10-05 15:32:19.000000000","message":"You are right, but:\n- You can\u0027t prevent a user/admin from booting machines with and without those restrictions.\n- The backend driver, if implemented, will enforce the BW limit in the hardware.\n- You can have several backends in a host but you want to manage only the BW of one of them. You should be able to spawn VMs with and without this restriction.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"740880d7cfe00dcdaa70f2df2776f1c4cec3feae","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_84a7370c","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"in_reply_to":"7f515b1d_1d0de734","updated":"2017-10-05 16:32:42.000000000","message":"Yeah, by \"really shouldn\u0027t\", I was implying more of a documentation thing.  Operators \"really shouldn\u0027t\" create both restricted and unrestricted flavors that could land on the same network resource RP.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"487dfdf410b4bfdb73601a4934121a461597c820","unresolved":false,"context_lines":[{"line_number":134,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":135,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":136,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":137,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":138,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":139,"context_line":"available bandwidth."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":142,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_91bd7f6a","line":139,"range":{"start_line":137,"start_character":46,"end_line":139,"end_character":20},"in_reply_to":"7f515b1d_84a7370c","updated":"2017-10-10 08:17:39.000000000","message":"I agree. I\u0027ll amend the work items to highlight the importance of this warning in the operators manual.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f8c5ceaebe9f5361128fe32e464f382f08b536cc","unresolved":false,"context_lines":[{"line_number":144,"context_line":"limits."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":147,"context_line":"explained in the following section."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Operation: Resource Provider creation and update."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_2550a1d4","line":147,"updated":"2017-10-04 20:29:45.000000000","message":"++ on above section","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":176,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":179,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":180,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":181,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":182,"context_line":"  document."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_80f743d5","line":179,"range":{"start_line":179,"start_character":47,"end_line":179,"end_character":52},"updated":"2017-10-04 21:22:21.000000000","message":"or values","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":176,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":179,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":180,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":181,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":182,"context_line":"  document."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_f076b606","line":179,"range":{"start_line":179,"start_character":47,"end_line":179,"end_character":52},"in_reply_to":"5f4e5783_33212a4f","updated":"2017-10-11 16:36:43.000000000","message":"Both ideas are good, but I think one trait per direction (and two different Inventories) is the accepted solution.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":179,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":180,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":181,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":182,"context_line":"  document."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_dd44ef49","line":179,"range":{"start_line":179,"start_character":47,"end_line":179,"end_character":52},"in_reply_to":"7f515b1d_80f743d5","updated":"2017-10-05 15:32:19.000000000","message":"value per direction or per RClass.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":176,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":179,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":180,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":181,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":182,"context_line":"  document."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_33212a4f","line":179,"range":{"start_line":179,"start_character":47,"end_line":179,"end_character":52},"in_reply_to":"7f515b1d_dd44ef49","updated":"2017-10-10 11:44:33.000000000","message":"i was orighinally thinking of haveing only one bandwith class and having direction be a trait but this is simpeler i guess as we will need less resouce providers.\n\nactully i was really thinking of haveing a bidrection inventory and only splitting in directional inventory is really need but neutron qos policies are directional so i guess we do.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":185,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":188,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":189,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":190,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":191,"context_line":"  agent Resource Provider."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_00d23335","line":188,"range":{"start_line":187,"start_character":2,"end_line":188,"end_character":19},"updated":"2017-10-04 21:22:21.000000000","message":"No, the scheduler already did that, as you stated in L170-2.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":185,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":188,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":189,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":190,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":191,"context_line":"  agent Resource Provider."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_fd6c4b9d","line":188,"range":{"start_line":187,"start_character":2,"end_line":188,"end_character":19},"in_reply_to":"7f515b1d_00d23335","updated":"2017-10-05 15:32:19.000000000","message":"Ok, my bad: \"active\" port binding.\n\nWith [7], we will have an initial port binding (setting the port to inactive) and then a second port binding activating the port.\nIn [8] (see next PS), you have the Nova spec to start using this new API.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":198,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_c0b41bf5","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":39},"updated":"2017-10-04 21:22:21.000000000","message":"Sorry, perhaps the use of the term \"Allocation\" is incorrect in this paragraph and above?","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":198,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_50ed8a89","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":39},"in_reply_to":"5f4e5783_139f4e51","updated":"2017-10-11 16:36:43.000000000","message":"Thanks for the clarification!","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":198,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_139f4e51","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":39},"in_reply_to":"7f515b1d_0b1c7a68","updated":"2017-10-10 11:44:33.000000000","message":"i will be suggesting adding a list of placement allocation to a neutron port as an amendment to \n\nhttps://specs.openstack.org/openstack/neutron-specs/specs/pike/portbinding_information_for_nova.html\n\nas part of the move to os-vif objects for port binding.\n\nthat is what rodolfo is refering to here","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":198,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_0b1c7a68","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":39},"in_reply_to":"7f515b1d_c0b41bf5","updated":"2017-10-05 15:32:19.000000000","message":"I don\u0027t think so. Each port will have it\u0027s own Allocation register.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Alternatives"},{"line_number":205,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_a087df0f","line":202,"updated":"2017-10-04 21:22:21.000000000","message":"Okay, I don\u0027t think I\u0027m understanding this section.\n\nAre you saying that the consumer_uuid of the allocation claimed by the scheduler prior to spawn is going to be reassigned from the instance uuid to the port uuid?","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":199,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":200,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":201,"context_line":"Neutron are out of scope of this spec."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Alternatives"},{"line_number":205,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_6b72ceaf","line":202,"in_reply_to":"7f515b1d_a087df0f","updated":"2017-10-05 15:32:19.000000000","message":"The consumer_id of an Allocation register, for a BW Inventory, is always a port_id.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"781c7b406d5fba20635e600d0edd18ac78f303d6","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_60c7a747","line":214,"updated":"2017-10-04 21:22:21.000000000","message":"Depending on the outcome of the \"agent RP\" discussion, may also need\n\n- A resource class representing an OVS port (whatever the OVS equivalent of an SR-IOV VF is).\n- A resource class representing a generic network port (not sure if \"port\" is the right word -- maybe VIF?).\n- Traits representing the various backend types (SR-IOV, OVS, ...)","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7d20d80605a5bfb081e5834f140c77ecd1a078f1","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_73e682eb","line":214,"in_reply_to":"5f4e5783_115f4f42","updated":"2017-10-10 11:44:33.000000000","message":"at the PTG i was suggesting intoducing standard traits for network backend that would be applied to the agent RP.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a93d47baaf822c514748ff812f2e4bc5f86cfd33","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_3089eec9","line":214,"in_reply_to":"5f4e5783_73e682eb","updated":"2017-10-11 16:36:43.000000000","message":"Now using your suggested RP tree (host-\u003eagent-\u003ephysnet) we need them.\n\nI\u0027ll add the names here.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"adaa4ab9d36052dc16125bc480385d6a0a9a0a4f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_eb8b5e65","line":214,"in_reply_to":"7f515b1d_60c7a747","updated":"2017-10-05 15:32:19.000000000","message":"You are right. Now we need:\n- A trait for each backend port: SRIOV, OVS, LB\n\nWe don\u0027t need a RC representing a generic network port. If a port is using BW that means this port is bound to a backend.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"487dfdf410b4bfdb73601a4934121a461597c820","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_115f4f42","line":214,"in_reply_to":"7f515b1d_a4f23305","updated":"2017-10-10 08:17:39.000000000","message":"Or maybe I\u0027m missing something in the design I wrote, but I don\u0027t know what.","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"740880d7cfe00dcdaa70f2df2776f1c4cec3feae","unresolved":false,"context_lines":[{"line_number":211,"context_line":"-----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Two new standard Resource Class will be defined, named as"},{"line_number":214,"context_line":"`NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"REST API impact"},{"line_number":217,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_a4f23305","line":214,"in_reply_to":"7f515b1d_eb8b5e65","updated":"2017-10-05 16:32:42.000000000","message":"Okay, still disagreeing there.  But maybe I\u0027m off base.  Jay, care to comment?","commit_id":"ed2bfbbb460f41a4df5759bfac4b3253ffa7083a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"28b3922e8f2884dd9a820519d4725f3ff22ecab7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"},{"line_number":66,"context_line":"Provider map will look like::"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  Compute host RP"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_5d368ae9","line":65,"range":{"start_line":65,"start_character":63,"end_line":65,"end_character":66},"updated":"2017-10-07 00:08:44.000000000","message":"is how","commit_id":"c5f2752bd4f0dc60d2a2707377e639fdf12dc217"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3a0e51ea31db58a52b330dfaee0a0bed7086ec29","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the same way as is described in the Neutron spec [6]_, this how the Resource"},{"line_number":66,"context_line":"Provider map will look like::"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  Compute host RP"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_712fa3f6","line":65,"range":{"start_line":65,"start_character":63,"end_line":65,"end_character":66},"in_reply_to":"7f515b1d_5d368ae9","updated":"2017-10-10 08:05:14.000000000","message":"Done","commit_id":"c5f2752bd4f0dc60d2a2707377e639fdf12dc217"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"6ec36c57689e86b567745b2026a053334506cdbd","unresolved":false,"context_lines":[{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":136,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":137,"context_line":"available bandwidth."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":140,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_7057f459","line":137,"range":{"start_line":135,"start_character":46,"end_line":137,"end_character":20},"updated":"2017-10-16 14:46:36.000000000","message":"I read this as: If a single vm port without a minimum bandwidth restriction is placed in a mixed fashion then either the other vm ports\u0027 minimimums may not be guaranteed or the one without a minimum may starve. If this is correct, this may be worth to be more explicit about.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d53d00798c827aacbb65ef68795e7444adc8a0a2","unresolved":false,"context_lines":[{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected. If the boot request commands"},{"line_number":136,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":137,"context_line":"available bandwidth."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":140,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_3b239dbf","line":137,"range":{"start_line":135,"start_character":46,"end_line":137,"end_character":20},"in_reply_to":"5f4e5783_7057f459","updated":"2017-10-16 14:56:29.000000000","message":"You are correct, that\u0027s why I added, as suggested, the work item note in L287.\n\nBut in the next patch I\u0027ll be more explicit and I\u0027ll add something similar to your description of the problem.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":137,"context_line":"available bandwidth."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":140,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":141,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":142,"context_line":"limits."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":145,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_5b0c22a4","line":142,"range":{"start_line":139,"start_character":51,"end_line":142,"end_character":7},"updated":"2017-10-16 09:47:28.000000000","message":"I think this scenario needs to update either the inventory or the allocation of bandwidth resource in Placement. It would be nice to see which one will be updated and how.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":136,"context_line":"don\u0027t have a minimum bandwidth restriction, placement API won\u0027t filter by"},{"line_number":137,"context_line":"available bandwidth."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":140,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":141,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":142,"context_line":"limits."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":145,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_10c4405e","line":142,"range":{"start_line":139,"start_character":51,"end_line":142,"end_character":7},"in_reply_to":"5f4e5783_5b0c22a4","updated":"2017-10-16 14:33:40.000000000","message":"This is explained in L198-L202. When a QoS policy is updated or detached from a port, the Allocation register is updated or deleted.\n\nBut, as I said in this section, this code is out of scope of this spec.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":156,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":159,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":160,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":161,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":162,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":163,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_5b31c259","line":160,"range":{"start_line":158,"start_character":36,"end_line":160,"end_character":25},"updated":"2017-10-16 09:47:28.000000000","message":"Is this the same case described in L139-L142?","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":155,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":156,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":159,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":160,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":161,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":162,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":163,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_b081ecfd","line":160,"range":{"start_line":158,"start_character":36,"end_line":160,"end_character":25},"in_reply_to":"5f4e5783_5b31c259","updated":"2017-10-16 14:33:40.000000000","message":"No. In L139-142 we are talking about a running VM with a port and a QoS update.\n\nThis section is about the initial configuration. At this point, the ML2 agent is stopped. This configuratio will defined the total amount of BW available in a physical network, not the assigned BW for a port.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":177,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":178,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":179,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":180,"context_line":"  document."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":183,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_7bc8fe20","line":180,"range":{"start_line":178,"start_character":23,"end_line":180,"end_character":11},"updated":"2017-10-16 09:47:28.000000000","message":"Is this [7]_ or is this an extension of the API proposed in [7]_ ?","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":177,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":178,"context_line":"  in bits per second). This requires a Neutron API change. The spec for this"},{"line_number":179,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":180,"context_line":"  document."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":183,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_70a494a6","line":180,"range":{"start_line":178,"start_character":23,"end_line":180,"end_character":11},"in_reply_to":"5f4e5783_7bc8fe20","updated":"2017-10-16 14:33:40.000000000","message":"You are totally right: this is [7].\n\nI\u0027ll update this in the following patch. Thanks!","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":180,"context_line":"  document."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":183,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":186,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":187,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":188,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":189,"context_line":"  agent Resource Provider."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":192,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_96d39160","line":189,"range":{"start_line":182,"start_character":2,"end_line":189,"end_character":26},"updated":"2017-10-16 09:47:28.000000000","message":"It is a bit confusing for me. I think the sequence will be:\n* Nova request a port from Neutron and Nova will get back in the port details the bandwidth resource needs for the port.\n\n* Nova will construct and send an allocation_candidates query to Placement that will contain all the resource needs of the instance including the bandwidth needs from the port details (along with the CPU, RAM and other resource requests coming from the flavor). \n\n* Placement will return the list of alternative RP sets where every RP set has a single root RP and contains RPs connected to that root RP to fulfill the resource needs of the instance.\n\n* Then nova will select a single RP set (based on further filtering) and create the allocations in placement on the RPs in the selected RP set.\n\nIf resource are not provided by or requested from the Agent RP then no allocation will be created against the Agent RP. Based on the model above bandwidth allocation will be created against the Network RPs. So I don\u0027t see how the Agent ID could play an important role in this sequence. Does Neutron needs to get back some kind of Agent ID form Nova?","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  change is not ready yet. Once is public, I\u0027ll add the reference to this"},{"line_number":180,"context_line":"  document."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":183,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":186,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":187,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":188,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":189,"context_line":"  agent Resource Provider."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":192,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_9b54d1ff","line":189,"range":{"start_line":182,"start_character":2,"end_line":189,"end_character":26},"in_reply_to":"5f4e5783_96d39160","updated":"2017-10-16 14:33:40.000000000","message":"In your sequence you are describing the scheduling process. At this point, port binding, the host is already selected.\n\nBUT, the backend is not selected. When you bind the port you also select the backend. In the port binding process, based on [7], we retrieve new data from Neutron: the Resource Class needed and the Resource Provider of the selected backend. This is the important part.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":199,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":200,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":201,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":202,"context_line":"Neutron are out of scope of this spec."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_96a271ad","line":202,"range":{"start_line":200,"start_character":13,"end_line":202,"end_character":38},"updated":"2017-10-16 09:47:28.000000000","message":"For me this is contradicting. Either the ML2 plugin will update the Allocation value. Or Allocation updates made by Neutron are out of scope. Which one will be the case?","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":199,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":200,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":201,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":202,"context_line":"Neutron are out of scope of this spec."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_70e814e1","line":202,"range":{"start_line":200,"start_character":13,"end_line":202,"end_character":38},"in_reply_to":"5f4e5783_96a271ad","updated":"2017-10-16 14:33:40.000000000","message":"What I meant to say is that this part of code (you can read this in the Neutron spec [1]) is not going to be implemented within this spec, because the current scope is bug enough. This is going to be delayed to future development.\n\n[1] https://review.openstack.org/#/c/508149/","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":215,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":216,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Three new standard Resource Class will be defined to represent a network"},{"line_number":219,"context_line":"back-end agent: `SRIOV_AGENT`, `OVS_AGENT` and `LB_AGENT`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"REST API impact"},{"line_number":222,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_b671ed46","line":219,"range":{"start_line":218,"start_character":19,"end_line":219,"end_character":58},"updated":"2017-10-16 09:47:28.000000000","message":"These are not Resource Classes. I think you can use traits for these.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":215,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":216,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Three new standard Resource Class will be defined to represent a network"},{"line_number":219,"context_line":"back-end agent: `SRIOV_AGENT`, `OVS_AGENT` and `LB_AGENT`."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"REST API impact"},{"line_number":222,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_9b6df1cd","line":219,"range":{"start_line":218,"start_character":19,"end_line":219,"end_character":58},"in_reply_to":"5f4e5783_b671ed46","updated":"2017-10-16 14:33:40.000000000","message":"Not yet. We are going to create Resource Providers per agent. To specify which type of agent is we need to define a Resource Class. That\u0027s why we need these new RClass","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d36820d5fc03749c0bdfe9f94adf3632cd3ad1f","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"No changes are needed. This feature uses the Placement API definition."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"The change on the port binding API is defined in [7]_."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"Security impact"},{"line_number":229,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_56af597c","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":54},"updated":"2017-10-16 09:47:28.000000000","message":"Which part of the change in  [7]_ will contain the bandwidth request for the port? The \u0027vif_details\u0027?","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"94e009872a70dbdbb944e3914b04817e541152fd","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"No changes are needed. This feature uses the Placement API definition."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"The change on the port binding API is defined in [7]_."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"Security impact"},{"line_number":229,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5f4e5783_bba1cdfa","line":226,"range":{"start_line":226,"start_character":0,"end_line":226,"end_character":54},"in_reply_to":"5f4e5783_56af597c","updated":"2017-10-16 14:33:40.000000000","message":"This is under review in this spec. As I said before, there are a lot of dependencies in this spec in progress.","commit_id":"dbbf7163fd97a57757de2553237fcd03991e2b7f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently there is no method in the Nova scheduler to allocate an instance"},{"line_number":21,"context_line":"based on the network bandwidth available in a host. Nova host information"},{"line_number":22,"context_line":"doesn\u0027t track the different network back-ends present in a host and its"},{"line_number":23,"context_line":"available bandwidth. Nova is supposed not to store or have defined any network"},{"line_number":24,"context_line":"topology."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_6595d086","line":22,"range":{"start_line":22,"start_character":68,"end_line":22,"end_character":71},"updated":"2017-10-17 19:37:06.000000000","message":"their","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently there is no method in the Nova scheduler to allocate an instance"},{"line_number":21,"context_line":"based on the network bandwidth available in a host. Nova host information"},{"line_number":22,"context_line":"doesn\u0027t track the different network back-ends present in a host and its"},{"line_number":23,"context_line":"available bandwidth. Nova is supposed not to store or have defined any network"},{"line_number":24,"context_line":"topology."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_135bd62e","line":22,"range":{"start_line":22,"start_character":68,"end_line":22,"end_character":71},"in_reply_to":"5f4e5783_6595d086","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Currently there is no method in the Nova scheduler to allocate an instance"},{"line_number":21,"context_line":"based on the network bandwidth available in a host. Nova host information"},{"line_number":22,"context_line":"doesn\u0027t track the different network back-ends present in a host and its"},{"line_number":23,"context_line":"available bandwidth. Nova is supposed not to store or have defined any network"},{"line_number":24,"context_line":"topology."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_05ecdc27","line":23,"range":{"start_line":23,"start_character":29,"end_line":23,"end_character":41},"updated":"2017-10-17 19:37:06.000000000","message":"not supposed","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Currently there is no method in the Nova scheduler to allocate an instance"},{"line_number":21,"context_line":"based on the network bandwidth available in a host. Nova host information"},{"line_number":22,"context_line":"doesn\u0027t track the different network back-ends present in a host and its"},{"line_number":23,"context_line":"available bandwidth. Nova is supposed not to store or have defined any network"},{"line_number":24,"context_line":"topology."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_336ff2c6","line":23,"range":{"start_line":23,"start_character":29,"end_line":23,"end_character":41},"in_reply_to":"5f4e5783_05ecdc27","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec proposes two new Resource Classes defining bandwidth constraints on"},{"line_number":38,"context_line":"a network back-end: `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":39,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`. These will represent the total bandwidth in"},{"line_number":40,"context_line":"bits per second, in each traffic direction, ready to be allocated by a virtual"},{"line_number":41,"context_line":"machine using this network interface."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_45e53437","line":38,"range":{"start_line":38,"start_character":25,"end_line":38,"end_character":34},"updated":"2017-10-17 19:37:06.000000000","message":"Is \u0027BANDWIDTH\u0027 is necessary in these names?  May as well make them shorter if possible.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec proposes two new Resource Classes defining bandwidth constraints on"},{"line_number":38,"context_line":"a network back-end: `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":39,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`. These will represent the total bandwidth in"},{"line_number":40,"context_line":"bits per second, in each traffic direction, ready to be allocated by a virtual"},{"line_number":41,"context_line":"machine using this network interface."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_13f756f8","line":38,"range":{"start_line":38,"start_character":25,"end_line":38,"end_character":34},"in_reply_to":"5f4e5783_45e53437","updated":"2017-10-18 16:17:09.000000000","message":"Maybe is not really necessary. But I willingly accepted the suggestion made by Jay.\n\nBecause this can be discussed during the coding part (in the os-traits patch), if the name is changed, I\u0027ll update this spec.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"----------------------------------------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Each back-end physical network with available bandwidth information will be a"},{"line_number":47,"context_line":"Resource Provider with an Inventory record for either or both of these Resource"},{"line_number":48,"context_line":"Classes: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_e53c2094","line":47,"range":{"start_line":47,"start_character":47,"end_line":47,"end_character":61},"updated":"2017-10-17 19:37:06.000000000","message":"Presumably it is also legal for it to have neither.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06427df64bdc4e6c93db94a8dc2c0f85b8e191dd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"----------------------------------------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Each back-end physical network with available bandwidth information will be a"},{"line_number":47,"context_line":"Resource Provider with an Inventory record for either or both of these Resource"},{"line_number":48,"context_line":"Classes: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_fd69168b","line":47,"range":{"start_line":47,"start_character":47,"end_line":47,"end_character":61},"in_reply_to":"3f4b6375_7389ea24","updated":"2017-10-18 21:01:21.000000000","message":"Okay, but that\u0027s not really what I meant.  When we come to the implementation here, I suspect what\u0027s really going to happen is the VF inventory is going to live inside the PF RP.  So when you don\u0027t care about bandwidth restrictions, your PF RP will have just VF inventory, but neither of the bandwidth inventories.\n\nThat said, it wouldn\u0027t be a bad thing to make a statement about what happens if a RP doesn\u0027t have any inventory.  I would be inclined to say that you *should* create it regardless, so the model is always consistent.\n\nSee also followup on L75.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"----------------------------------------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Each back-end physical network with available bandwidth information will be a"},{"line_number":47,"context_line":"Resource Provider with an Inventory record for either or both of these Resource"},{"line_number":48,"context_line":"Classes: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_925b1d2d","line":47,"range":{"start_line":47,"start_character":47,"end_line":47,"end_character":61},"in_reply_to":"3f4b6375_fd69168b","updated":"2017-10-19 11:43:18.000000000","message":"I don\u0027t agree with havinf the VF Inventory in the physnet.\n\nHaving said that, I\u0027m not going to decide this. It makes sense to always create the RP for each physnet, in case the VF Inventory or the port inventory (in case of accelerated OVS with limited amount of ports).\n\nI\u0027ll change this.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":44,"context_line":"----------------------------------------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Each back-end physical network with available bandwidth information will be a"},{"line_number":47,"context_line":"Resource Provider with an Inventory record for either or both of these Resource"},{"line_number":48,"context_line":"Classes: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_7389ea24","line":47,"range":{"start_line":47,"start_character":47,"end_line":47,"end_character":61},"in_reply_to":"5f4e5783_e53c2094","updated":"2017-10-18 16:17:09.000000000","message":"Hmmm I thought about this and that\u0027s why I added the condition in L46 \"with available bandwidth information\". If a physnet doesn\u0027t have BW information, it\u0027s worthless to create a RP without any Inventory.\n\nBut, in sake of clarity, I\u0027ll add a comment about this:\n\"If no bandwidth information is provided for a physical network, neither Resource Provider nor Inventory will be created\"","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  separate Resource Provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Open vSwitch, Linux Bridge: each physical network and tunnel endpoint may be"},{"line_number":58,"context_line":"  a separate Resource Provider. A virtual machine port can consume bandwidth"},{"line_number":59,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":60,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":61,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":62,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_45f2d49b","line":62,"range":{"start_line":58,"start_character":32,"end_line":62,"end_character":42},"updated":"2017-10-17 19:37:06.000000000","message":"was this supposed to be on a separate paragraph?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  separate Resource Provider."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Open vSwitch, Linux Bridge: each physical network and tunnel endpoint may be"},{"line_number":58,"context_line":"  a separate Resource Provider. A virtual machine port can consume bandwidth"},{"line_number":59,"context_line":"  from one of these Resources Providers. Each physical network can therefore"},{"line_number":60,"context_line":"  have bandwidth controlled separately with Resource Providers representing"},{"line_number":61,"context_line":"  each physical network and those Resource Providers having inventory records"},{"line_number":62,"context_line":"  of `NET_BANDWIDTH_[IN|E]GRESS_BITS_SEC`."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_934b46af","line":62,"range":{"start_line":58,"start_character":32,"end_line":62,"end_character":42},"in_reply_to":"5f4e5783_45f2d49b","updated":"2017-10-18 16:17:09.000000000","message":"No, but it make sense. This paragraph doesn\u0027t belong to the OVS bullet point.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_a5474877","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"updated":"2017-10-17 19:37:06.000000000","message":"To be clear, this represents a PF?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_7e3651b7","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"in_reply_to":"3f4b6375_2734544a","updated":"2017-10-18 16:17:09.000000000","message":"Because you will have a number of VFs available per backend, not per PF.\n\nCurrently you can ask for a VF but you can\u0027t decide which PF is going to be selected.\n\nOf course, this can change in the future but it\u0027s out of scope of this spec. What is in L72-73 is just an example and can change.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_724ae127","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"in_reply_to":"3f4b6375_3dcd6e5d","updated":"2017-10-19 11:43:18.000000000","message":"The current model doesn\u0027t limit the creation of the port inventory in the agent RP or the physnet RP. L72,73 is just a possible example, but could be changed.\n\nWith this model we can assign new Inventories to both RPs (agent or physnet).\n\nMaybe we can disagree about where to locate the port Inventory (out of this scope) but I think we agree with RP tree (host-\u003eagent-\u003ephysnet) described here.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06427df64bdc4e6c93db94a8dc2c0f85b8e191dd","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_3dcd6e5d","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"in_reply_to":"3f4b6375_7e3651b7","updated":"2017-10-18 21:01:21.000000000","message":"Okay, so that\u0027s where I think we have a disconnect.  I recognize that we\u0027re trying to express the minimum design possible to keep the scope of this spec down to just the bandwidth stuff, but I don\u0027t think we can get by without representing the model in full as it\u0027s going to be implemented.  Not to quibble about naming, but definitely to see what goes where.  Specifically:\n\nThe PF has a limited number of VFs that can be created on it.  If you report all the VF inventory at the higher level (the agent), and all your requests come in for small bandwidth amounts on the same physnet, you could wind up exhausting one PF\u0027s VFs, but placement would still think you have plenty left and continue to allocate them.  That\u0027s bad.\n\nSo I think the VF inventory needs to be expressed within the PF RPs (and for readability in the spec, the RPs should be labeled to make it clear they represent PFs).\n\nI don\u0027t know how OVS works in terms of creating virtual ports, but if there is a limit, that should likewise be expressed as inventory within the port RP.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e852e50cdbdbd43dfc66c6cc6bf41f1ef243d961","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_2734544a","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"in_reply_to":"5f4e5783_a5474877","updated":"2017-10-18 07:03:27.000000000","message":"If this is the PF, what is for Agent SR-IOV RP? since the line 72 said it has VF inventory..","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":73,"context_line":"      |        |                VFs)} }"},{"line_number":74,"context_line":"      |        |"},{"line_number":75,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":76,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":77,"context_line":"      |        |       inventory: {"},{"line_number":78,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_33e93280","line":75,"range":{"start_line":75,"start_character":19,"end_line":75,"end_character":38},"in_reply_to":"5f4e5783_a5474877","updated":"2017-10-18 16:17:09.000000000","message":"In SRIOV, this is a PF","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":93,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":94,"context_line":"               |                ports)} }"},{"line_number":95,"context_line":"               |"},{"line_number":96,"context_line":"               +-\u003e Network Resource RP {"},{"line_number":97,"context_line":"               |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":98,"context_line":"               |       inventory: {"},{"line_number":99,"context_line":"               |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_7420e3f7","line":96,"range":{"start_line":96,"start_character":19,"end_line":96,"end_character":38},"updated":"2017-10-17 19:37:06.000000000","message":"...and this represents an OVS endpoint?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":93,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":94,"context_line":"               |                ports)} }"},{"line_number":95,"context_line":"               |"},{"line_number":96,"context_line":"               +-\u003e Network Resource RP {"},{"line_number":97,"context_line":"               |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":98,"context_line":"               |       inventory: {"},{"line_number":99,"context_line":"               |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_fecec181","line":96,"range":{"start_line":96,"start_character":19,"end_line":96,"end_character":38},"in_reply_to":"5f4e5783_7420e3f7","updated":"2017-10-18 16:17:09.000000000","message":"You are right. This is, for example, a physical bridge connected to a physical network or a tunnel bridge with an IP, assigned to a physical interface.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_. Each"},{"line_number":114,"context_line":"backend agent will be model as a Resource Provider. Under those agent Resource"},{"line_number":115,"context_line":"Providers, there will be one Resource Provider per physical network, shaped"},{"line_number":116,"context_line":"with one custom trait with the name of the physical network."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_f48173c4","line":114,"range":{"start_line":114,"start_character":22,"end_line":114,"end_character":27},"updated":"2017-10-17 19:37:06.000000000","message":"modeled","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"This definition depends on the feature `Nested Resource Providers` [2]_. Each"},{"line_number":114,"context_line":"backend agent will be model as a Resource Provider. Under those agent Resource"},{"line_number":115,"context_line":"Providers, there will be one Resource Provider per physical network, shaped"},{"line_number":116,"context_line":"with one custom trait with the name of the physical network."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_bec84974","line":114,"range":{"start_line":114,"start_character":22,"end_line":114,"end_character":27},"in_reply_to":"5f4e5783_f48173c4","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":123,"context_line":"consume those resources."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"The first logical reader will be the placement API, which is called by the"},{"line_number":126,"context_line":"Nova Scheduler when a virtual machine is to be spawned. If a Neutron port or"},{"line_number":127,"context_line":"network with a QoS policy containing a minimum bandwidth rule (that means"},{"line_number":128,"context_line":"requesting a minimum guaranteed bandwidth), the Placement API will return only"},{"line_number":129,"context_line":"those hosts having the available bandwidth from each network back-end."},{"line_number":130,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_4a153ce4","line":127,"range":{"start_line":126,"start_character":56,"end_line":127,"end_character":8},"updated":"2017-10-17 19:37:06.000000000","message":"\"...is requested\"?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":123,"context_line":"consume those resources."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"The first logical reader will be the placement API, which is called by the"},{"line_number":126,"context_line":"Nova Scheduler when a virtual machine is to be spawned. If a Neutron port or"},{"line_number":127,"context_line":"network with a QoS policy containing a minimum bandwidth rule (that means"},{"line_number":128,"context_line":"requesting a minimum guaranteed bandwidth), the Placement API will return only"},{"line_number":129,"context_line":"those hosts having the available bandwidth from each network back-end."},{"line_number":130,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_0b94be43","line":127,"range":{"start_line":126,"start_character":56,"end_line":127,"end_character":8},"in_reply_to":"5f4e5783_4a153ce4","updated":"2017-10-18 16:17:09.000000000","message":"Yes, I missed that part","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":128,"context_line":"requesting a minimum guaranteed bandwidth), the Placement API will return only"},{"line_number":129,"context_line":"those hosts having the available bandwidth from each network back-end."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_a5e868b2","line":131,"range":{"start_line":131,"start_character":25,"end_line":131,"end_character":79},"updated":"2017-10-17 16:33:43.000000000","message":"nit: you can\u0027t specify new ports or networks when moving an instance.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":128,"context_line":"requesting a minimum guaranteed bandwidth), the Placement API will return only"},{"line_number":129,"context_line":"those hosts having the available bandwidth from each network back-end."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_cb76a63f","line":131,"range":{"start_line":131,"start_character":25,"end_line":131,"end_character":79},"in_reply_to":"5f4e5783_a5e868b2","updated":"2017-10-18 16:17:09.000000000","message":"Yes, when moving an instance I mean with the current ports.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_aae950e6","line":133,"range":{"start_line":133,"start_character":10,"end_line":133,"end_character":23},"updated":"2017-10-17 19:37:06.000000000","message":"the placement API","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This applies when a boot or move command is sent along with a port or a network"},{"line_number":132,"context_line":"and this port or network has a QoS policy with a minimum bandwidth rule. In"},{"line_number":133,"context_line":"this case placement API will list all bandwidth inventories in each host to"},{"line_number":134,"context_line":"fit this request. If no Resource Provider is defined or these don\u0027t provide"},{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_ab736a4d","line":133,"range":{"start_line":133,"start_character":10,"end_line":133,"end_character":23},"in_reply_to":"5f4e5783_aae950e6","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction,"},{"line_number":138,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":139,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":140,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":141,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_6aefd8e8","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":13},"updated":"2017-10-17 19:37:06.000000000","message":"the placement API","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":135,"context_line":"enough bandwidth, the host won\u0027t be selected."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction,"},{"line_number":138,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":139,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":140,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":141,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_4b987669","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":13},"in_reply_to":"5f4e5783_6aefd8e8","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":142,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":143,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"},{"line_number":144,"context_line":"bandwidth oversubscription."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":147,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":148,"context_line":"rule attached and will check if the updated bandwidth meets the available"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_c50c8495","line":145,"updated":"2017-10-17 16:33:43.000000000","message":"What about attaching a port to an existing instance? If that port is associated with a minimum bandwidth policy but the host that the instance is running on doesn\u0027t guarantee bandwidth or it does and it\u0027s not supporting the minimum required by the port, what happens? Do we fail the attach interface call?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"356ad2ec6cdac5997c2b79e5702938abe7178a42","unresolved":false,"context_lines":[{"line_number":142,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":143,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"},{"line_number":144,"context_line":"bandwidth oversubscription."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":147,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":148,"context_line":"rule attached and will check if the updated bandwidth meets the available"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_fdb47637","line":145,"in_reply_to":"3f4b6375_abc12a31","updated":"2017-10-18 20:28:17.000000000","message":"OK, but there is no conductor or scheduler involved in attaching a port to an existing instance. If you attach a nic to an instance, nova will create a port in that network and then bind it to the host and that instance. Because of the allocation stuff in here, then the compute node code would be the one responsible for creating a bandwidth allocation against the bandwidth provider in placement.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":143,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"},{"line_number":144,"context_line":"bandwidth oversubscription."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":147,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":148,"context_line":"rule attached and will check if the updated bandwidth meets the available"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_321b491c","line":145,"in_reply_to":"3f4b6375_fdb47637","updated":"2017-10-19 11:43:18.000000000","message":"What Sean K Mooney is going to propose in [8] will solve this problem, by moving the creation of the ports before the scheduling process and exsecuted by the conductor.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":142,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":143,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"},{"line_number":144,"context_line":"bandwidth oversubscription."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":147,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":148,"context_line":"rule attached and will check if the updated bandwidth meets the available"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_abc12a31","line":145,"in_reply_to":"5f4e5783_c50c8495","updated":"2017-10-18 16:17:09.000000000","message":"This will follow the same process as defined in the \"Operation\" section for port binding. The created port will be bound to a backend and at this point the same mechanism will operate.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a9da62a0388a9a3e770f8a15f3e63715c97d9b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Neutron ML2 plugin initialization: when the network back-end Neutron ML2 plugin"},{"line_number":159,"context_line":"is initialized, it will read the network resource list (physical functions,"},{"line_number":160,"context_line":"physical networks, tunnel endpoint) and will create a Resource Provider"},{"line_number":161,"context_line":"per each network resource with the available network bandwidth exposed. This"},{"line_number":162,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":163,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_ab3cbfe0","line":163,"range":{"start_line":161,"start_character":72,"end_line":163,"end_character":30},"updated":"2017-10-17 13:34:30.000000000","message":"Shall the administrator overwrite (with smaller value for example) the read values from the devices? Or the configuration can/will be overwritten by the values from the physical devices?\nOr the ml2 plugin or the physical device will decide if it can read from the devices the capabilities and if there is no way to read from the devices the config will be used?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"ff000212d725e5d66d7b5162a2d47e43ec82805b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Neutron ML2 plugin initialization: when the network back-end Neutron ML2 plugin"},{"line_number":159,"context_line":"is initialized, it will read the network resource list (physical functions,"},{"line_number":160,"context_line":"physical networks, tunnel endpoint) and will create a Resource Provider"},{"line_number":161,"context_line":"per each network resource with the available network bandwidth exposed. This"},{"line_number":162,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":163,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_c71d8010","line":163,"range":{"start_line":161,"start_character":72,"end_line":163,"end_character":30},"in_reply_to":"5f4e5783_91d37604","updated":"2017-10-18 06:27:34.000000000","message":"Thanks.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4d88f52ee5895b35aee9c825d4146eeb0c7bcca9","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Neutron ML2 plugin initialization: when the network back-end Neutron ML2 plugin"},{"line_number":159,"context_line":"is initialized, it will read the network resource list (physical functions,"},{"line_number":160,"context_line":"physical networks, tunnel endpoint) and will create a Resource Provider"},{"line_number":161,"context_line":"per each network resource with the available network bandwidth exposed. This"},{"line_number":162,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":163,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_91d37604","line":163,"range":{"start_line":161,"start_character":72,"end_line":163,"end_character":30},"in_reply_to":"5f4e5783_ab3cbfe0","updated":"2017-10-17 13:57:46.000000000","message":"There are some backends that currently doesn\u0027t provide this information; for example OVS.\n\nFor each backend in Neutron (LB, OVS, SRIOV), a method to read the BW available (via config or driver) will be implemented.\n\nYour question is defined in detail in the Neutron spec [1]. The manual config parameter will overwrite any value read from the driver, if exist.\n\n[1] https://review.openstack.org/#/c/508149/","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a9da62a0388a9a3e770f8a15f3e63715c97d9b","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_6e3ed5b8","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":24},"updated":"2017-10-17 13:34:30.000000000","message":"If I understand well this configuration is for ml2 plugin, not for the compute, or am I missing something?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_a5ebc875","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":24},"in_reply_to":"5f4e5783_31f7225c","updated":"2017-10-17 16:33:43.000000000","message":"I think the confusion is about what you mean by \"compute agent\" here, i.e. is it the nova-compute service or the neutron-openvswitch-agent running on the compute host? It would be the latter, correct? Because that\u0027s where the config option is read from, not nova-compute.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4d88f52ee5895b35aee9c825d4146eeb0c7bcca9","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_31f7225c","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":24},"in_reply_to":"5f4e5783_6e3ed5b8","updated":"2017-10-17 13:57:46.000000000","message":"The config is per agent, the same as, for example, the bridge_mappings [1][2]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L182\n[2] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py#L962","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"ff000212d725e5d66d7b5162a2d47e43ec82805b","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_4764f0b9","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":24},"in_reply_to":"5f4e5783_a5ebc875","updated":"2017-10-18 06:27:34.000000000","message":"Yeah, thanks for making it clear, the confusing part is the compute agent, as I would think of neutron agent instead (ovs, sriv, linuxbridge...)","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"},{"line_number":171,"context_line":"will supersede the config value, update the Inventory value with the current"},{"line_number":172,"context_line":"bandwidth allocated and write a warning message. This behaviour will avoid"},{"line_number":173,"context_line":"any disruption of the service."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":176,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_8322ffb7","line":173,"range":{"start_line":169,"start_character":24,"end_line":173,"end_character":30},"updated":"2017-10-17 19:37:06.000000000","message":"IIRC from discussions at the PTG:\n\nThe agent should not be looking up allocations, ever.  If someone updates the totals to be greater than what\u0027s allocated, placement will allow it; and then that RP will simply be unusable until enough resource is deallocated to bring it out of the red.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":166,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"},{"line_number":167,"context_line":"restarts a compute agent, the Inventory total value assigned to this Resource"},{"line_number":168,"context_line":"Provider (physical network) and Resource Class (ingress or egress traffic"},{"line_number":169,"context_line":"direction) must change. If the total amount of bandwidth allocated (the sum"},{"line_number":170,"context_line":"of all Allocation records) exceeds the value of the Inventory, the ML2 plugin"},{"line_number":171,"context_line":"will supersede the config value, update the Inventory value with the current"},{"line_number":172,"context_line":"bandwidth allocated and write a warning message. This behaviour will avoid"},{"line_number":173,"context_line":"any disruption of the service."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":176,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_abefeaae","line":173,"range":{"start_line":169,"start_character":24,"end_line":173,"end_character":30},"in_reply_to":"5f4e5783_8322ffb7","updated":"2017-10-18 16:17:09.000000000","message":"Ok, that makes things easier for Neutron agents when restarting.\n\nI\u0027ll rewrite this section.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":178,"context_line":"following one:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* Nova request a port to Neutron. This port could be already created (for"},{"line_number":181,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_c026b268","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"updated":"2017-10-17 16:33:43.000000000","message":"When nova creates a port during server create, it happens well after scheduling and a compute host is chosen, it happens down in the allocate_for_instance code which is called from the compute service. So you have a chicken and egg issue here.\n\nIf you need the port to be created by nova before scheduling, then you\u0027re going to need to look at making this effort a dependency:\n\nhttps://blueprints.launchpad.net/nova/+spec/prep-for-network-aware-scheduling-pike\n\nThe main idea there is moving the port creation out of the compute service once a host is chosen. The port would be created in the conductor service and then bound in the compute service.\n\nNote that John Garbutt is no longer driving that change. There was quite a bit of code written which could be revived, but it would need a new owner.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":178,"context_line":"following one:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* Nova request a port to Neutron. This port could be already created (for"},{"line_number":181,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_32f349a1","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"in_reply_to":"3f4b6375_abefdb85","updated":"2017-10-19 11:43:18.000000000","message":"I\u0027ll check this too, because this spec really needs to have this information back during the binding process, executed from the conductor.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"956667f4738971003ee25eb3e11760d54cb6cf29","unresolved":false,"context_lines":[{"line_number":178,"context_line":"following one:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* Nova request a port to Neutron. This port could be already created (for"},{"line_number":181,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_abefdb85","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"in_reply_to":"3f4b6375_d68d227c","updated":"2017-10-18 20:20:13.000000000","message":"\u003e In the manager build_instances function, create the ports at the begining of the process.\n\nIn conductor manager it would actually be part of schedule_and_build_instances now - build_instances is only if you\u0027re using cells v1 or if we\u0027re rescheduling from a build failure in a compute.\n\nI\u0027d need to go back and read John\u0027s spec for moving port creation to conductor but I thought he intended on not actually binding the port to the host until we were in the compute service, because there was other stuff involved with binding the port, like things for ironic and baremetal networking.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":178,"context_line":"following one:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* Nova request a port to Neutron. This port could be already created (for"},{"line_number":181,"context_line":"  example, when requesting an SR-IOV port) or could be a new one."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_d68d227c","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"in_reply_to":"5f4e5783_c026b268","updated":"2017-10-18 16:17:09.000000000","message":"Now I\u0027m aware of that.\n\nThis is, for sure, a new dependecy for this spec based on this BP.\n\nThe proposed solution is to:\n- In the manager build_instances function, create the ports at the begining of the process.\n- Once the scheduler has returned the selected hosts, bind the port to the backends.\n- Give to the compute build_and_run_instance function the list of ports already created and bound.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":185,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_201586e5","line":187,"range":{"start_line":187,"start_character":2,"end_line":187,"end_character":76},"updated":"2017-10-17 16:33:43.000000000","message":"This is going to have upgrade implications since nova supports mixed version computes so the scheduler could have picked a host that is running Pike code, which wouldn\u0027t have this logic. So you might have to consider filtering out older compute hosts somehow during scheduling.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"956667f4738971003ee25eb3e11760d54cb6cf29","unresolved":false,"context_lines":[{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":185,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_eb9153f3","line":187,"range":{"start_line":187,"start_character":2,"end_line":187,"end_character":76},"in_reply_to":"3f4b6375_35122fb3","updated":"2017-10-18 20:20:13.000000000","message":"\u003e The port binding process will depend on the Neutron code in the compute node. Of course, if the compute Neutron code doesn\u0027t provide this feature, won\u0027t be possible to retrieve this information.\n\nYeah, and that\u0027s what I\u0027m saying about the fact you can\u0027t make assumptions in the controller services (conductor/scheduler) about things that are going to happen in the compute since the chosen compute could be old. One way we typically deal with this kind of issue is we block features in the control plane if the computes are not all upgraded to the service version that has the code in the compute nodes to handle that feature.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":185,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_65769ddb","line":187,"range":{"start_line":187,"start_character":2,"end_line":187,"end_character":76},"in_reply_to":"3f4b6375_eb9153f3","updated":"2017-10-19 11:43:18.000000000","message":"Ok, I understand this. So this feature will be blocked in a deployment until all compute nodes (and services, Nova and Neutron agents) are migrated.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":184,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":185,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_35122fb3","line":187,"range":{"start_line":187,"start_character":2,"end_line":187,"end_character":76},"in_reply_to":"5f4e5783_201586e5","updated":"2017-10-18 16:17:09.000000000","message":"The port binding process will depend on the Neutron code in the compute node. Of course, if the compute Neutron code doesn\u0027t provide this feature, won\u0027t be possible to retrieve this information.\n\nBut if the Neutron server code is old it won\u0027t be possible either, from the agents, to create the RP and the Inventories for the physnets (the RPC calls implemented in the ML2 plugin won\u0027t be available). That means both Neutron agent and server must be updated to enable this feature.\n\nEven more: any agent running with old code won\u0027t create its own RP and Inventories and won\u0027t be never selected.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":191,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":192,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":193,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":194,"context_line":"  agent Resource Provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_40ef62e8","line":191,"range":{"start_line":190,"start_character":62,"end_line":191,"end_character":19},"updated":"2017-10-17 16:33:43.000000000","message":"Does nova-scheduler do this or does nova-compute do this?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":187,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":188,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":191,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":192,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":193,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":194,"context_line":"  agent Resource Provider."}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_56e132fe","line":191,"range":{"start_line":190,"start_character":62,"end_line":191,"end_character":19},"in_reply_to":"5f4e5783_40ef62e8","updated":"2017-10-18 16:17:09.000000000","message":"According to L181 answer, in the scheduler.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Note: the concept of \"active port binding\" is defined in [8]_. This new API,"},{"line_number":201,"context_line":"defined both in [7]_ and [8]_ is needed for this feature."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":204,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":205,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":206,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":207,"context_line":"Neutron are out of scope of this spec."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_007ccae9","line":207,"range":{"start_line":203,"start_character":0,"end_line":207,"end_character":38},"updated":"2017-10-17 16:33:43.000000000","message":"What happens when bandwidth rule updates are in conflict with available inventory and current allocations for a given network resource provider? Placement will fail with a 409, so will that be reflected out of the networking API when trying to update the QoS policy?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Note: the concept of \"active port binding\" is defined in [8]_. This new API,"},{"line_number":201,"context_line":"defined both in [7]_ and [8]_ is needed for this feature."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Minimum bandwidth rule update: when a minimum bandwidth rule is updated, the"},{"line_number":204,"context_line":"ML2 plugin will list the bound Neutron ports with this QoS policy and rule"},{"line_number":205,"context_line":"attached and will update the Allocation value. The `consumer_id` of each"},{"line_number":206,"context_line":"Allocation is the `port_id`, which is unique. Allocation updates made by"},{"line_number":207,"context_line":"Neutron are out of scope of this spec."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_f6c81e75","line":207,"range":{"start_line":203,"start_character":0,"end_line":207,"end_character":38},"in_reply_to":"5f4e5783_007ccae9","updated":"2017-10-18 16:17:09.000000000","message":"As I said, for now placement updates from Neutron are out of scope of this spec.\n\nWe will handle this in future features.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":221,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Three new standard Resource Class will be defined to represent a network"},{"line_number":224,"context_line":"back-end agent: `SRIOV_AGENT`, `OVS_AGENT` and `LB_AGENT`."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"REST API impact"},{"line_number":227,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_c0cfd226","line":224,"range":{"start_line":224,"start_character":16,"end_line":224,"end_character":58},"updated":"2017-10-17 16:33:43.000000000","message":"These aren\u0027t resource classes, you don\u0027t have an inventory of type OVS_AGENT. These are described as traits above, but I\u0027m not even sure that calling these traits is accurate, but it\u0027s about as close as we\u0027re going to get I suppose.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":221,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Three new standard Resource Class will be defined to represent a network"},{"line_number":224,"context_line":"back-end agent: `SRIOV_AGENT`, `OVS_AGENT` and `LB_AGENT`."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"REST API impact"},{"line_number":227,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_f6ab7e72","line":224,"range":{"start_line":224,"start_character":16,"end_line":224,"end_character":58},"in_reply_to":"5f4e5783_1e2b0683","updated":"2017-10-18 16:17:09.000000000","message":"I\u0027ll change the name and the definition, because those are actually traits.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":221,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Three new standard Resource Class will be defined to represent a network"},{"line_number":224,"context_line":"back-end agent: `SRIOV_AGENT`, `OVS_AGENT` and `LB_AGENT`."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"REST API impact"},{"line_number":227,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_1e2b0683","line":224,"range":{"start_line":224,"start_character":16,"end_line":224,"end_character":58},"in_reply_to":"5f4e5783_c0cfd226","updated":"2017-10-17 19:37:06.000000000","message":"They should probably be called NET_AGENT_{SRIOV|OVS|LB} or similar.\n\nI don\u0027t see a problem calling them traits - Matt, what\u0027s the concern there?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":248,"context_line":"Performance Impact"},{"line_number":249,"context_line":"------------------"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"None"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"Other deployer impact"},{"line_number":254,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_20f7c65b","line":251,"updated":"2017-10-17 16:33:43.000000000","message":"There are likely going to be performance impacts of introducing a new scheduler filter which is making REST API calls to Neutron and/or Placement, correct?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":248,"context_line":"Performance Impact"},{"line_number":249,"context_line":"------------------"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"None"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"Other deployer impact"},{"line_number":254,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_d95f950c","line":251,"in_reply_to":"5f4e5783_20f7c65b","updated":"2017-10-18 16:17:09.000000000","message":"You are right:\n- There is a new filtering option.\n- According to [8]_ we have new calls to Neutron.\n- New calls from Neutron agents are made to placement API.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Once Nova is aware of this new feature, Neutron should start sending the"},{"line_number":261,"context_line":"resource information using the new port binding API. Neutron will have a global"},{"line_number":262,"context_line":"variable, defined in [6]_, to manually enable this feature. The administrator"},{"line_number":263,"context_line":"should know that if no Resource Providers are created by Neutron and there is"},{"line_number":264,"context_line":"a bandwidth request in the boot/move command, the Scheduler will return no"},{"line_number":265,"context_line":"available host."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Developer impact"},{"line_number":268,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_60749ecf","line":265,"range":{"start_line":262,"start_character":60,"end_line":265,"end_character":15},"updated":"2017-10-17 16:33:43.000000000","message":"So I assume on the neutron side, if they are not going to enable the feature then the operator is also going to want a policy rule for disabling QoS policy stuff right?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Once Nova is aware of this new feature, Neutron should start sending the"},{"line_number":261,"context_line":"resource information using the new port binding API. Neutron will have a global"},{"line_number":262,"context_line":"variable, defined in [6]_, to manually enable this feature. The administrator"},{"line_number":263,"context_line":"should know that if no Resource Providers are created by Neutron and there is"},{"line_number":264,"context_line":"a bandwidth request in the boot/move command, the Scheduler will return no"},{"line_number":265,"context_line":"available host."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Developer impact"},{"line_number":268,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_39cfc980","line":265,"range":{"start_line":262,"start_character":60,"end_line":265,"end_character":15},"in_reply_to":"5f4e5783_60749ecf","updated":"2017-10-18 16:17:09.000000000","message":"I think this is a good topic to be discussed in the Neutron spec.\n\nBut QoS could be disabled by not enabling the service extension.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"971aeee0696fe059958d0a27cd52b498dfe03723","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"* Create the new Resource Classes."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_34026b0b","line":290,"range":{"start_line":290,"start_character":2,"end_line":290,"end_character":67},"updated":"2017-10-17 16:33:43.000000000","message":"Is this what is described on L190 above? We actually want to move away from the resource tracker creating or updating allocations, because those become back-level as we start upgrading code and older RTs will potentially overwrite allocations for an instance during a move operation, which is something we found out late in Pike and had to effectively disable once all computes were upgraded to Pike:\n\nIa93168b1560267178059284186fb2b7096c7e81f","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"956667f4738971003ee25eb3e11760d54cb6cf29","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"* Create the new Resource Classes."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_9d08e228","line":290,"range":{"start_line":290,"start_character":2,"end_line":290,"end_character":67},"in_reply_to":"3f4b6375_79e9c17e","updated":"2017-10-18 20:20:13.000000000","message":"Ideally we want the scheduler creating the allocations, but you\u0027re saying that we don\u0027t have the information to create the allocation until we bind the port to a chosen host and get some binding:profile information back from neutron? Does that binding:profile information contain the resource class and allocation value that nova is going to proxy to placement?","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4e119dce98e16b6933bfb750f008ec2dab24395a","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"* Create the new Resource Classes."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_d28e352d","line":290,"range":{"start_line":290,"start_character":2,"end_line":290,"end_character":67},"in_reply_to":"3f4b6375_9d08e228","updated":"2017-10-19 11:43:18.000000000","message":"Yes, the port binding reply will contain the RC, the allocation value and the Agent RP UUID to find the physnet RP.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"* Create the new Resource Classes."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_79e9c17e","line":290,"range":{"start_line":290,"start_character":2,"end_line":290,"end_character":67},"in_reply_to":"5f4e5783_34026b0b","updated":"2017-10-18 16:17:09.000000000","message":"I\u0027m still learning about placement API. Actually conductor can create an Allocation record once the port binding is done, because of the information returned.","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"575e49849afce2b1d883a74bfe974977220231f5","unresolved":false,"context_lines":[{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"},{"line_number":294,"context_line":"  bandwidth measurement."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f4e5783_3e5da214","line":293,"range":{"start_line":293,"start_character":49,"end_line":293,"end_character":55},"updated":"2017-10-17 19:37:06.000000000","message":"result","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a91d1b0007c4baeab8946900d9e8ba37404173","unresolved":false,"context_lines":[{"line_number":290,"context_line":"* Modify the Resource Tracker to handle these new Resource Classes."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"* Developer and operator documentation. It\u0027s important to highlight that having"},{"line_number":293,"context_line":"  both restricted and unrestricted flavors could become in an undefined"},{"line_number":294,"context_line":"  bandwidth measurement."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"3f4b6375_b98e1925","line":293,"range":{"start_line":293,"start_character":49,"end_line":293,"end_character":55},"in_reply_to":"5f4e5783_3e5da214","updated":"2017-10-18 16:17:09.000000000","message":"Done","commit_id":"9fd254d95b535eed045c65dcff8d0b7bd6457cc9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"541cc2543e33acd38645a786ab8c4f78e9e7df22","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Resource Provider with an Inventory record for either or both of these Resource"},{"line_number":48,"context_line":"Classes: `NET_BANDWIDTH_INGRESS_BITS_SEC` and `NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":49,"context_line":"If no bandwidth information is provided for a physical network, neither"},{"line_number":50,"context_line":"Resource Provider nor Inventory will be created."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"The amount of `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":53,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC` resources exposed to the guest will depend on"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_fdf9164d","line":50,"updated":"2017-10-18 21:04:21.000000000","message":"See PS12 comment.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"541cc2543e33acd38645a786ab8c4f78e9e7df22","unresolved":false,"context_lines":[{"line_number":76,"context_line":"      |        |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":77,"context_line":"      |        |                VFs)} }"},{"line_number":78,"context_line":"      |        |"},{"line_number":79,"context_line":"      |        +-\u003e Network Resource RP {"},{"line_number":80,"context_line":"      |        |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":81,"context_line":"      |        |       inventory: {"},{"line_number":82,"context_line":"      |        |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_7da3e650","line":79,"updated":"2017-10-18 21:04:21.000000000","message":"See PS12 comment.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6c6a80652078bc65e03c14b88460a7218a45ba2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"physical networks, tunnel endpoint) and will create a Resource Provider"},{"line_number":166,"context_line":"per each network resource with the available network bandwidth exposed. This"},{"line_number":167,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":168,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":171,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_9988e01f","line":168,"updated":"2017-10-19 14:26:09.000000000","message":"Are we taking it as given that the plugin will be responsible for building a tree that it will inject into the already existing tree of providers rooted by \"Compute Host RP\" above?\n\nHow does this jive with what the compute manager will be doing in terms of creating resource providers. Will it just know not to bother with network stuff, or what?","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"22f9b578ff9e6b4af6fb5276b21af0b2802d6262","unresolved":false,"context_lines":[{"line_number":165,"context_line":"physical networks, tunnel endpoint) and will create a Resource Provider"},{"line_number":166,"context_line":"per each network resource with the available network bandwidth exposed. This"},{"line_number":167,"context_line":"bandwidth can be the physical device bandwidth or a configuration defined"},{"line_number":168,"context_line":"parameter by the administrator (below the maximum device bandwidth)."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Neutron ML2 plugin reconfiguration: if the administrator changes a physical"},{"line_number":171,"context_line":"network total bandwidth using the configuration variable defined in [6]_ and"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_a0310aa5","line":168,"in_reply_to":"3f4b6375_9988e01f","updated":"2017-10-20 08:20:22.000000000","message":"That\u0027s correct. The ML2 plugins (more specifically the agents through the plugins) will be responsible of creating this RP tree under the cumpute host.\n\nThe compute manager doesn\u0027t have nor the network configuration neither the layout, because is delegated to Neutron. It makes sense the only project having this knowledge creates those RPs.\n\nAnyway, the aim of this spec is to present this proposal. During the PTG this topic was discussed and informally accepted. Of course, this spec will consolidate the possible design. Which is your alternative?","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5fd79c9333e2d436d1158a0549f089c0e673d4aa","unresolved":false,"context_lines":[{"line_number":177,"context_line":"be written."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":180,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"},{"line_number":181,"context_line":"to the instance is already recorded. In order, the execution sequence is the"},{"line_number":182,"context_line":"following one:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Nova request a port to Neutron. This port could be already created (for"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_9d8222c8","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":36},"updated":"2017-10-18 20:52:31.000000000","message":"On L62 it says: \"A virtual machine port can consume bandwidth from one of these Resources Providers.\"\n\nBut here it\u0027s saying the bw allocated to the instance. Is the port the consumer of the allocation in placement or the instance? I think it\u0027s the port uuid that\u0027s the consumer of the bw resource class allocation on the network bw RP, right?\n\nLet\u0027s be clear on wording.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"22f9b578ff9e6b4af6fb5276b21af0b2802d6262","unresolved":false,"context_lines":[{"line_number":177,"context_line":"be written."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":180,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"},{"line_number":181,"context_line":"to the instance is already recorded. In order, the execution sequence is the"},{"line_number":182,"context_line":"following one:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Nova request a port to Neutron. This port could be already created (for"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_60b552cd","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":36},"in_reply_to":"3f4b6375_39ab2c1e","updated":"2017-10-20 08:20:22.000000000","message":"As you mentioned, the port is the consumer. The initial allocation (when the port in bound to the guest during the boot/move process) is done by the conductor.\n\nIn L197 and beyond there are some concerns from Matt and Miguel about who will handle this allocation. During the PTG a discussion arose about the producer of this allocation: Nova conductor vs Neutron agent:\n- Nova conductor: the allocation creation is synchronous with the boot/move process. This will reduce the chance of overcommiting and rescheduling. This process is more complex.\n- Neutron agent: easier, because once the agent receives the port update trigger (update/create rise same signal), the QoS agent extension can create the allocation. This can result in a delay between the guest boot and the allocation record and therefore possible rescheduling operations in following guests.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6c6a80652078bc65e03c14b88460a7218a45ba2","unresolved":false,"context_lines":[{"line_number":177,"context_line":"be written."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":180,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"},{"line_number":181,"context_line":"to the instance is already recorded. In order, the execution sequence is the"},{"line_number":182,"context_line":"following one:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Nova request a port to Neutron. This port could be already created (for"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_39ab2c1e","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":36},"in_reply_to":"3f4b6375_452161b4","updated":"2017-10-19 14:26:09.000000000","message":"If the consumer is the port, who has made that allocation?\n\nUnteasing the various comments, it sounds like the thinking here is that the allocation of the port resources is by neutron, and the consumer id is the port itself and there is no _in placement_ tie between the allocation of the port and the allocation of resource on the compute host (except for the project_id and user_id).\n\nI think this is a very good thing, but it needs to be stated explicitly somewhere, it seems.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"24cadb26739bc9af634db4fb1bc6b79a106df28b","unresolved":false,"context_lines":[{"line_number":177,"context_line":"be written."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Port binding: before the active port binding, the Nova Scheduler has already"},{"line_number":180,"context_line":"made a resource claim. By the time the port is bound, the bandwidth allocated"},{"line_number":181,"context_line":"to the instance is already recorded. In order, the execution sequence is the"},{"line_number":182,"context_line":"following one:"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Nova request a port to Neutron. This port could be already created (for"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_452161b4","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":36},"in_reply_to":"3f4b6375_9d8222c8","updated":"2017-10-19 12:18:40.000000000","message":"You are right, I must be clear on this.\n\nThe consumer is the port, so consumer_id \u003d port_id","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"356ad2ec6cdac5997c2b79e5702938abe7178a42","unresolved":false,"context_lines":[{"line_number":191,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":192,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_dd5f7ae3","line":194,"range":{"start_line":194,"start_character":2,"end_line":194,"end_character":76},"updated":"2017-10-18 20:28:17.000000000","message":"Sorry for being dense, but what\u0027s the difference between binding a port to a host and activating it? I guess this is related to the new port binding API? So we can create a port, bind it to a host in an inactive state, and then later the compute host could activate the port before plugging VIFs?","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"24cadb26739bc9af634db4fb1bc6b79a106df28b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":192,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_28bf5cfc","line":194,"range":{"start_line":194,"start_character":2,"end_line":194,"end_character":76},"in_reply_to":"3f4b6375_dd5f7ae3","updated":"2017-10-19 12:18:40.000000000","message":"Yes, this is what is going to be defined in [8]. Doing this we can bind a port, receiving the information needed to make de allocation and then \"activate\" this binding.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cbf9a796cd26cfe36b18c46b64810c44f39388f","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":198,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":199,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":200,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":201,"context_line":"  agent Resource Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":204,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_3d1e8e0c","line":201,"range":{"start_line":197,"start_character":2,"end_line":201,"end_character":26},"updated":"2017-10-18 20:33:12.000000000","message":"Why can\u0027t neutron create the allocation for the port against the bw provider in placement once nova binds the port to the chosen host? Why does nova need to proxy the allocation creation for neutron? I think we talked about this at the PTG but don\u0027t remember the details.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5fd79c9333e2d436d1158a0549f089c0e673d4aa","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":198,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":199,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":200,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":201,"context_line":"  agent Resource Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":204,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_3d69ee24","line":201,"range":{"start_line":197,"start_character":2,"end_line":201,"end_character":26},"in_reply_to":"3f4b6375_3d1e8e0c","updated":"2017-10-18 20:52:31.000000000","message":"Also, what happens to the allocations when the instance is migrated to another host? When nova-compute unbinds the port from the source host, does nova-compute also have to remove the bw provider allocations for the port? That seems wrong - if the port is the consumer of the allocation and neutron is providing the inventory information to placement, it seems that neutron should be creating the allocation records in placement for the port on the bw provider when the port is bound to a host, and removing those allocations from placement when the port is unbound from a host.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"658f839f4b0754a0d005cbb1815bae9bb932d95b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":198,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":199,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":200,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":201,"context_line":"  agent Resource Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":204,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_a05935ff","line":201,"range":{"start_line":197,"start_character":2,"end_line":201,"end_character":26},"in_reply_to":"3f4b6375_3d69ee24","updated":"2017-10-18 21:25:08.000000000","message":"Yes, I agree that Neutron should be the one managing the allocation records in placement, as a result of the port binding / unbinding","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d6c6a80652078bc65e03c14b88460a7218a45ba2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":198,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":199,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":200,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":201,"context_line":"  agent Resource Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":204,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_1956302b","line":201,"range":{"start_line":197,"start_character":2,"end_line":201,"end_character":26},"in_reply_to":"3f4b6375_683e742a","updated":"2017-10-19 14:26:09.000000000","message":"If the consumer id of the allocation is different (as discussed above) from the one used when the scheduler does its claim, then it should be okay for it happen whenever.\n\nThe risk there is that the state of the universe will change, but that\u0027s okay: it\u0027s already the case that the port binding can fail late in the game, long after the scheduler has made a claim.\n\nIf the consumer id is _not_ different, then that\u0027s a different story, but there are still ways around it.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"24cadb26739bc9af634db4fb1bc6b79a106df28b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":195,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":198,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":199,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":200,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":201,"context_line":"  agent Resource Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Nova will update the port binding information with the Allocation ID and"},{"line_number":204,"context_line":"  will activate the port."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f4b6375_683e742a","line":201,"range":{"start_line":197,"start_character":2,"end_line":201,"end_character":26},"in_reply_to":"3f4b6375_a05935ff","updated":"2017-10-19 12:18:40.000000000","message":"Hmmm I though this conversation was closed in the PTG: during the boot/scheduling process, the allocations must be made by the conductor to avoid delays (agent-\u003eplacement) and therefore avoid possible sheduling retries.\n\nI would like to have Jay\u0027s opinion on this.","commit_id":"6cda1d709e0587d499b4c33ed3ce2bc92675763a"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b0b62543175709d9548c4042397689625efc5cc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"},{"line_number":72,"context_line":"Resource Provider tree will look like::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  Compute host RP"},{"line_number":75,"context_line":"      |"},{"line_number":76,"context_line":"      +-\u003e Agent SR-IOV RP {"},{"line_number":77,"context_line":"      |        |    traits: [SRIOV_AGENT]"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_479a92c5","line":74,"updated":"2018-02-16 14:15:14.000000000","message":"While partially covered in L58 it is not totally clear how the resource providers in this tree should be named. IMO the names should be identifiers with no meaning (eg. a globally unique physical network name or an agent uuid) and all required meaning should be encoded in traits.\n\nMore importantly nova and neutron need to cooperatively maintain the resource provider tree. The root of the tree (the compute host RP) is needed both by nova and neutron. Ideally both should be able to ensure-if-it-exists-already-or-create it. That would give us a way to keep the startup of nova-compute and a neutron-l2-agent uncoordinated as it is today. However the compute node uuid today is unpredictable by neutron therefore neutron would have to wait for nova.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"},{"line_number":72,"context_line":"Resource Provider tree will look like::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  Compute host RP"},{"line_number":75,"context_line":"      |"},{"line_number":76,"context_line":"      +-\u003e Agent SR-IOV RP {"},{"line_number":77,"context_line":"      |        |    traits: [SRIOV_AGENT]"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_4d1f89b6","line":74,"in_reply_to":"3fa0c359_479a92c5","updated":"2018-02-22 23:44:11.000000000","message":"Is the name of a nested resource provider qualified by its parent resource provider name? If the answer is yes, we can use the UUID of the corresponding Neutron network for the nested resource providers in this tree. The same UUIDs will show up underneath other hosts RPs, but the we will achieve uniqueness through the parent RP name qualification.\n\nOn the Neutron side, we can assume that the host parent RP will be created by Nova. If it doesn\u0027t exist yet when Neutron attempts to create the nested RPs, we can retry at a later time","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"193d9fd603b3d9a5f30cb0c8adefd5f997e4b466","unresolved":false,"context_lines":[{"line_number":71,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"},{"line_number":72,"context_line":"Resource Provider tree will look like::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  Compute host RP"},{"line_number":75,"context_line":"      |"},{"line_number":76,"context_line":"      +-\u003e Agent SR-IOV RP {"},{"line_number":77,"context_line":"      |        |    traits: [SRIOV_AGENT]"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_59de5d6d","line":74,"in_reply_to":"3fa0c359_4d1f89b6","updated":"2018-02-23 13:42:19.000000000","message":"I just checked the resource_providers table definition. In the current schema \u0027name\u0027 is a unique key.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"70c8af98d266974802320089f6aa55683fe2b60a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"},{"line_number":72,"context_line":"Resource Provider tree will look like::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  Compute host RP"},{"line_number":75,"context_line":"      |"},{"line_number":76,"context_line":"      +-\u003e Agent SR-IOV RP {"},{"line_number":77,"context_line":"      |        |    traits: [SRIOV_AGENT]"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_bab08841","line":74,"in_reply_to":"3fa0c359_59de5d6d","updated":"2018-02-26 20:31:03.000000000","message":"As the name of the RP needs to be unique we cannot simply use the physnet uuid for the name of the RP because such RP will be created on multiple compute nodes. I think it is OK to use the neutron agent id (assuming that is unique) as qualifier in the RP name together with the physnet id to ensure uniqueness.\n\nFrom nova perspective it is sounds safer if we let nova to create the compute node RP and change the neutron agent to wait for that RP creation. I think we can still keep the startup of the nova-compute and the neutron agent uncoordinated. If neutron starts up earlier it can simply start the RP tree creation in a separate task (e.g. a thread for waiting, or a periodic task for polling) and continue the rest of the agent init as today. If a bandwidth aware server create request hits nova before the the network RP tree is created on a given compute then placement won\u0027t return the given compute as a possible candidate so the system will act consistently.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e5758638870b723ca6bc9ec5a41846e189089984","unresolved":false,"context_lines":[{"line_number":71,"context_line":"In the same way as is described in the Neutron spec [6]_, this is how the"},{"line_number":72,"context_line":"Resource Provider tree will look like::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  Compute host RP"},{"line_number":75,"context_line":"      |"},{"line_number":76,"context_line":"      +-\u003e Agent SR-IOV RP {"},{"line_number":77,"context_line":"      |        |    traits: [SRIOV_AGENT]"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_8719a989","line":74,"in_reply_to":"3fa0c359_bab08841","updated":"2018-02-27 21:19:50.000000000","message":"I think we are in agreement here:\n\n1) The uuid of the network can be qualified by the host name to form a unique RP name\n\n2) Yes, Nova can create the compute node RP","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d667d9ecd4913c6b1e685166acf05e1bdac971fb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"      |                }"},{"line_number":95,"context_line":"      |            }"},{"line_number":96,"context_line":"      |"},{"line_number":97,"context_line":"      +-\u003e Agent OVS RP {"},{"line_number":98,"context_line":"               |    traits: [OVS_AGENT]"},{"line_number":99,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":100,"context_line":"               |                ports)} }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_7fa2cb9c","line":97,"range":{"start_line":97,"start_character":10,"end_line":97,"end_character":22},"updated":"2018-02-28 20:39:10.000000000","message":"How the request to distinguish the SR-IOV and Agent OVS? The request only with the resource class \u0027NET_BANDWIDTH_INGRESS_BITS_SEC\u0027 or \u0027NET_BANDWIDTH_EGRESS_BITS_SEC\u0027, the placement may returns Agent SR-IOV RP and Agent OVS RP either.\n\nUsing trait to distinguish them? not sure that make sense, but we also don\u0027t return trait from the port info?","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8439480c9c9b3a0e9b41fd6b8eaf008c55b88209","unresolved":false,"context_lines":[{"line_number":94,"context_line":"      |                }"},{"line_number":95,"context_line":"      |            }"},{"line_number":96,"context_line":"      |"},{"line_number":97,"context_line":"      +-\u003e Agent OVS RP {"},{"line_number":98,"context_line":"               |    traits: [OVS_AGENT]"},{"line_number":99,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":100,"context_line":"               |                ports)} }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_867087a7","line":97,"range":{"start_line":97,"start_character":10,"end_line":97,"end_character":22},"in_reply_to":"1f9dbf25_7fa2cb9c","updated":"2018-03-04 14:49:42.000000000","message":"Yes, traits. See the new PS.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5d566b1d5189df47d3a9ba1d12ee3212f75de1f9","unresolved":false,"context_lines":[{"line_number":99,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":100,"context_line":"               |                ports)} }"},{"line_number":101,"context_line":"               |"},{"line_number":102,"context_line":"               +-\u003e Network Resource RP {"},{"line_number":103,"context_line":"               |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":104,"context_line":"               |       inventory: {"},{"line_number":105,"context_line":"               |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_bfe613e8","line":102,"updated":"2018-02-28 20:42:56.000000000","message":"I think we shouldn\u0027t create ResourceProvider for the agent.\n\nWe should create ResourceProvider for the physnet. The physnet RP is under the compute node RP.\n\nEach physnet RP provides Bandwidth and VFs.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8439480c9c9b3a0e9b41fd6b8eaf008c55b88209","unresolved":false,"context_lines":[{"line_number":99,"context_line":"               |    inventory: {TBD by future specs (e.g.: number of available"},{"line_number":100,"context_line":"               |                ports)} }"},{"line_number":101,"context_line":"               |"},{"line_number":102,"context_line":"               +-\u003e Network Resource RP {"},{"line_number":103,"context_line":"               |       traits: [CUSTOM_PHYSNET_1]"},{"line_number":104,"context_line":"               |       inventory: {"},{"line_number":105,"context_line":"               |           NET_BANDWIDTH_INGRESS_BITS_SEC \u003d 1000000000,"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_0dc57d5b","line":102,"in_reply_to":"1f9dbf25_bfe613e8","updated":"2018-03-04 14:49:42.000000000","message":"Later on when somebody wants to model OVS specific resource like number of OVS ports we need the OVS specific RP.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b0b62543175709d9548c4042397689625efc5cc","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_27d0a650","line":147,"updated":"2018-02-16 14:15:14.000000000","message":"AFAICT this paragraph implies the use of nova host aggregates to avoid mixing guaranteed bandwidth with best effort bandwidth. I think the same goal could be achieved by the use of traits (for example think of traits CUSTOM_GUARANTEED_BW_ONLY and CUSTOM_BEST_EFFORT_BW_ONLY placed administratively on physical network resource providers). This would be more granular than the use of host aggregates. For example it would allow a vm to have guaranteed bw on its data network, but best effort bw on its control network.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_78432140","line":147,"in_reply_to":"3fa0c359_27d0a650","updated":"2018-02-22 23:44:11.000000000","message":"In other words, a host will satisfy a VM boot request if all the ports with a minimum bandwidth QoS rule can be mapped to RPs in the host with the CUSTOM_GUARANTEED_BW_ONLY trait and all the VM ports with no bandwidth QoS can be mapped to RPs with the CUSTOM_BEST_EFFORT_BW_ONLY trait. Is that what you mean? If yes, I agree","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e5758638870b723ca6bc9ec5a41846e189089984","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_73453b17","line":147,"in_reply_to":"3fa0c359_3a28f830","updated":"2018-02-27 21:19:50.000000000","message":"I also agree that the automated solution using traits is the best approach. As long as traits are available in Nova, I don\u0027t think it would be to difficult for Neutron to add the traits to the RPs. It\u0027s a matter of adding the necessary calls to the Placement client we already have in Neutron: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/clients/placement.py","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d44c0c4a94a3adbe2bd158eeb83d1d7403ecc4e6","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_c494cb8d","line":147,"in_reply_to":"3fa0c359_78432140","updated":"2018-02-23 08:56:11.000000000","message":"I also agree with that. IMO it could be better solution","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"193d9fd603b3d9a5f30cb0c8adefd5f997e4b466","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_96111260","line":147,"in_reply_to":"3fa0c359_78432140","updated":"2018-02-23 13:42:19.000000000","message":"Yes, that\u0027s what I meant.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"70c8af98d266974802320089f6aa55683fe2b60a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"If the boot request commands don\u0027t have a minimum bandwidth restriction, the"},{"line_number":145,"context_line":"placement API won\u0027t filter by available bandwidth. If ports are allocated in a"},{"line_number":146,"context_line":"mixed fashion, with and without minimum bandwidth requirement, the ones without"},{"line_number":147,"context_line":"any requirement could starve. The Neutron driver will impose this restriction"},{"line_number":148,"context_line":"in the back-end using the QoS minimum bandwidth rule value; as a result, any"},{"line_number":149,"context_line":"port without this QoS rule won\u0027t have any guaranteed bandwidth. In case a"},{"line_number":150,"context_line":"driver can\u0027t set a minimum guaranteed bandwidth per port, this can cause a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_3a28f830","line":147,"in_reply_to":"3fa0c359_96111260","updated":"2018-02-26 20:31:03.000000000","message":"+1 for this as a granular solution. However it can be done separately later on. The aggregate based solution will work out of the box in nova while this granular solution needs some config or api change in neutron to allow adding the proper traits to the network RPs. Or maybe we can say that the admin can go the the placement API and add the traits my hand. But given that we need make sure that the two sets of traits (i.e. CUSTOM_GARANTEED_BW_ONLY, CUSTOM_BEST_EFFORT_BW_ONLY) added consistently I would vote for some automated solution from neutron.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":154,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":155,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":156,"context_line":"limits."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":159,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_d87b5578","line":156,"updated":"2018-02-22 23:44:11.000000000","message":"What is the action takes as result of this check? The Neutron side spec seems to suggest that the Neutron plugin will update allocations as a result of this check. Is this something that can be done through the Placement ReST API?","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"70c8af98d266974802320089f6aa55683fe2b60a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":154,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":155,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":156,"context_line":"limits."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":159,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_bac16850","line":156,"in_reply_to":"3fa0c359_841483ea","updated":"2018-02-26 20:31:03.000000000","message":"Neutron will create the inventory of the total bandwidth in placement. Then during the server create nova will ask placement about RPs (allocation candidates) that can satisfy the bandwidth resource request of the port provided in the server create request. Then nova will create allocations on the selected RPs. This way placement will know both the total inventory of bandwidth, and list of bandwidth chunks allocated by ports.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e5758638870b723ca6bc9ec5a41846e189089984","unresolved":false,"context_lines":[{"line_number":153,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":154,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":155,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":156,"context_line":"limits."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":159,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1f9dbf25_f3506bd7","line":156,"in_reply_to":"3fa0c359_9a9b4c71","updated":"2018-02-27 21:19:50.000000000","message":"OK, we can punt this feature to the next iteration","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d44c0c4a94a3adbe2bd158eeb83d1d7403ecc4e6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":154,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":155,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":156,"context_line":"limits."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":159,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_841483ea","line":156,"in_reply_to":"3fa0c359_d87b5578","updated":"2018-02-23 08:56:11.000000000","message":"One question (maybe I don\u0027t know something about placement API): Neutron\u0027s agent will send to placement API always total bandwidth (e.g. value from physical device), right? If yes, how placement API will know how much bandwidth is still available? Will it have some knowledge about how many ports and with what QoS policies are already on host? Or maybe neutron agent will calculate currently available bandwidth and send it to placement API?","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"70c8af98d266974802320089f6aa55683fe2b60a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"The second reader will be each Neutron ML2 plugin. When a QoS minimum"},{"line_number":154,"context_line":"bandwidth rule is modified, the plugin will check if any bound port has this"},{"line_number":155,"context_line":"rule attached and will check if the updated bandwidth meets the available"},{"line_number":156,"context_line":"limits."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"The creator of this Resource Provider will be each Neutron ML2 plugin as"},{"line_number":159,"context_line":"explained in the following section."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_9a9b4c71","line":156,"in_reply_to":"3fa0c359_d87b5578","updated":"2018-02-26 20:31:03.000000000","message":"When the server is booted with a bandwidth aware port, nova will create allocation records in placement according to the QoS rule. \n\nWhen the minimum bandwidth rule is modified then neutron could change the allocation records of the affected ports in the placement API [1]. However I would like not to try to implement this in the first iteration of this feature and simply reject every QoS policy update that has a bound port attached. \n\n[1] https://developer.openstack.org/api-ref/placement/#update-allocations","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"the port_id). In order, the execution sequence is the following one:"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"* Nova request a port to Neutron. This port could be already created (for"},{"line_number":187,"context_line":"  example, when requesting an SR-IOV port) or could be a new one. This requires"},{"line_number":188,"context_line":"  [9]_ to be implemented, to move the creation and back-end port binding"},{"line_number":189,"context_line":"  operation to the controller node, before executing the"},{"line_number":190,"context_line":"  `build_and_run_instance` function [10]_ in the compute node."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_784d6139","line":188,"range":{"start_line":187,"start_character":66,"end_line":188,"end_character":23},"updated":"2018-02-22 23:44:11.000000000","message":"In his general comments, Balazs suggests this is not necessary. I agree","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b0b62543175709d9548c4042397689625efc5cc","unresolved":false,"context_lines":[{"line_number":189,"context_line":"  operation to the controller node, before executing the"},{"line_number":190,"context_line":"  `build_and_run_instance` function [10]_ in the compute node."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_2760a632","line":194,"range":{"start_line":192,"start_character":0,"end_line":194,"end_character":77},"updated":"2018-02-16 14:15:14.000000000","message":"[7] is about a change in port binding. But isn\u0027t port binding altogether too late to communicate the bw resource needs of a port? Yes, a neutron port api change is needed, but at an earlier point, isn\u0027t it? Otherwise I must be missing something to understand why [7] is a pre-requisite here.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":189,"context_line":"  operation to the controller node, before executing the"},{"line_number":190,"context_line":"  `build_and_run_instance` function [10]_ in the compute node."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_98faadba","line":194,"range":{"start_line":192,"start_character":0,"end_line":194,"end_character":77},"in_reply_to":"3fa0c359_2760a632","updated":"2018-02-22 23:44:11.000000000","message":"You are correct, there will be a change of Neutron API but not related to [7]. The relevant API change will add a \"resources\" attribute to ports that will contain the RP and the bandwidth requirement. This is described in this approved spec: https://review.openstack.org/#/c/396297/7/specs/pike/strict-minimum-bandwidth-support.rst@68","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"678b690844b9b79a762e1c81b250105186fa2a5a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"  operation to the controller node, before executing the"},{"line_number":190,"context_line":"  `build_and_run_instance` function [10]_ in the compute node."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_b8ae892b","line":194,"range":{"start_line":192,"start_character":0,"end_line":194,"end_character":77},"in_reply_to":"3fa0c359_98faadba","updated":"2018-02-22 23:44:57.000000000","message":"This way, all Nova has to do is GET port and will receive the necessary data. Nova won\u0027t need to mess with Neutron QoS calls or the multiple port binding extension","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"70c8af98d266974802320089f6aa55683fe2b60a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"  operation to the controller node, before executing the"},{"line_number":190,"context_line":"  `build_and_run_instance` function [10]_ in the compute node."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"* Neutron [4]_ will return, inside the port information, the Resource Class"},{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_3aab1888","line":194,"range":{"start_line":192,"start_character":0,"end_line":194,"end_character":77},"in_reply_to":"3fa0c359_b8ae892b","updated":"2018-02-26 20:31:03.000000000","message":"+1","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b0b62543175709d9548c4042397689625efc5cc","unresolved":false,"context_lines":[{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":200,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_87fc1a3f","line":197,"range":{"start_line":196,"start_character":0,"end_line":197,"end_character":54},"updated":"2018-02-16 14:15:14.000000000","message":"Entangling this process with two step bind-activate process also seems to be an unnecessary complication. [7] is a useful feature in itself, but what\u0027s the point of making it a dependency of this spec?","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":193,"context_line":"  (depending on the traffic direction) and the value needed (network bandwidth"},{"line_number":194,"context_line":"  in bits per second). This requires a Neutron API change as defined in [7]_."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Nova selects the compute host and binds the port, but doesn\u0027t activate it."},{"line_number":197,"context_line":"  This must be done using the new API defined in [7]_."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":200,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_d825955d","line":197,"range":{"start_line":196,"start_character":0,"end_line":197,"end_character":54},"in_reply_to":"3fa0c359_87fc1a3f","updated":"2018-02-22 23:44:11.000000000","message":"Agree, let\u0027s keep this spec and [7] separate","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b0b62543175709d9548c4042397689625efc5cc","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":200,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":201,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":202,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":203,"context_line":"  agent Resource Provider."},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_1945ce17","line":201,"range":{"start_line":201,"start_character":2,"end_line":201,"end_character":18},"updated":"2018-02-16 14:15:14.000000000","message":"There\u0027s no need for the neutron agent id here. The resource provider id (here that\u0027s always the physical network\u0027s resource provider) must be sufficient.","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9c965c8f254eb9e8ff2f96c2813d523a87663a2b","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Nova, with this information received from the new API [7]_, will create an"},{"line_number":200,"context_line":"  Allocation record, based on the Resource Provider, the Resource Class, the"},{"line_number":201,"context_line":"  Neutron agent ID, which will define the Neutron agent Resource Provider, and"},{"line_number":202,"context_line":"  the host ID, which will be the parent Resource Provider for the Neutron"},{"line_number":203,"context_line":"  agent Resource Provider."},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3fa0c359_98238d56","line":201,"range":{"start_line":201,"start_character":2,"end_line":201,"end_character":18},"in_reply_to":"3fa0c359_1945ce17","updated":"2018-02-22 23:44:11.000000000","message":"See my question to L74, please","commit_id":"0f692ac856de45cde082bcdd6452861f628b241c"}],"specs/rocky/approved/bandwidth-resource-provider.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Currently there is no method in the Nova scheduler to place an server"},{"line_number":22,"context_line":"based on the network bandwidth available in a host. The Placement service"},{"line_number":23,"context_line":"doesn\u0027t track the different network back-ends present in a host and their"},{"line_number":24,"context_line":"available bandwidth."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_ef3b57ce","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":69},"updated":"2018-03-09 20:31:01.000000000","message":"a server","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Currently there is no method in the Nova scheduler to place an server"},{"line_number":22,"context_line":"based on the network bandwidth available in a host. The Placement service"},{"line_number":23,"context_line":"doesn\u0027t track the different network back-ends present in a host and their"},{"line_number":24,"context_line":"available bandwidth."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c795b834","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":69},"in_reply_to":"df7087c5_ef3b57ce","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8bcf9fef01451f2e40308d9f776554238620b63a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"---------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"A user wants to spawn a server with a network port. The user also wants a"},{"line_number":30,"context_line":"defined guaranteed minimum bandwidth for this port. The Nova scheduler must"},{"line_number":31,"context_line":"select a host which satisfies this request."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_1d21614e","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":2},"updated":"2018-03-06 09:58:46.000000000","message":"An","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"---------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"A user wants to spawn a server with a network port. The user also wants a"},{"line_number":30,"context_line":"defined guaranteed minimum bandwidth for this port. The Nova scheduler must"},{"line_number":31,"context_line":"select a host which satisfies this request."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8f509b0c","line":29,"range":{"start_line":29,"start_character":31,"end_line":29,"end_character":50},"updated":"2018-03-09 20:31:01.000000000","message":"s/with a network port/with a port associated with a specific physical network/","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"---------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"A user wants to spawn a server with a network port. The user also wants a"},{"line_number":30,"context_line":"defined guaranteed minimum bandwidth for this port. The Nova scheduler must"},{"line_number":31,"context_line":"select a host which satisfies this request."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c7be18b3","line":29,"range":{"start_line":29,"start_character":31,"end_line":29,"end_character":50},"in_reply_to":"df7087c5_8f509b0c","updated":"2018-03-14 14:30:38.000000000","message":"@Jay: Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"---------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"A user wants to spawn a server with a network port. The user also wants a"},{"line_number":30,"context_line":"defined guaranteed minimum bandwidth for this port. The Nova scheduler must"},{"line_number":31,"context_line":"select a host which satisfies this request."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_16c1122f","line":29,"in_reply_to":"df7087c5_e2f89c7d","updated":"2018-03-09 16:03:26.000000000","message":"Like in case of \u0027hour\u0027 it is \u0027an hour\u0027 not \u0027a hour\u0027","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"---------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"A user wants to spawn a server with a network port. The user also wants a"},{"line_number":30,"context_line":"defined guaranteed minimum bandwidth for this port. The Nova scheduler must"},{"line_number":31,"context_line":"select a host which satisfies this request."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e2f89c7d","line":29,"in_reply_to":"ff6b8bd7_1d21614e","updated":"2018-03-07 02:53:37.000000000","message":"You would normally be correct that an would be used instead of \u0027a\u0027 when a preceedes a vowel however \u0027an user\u0027 is not used in English. In this instance \u0027A user\u0027 is correct.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Proposed change"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec proposes to model the bandwidth resource of the physical NICs on a"},{"line_number":38,"context_line":"compute host and their resources providers in the Placement service, express"},{"line_number":39,"context_line":"the bandwidth request in the Neutron port, and modify Nova to consider the"},{"line_number":40,"context_line":"requested bandwidth resource during the scheduling of the server based on the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_ef403738","line":37,"range":{"start_line":37,"start_character":54,"end_line":37,"end_character":71},"updated":"2018-03-09 20:31:01.000000000","message":"just a note... it\u0027s not necessarily a physical NIC. could just as easily be a VF on a PF.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Proposed change"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec proposes to model the bandwidth resource of the physical NICs on a"},{"line_number":38,"context_line":"compute host and their resources providers in the Placement service, express"},{"line_number":39,"context_line":"the bandwidth request in the Neutron port, and modify Nova to consider the"},{"line_number":40,"context_line":"requested bandwidth resource during the scheduling of the server based on the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_95fe53ac","line":37,"range":{"start_line":37,"start_character":54,"end_line":37,"end_character":71},"in_reply_to":"df7087c5_ef403738","updated":"2018-03-12 11:27:38.000000000","message":"Does a VF has bandwidth on its own? I think it is eventually the bandwidth of the PF that the VF is providing to its user.  However if the VF can get a dedicated slice of the PF\u0027s bandwidth then I can accept that the VF has its own bandwidth. I can try to generalize the sentence a bit. \n\n... to model that bandwidth resource available on the compute host via different networking solutions (e.g. SRIOV, OVS).","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":40,"context_line":"requested bandwidth resource during the scheduling of the server based on the"},{"line_number":41,"context_line":"available bandwidth resources on each compute host."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. note:: This spec describes a feature that effects both Nova and Neutron. It"},{"line_number":44,"context_line":"          describes the changes in both modules for completeness and"},{"line_number":45,"context_line":"          understandability. However it does not go in full details about"},{"line_number":46,"context_line":"          Neutron changes as that is described in the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_76996e6c","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":52},"updated":"2018-05-08 16:01:43.000000000","message":"affects","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"If Neutron agent cannot find the compute RP (e.g. the Neutron agent starts up"},{"line_number":64,"context_line":"on a new compute earlier than the nova-compute service) then the Neutron agent"},{"line_number":65,"context_line":"retries this and the subsequent steps later in a sensible way."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The Neutron agent creates the networking RPs under the compute RP with proper"},{"line_number":68,"context_line":"traits then reports resource inventories based on the discovered and / or"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4d9b9071","line":65,"range":{"start_line":65,"start_character":44,"end_line":65,"end_character":61},"updated":"2018-03-08 15:21:08.000000000","message":"The compute host should not be available to boot VMs (likely by some admin action, kind of a maintenance mode) until all pieces of the resource provider information are in place. Otherwise resources may get used up without their usage constraints enforced.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"If Neutron agent cannot find the compute RP (e.g. the Neutron agent starts up"},{"line_number":64,"context_line":"on a new compute earlier than the nova-compute service) then the Neutron agent"},{"line_number":65,"context_line":"retries this and the subsequent steps later in a sensible way."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The Neutron agent creates the networking RPs under the compute RP with proper"},{"line_number":68,"context_line":"traits then reports resource inventories based on the discovered and / or"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6a909e4f","line":65,"range":{"start_line":65,"start_character":44,"end_line":65,"end_character":61},"in_reply_to":"df7087c5_4d9b9071","updated":"2018-03-09 16:03:26.000000000","message":"I think having the bandwidth request already the port (without having neutron agents running) makes sure that such host will not be selected by the scheduler. I added some words about it to the spec.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"The Neutron agent creates the networking RPs under the compute RP with proper"},{"line_number":68,"context_line":"traits then reports resource inventories based on the discovered and / or"},{"line_number":69,"context_line":"configured resource inventory of the compute host. See `Networking RP model`_"},{"line_number":70,"context_line":"for details."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Neutron agent restart"},{"line_number":73,"context_line":"~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0f932ba5","line":70,"updated":"2018-03-09 20:31:01.000000000","message":"++","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_823f4cd5","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"updated":"2018-03-06 09:39:51.000000000","message":"probably we have same problem of merging traits.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_d5e28b01","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"in_reply_to":"df7087c5_4fcfe3af","updated":"2018-03-12 11:27:38.000000000","message":"I made this more explicit in the PS17. \n\nI also agree that we have to do something generic about overrides in placement.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8dc8c855","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"in_reply_to":"df7087c5_7b04297c","updated":"2018-03-08 15:21:08.000000000","message":"Plus neutron only modifies the pieces that actually got added or deleted. Unmodified pieces should be left in place (no delete and re-create).","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4accba69","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"in_reply_to":"df7087c5_8dc8c855","updated":"2018-03-09 16:03:26.000000000","message":"@Bence: I agree. Added your statement to the spec.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_7b04297c","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"in_reply_to":"ff6b8bd7_823f4cd5","updated":"2018-03-07 17:01:46.000000000","message":"Sure, if the deployer wants to add its own traits to the networking RPs then the same problem will appear here. I will note that here. However I don\u0027t think solving the merging traits problem needs to be a hard dependency of this feature. When that problem is solved we can improve the implementation of this feature.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":76,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":77,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":78,"context_line":"the RPs that was created by the agent."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4fcfe3af","line":78,"range":{"start_line":77,"start_character":19,"end_line":78,"end_character":38},"in_reply_to":"ff6b8bd7_823f4cd5","updated":"2018-03-09 20:31:01.000000000","message":"The Neutron agent should only be modifying inventories and traits for those child providers of the compute node resource provider that it is responsible for (basically, the physical NICs and network backends).\n\nAgree with you that we would still need to figure out what to do about external actors (admins) that may set (or remove!) traits or allocation ratios directly via the Placement API and the Neutron agent would overwrite those things mistakenly.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8bcf9fef01451f2e40308d9f776554238620b63a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"The end user creates a Neutron port in the Neutron API and attaches a QoS"},{"line_number":84,"context_line":"policy minimum bandwidth rule to it, either directly or indirectly by attaching"},{"line_number":85,"context_line":"the rule to the network the port is created in. Then the end user creates a"},{"line_number":86,"context_line":"server in Nova and passes in the port UUID in the server create request."}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_cffecc04","line":83,"range":{"start_line":83,"start_character":36,"end_line":83,"end_character":38},"updated":"2018-03-06 09:58:46.000000000","message":"with","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"Server create with pre-created Neutron ports having QoS policy rule"},{"line_number":81,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"The end user creates a Neutron port in the Neutron API and attaches a QoS"},{"line_number":84,"context_line":"policy minimum bandwidth rule to it, either directly or indirectly by attaching"},{"line_number":85,"context_line":"the rule to the network the port is created in. Then the end user creates a"},{"line_number":86,"context_line":"server in Nova and passes in the port UUID in the server create request."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0ac6c249","line":83,"range":{"start_line":83,"start_character":36,"end_line":83,"end_character":38},"in_reply_to":"ff6b8bd7_cffecc04","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_3d94658b","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":20},"updated":"2018-03-06 09:39:51.000000000","message":"what is request filter?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_dbf2159b","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":20},"in_reply_to":"df7087c5_136644ef","updated":"2018-03-07 17:01:46.000000000","message":"Yes. I will add a reference.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8a009269","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":20},"in_reply_to":"df7087c5_dbf2159b","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a6f3da4c0ba8da95befa26d60d3f84477adc8e62","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_136644ef","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":20},"in_reply_to":"ff6b8bd7_3d94658b","updated":"2018-03-07 06:48:53.000000000","message":"ok, I guess this filter https://review.openstack.org/#/c/544585/6/specs/rocky/approved/placement-req-filter.rst","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8bcf9fef01451f2e40308d9f776554238620b63a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_4f971c92","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":33},"updated":"2018-03-06 09:58:46.000000000","message":"I don\u0027t get the point here, a filter in nova-api? and a filter will save the requested resource and traits? doesn\u0027t seem correct. Or do you mean a new filter in scheduler? And I was thinking that the returned allocation_candidates will be already filtered? Correct me if I\u0027m wrong here :)","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4afa7a75","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":33},"in_reply_to":"df7087c5_1b3e4d29","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_1b3e4d29","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":33},"in_reply_to":"df7087c5_1fb72b89","updated":"2018-03-07 17:01:46.000000000","message":"As Alex linked, this is the feature I\u0027m trying to reuse. https://review.openstack.org/#/c/544585/6 I will add a reference to this spec to clarify.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"106f8ab371ec74f5a7459889ba505933075358ac","unresolved":false,"context_lines":[{"line_number":90,"context_line":"the requested resources and required traits. See"},{"line_number":91,"context_line":"`Resource request in the port`_."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"A new request filter in nova-api stores the requested resources and required"},{"line_number":94,"context_line":"traits in the RequestSpec object."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_1fb72b89","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":33},"in_reply_to":"ff6b8bd7_4f971c92","updated":"2018-03-07 01:45:10.000000000","message":"\u003e I don\u0027t get the point here, a filter in nova-api? and a filter will\n \u003e save the requested resource and traits? doesn\u0027t seem correct. Or do\n \u003e you mean a new filter in scheduler? And I was thinking that the\n \u003e returned allocation_candidates will be already filtered? Correct me\n \u003e if I\u0027m wrong here :)\n\nAh, I think I know what you mean here, it is the query parameter used to call placement API?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":98,"context_line":"resource requests besides the Nova related resource requests. The requested"},{"line_number":99,"context_line":"resources and required traits from each port will be considered as a"},{"line_number":100,"context_line":"separate, numbered request group as defined in the"},{"line_number":101,"context_line":"`granular-resource-request`_ spec and therefore this part of the request is"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_ef4a7725","line":98,"range":{"start_line":98,"start_character":18,"end_line":98,"end_character":35},"updated":"2018-03-09 20:31:01.000000000","message":"besides the *compute* related resources.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":98,"context_line":"resource requests besides the Nova related resource requests. The requested"},{"line_number":99,"context_line":"resources and required traits from each port will be considered as a"},{"line_number":100,"context_line":"separate, numbered request group as defined in the"},{"line_number":101,"context_line":"`granular-resource-request`_ spec and therefore this part of the request is"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6732ac60","line":98,"range":{"start_line":98,"start_character":18,"end_line":98,"end_character":35},"in_reply_to":"df7087c5_95c5f35d","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":98,"context_line":"resource requests besides the Nova related resource requests. The requested"},{"line_number":99,"context_line":"resources and required traits from each port will be considered as a"},{"line_number":100,"context_line":"separate, numbered request group as defined in the"},{"line_number":101,"context_line":"`granular-resource-request`_ spec and therefore this part of the request is"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_95c5f35d","line":98,"range":{"start_line":98,"start_character":18,"end_line":98,"end_character":35},"in_reply_to":"df7087c5_ef4a7725","updated":"2018-03-12 11:27:38.000000000","message":"I will fix.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":98,"context_line":"resource requests besides the Nova related resource requests. The requested"},{"line_number":99,"context_line":"resources and required traits from each port will be considered as a"},{"line_number":100,"context_line":"separate, numbered request group as defined in the"},{"line_number":101,"context_line":"`granular-resource-request`_ spec and therefore this part of the request is"},{"line_number":102,"context_line":"restricted to a single RP. Later on the resource request in the Neutron port"},{"line_number":103,"context_line":"API can be evolved to support the same level of granularity than the Nova"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2892caf7","line":100,"range":{"start_line":100,"start_character":10,"end_line":100,"end_character":32},"updated":"2018-03-08 15:21:08.000000000","message":"nit: For people like me who are not (yet) familiar with the granular-resource-request spec it\u0027d be easier if this was expressed in terms of what a numbered request group does, not that it\u0027s numbered.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":98,"context_line":"resource requests besides the Nova related resource requests. The requested"},{"line_number":99,"context_line":"resources and required traits from each port will be considered as a"},{"line_number":100,"context_line":"separate, numbered request group as defined in the"},{"line_number":101,"context_line":"`granular-resource-request`_ spec and therefore this part of the request is"},{"line_number":102,"context_line":"restricted to a single RP. Later on the resource request in the Neutron port"},{"line_number":103,"context_line":"API can be evolved to support the same level of granularity than the Nova"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_ea982e1c","line":100,"range":{"start_line":100,"start_character":10,"end_line":100,"end_character":32},"in_reply_to":"df7087c5_2892caf7","updated":"2018-03-09 16:03:26.000000000","message":"I tried to be more explicit.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Then Placement returns allocation candidates. After additional filtering in the"},{"line_number":107,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":108,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":109,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":112,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8f63bbb1","line":109,"updated":"2018-03-09 20:31:01.000000000","message":"++","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1a75f26b9b7635080c09e69acc7f19450ac83640","unresolved":false,"context_lines":[{"line_number":111,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":112,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Nova schedules the server without considering any port related resource request"},{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_21f0adc9","line":115,"range":{"start_line":114,"start_character":72,"end_line":115,"end_character":4},"updated":"2018-03-08 11:32:10.000000000","message":"Some punctuation (perhaps a comma) is missing here.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":112,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Nova schedules the server without considering any port related resource request"},{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_aabb1670","line":115,"range":{"start_line":114,"start_character":72,"end_line":115,"end_character":4},"in_reply_to":"df7087c5_21f0adc9","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Nova schedules the server without considering any port related resource request"},{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2f0f0fe2","line":116,"range":{"start_line":116,"start_character":38,"end_line":116,"end_character":62},"updated":"2018-03-09 20:31:01.000000000","message":"the network, the created","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Nova schedules the server without considering any port related resource request"},{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e7455cb5","line":116,"range":{"start_line":116,"start_character":38,"end_line":116,"end_character":62},"in_reply_to":"df7087c5_2f0f0fe2","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4e8b033298591463c0f4108e8d39b6b6a5ad814c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"Nova schedules the server without considering any port related resource request"},{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_053583da","line":118,"range":{"start_line":117,"start_character":33,"end_line":118,"end_character":73},"updated":"2018-03-06 11:53:20.000000000","message":"It seems like we are only be able to request the \"bandwidth\" resources by \"port\"?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4e8b033298591463c0f4108e8d39b6b6a5ad814c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_a50db738","line":118,"range":{"start_line":118,"start_character":56,"end_line":118,"end_character":57},"updated":"2018-03-06 11:53:20.000000000","message":"adding a comma here will make the sentence more easier to read.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_cffd33b2","line":118,"range":{"start_line":118,"start_character":48,"end_line":118,"end_character":73},"updated":"2018-03-09 20:31:01.000000000","message":"was made, this information","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_1612a459","line":118,"in_reply_to":"df7087c5_a275c4fc","updated":"2018-03-07 17:01:46.000000000","message":"Sure, the requested resource can be hacked in to the flavor resource override. But that is a hack :)","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0743b0b0","line":118,"range":{"start_line":118,"start_character":48,"end_line":118,"end_character":73},"in_reply_to":"df7087c5_cffd33b2","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_b603b80d","line":118,"range":{"start_line":118,"start_character":56,"end_line":118,"end_character":57},"in_reply_to":"df7087c5_e2117c55","updated":"2018-03-07 17:01:46.000000000","message":"@Zhao: I cannot follow you in \u0027construct RP through Network resource\u0027s qos policy?\u0027 Could you be a bit more specific?\n \nThe Network RP will hold the bandwidth resource inventory.\n\nWhen a port is created with a QoS policy or when a port is created in a network with QoS policy then the port will have a resource_request towards the bandwidth inventory. The problem here is that the port is created too late, when the scheduling decision was already made, so the scheduling cannot choose the host based on the bandwidth request.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_a275c4fc","line":118,"in_reply_to":"ff6b8bd7_053583da","updated":"2018-03-07 02:53:37.000000000","message":"Technically you could do it in the flavor by modifying the resources extra spec to add the bandwidth request but i don\u0027t think that is useful as it would not be associated with any specific network. So in practice yes it can only be requested per port.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"09ce9a5feface3287e54c5a73eb12fa534ca7320","unresolved":false,"context_lines":[{"line_number":115,"context_line":"then on the compute host Nova will create a port in the requested network. As"},{"line_number":116,"context_line":"the port inherits the QoS policy from the network the created port will have"},{"line_number":117,"context_line":"resource request attached to it. Because the resource request will only be"},{"line_number":118,"context_line":"available to Nova after the scheduling decision was made this information"},{"line_number":119,"context_line":"cannot be used in such decision."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e2117c55","line":118,"range":{"start_line":118,"start_character":56,"end_line":118,"end_character":57},"in_reply_to":"ff6b8bd7_a50db738","updated":"2018-03-07 03:17:09.000000000","message":"Why cannot construct the network RP through Network resource\u0027s qos policy? Then we can make the process flow like the pre-created port.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"},{"line_number":122,"context_line":"simplicity, therefore moving Nova port create to the conductor is not a"},{"line_number":123,"context_line":"hard dependency of this feature"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":126,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6f2e6744","line":123,"updated":"2018-03-09 20:31:01.000000000","message":"++","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"simplicity, therefore moving Nova port create to the conductor is not a"},{"line_number":123,"context_line":"hard dependency of this feature"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":126,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"},{"line_number":127,"context_line":"used in the pre-created port scenario."},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2f286f32","line":125,"range":{"start_line":125,"start_character":36,"end_line":125,"end_character":63},"updated":"2018-03-09 20:31:01.000000000","message":"the conductor, the bandwidth","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":122,"context_line":"simplicity, therefore moving Nova port create to the conductor is not a"},{"line_number":123,"context_line":"hard dependency of this feature"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":126,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"},{"line_number":127,"context_line":"used in the pre-created port scenario."},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c71a98ca","line":125,"range":{"start_line":125,"start_character":36,"end_line":125,"end_character":63},"in_reply_to":"df7087c5_2f286f32","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_9d5fb1e4","line":134,"updated":"2018-03-06 09:39:51.000000000","message":"should we consider to fail to boot instance if the network has Qos Policy?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6d3c38bf","line":134,"in_reply_to":"df7087c5_0455601d","updated":"2018-03-09 16:03:26.000000000","message":"Added a sentence about the boot failure in this case and also about the new microversion bump that is needed to signal this.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5411dee96937510d9e59317eef0dcf5590d1da04","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_a0c1e030","line":134,"in_reply_to":"df7087c5_2fab8f89","updated":"2018-03-11 14:21:44.000000000","message":"The disable what I said actually means the neutron side didn\u0027t report inventory to the placement. But I think the neutron still can set qos policy on the network?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c31179167d2651f96403352e26dd4d215289a918","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_bb9e3305","line":134,"in_reply_to":"df7087c5_3b21c3fc","updated":"2018-03-08 05:57:30.000000000","message":"And I\u0027m thinking of one more case:\n\nThe network bandwidth scheduling is disabled.(I think there should be a way to disable it?) The neutron doesn\u0027t report bandwidth resource to the placement. So there should be empty in the `resources` and `required` field in the port API.\n\nBut in nova API, we only can know the network has qos policy or not, since the port only can be created from network in the nova-compute.\n\nSo we have no way to know the bandwidth scheduling is enabled or not.\n\nAnd in this case, the bandwidth scheduling is disabled, we shouldn\u0027t fail to boot an instance with network which has qos policy.\n\nSo only check the network having qos policy or not isn\u0027t enough to fail an instance booting.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6108f827","line":134,"in_reply_to":"df7087c5_532cbc46","updated":"2018-03-07 17:01:46.000000000","message":"I think we have to fail the boot if the request cannot be supported. If the reason of the problem is that the resource request cannot be fulfilled due to not having support for allocating it or not having resource to allocate from does not matter. The user asked for something (the bandwidth) that we cannot provide so we fail. \n\nI don\u0027t know if this needs a microversion or not, but if the agreement is to proactively communicate to the user that there are new failure modes of this API then I\u0027m OK to add that microversion.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e9692992085d73a53e9f5c1fbe1ef753a96d8d7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_3b21c3fc","line":134,"in_reply_to":"df7087c5_6108f827","updated":"2018-03-08 05:47:53.000000000","message":"For the case, we should return 400, the Nova boot API already returns 400, so that isn\u0027t require a microversion. But the change is the API behaviour. So currently, nova can boot an instance with a network which has qos policy, then we change to fail if there is policy with network, that is API behavour change.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a6f3da4c0ba8da95befa26d60d3f84477adc8e62","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_532cbc46","line":134,"in_reply_to":"df7087c5_62bd6c67","updated":"2018-03-07 06:48:53.000000000","message":"yes, sounds like API behaviour change, that would require microversion. So when we detach the port, we should only delete the allocation records for the pre-created port.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2fab8f89","line":134,"in_reply_to":"df7087c5_6d3c38bf","updated":"2018-03-09 20:31:01.000000000","message":"I don\u0027t believe we should allow for disabling of \"bandwidth scheduling\". It\u0027s not like we allow disabling of \"vCPU scheduling\". In this spec, bandwidth is just another type of resource that can be consumed by an instance. If the deployer wishes to \"disable\" consumption of bandwidth, they simply don\u0027t add resources to the Neutron port(s).","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b36210100cc29e9abb0188f994182eec449a2ba0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0455601d","line":134,"in_reply_to":"df7087c5_84b5f0cf","updated":"2018-03-09 08:58:03.000000000","message":"Not using the feature is easy. If the user never creates a QoS minimum bandwidth policy rule on any of the networks or ports then the feature will not be used and will not bother anybody. In this case the deployer might want to not reserve any hosts for bandwidth aware ports (i.e. not put the CUSTOM_GARANTEED_BW_ONLY trait to any network porvider). \n\nIn the other hand if the deployer want to forbid the usage of this feature then a) he can forbid using the QoS neutron API by policy b) tag all the network providers with CUSTOM_BEST_EFFORT_BW_ONLY trait.\n\nBesides these I don\u0027t think that we need yet another parallel mechanism to turn off this feature.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f2e1007a42fa233269ac6bfbca2941722b3c6598","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_84b5f0cf","line":134,"in_reply_to":"df7087c5_88abd6d4","updated":"2018-03-09 08:37:05.000000000","message":"@Bence, I guess there are some users don\u0027t care about the bandwidth, just like currently most of users?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_b5a3579e","line":134,"in_reply_to":"df7087c5_a0c1e030","updated":"2018-03-12 11:27:38.000000000","message":"If somebody sets a QoS minimum bandwidth policy on a port or network but non of the neutron agents are reporting such resources the the boot will fail with NoValidHost. I think this is OK.\n\nIf deployer does not allow setting QoS minimum bandwidth policy on a port or network but the neutron agents are reporting such resources then those resource will never be used. I think this is also OK.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_88abd6d4","line":134,"in_reply_to":"df7087c5_bb9e3305","updated":"2018-03-08 15:21:08.000000000","message":"@Alex: I don\u0027t know if there\u0027s a need to disable the whole feature. For example how could we ever re-enable the feature if it was disabled for some time and VMs with best effort traffic were scheduled all over the place?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"953db5b3cb8e18c477fdd8b7e063c6326847faf9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2ae2c7d6","line":134,"in_reply_to":"df7087c5_bb9e3305","updated":"2018-03-08 10:19:33.000000000","message":"OK, let\u0027s add a new microversion to signal the API behavior change.\n\nRegarding the turned off bandwidth scheduling, I think nova only need to check the port to see if there is any resource request attached to it and if not then do what it does today.\nIf the bandwidth feature is turned off (or not configured to be turned on) on the neutron side then neutron should make sure that the port does not have a resource request.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":131,"context_line":"this the Nova compute would need to request allocation candidates from"},{"line_number":132,"context_line":"Placement (restricted to RP tree of the already selected compute node) to find"},{"line_number":133,"context_line":"the networking RP where the port related resource allocations needs to be"},{"line_number":134,"context_line":"created. This seems complex enough not to consider it in the current scope."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_62bd6c67","line":134,"in_reply_to":"ff6b8bd7_9d5fb1e4","updated":"2018-03-07 02:53:37.000000000","message":"This would break existing behaviour. I think we should only fail if the neutron port has a resource request we cannit fulfil","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":145,"context_line":"need to request allocation candidates from Placement"},{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_3d70e572","line":148,"updated":"2018-03-06 09:39:51.000000000","message":"Same question, should we failed to attach the port?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"need to request allocation candidates from Placement"},{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_ad5d70ea","line":148,"in_reply_to":"df7087c5_815bcc2c","updated":"2018-03-09 16:03:26.000000000","message":"@Sean: I think this is not a breaking changes. A non QoS aware port can be attached as before. In the other hand QoS aware ports wasn\u0027t supported before during interface attach so we are not breaking that here.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"need to request allocation candidates from Placement"},{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_815bcc2c","line":148,"in_reply_to":"df7087c5_e2873cb6","updated":"2018-03-07 17:01:46.000000000","message":"Still failing due to not having enough bandwidth resources is a new failure mode of the API (which might need a new microversion). For me failing due to not having enough resources to allocate from or not even trying to allocate does does not really differ. Today nova does not try to allocate those resources either so this might not even a behavior change.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":145,"context_line":"need to request allocation candidates from Placement"},{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e2873cb6","line":148,"in_reply_to":"ff6b8bd7_3d70e572","updated":"2018-03-07 02:53:37.000000000","message":"I think that would be incorrect as it would break existing behaviour. At the ptg we discussed querying placement to see if we could extend the allocation for the instance from the spi. If we could extend the allocation the we call to the compute node to do the attach as normal or fail to attach the port without calling to the compute node if we could not reserve the bandwidth in the placement api","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"09ce9a5feface3287e54c5a73eb12fa534ca7320","unresolved":false,"context_lines":[{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_828e802c","line":149,"updated":"2018-03-07 03:17:09.000000000","message":"Could we simply to failed with the request which Qos request not match? I still think the case that if the host can provider the attach port request is valid.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":147,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":148,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8dabcc87","line":149,"in_reply_to":"df7087c5_828e802c","updated":"2018-03-09 16:03:26.000000000","message":"I\u0027m not sure I understand your question / proposal. Deciding if the bandwidth request can be fulfilled on the already selected compute needs another allocation_candidate call to the placement. I consider that as too much complexity for the first step of the feature. Especially as later when port create is moved to the conductor this step will not be needed at all.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a6f3da4c0ba8da95befa26d60d3f84477adc8e62","unresolved":false,"context_lines":[{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_b31af814","line":155,"range":{"start_line":154,"start_character":50,"end_line":155,"end_character":10},"updated":"2018-03-07 06:48:53.000000000","message":"only for the pre-created port, thanks for we have records about which port is pre-created.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e9692992085d73a53e9f5c1fbe1ef753a96d8d7","unresolved":false,"context_lines":[{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_fb610b3b","line":155,"range":{"start_line":154,"start_character":50,"end_line":155,"end_character":10},"in_reply_to":"df7087c5_a1837056","updated":"2018-03-08 05:47:53.000000000","message":"This depends on whether we return failure on the case at line 118.\n\nIf we can create a server with a network which has qos policy and a pre-created port with qos policy. Then only one of those two ports have resource allocation.\n\nWhen we detach one of them, we need to figure out which one has reosurce allocation.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_a1837056","line":155,"range":{"start_line":154,"start_character":50,"end_line":155,"end_character":10},"in_reply_to":"df7087c5_b31af814","updated":"2018-03-07 17:01:46.000000000","message":"I think if a port caused resource allocation in placement then detaching the port shall cause resource deallocation. When a port is created in neutron it does not automatically gets allocations, the allocation is only created when the port is attached to a VM during or after boot.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"953db5b3cb8e18c477fdd8b7e063c6326847faf9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0a14a39f","line":155,"range":{"start_line":154,"start_character":50,"end_line":155,"end_character":10},"in_reply_to":"df7087c5_fb610b3b","updated":"2018-03-08 10:19:33.000000000","message":"I think we can handle this. During port detach nova needs to check if that port has a resource request attached to it or not. If it has that means there is an allocation as well and that allocation needs to be deleted when the port is detached.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4e8b033298591463c0f4108e8d39b6b6a5ad814c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":159,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":160,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":161,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":162,"context_line":"accordingly."}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_25b52732","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":75},"updated":"2018-03-06 11:53:20.000000000","message":"Maybe it is also better to mention the \"create instance with multiple QoS policy ports\" scenario in the \"Server create with pre-created Neutron ports having QoS policy rule\" section?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":159,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":160,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":161,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":162,"context_line":"accordingly."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_2af9464c","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":75},"in_reply_to":"df7087c5_61f23809","updated":"2018-03-09 16:03:26.000000000","message":"Copy to that section but also kept it here to make the second sentence meaningful.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":155,"context_line":"Placement."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":158,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":159,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":160,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":161,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":162,"context_line":"accordingly."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_61f23809","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":75},"in_reply_to":"ff6b8bd7_25b52732","updated":"2018-03-07 17:01:46.000000000","message":"good point. I will move it.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"09ce9a5feface3287e54c5a73eb12fa534ca7320","unresolved":false,"context_lines":[{"line_number":180,"context_line":"QoS policy rule create on a bound port - out of scope"},{"line_number":181,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Neutron should reject such an operation for now."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Later Neutron would need to request allocation candidates for the port related"},{"line_number":186,"context_line":"resources. The request needs to be restricted to the compute RP tree where the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_a2e384a4","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":48},"updated":"2018-03-07 03:17:09.000000000","message":"It seems that this spec focus on the physical net, sr-iov something and minnum bw request. For now, qos sriov driver support bw limit and minnum bw. AFAIK, it seems support updating port with new qos policy rule.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":180,"context_line":"QoS policy rule create on a bound port - out of scope"},{"line_number":181,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Neutron should reject such an operation for now."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Later Neutron would need to request allocation candidates for the port related"},{"line_number":186,"context_line":"resources. The request needs to be restricted to the compute RP tree where the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c0a18bab","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":48},"in_reply_to":"df7087c5_a2e384a4","updated":"2018-03-09 16:03:26.000000000","message":"Is it also true for the minimum bandwidth rule? I mean if today neutron supports minimum bandwidth rule then that is basically a lie as we are not place the server accordingly. \n\nI made the section more specific to minimum bandwidth rule.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":223,"context_line":"this problem is not special for the currently proposed feature this fix is out"},{"line_number":224,"context_line":"of scope of this spec."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Moving Nova port create to the conductor - out of scope"},{"line_number":227,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_8f9e5bb6","line":224,"updated":"2018-03-09 20:31:01.000000000","message":"Please see this proposal for a possible solution to this problem: https://review.openstack.org/#/c/551315/\n\nThis solution would allow the Neutron agent to read a file containing the UUID (or name) of the resource provider representing the compute node -- even before the nova-compute service worker originally starts and creates the record in the compute_nodes cell DB table and associated resource provider record in the placement API.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":223,"context_line":"this problem is not special for the currently proposed feature this fix is out"},{"line_number":224,"context_line":"of scope of this spec."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Moving Nova port create to the conductor - out of scope"},{"line_number":227,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_a74d249b","line":224,"in_reply_to":"df7087c5_75c61f4b","updated":"2018-03-14 14:30:38.000000000","message":"I added a reference to your bp.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":223,"context_line":"this problem is not special for the currently proposed feature this fix is out"},{"line_number":224,"context_line":"of scope of this spec."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Moving Nova port create to the conductor - out of scope"},{"line_number":227,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_75c61f4b","line":224,"in_reply_to":"df7087c5_8f9e5bb6","updated":"2018-03-12 11:27:38.000000000","message":"I will go and review the proposal.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":240,"context_line":"The consumer of the port related resources"},{"line_number":241,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"During the server move operations Nova needs to handle two sets of allocations"},{"line_number":244,"context_line":"for a single server (one for the source and one for the destination host). If"},{"line_number":245,"context_line":"the consumer_id of the port related resources are the port_id then during move"},{"line_number":246,"context_line":"operations the two sets of allocations couldn\u0027t be distinguished, especially in"},{"line_number":247,"context_line":"case of resize to same host. Therefore the port_id is not a good consumer_id."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":250,"context_line":"but the port bindig does not have a UUID today."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_43eda1ed","line":247,"range":{"start_line":243,"start_character":0,"end_line":247,"end_character":77},"updated":"2018-03-08 15:21:08.000000000","message":"I find this logic dubious. The two sets of allocations could be summed up under the same consumer id.\n\nConversely when a VM has multiple ports and when neutron is going to do direct placement operations (eg. updating the amount of guaranteed bw of the qos policy rule) the VM is as a consumer id will not sufficient to identify the affected port\u0027s allocations.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":240,"context_line":"The consumer of the port related resources"},{"line_number":241,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"During the server move operations Nova needs to handle two sets of allocations"},{"line_number":244,"context_line":"for a single server (one for the source and one for the destination host). If"},{"line_number":245,"context_line":"the consumer_id of the port related resources are the port_id then during move"},{"line_number":246,"context_line":"operations the two sets of allocations couldn\u0027t be distinguished, especially in"},{"line_number":247,"context_line":"case of resize to same host. Therefore the port_id is not a good consumer_id."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":250,"context_line":"but the port bindig does not have a UUID today."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0049c3ce","line":247,"range":{"start_line":243,"start_character":0,"end_line":247,"end_character":77},"in_reply_to":"df7087c5_43eda1ed","updated":"2018-03-09 16:03:26.000000000","message":"\u003e I find this logic dubious. The two sets of allocations could be\n \u003e summed up under the same consumer id.\n \u003e \n\nWe did that in the past but later on replaced with a solution that separates the two allocations one held by the migration_uuid and the other held by the instance_uuid as it seems easier to handle.\n\n \u003e Conversely when a VM has multiple ports and when neutron is going\n \u003e to do direct placement operations (eg. updating the amount of\n \u003e guaranteed bw of the qos policy rule) the VM is as a consumer id\n \u003e will not sufficient to identify the affected port\u0027s allocations.\n\nYes, the current proposal does not solve the problem you mentioned. What do you suggest? Use the port_id? How that will relate to the problem in L252?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"would make it complex to find every allocation for that server both for Nova"},{"line_number":254,"context_line":"and for the deployer using the Placement API."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Therefore this spec proposes to use the instance_uuid as the consumer_id for"},{"line_number":257,"context_line":"the port related resource as well."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Separating non QoS aware and QoS aware ports"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_cfa773a7","line":257,"range":{"start_line":256,"start_character":0,"end_line":257,"end_character":34},"updated":"2018-03-09 20:31:01.000000000","message":"and this is absolutely correct, IMHO. it is the instance that is consuming the port related resources. The port itself isn\u0027t consuming the port related resources...","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":253,"context_line":"would make it complex to find every allocation for that server both for Nova"},{"line_number":254,"context_line":"and for the deployer using the Placement API."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Therefore this spec proposes to use the instance_uuid as the consumer_id for"},{"line_number":257,"context_line":"the port related resource as well."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Separating non QoS aware and QoS aware ports"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_352c2701","line":257,"range":{"start_line":256,"start_character":0,"end_line":257,"end_character":34},"in_reply_to":"df7087c5_cfa773a7","updated":"2018-03-12 11:27:38.000000000","message":"There could be a case when a neutron port is not attached to a nova server but attached to some other entity like a router and there the consumer would be the router. But in general it is never the port alone that is consuming the resource but the entity the port is bound to.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"09ce9a5feface3287e54c5a73eb12fa534ca7320","unresolved":false,"context_lines":[{"line_number":271,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":272,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":273,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"},{"line_number":274,"context_line":"  this configurability via neutron.conf. Then Neutron can add"},{"line_number":275,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` trait in resource request of the port that is QoS"},{"line_number":276,"context_line":"  aware and add `CUSTOM_BEST_EFFORT_BW_ONLY` trait otherwise. This solution"},{"line_number":277,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":278,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":279,"context_line":"  This solution needs additional work in Neutron but no additional work in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4d74199a","line":276,"range":{"start_line":274,"start_character":41,"end_line":276,"end_character":61},"updated":"2018-03-07 03:17:09.000000000","message":"This also affect the port binding process, right?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":272,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":273,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"},{"line_number":274,"context_line":"  this configurability via neutron.conf. Then Neutron can add"},{"line_number":275,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` trait in resource request of the port that is QoS"},{"line_number":276,"context_line":"  aware and add `CUSTOM_BEST_EFFORT_BW_ONLY` trait otherwise. This solution"},{"line_number":277,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":278,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":279,"context_line":"  This solution needs additional work in Neutron but no additional work in"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c1d6a450","line":276,"range":{"start_line":274,"start_character":41,"end_line":276,"end_character":61},"in_reply_to":"df7087c5_4d74199a","updated":"2018-03-07 17:01:46.000000000","message":"I think it only affects the host selection during scheduling. Of course host selection will effect the port binding as the port will be bound to the host selected by the scheduler. Does this answer your question?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":293,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":294,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":297,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"},{"line_number":298,"context_line":"which physical network a given Network RP is connected to."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Networking RP model"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_cfc0d32d","line":298,"range":{"start_line":296,"start_character":0,"end_line":298,"end_character":58},"updated":"2018-03-09 20:31:01.000000000","message":"I presume you\u0027ll be proposing these to os-traits?\n\nIf so, I propose to name these NET_BACKEND_OVS and NET_BACKEND_SRIOV instead of NET_AGENT_XXX","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":293,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":294,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":297,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"},{"line_number":298,"context_line":"which physical network a given Network RP is connected to."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Networking RP model"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_07541020","line":298,"range":{"start_line":296,"start_character":0,"end_line":298,"end_character":58},"in_reply_to":"df7087c5_1539e33f","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":293,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":294,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":297,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"},{"line_number":298,"context_line":"which physical network a given Network RP is connected to."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Networking RP model"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_1539e33f","line":298,"range":{"start_line":296,"start_character":0,"end_line":298,"end_character":58},"in_reply_to":"df7087c5_cfc0d32d","updated":"2018-03-12 11:27:38.000000000","message":"Good point. I will add a work item to propose them to os-traits.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   |"},{"line_number":310,"context_line":"   +-------+Network agent RP"},{"line_number":311,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":312,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":313,"context_line":"   |             +"},{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_3d69c524","line":312,"range":{"start_line":312,"start_character":14,"end_line":312,"end_character":64},"updated":"2018-03-06 09:39:51.000000000","message":"May I ask the usecase of limit the OVS ports?\n\nAnd why we have to attach the number of OVS ports to this RP, not the RP in next level.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a6f3da4c0ba8da95befa26d60d3f84477adc8e62","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   |"},{"line_number":310,"context_line":"   +-------+Network agent RP"},{"line_number":311,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":312,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":313,"context_line":"   |             +"},{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_93d7b424","line":312,"in_reply_to":"df7087c5_823520fa","updated":"2018-03-07 06:48:53.000000000","message":"thanks, I clear the use-case now.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   |"},{"line_number":310,"context_line":"   +-------+Network agent RP"},{"line_number":311,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":312,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":313,"context_line":"   |             +"},{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e1be48fe","line":312,"in_reply_to":"df7087c5_93d7b424","updated":"2018-03-07 17:01:46.000000000","message":"Thanks Sean for the explanation.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":309,"context_line":"   |"},{"line_number":310,"context_line":"   +-------+Network agent RP"},{"line_number":311,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":312,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":313,"context_line":"   |             +"},{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_823520fa","line":312,"in_reply_to":"ff6b8bd7_3d69c524","updated":"2018-03-07 02:53:37.000000000","message":"Ovs has a maximum por limit that has recently been extended to ~65k port but was previously 1024 port for ovs-dpdk, for hardware ofloaded ovs this can be lower. Linux bridge can only have 4096 ports per bridge due to spanning tree limits similarly there is a port limit on vpp and many other backends. As such in general network backend dont have infinite port we just don\u0027t tend to hit them on a vm based hypervisors.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"},{"line_number":316,"context_line":"   |             +------+Network RP"},{"line_number":317,"context_line":"   |             |         traits: PHYSNET_1, NET_AGENT_OVS"},{"line_number":318,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 1000000,"},{"line_number":319,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_BITS_SEC: 1000000}"},{"line_number":320,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_fd726d11","line":317,"range":{"start_line":317,"start_character":35,"end_line":317,"end_character":44},"updated":"2018-03-06 09:39:51.000000000","message":"This should be custom trait, so it should be CUSTOM_PHYSNET_1","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"},{"line_number":316,"context_line":"   |             +------+Network RP"},{"line_number":317,"context_line":"   |             |         traits: PHYSNET_1, NET_AGENT_OVS"},{"line_number":318,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 1000000,"},{"line_number":319,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_BITS_SEC: 1000000}"},{"line_number":320,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_4147f41e","line":317,"in_reply_to":"df7087c5_022110b5","updated":"2018-03-07 17:01:46.000000000","message":"Good point. I will fix.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"},{"line_number":316,"context_line":"   |             +------+Network RP"},{"line_number":317,"context_line":"   |             |         traits: PHYSNET_1, NET_AGENT_OVS"},{"line_number":318,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 1000000,"},{"line_number":319,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_BITS_SEC: 1000000}"},{"line_number":320,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_c0798bfc","line":317,"in_reply_to":"df7087c5_4147f41e","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   |             |"},{"line_number":315,"context_line":"   |             |"},{"line_number":316,"context_line":"   |             +------+Network RP"},{"line_number":317,"context_line":"   |             |         traits: PHYSNET_1, NET_AGENT_OVS"},{"line_number":318,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 1000000,"},{"line_number":319,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_BITS_SEC: 1000000}"},{"line_number":320,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_022110b5","line":317,"in_reply_to":"ff6b8bd7_fd726d11","updated":"2018-03-07 02:53:37.000000000","message":"Correct the custom prefix was omitted for brevity but it should be used for correctness","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f036b251c7f3d9b672f115b69db1b82ba1a185f5","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   |             |"},{"line_number":321,"context_line":"   |             |"},{"line_number":322,"context_line":"   |             +------+Network RP"},{"line_number":323,"context_line":"   |                       traits: PHYSNET_2, NET_AGENT_OVS"},{"line_number":324,"context_line":"   |                       inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 100000,"},{"line_number":325,"context_line":"   |                                   NET_BANDWIDTH_EGRESS_BITS_SEC: 100000}"},{"line_number":326,"context_line":"   |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ff6b8bd7_5d5b5986","line":323,"range":{"start_line":323,"start_character":46,"end_line":323,"end_character":59},"updated":"2018-03-06 09:39:51.000000000","message":"I remember we say using the type of nic to distinguish the request is for SRIOV or OVS. I may missed that.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c43cf974183894719491894e88ed85fec2b3e094","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   |             |"},{"line_number":321,"context_line":"   |             |"},{"line_number":322,"context_line":"   |             +------+Network RP"},{"line_number":323,"context_line":"   |                       traits: PHYSNET_2, NET_AGENT_OVS"},{"line_number":324,"context_line":"   |                       inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 100000,"},{"line_number":325,"context_line":"   |                                   NET_BANDWIDTH_EGRESS_BITS_SEC: 100000}"},{"line_number":326,"context_line":"   |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_42186880","line":323,"in_reply_to":"","updated":"2018-03-07 02:53:37.000000000","message":"Yes the suggestion was to list the vnic types supported by the backend as traits on the rp. That is not required for this feature however it is related. The net_agent_ovs has a similar effect","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"50e530914e17b96e6f2c0045f8d96a4877e6d36b","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   |             |"},{"line_number":321,"context_line":"   |             |"},{"line_number":322,"context_line":"   |             +------+Network RP"},{"line_number":323,"context_line":"   |                       traits: PHYSNET_2, NET_AGENT_OVS"},{"line_number":324,"context_line":"   |                       inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 100000,"},{"line_number":325,"context_line":"   |                                   NET_BANDWIDTH_EGRESS_BITS_SEC: 100000}"},{"line_number":326,"context_line":"   |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_6159d8fc","line":323,"in_reply_to":"df7087c5_42186880","updated":"2018-03-07 17:01:46.000000000","message":"Good point. I will fix that.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   |             |"},{"line_number":321,"context_line":"   |             |"},{"line_number":322,"context_line":"   |             +------+Network RP"},{"line_number":323,"context_line":"   |                       traits: PHYSNET_2, NET_AGENT_OVS"},{"line_number":324,"context_line":"   |                       inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC: 100000,"},{"line_number":325,"context_line":"   |                                   NET_BANDWIDTH_EGRESS_BITS_SEC: 100000}"},{"line_number":326,"context_line":"   |"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_204ba7b0","line":323,"in_reply_to":"df7087c5_6159d8fc","updated":"2018-03-09 16:03:26.000000000","message":"I added a note below the tree to let neutron decide what to use.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        \"name\": \"\","},{"line_number":379,"context_line":"        ..."},{"line_number":380,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":381,"context_line":"        \"resource_request\": {"},{"line_number":382,"context_line":"            \"resources\": {"},{"line_number":383,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":384,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_aff31f9e","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":29},"updated":"2018-03-09 20:31:01.000000000","message":"not sure there needs to be a top-level resource_request key in the port response. Can \"resources\" and \"required\" just be the top-level keys?","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca2eee19a4fd1c6054223cdbd9277d0431429ea7","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        \"name\": \"\","},{"line_number":379,"context_line":"        ..."},{"line_number":380,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":381,"context_line":"        \"resource_request\": {"},{"line_number":382,"context_line":"            \"resources\": {"},{"line_number":383,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":384,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_954bb3ae","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":29},"in_reply_to":"df7087c5_aff31f9e","updated":"2018-03-12 11:27:38.000000000","message":"Sure, technically resources and required can be top level keys. I proposed the extra top level key resource_request to make the resource related things separated from the rest of the port data. Later on the port might need more than one granular resource group to requests resource from and then we will introduce resourcesX and requiredX. At that point the separation seem even more appropriate to me. Let\u0027s see how the Neutron developers thing about it.","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"64840e2fdc1bbc954f17e98c6c016a636a538325","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            \"resources\": {"},{"line_number":383,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":384,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":385,"context_line":"            \"required\": [PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":386,"context_line":"    }}"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_43b5a130","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":49},"updated":"2018-03-08 15:21:08.000000000","message":"nit: \u0027CUSTOM_PHYSNET_2\u0027, \u0027NET_AGENT_OVS\u0027","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d418d6165246cb74a62ae04d39237f19c0d069f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            \"resources\": {"},{"line_number":383,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":384,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":385,"context_line":"            \"required\": [PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":386,"context_line":"    }}"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_e0f36f72","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":49},"in_reply_to":"df7087c5_43b5a130","updated":"2018-03-09 16:03:26.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8468a83ad996a840b85524e9c9f059fab16cc41e","unresolved":false,"context_lines":[{"line_number":472,"context_line":"* Nova will send more complex allocation candidate request to Placement as it"},{"line_number":473,"context_line":"  will include the port related resource request as well."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"As Placement does not seem to be a bottleneck today we does not foresee"},{"line_number":476,"context_line":"performance degradation due to the above changes."},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_af21dffd","line":475,"range":{"start_line":475,"start_character":52,"end_line":475,"end_character":63},"updated":"2018-03-09 20:31:01.000000000","message":"we do not","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ad70c75b2631031a28d75661e32da1e777f60378","unresolved":false,"context_lines":[{"line_number":472,"context_line":"* Nova will send more complex allocation candidate request to Placement as it"},{"line_number":473,"context_line":"  will include the port related resource request as well."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"As Placement does not seem to be a bottleneck today we does not foresee"},{"line_number":476,"context_line":"performance degradation due to the above changes."},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df7087c5_0702d00b","line":475,"range":{"start_line":475,"start_character":52,"end_line":475,"end_character":63},"in_reply_to":"df7087c5_af21dffd","updated":"2018-03-14 14:30:38.000000000","message":"Done","commit_id":"df6ddaad629f4ef9d169eafba21cf087e32f3491"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Currently there is no method in the Nova scheduler to place an server"},{"line_number":22,"context_line":"based on the network bandwidth available in a host. The Placement service"},{"line_number":23,"context_line":"doesn\u0027t track the different network back-ends present in a host and their"},{"line_number":24,"context_line":"available bandwidth."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_1be2d602","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":62},"updated":"2018-03-18 00:45:55.000000000","message":"s/an/a","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Currently there is no method in the Nova scheduler to place an server"},{"line_number":22,"context_line":"based on the network bandwidth available in a host. The Placement service"},{"line_number":23,"context_line":"doesn\u0027t track the different network back-ends present in a host and their"},{"line_number":24,"context_line":"available bandwidth."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_9548772d","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":62},"in_reply_to":"df7087c5_1be2d602","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"requested bandwidth resource during the scheduling of the server based on the"},{"line_number":41,"context_line":"available bandwidth resources on each compute host."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. note:: This spec describes a feature that effects both Nova and Neutron. It"},{"line_number":44,"context_line":"          describes the changes in both modules for completeness and"},{"line_number":45,"context_line":"          understandability. However it does not go in full details about"},{"line_number":46,"context_line":"          Neutron changes as that is described in the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_dbebfed9","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":52},"updated":"2018-03-18 00:45:55.000000000","message":"affects","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":40,"context_line":"requested bandwidth resource during the scheduling of the server based on the"},{"line_number":41,"context_line":"available bandwidth resources on each compute host."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. note:: This spec describes a feature that effects both Nova and Neutron. It"},{"line_number":44,"context_line":"          describes the changes in both modules for completeness and"},{"line_number":45,"context_line":"          understandability. However it does not go in full details about"},{"line_number":46,"context_line":"          Neutron changes as that is described in the"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_1566a7c2","line":43,"range":{"start_line":43,"start_character":45,"end_line":43,"end_character":52},"in_reply_to":"df7087c5_dbebfed9","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":80,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":81,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":82,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":83,"context_line":"the RPs that was created by the agent. Also Neutron only modifies the pieces"},{"line_number":84,"context_line":"that actually got added or deleted. Unmodified pieces should be left in place"},{"line_number":85,"context_line":"(no delete and re-create)."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_bbc72a65","line":83,"range":{"start_line":83,"start_character":13,"end_line":83,"end_character":16},"updated":"2018-03-18 00:45:55.000000000","message":"were","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":80,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":81,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":82,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":83,"context_line":"the RPs that was created by the agent. Also Neutron only modifies the pieces"},{"line_number":84,"context_line":"that actually got added or deleted. Unmodified pieces should be left in place"},{"line_number":85,"context_line":"(no delete and re-create)."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_951f1707","line":83,"range":{"start_line":83,"start_character":13,"end_line":83,"end_character":16},"in_reply_to":"df7087c5_bbc72a65","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_07a65054","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"updated":"2018-03-14 15:21:57.000000000","message":"This is a bit wrong, the placement-req-filter stuff happens in nova-scheduler (I\u0027m pretty sure anyway, guess I need to look closer at that code), but the API does need to shove some details into the RequestSpec for the request filter to use eventually during scheduling.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ab78e5592501b56f2daa22a948acb297abe73a3c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_51a90f8e","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"in_reply_to":"df7087c5_07a65054","updated":"2018-03-18 06:34:21.000000000","message":"Check the code, NetworkRequest object looks a better place to store the requested resources.\n\nThose bandwidth resource consuming needn\u0027t be in RequestSpec, and persistent in the DB. The NetworkRequest obj doesn\u0027t store in the DB.\n\nAnd NetworkRequest already includes the PCI request info also.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_95cb0071","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"in_reply_to":"df7087c5_51a90f8e","updated":"2018-03-19 16:54:32.000000000","message":"I did a short dig through the request filter proposal.\n \n@Matt: You are right that the request-filter is scheduler only and also it is made in a way that the filter itself only get the RequestSpec object as input but nothing else. In our case we need the requested ports as an input as well to formulate the proper allocation candidate request.\n\n@Alex: you are also right that the resources requested by the ports doesn\u0027t need to be persisted in the RequestSpec but needs to be recalculated from the neutron ports.\nUnfortunately NetworkRequest is only used during boot so for example during normal delete the compute/manager calls deallocate_for_instance without providing the requested_networks kwargs. Then neutronv2/api falls back to asking neutron about the ports connected to the instance under deletion. \n\nBottom line. The request-filter functionality is not enough for us here. During boot we can use the NetworkRequest but in every other case nova has to go back to neutron listing the ports that are attached to the instance then the resource requests from those ports needs to be used for the allocation / deallocation of the port related resources.\n\nI will document this in the next spec revision","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"bf659307_1b089f26","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"in_reply_to":"df7087c5_91506bd7","updated":"2018-03-23 16:36:52.000000000","message":"For me the main question: Is it safe to persist the bandwidth request in the RequestSpec as it might change later, outside of Nova.\n\nI\u0027m pretty sure that at some point Neutron will support changing the bandwidth policy on an already bound port as this is the similar use case than nova resize. (Today it is marked out of scope in the Neutron spec [1]). I don\u0027t like complicating the communication by asking for a network change event to update Nova\u0027s view. I think it is a lot safer if Nova re-checks the resource request from the ports at every move operation to use the latest information in the scheduling. \n\nBTW, in case of force host, today we blindly copy the allocation from source host to destination host by using the destination host as the RP [2]. This will be lot more complex as there will be more than one RP to replace and Nova will have a hard time to figure out what Network RP from the source host maps to what Network RP on the destination host.\n\n[1]https://review.openstack.org/#/c/508149/5/specs/rocky/minimum-bandwidth-allocation-placement-api.rst@299\n[2]https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_b5425b67","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"in_reply_to":"df7087c5_95cb0071","updated":"2018-03-22 18:41:21.000000000","message":"I dig a bit and come up with a plan how to move the requested resources data from the neutron ports to the nova.scheduler.utils.resources_from_request_spec() function via the RequestSpec object to generate a proper allocation candidate request","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9831ba884e5cf9d0c8136f46b814a69a780a1d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"the requested resources and required traits. See"},{"line_number":98,"context_line":"`Resource request in the port`_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"A new `request-filter`_ in nova-api stores the requested resources and required"},{"line_number":101,"context_line":"traits in the RequestSpec object."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_91506bd7","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":35},"in_reply_to":"df7087c5_b5425b67","updated":"2018-03-23 16:06:51.000000000","message":"I\u0027m not sure why it would be wrong to store the bandwidth resource request information in the RequestSpec since we\u0027ll need that for move operations.\n\nWhat happens if the bandwidth policy changes on an attached port? Is Neutron going to update the allocations? Will nova get some kind of network changed event and need to re-calculate the bandwidth allocation? Or will neutron return a 400 for changing the policy on an attached port, or a network with attached ports? The reason I ask if it impacts our move operations for scheduling, i.e. if we need to lookup the latest information on the ports for a move or if nova can just get that information from the RequestSpec from the initial boot.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":107,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":108,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":109,"context_line":"resource and required traits from and different ports (i.e. one OVS and one"},{"line_number":110,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":111,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_87482087","line":109,"range":{"start_line":109,"start_character":34,"end_line":109,"end_character":37},"updated":"2018-03-14 15:21:57.000000000","message":"s/and//","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":106,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":107,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":108,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":109,"context_line":"resource and required traits from and different ports (i.e. one OVS and one"},{"line_number":110,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":111,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_5553bf39","line":109,"range":{"start_line":109,"start_character":34,"end_line":109,"end_character":37},"in_reply_to":"df7087c5_87482087","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"information cannot be used in such decision."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"},{"line_number":137,"context_line":"simplicity, therefore moving Nova port create to the conductor is not a"},{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_42119651","line":137,"range":{"start_line":137,"start_character":22,"end_line":137,"end_character":62},"updated":"2018-03-14 15:21:57.000000000","message":"nit: link to https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/prep-for-network-aware-scheduling-pike.html","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":134,"context_line":"information cannot be used in such decision."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"},{"line_number":137,"context_line":"simplicity, therefore moving Nova port create to the conductor is not a"},{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_c80ad21e","line":137,"range":{"start_line":137,"start_character":22,"end_line":137,"end_character":62},"in_reply_to":"df7087c5_42119651","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_226b42b7","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"updated":"2018-03-14 15:21:57.000000000","message":"I\u0027m not sure about this. We add new things all the time to the compute code that can cause failures based on new libvirt configuration, new scheduling support (think of the trusted VFs spec from Sahid - there is no proposed microversion for that), we don\u0027t microversion the API everytime we do something like that. I also don\u0027t know how the microversion would be used - would a user need to pass it in at all, or it would just be there for discovery that the server is now new enough to fail in this new way? Seems a bit weird. It\u0027s probably just better to put something in the networking guide or API reference that if you want to use a QoS policy on a network/port with a server then you need to pre-create the port and provider it to the compute service when creating the server, otherwise it\u0027s not supported and the server create will fail.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ab78e5592501b56f2daa22a948acb297abe73a3c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_d19c3f6c","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"in_reply_to":"df7087c5_226b42b7","updated":"2018-03-18 06:34:21.000000000","message":"Currently, the neutron already supports to add QoS policy to a network, and now Nova can create a port from that network, with this proposal, the same request will fail, that sounds like behavior change.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1aece32759da81a2e48479fd07eeb6c43750ad97","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_d0d4024a","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"in_reply_to":"df7087c5_38d9c921","updated":"2018-03-20 15:55:05.000000000","message":"There was a long discussion on IRC [1]. At the end I was convinced that accepting but ignoring the resource needs of a neturon port in nova is a bug and changing that behavior to rejecting such request is a bugfix. Therefore does not need a microversion bump.\n\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-03-20.log.html#t2018-03-20T13:50:47","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9831ba884e5cf9d0c8136f46b814a69a780a1d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"bf659307_b83179ef","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"in_reply_to":"df7087c5_d0d4024a","updated":"2018-03-23 16:06:51.000000000","message":"To try and summarize that, I brought up two cases:\n\n1. Rebuilding a volume-backed instance with a new image: in the past you could do this without an error in the API but the compute didn\u0027t actually re-image the root disk, it was just a silent failure. We made that a hard 400 in the API in Queens without a microversion. If we add support for rebuilding a volume-backed server with a new image in Rocky (there is a spec for this), that will require a new microversion to do it.\n\n2. For volume multiattach in Queens, we only support attaching (bfv or normal attach) multiattach volumes with the new microversion 2.60 and fail for any older microversions. Technically that is a bit of a behavior change since I think years ago you could create a multiattach volume in Cinder and attach it to at most 1 instance in nova. So we it seems we kind of broke that old behavior with the 2.60 microversion change. However, Cinder had already made a change a few years ago such that you couldn\u0027t even create multiattach volumes, so really the problem took care of itself on the cinder side, and only starting in Queens could you create multiattach volumes (for 3 specific volume types).\n\n--\n\nFor this bandwidth discussion, I tend to think following #1 is the best way to go - if you try to attach a port or create a port on a network with a QoS policy, nova can fail and say it\u0027s a bug that we allowed it before. Then in a new microversion you can attach ports/networks with QoS policies on them.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9831ba884e5cf9d0c8136f46b814a69a780a1d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"bf659307_7851a10e","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"in_reply_to":"df7087c5_d19c3f6c","updated":"2018-03-23 16:06:51.000000000","message":"\u003e Currently, the neutron already supports to add QoS policy to a\n \u003e network, and now Nova can create a port from that network, with\n \u003e this proposal, the same request will fail, that sounds like\n \u003e behavior change.\n\nTrue, but also, the default policy rule on this is admin-only so I think we\u0027re pretty safe in considering this an experimental feature in neutron if you\u0027re attaching those ports to servers in nova. I think of it like volume multiattach - you could create those types of volumes in cinder since I think Havana, but you couldn\u0027t use them in nova to attach to more than one server.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"hard dependency of this feature"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"This means that nova-compute has to check if the created port has any resource"},{"line_number":141,"context_line":"request and fail the boot if it has. This needs a microversion bump in the API"},{"line_number":142,"context_line":"to signal that the Nova server create API call can fail in this new case."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"After Nova moves the port create to the conductor the bandwidth request of the"},{"line_number":145,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_38d9c921","line":142,"range":{"start_line":141,"start_character":37,"end_line":142,"end_character":73},"in_reply_to":"df7087c5_d19c3f6c","updated":"2018-03-19 16:54:32.000000000","message":"The SRIOV neutron backend is the only one that has minimum bandwidth rule support merged [1]. In that case it is merged with some level of data plane enforcement support. But the release notes there [2] also states that there is no nova integration support for this feature. \n\nSo even if the nova boot succeeded in this case before it does not mean any real minimum bandwidth guarantee. It will be even better now as nova will clearly communicate with the API failure that the requested minimum bandwidth guarantee cannot be provided. \n\nSure this is an API behavior change as it rejects something that was accepted (and then ignored) before.\n\nHonestly I don\u0027t know if this needs microversion bump or not. \n\nIf we add microversion N for this then nova API should only reject the request if the requested version is \u003e\u003d N. If it is less than N then nova API should accept the request and ignore the minimum bandwidth request in that port.\n\n[1]https://review.openstack.org/#/q/topic:bug/1560963\n[2]https://github.com/openstack/neutron/blob/49d614895f44c44f9e1735210498facf1886c404/releasenotes/notes/qos-min-egress-bw-rule-b1c80f5675a4c1c3.yaml#L8","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"},{"line_number":157,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"As the port is attached to an existing server bound to a compute node this"},{"line_number":160,"context_line":"request does not involve scheduling."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"The nova-api could try to patch the server\u0027s existing allocation record with"},{"line_number":163,"context_line":"the extra resource request from the port. However to do this nova-api would"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a2d3d25f","line":160,"range":{"start_line":159,"start_character":0,"end_line":160,"end_character":36},"updated":"2018-03-14 15:21:57.000000000","message":"Similar to the case mentioned above, you can use the interface attach API to pass a network id (not a port id) and nova will create a port for you on that network, and if the network has a QoS policy then we\u0027re in the same boat.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"},{"line_number":157,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"As the port is attached to an existing server bound to a compute node this"},{"line_number":160,"context_line":"request does not involve scheduling."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"The nova-api could try to patch the server\u0027s existing allocation record with"},{"line_number":163,"context_line":"the extra resource request from the port. However to do this nova-api would"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_080bead5","line":160,"range":{"start_line":159,"start_character":0,"end_line":160,"end_character":36},"in_reply_to":"df7087c5_58efddaf","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"},{"line_number":157,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"As the port is attached to an existing server bound to a compute node this"},{"line_number":160,"context_line":"request does not involve scheduling."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"The nova-api could try to patch the server\u0027s existing allocation record with"},{"line_number":163,"context_line":"the extra resource request from the port. However to do this nova-api would"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_58efddaf","line":160,"range":{"start_line":159,"start_character":0,"end_line":160,"end_character":36},"in_reply_to":"df7087c5_a2d3d25f","updated":"2018-03-19 16:54:32.000000000","message":"Correct. However it is a bit different in a sense that if a network id is passed in interface_attach then nova-api cannot try to patch the existing server allocation as the port needs to be created first in that network that today happens in the compute/manager. But maybe compute/manager can try to patch the allocation. \n\nI will mention this in the next revision.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":166,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":167,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a2d43221","line":169,"updated":"2018-03-14 15:21:57.000000000","message":"Assuming this also includes when the server is deleted, either because the user deleted it, or because scheduling failed and we reschedule to another host, the compute calls deallocate_for_instance before casting to the cell conductor to reschedule to an alternate host.\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/manager.py#L1874\n\nor\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/manager.py#L1892\n\nMaybe the latter is best since if the instance uuid is the consumer, calling that should delete all allocations for the instance, including the ones on the network bandwidth resource provider.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":166,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":167,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_08a76abf","line":169,"in_reply_to":"df7087c5_18664553","updated":"2018-03-22 18:41:21.000000000","message":"Added a new subsection to describe this.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":167,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_18664553","line":169,"in_reply_to":"df7087c5_3179fb2e","updated":"2018-03-19 16:54:32.000000000","message":"Both normal server delete and shelve_offload will work as Matt described. So the already existing  _delete_allocation_for_instance() will delete every allocation where the consumer_id is the instance_uuid being deleted/offloaded and this allocation will contain the neutron port related allocations as well automatically.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ab78e5592501b56f2daa22a948acb297abe73a3c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":167,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_3179fb2e","line":169,"in_reply_to":"df7087c5_a2d43221","updated":"2018-03-18 06:34:21.000000000","message":"++, also has the case shelve offload https://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/manager.py#L4856","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":173,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":174,"context_line":"Placement."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_7b04327f","line":172,"range":{"start_line":172,"start_character":17,"end_line":172,"end_character":29},"updated":"2018-03-18 00:45:55.000000000","message":"succeeds","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":173,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":174,"context_line":"Placement."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_4871e243","line":172,"range":{"start_line":172,"start_character":17,"end_line":172,"end_character":29},"in_reply_to":"df7087c5_7b04327f","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":173,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":174,"context_line":"Placement."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":177,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_82432e13","line":174,"range":{"start_line":172,"start_character":64,"end_line":174,"end_character":10},"updated":"2018-03-14 15:21:57.000000000","message":"It would be nice if the neutron agent did this for us (and created the allocation for us) but I know people don\u0027t like that idea, I\u0027m just stating it here - nova is going to have a lot of orchestration for all of this...","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"After the detach is succeeded in Neutron and in the hypervisor, the Nova"},{"line_number":173,"context_line":"compute needs to delete the allocation related to the detached port in"},{"line_number":174,"context_line":"Placement."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":177,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_588efdd0","line":174,"range":{"start_line":172,"start_character":64,"end_line":174,"end_character":10},"in_reply_to":"df7087c5_82432e13","updated":"2018-03-19 16:54:32.000000000","message":"Noted.\nI think the problem goes back to the discussion about using the instance_uuid as the consumer_id for the port related resources.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":177,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":178,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":179,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_1bf5f683","line":180,"range":{"start_line":180,"start_character":11,"end_line":180,"end_character":15},"updated":"2018-03-18 00:45:55.000000000","message":"I would just remove this word.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":177,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":178,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":179,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_28a90e7b","line":180,"range":{"start_line":180,"start_character":11,"end_line":180,"end_character":15},"in_reply_to":"df7087c5_1bf5f683","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":184,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_22a4a2a5","line":183,"updated":"2018-03-14 15:21:57.000000000","message":"Move operations might get tricky, but it\u0027s hard to say right now. I just want to remind that normally we go through the scheduler to pick a target host and then we make allocations against the target host via the scheduler. However, evacuate and live migrate have the \"force host\" option which bypasses the scheduler, and in those cases, conductor is responsible for making the allocation, e.g.:\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/conductor/tasks/live_migrate.py#L93\n\nThis is why I was \"-5\" on Takashi\u0027s proposed spec to add the force flag to cold migrate.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":184,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_7b2992f0","line":183,"in_reply_to":"df7087c5_22a4a2a5","updated":"2018-03-18 00:45:55.000000000","message":"LOL, \"-5\" is very eloquent","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":184,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_f84a7181","line":183,"in_reply_to":"df7087c5_7b2992f0","updated":"2018-03-19 16:54:32.000000000","message":"Good point. I missed the force flag. I will make a note in the next revision that we have to go through every direct or indirect call of reportclient.claim_resources() function and ensure that the port related resources are handled properly. I hope this can be done in a generic way but I share Matt\u0027s worries.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":180,"context_line":"amount the give port requests from the sum and updating the allocation"},{"line_number":181,"context_line":"accordingly."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":184,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_48d482e9","line":183,"in_reply_to":"df7087c5_f84a7181","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"},{"line_number":187,"context_line":"with consumer_id \u003d\u003d instance_uuid while the allocation on the source host is"},{"line_number":188,"context_line":"changed to have consumer_id \u003d\u003d migration_uuid. These allocation sets will"},{"line_number":189,"context_line":"contain the port related allocations as well."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Shelve_offload and unshelve"},{"line_number":192,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_bb464ac0","line":189,"updated":"2018-03-18 00:45:55.000000000","message":"At the end of the operation, the allocation is released in the source host, right? Maybe state it explicitly here","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"},{"line_number":187,"context_line":"with consumer_id \u003d\u003d instance_uuid while the allocation on the source host is"},{"line_number":188,"context_line":"changed to have consumer_id \u003d\u003d migration_uuid. These allocation sets will"},{"line_number":189,"context_line":"contain the port related allocations as well."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Shelve_offload and unshelve"},{"line_number":192,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_28458eb4","line":189,"in_reply_to":"df7087c5_7bcadb4f","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":186,"context_line":"During the move operation Nova makes allocation on the destination host"},{"line_number":187,"context_line":"with consumer_id \u003d\u003d instance_uuid while the allocation on the source host is"},{"line_number":188,"context_line":"changed to have consumer_id \u003d\u003d migration_uuid. These allocation sets will"},{"line_number":189,"context_line":"contain the port related allocations as well."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Shelve_offload and unshelve"},{"line_number":192,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_7bcadb4f","line":189,"in_reply_to":"df7087c5_bb464ac0","updated":"2018-03-19 16:54:32.000000000","message":"Good point. I will make it explicit","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron needs to find the original allocation of the port related resource in"},{"line_number":214,"context_line":"Placement based on the instance_uuid as a consumer_id and the specific resource"},{"line_number":215,"context_line":"classes and traits the port requesting. Then Neutron can try to patch that"},{"line_number":216,"context_line":"allocation based on the new resource amount. If the patch fails that means"},{"line_number":217,"context_line":"there are no available resource left and Neturon should reject the QoS policy"},{"line_number":218,"context_line":"rule change."},{"line_number":219,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_825ece73","line":216,"range":{"start_line":215,"start_character":40,"end_line":216,"end_character":44},"updated":"2018-03-14 15:21:57.000000000","message":"So neutron would call this?\n\nhttps://developer.openstack.org/api-ref/placement/#update-allocations\n\nWithout a generation *enforced* on that, neutron could overwrite any allocations nova is making at the same time. The generation added in 1.12 of that API is ignored.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron needs to find the original allocation of the port related resource in"},{"line_number":214,"context_line":"Placement based on the instance_uuid as a consumer_id and the specific resource"},{"line_number":215,"context_line":"classes and traits the port requesting. Then Neutron can try to patch that"},{"line_number":216,"context_line":"allocation based on the new resource amount. If the patch fails that means"},{"line_number":217,"context_line":"there are no available resource left and Neturon should reject the QoS policy"},{"line_number":218,"context_line":"rule change."},{"line_number":219,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_08c44af4","line":216,"range":{"start_line":215,"start_character":40,"end_line":216,"end_character":44},"in_reply_to":"df7087c5_3baa2319","updated":"2018-03-22 18:41:21.000000000","message":"Noted the issue and the dependency","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron needs to find the original allocation of the port related resource in"},{"line_number":214,"context_line":"Placement based on the instance_uuid as a consumer_id and the specific resource"},{"line_number":215,"context_line":"classes and traits the port requesting. Then Neutron can try to patch that"},{"line_number":216,"context_line":"allocation based on the new resource amount. If the patch fails that means"},{"line_number":217,"context_line":"there are no available resource left and Neturon should reject the QoS policy"},{"line_number":218,"context_line":"rule change."},{"line_number":219,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_fb8602bb","line":216,"range":{"start_line":215,"start_character":40,"end_line":216,"end_character":44},"in_reply_to":"df7087c5_825ece73","updated":"2018-03-18 00:45:55.000000000","message":"Is the enforcement going to be implemented soon? If not, this may join the set of features that we punt to the future. In that case, Neutron would reject the update request, similar to L202","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron needs to find the original allocation of the port related resource in"},{"line_number":214,"context_line":"Placement based on the instance_uuid as a consumer_id and the specific resource"},{"line_number":215,"context_line":"classes and traits the port requesting. Then Neutron can try to patch that"},{"line_number":216,"context_line":"allocation based on the new resource amount. If the patch fails that means"},{"line_number":217,"context_line":"there are no available resource left and Neturon should reject the QoS policy"},{"line_number":218,"context_line":"rule change."},{"line_number":219,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_3baa2319","line":216,"range":{"start_line":215,"start_character":40,"end_line":216,"end_character":44},"in_reply_to":"df7087c5_fb8602bb","updated":"2018-03-19 16:54:32.000000000","message":"Based on the last placement update mail [1] the consumer generation work is about to start. I will note this dependency down but based on the size of the bandwidth work compared to the size of adding generation to allocations I think it is safe to assume that placement support of this will be in place when we need them.\n\n\n[1] http://lists.openstack.org/pipermail/openstack-dev/2018-March/128436.html","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Neutron trunkport feature allows creating new sub ports to an already bound"},{"line_number":224,"context_line":"parent port. The sub port can have its own QoS bandwidth policy rule. The sub"},{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a2643223","line":225,"range":{"start_line":225,"start_character":66,"end_line":225,"end_character":75},"updated":"2018-03-14 15:21:57.000000000","message":"nova","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Neutron trunkport feature allows creating new sub ports to an already bound"},{"line_number":224,"context_line":"parent port. The sub port can have its own QoS bandwidth policy rule. The sub"},{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_48a56246","line":225,"range":{"start_line":225,"start_character":66,"end_line":225,"end_character":75},"in_reply_to":"df7087c5_a2643223","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"Neutron trunkport feature allows creating new sub ports to an already bound"},{"line_number":224,"context_line":"parent port. The sub port can have its own QoS bandwidth policy rule. The sub"},{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_fb74c2d2","line":226,"range":{"start_line":226,"start_character":56,"end_line":226,"end_character":73},"updated":"2018-03-18 00:45:55.000000000","message":"This entails calls to https://developer.openstack.org/api-ref/placement/#allocations, right?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"Neutron trunkport feature allows creating new sub ports to an already bound"},{"line_number":224,"context_line":"parent port. The sub port can have its own QoS bandwidth policy rule. The sub"},{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_fefd7908","line":226,"range":{"start_line":226,"start_character":56,"end_line":226,"end_character":73},"in_reply_to":"df7087c5_fb74c2d2","updated":"2018-03-19 16:54:32.000000000","message":"Yes. Neutron would need to create / delete allocations. In this case the consumer_id of the allocation can be anything neutron would like to have as nova will only see and bind the parent port. Neutron today implements the resource handling of the subports ((un)plugging in the OVS) based on the status of the parent port. So the resource allocation handling can be done in the same code path.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Details"},{"line_number":231,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0debcfdb","line":228,"updated":"2018-03-14 15:21:57.000000000","message":"Another scenario to consider here is what happens when deleting a server that has allocations but the compute service the instance is running on is down, and we have to do a \u0027local delete\u0027 from the API code. I remember reporting a bug about that, and melwitt asserted that when the compute service restarts, the allocations for the deleted instances will be cleaned up:\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/tests/functional/regressions/test_bug_1679750.py#L92\n\nAnd this is the code that would cleanup the allocations for a deleted instance:\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/resource_tracker.py#L1268\n\nHowever, if someone deleted the instance (local in the API) and then the deleted instances were purged from the database, we\u0027d get here and not clean anything up:\n\nhttps://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/resource_tracker.py#L1255\n\nSo we could have orphaned allocations in placement for not only compute node resource providers but also the network bandwidth resource providers. Given this is a latent bug it shouldn\u0027t hold up this spec, but we should realize it\u0027s a problem. We probably need some kind of audit tooling in nova-manage to compare allocations in placement against the current state of the nova database to look for orphans (I think that might be part of what I\u0027m going to write for migrating the caching scheduler data migration).","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Details"},{"line_number":231,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"bf659307_b89ad96b","line":228,"in_reply_to":"bf659307_98e5953b","updated":"2018-03-23 16:36:52.000000000","message":"OK I agree that this as a bug. And  I suggest keep it separate from the current spec.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Details"},{"line_number":231,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_fed01956","line":228,"in_reply_to":"df7087c5_0debcfdb","updated":"2018-03-19 16:54:32.000000000","message":"\u003e Another scenario to consider here is what happens when deleting a\n \u003e server that has allocations but the compute service the instance is\n \u003e running on is down, and we have to do a \u0027local delete\u0027 from the API\n \u003e code. I remember reporting a bug about that, and melwitt asserted\n \u003e that when the compute service restarts, the allocations for the\n \u003e deleted instances will be cleaned up:\n \u003e \n \u003e https://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/tests/functional/regressions/test_bug_1679750.py#L92\n \u003e \n \u003e And this is the code that would cleanup the allocations for a\n \u003e deleted instance:\n \u003e \n \u003e https://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/resource_tracker.py#L1268\n \u003e \n\nGood point. This is another case where we have to make sure that the port related resources are handled. I think the currently exists delete_allocation_for_instance generic enough to delete every allocations including the port related ones as that is handled under the same consumer_id.\n\n \u003e However, if someone deleted the instance (local in the API) and\n \u003e then the deleted instances were purged from the database, we\u0027d get\n \u003e here and not clean anything up:\n \u003e \n \u003e https://github.com/openstack/nova/blob/eb637b9de718a5b4c2e29fe4467e374878ce9c7c/nova/compute/resource_tracker.py#L1255\n \u003e \n \u003e So we could have orphaned allocations in placement for not only\n \u003e compute node resource providers but also the network bandwidth\n \u003e resource providers. Given this is a latent bug it shouldn\u0027t hold up\n \u003e this spec, but we should realize it\u0027s a problem. We probably need\n \u003e some kind of audit tooling in nova-manage to compare allocations in\n \u003e placement against the current state of the nova database to look\n \u003e for orphans (I think that might be part of what I\u0027m going to write\n \u003e for migrating the caching scheduler data migration).\n\nI agree that this is a pre-existing bug but the current proposal makes it a bit bigger as nova will orphan more resources. \n\nIs this DB purging happens as part of a DB archive procedure? If yes, can we add a check in the archiving process to look for allocations in placement to see if the DB instance is safe to be archived?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9831ba884e5cf9d0c8136f46b814a69a780a1d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Details"},{"line_number":231,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"bf659307_98e5953b","line":228,"in_reply_to":"df7087c5_8b105450","updated":"2018-03-23 16:06:51.000000000","message":"\u003e Is this DB purging happens as part of a DB archive procedure? If yes, can we add a check in the archiving process to look for allocations in placement to see if the DB instance is safe to be archived?\n\nUntil the \u0027nova-manage db purge\u0027 CLI that Dan added in Rocky, operators just had to write scripts to purge archived DB table entries.\n\nBut no I don\u0027t think there is anything in the DB archive/purge flow that looks to cleanup allocations, nor do I think they really should, it\u0027s a gap in our delete server API handling when the compute is down. It\u0027s a bug really.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":225,"context_line":"port create is a Neutron only operation that does not involve any Nova nova"},{"line_number":226,"context_line":"interactions. Therefore Neutron has to do the bandwidth resource handling"},{"line_number":227,"context_line":"for every sub port operation."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Details"},{"line_number":231,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_8b105450","line":228,"in_reply_to":"df7087c5_fed01956","updated":"2018-03-22 18:41:21.000000000","message":"Created a new section for delete operations and mentioned the orphaning there.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":246,"context_line":"currently proposed feature as Nova uses the hostname as the compute RP name in"},{"line_number":247,"context_line":"Placement and the name field has a unique constraint in the Placement db model."},{"line_number":248,"context_line":"So in an ambiguous situation the Nova compute services having non unique"},{"line_number":249,"context_line":"hostnames have already fail to create RPs in Placement."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":252,"context_line":"this problem is not special for the currently proposed feature this fix is out"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_7b2f52a7","line":249,"range":{"start_line":249,"start_character":23,"end_line":249,"end_character":27},"updated":"2018-03-18 00:45:55.000000000","message":"failed","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":246,"context_line":"currently proposed feature as Nova uses the hostname as the compute RP name in"},{"line_number":247,"context_line":"Placement and the name field has a unique constraint in the Placement db model."},{"line_number":248,"context_line":"So in an ambiguous situation the Nova compute services having non unique"},{"line_number":249,"context_line":"hostnames have already fail to create RPs in Placement."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":252,"context_line":"this problem is not special for the currently proposed feature this fix is out"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_cb23aca6","line":249,"range":{"start_line":249,"start_character":23,"end_line":249,"end_character":27},"in_reply_to":"df7087c5_7b2f52a7","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":252,"context_line":"this problem is not special for the currently proposed feature this fix is out"},{"line_number":253,"context_line":"of scope of this spec."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Moving Nova port create to the conductor - out of scope"},{"line_number":256,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Today Nova creates the Neutron port in the requested network on the compute"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_4d7c671e","line":255,"updated":"2018-03-14 15:21:57.000000000","message":"This section is a duplicate of the one at L126, so not really necessary to have here.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":252,"context_line":"this problem is not special for the currently proposed feature this fix is out"},{"line_number":253,"context_line":"of scope of this spec."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Moving Nova port create to the conductor - out of scope"},{"line_number":256,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Today Nova creates the Neutron port in the requested network on the compute"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_eb4d5072","line":255,"in_reply_to":"df7087c5_4d7c671e","updated":"2018-03-22 18:41:21.000000000","message":"removed the section","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_6de4cbe0","line":292,"range":{"start_line":292,"start_character":68,"end_line":292,"end_character":72},"updated":"2018-03-14 15:21:57.000000000","message":"network?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"555f6ff387b6afbf91fe04c14b4ded296efcb18e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_31233b08","line":292,"range":{"start_line":292,"start_character":68,"end_line":292,"end_character":72},"in_reply_to":"df7087c5_1b097630","updated":"2018-03-18 07:44:50.000000000","message":"I think this is coming from this discussion. http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-03-08.log.html#t2018-03-08T13:38:53","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_de3e75d9","line":292,"range":{"start_line":292,"start_character":68,"end_line":292,"end_character":72},"in_reply_to":"df7087c5_31233b08","updated":"2018-03-19 16:54:32.000000000","message":"The problem can be defined on multiple levels but the basic problem arise when a single bandwidth provider (physical nic) is used in a mixed way without having any data plane enforcement in place for the used (not the allocated) bandwidth.\n\nThe easiest way to avoid this is to segregate servers with QoS from servers without QoS on compute host level with host aggregates. But we can think about segregation per physical port as well. \n\nIf data plane enforcement is in place (e.g. the traffic from an QoS unaware server is always considered lower prio than the traffic of a QoS aware server) then it is possible to mix QoS aware an unaware servers on the same physical port.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_1b097630","line":292,"range":{"start_line":292,"start_character":68,"end_line":292,"end_character":72},"in_reply_to":"df7087c5_6de4cbe0","updated":"2018-03-18 00:45:55.000000000","message":"Given the discussion immediately below, I think this refers to compute hosts","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"* Separating compute hosts via host aggregates. The deployer can create two"},{"line_number":297,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":298,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":299,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":300,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":301,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":302,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_ed453bb5","line":299,"range":{"start_line":296,"start_character":2,"end_line":299,"end_character":79},"updated":"2018-03-14 15:21:57.000000000","message":"Am I correct in understanding this is sort of like the routed networks solution?\n\nhttps://docs.openstack.org/neutron/latest/admin/config-routed-networks.html","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"* Separating compute hosts via host aggregates. The deployer can create two"},{"line_number":297,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":298,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":299,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":300,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":301,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":302,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_c920fd9e","line":299,"range":{"start_line":296,"start_character":2,"end_line":299,"end_character":79},"in_reply_to":"df7087c5_762529ab","updated":"2018-03-19 16:54:32.000000000","message":"\u003e if I am understanding this correctly, I suggest calling the two\n \u003e sets \"QoS aware hosts\" and \"non QoS aware hosts\". \"server\" can also\n \u003e be understood as \"instance\"\n\ncorrect.\n\n \u003e \n \u003e Having said that, I see two potential implications:\n \u003e \n \u003e 1) Instances running in a \"QoS aware host\" only have \"QoS aware\n \u003e ports\". Is this what we are saying here?\n \u003e \n\nYes. This is a limitation that can be removed if we go with the second option based on traits below.\n\n \u003e 2) For the \"non QoS aware hosts\", Neutron doesn\u0027t need to create\n \u003e the bandwidth RPs\n\nDoesn\u0027t need to but it does not create any problem either if Neutron always creates the RPs.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"* Separating compute hosts via host aggregates. The deployer can create two"},{"line_number":297,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":298,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":299,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":300,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":301,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":302,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a93ca9bf","line":299,"range":{"start_line":296,"start_character":2,"end_line":299,"end_character":79},"in_reply_to":"df7087c5_ed453bb5","updated":"2018-03-19 16:54:32.000000000","message":"\u003e Am I correct in understanding this is sort of like the routed\n \u003e networks solution?\n \u003e \n \u003e https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html\n\nAs far as I understand the solution is basically the same.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"* Separating compute hosts via host aggregates. The deployer can create two"},{"line_number":297,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":298,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":299,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":300,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":301,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":302,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_762529ab","line":299,"range":{"start_line":296,"start_character":2,"end_line":299,"end_character":79},"in_reply_to":"df7087c5_ed453bb5","updated":"2018-03-18 00:45:55.000000000","message":"if I am understanding this correctly, I suggest calling the two sets \"QoS aware hosts\" and \"non QoS aware hosts\". \"server\" can also be understood as \"instance\"\n\nHaving said that, I see two potential implications:\n\n1) Instances running in a \"QoS aware host\" only have \"QoS aware ports\". Is this what we are saying here?\n\n2) For the \"non QoS aware hosts\", Neutron doesn\u0027t need to create the bandwidth RPs","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":324,"context_line":"-----------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"},{"line_number":327,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":328,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":331,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_366571e2","line":328,"range":{"start_line":327,"start_character":26,"end_line":328,"end_character":30},"updated":"2018-03-18 00:45:55.000000000","message":"It turns out that only egress minimum bandwidth rules for SR-IOV are currently supported by Neutron: https://docs.openstack.org/neutron/latest/admin/config-qos.html#supported-qos-rule-types. Should simplify the tree structure below as a consequence?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":324,"context_line":"-----------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"},{"line_number":327,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_BITS_SEC` and"},{"line_number":328,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":331,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_491aad17","line":328,"range":{"start_line":327,"start_character":26,"end_line":328,"end_character":30},"in_reply_to":"df7087c5_366571e2","updated":"2018-03-19 16:54:32.000000000","message":"I think that document only talks about the data plane enforcement support (e.g. traffic shaping). While here in this spec we talk about supporting placinging servers according to the requested and minimum available bandwidth. It think the scheduler support and the data plane enforcement support can be done independently and the scheduler support could make sense without data plane enforcement support.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":328,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":331,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"},{"line_number":332,"context_line":"which physical network a given Network RP is connected to."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Networking RP model"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0d718f0c","line":332,"range":{"start_line":331,"start_character":36,"end_line":332,"end_character":58},"updated":"2018-03-14 15:21:57.000000000","message":"Why wouldn\u0027t nested resource providers just take care of this?  Or is this something else?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"`NET_BANDWIDTH_EGRESS_BITS_SEC`."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"New traits will be defined to distinguish a network back-end agent:"},{"line_number":331,"context_line":"`NET_AGENT_SRIOV`, `NET_AGENT_OVS`. Also new traits will be used to indicate"},{"line_number":332,"context_line":"which physical network a given Network RP is connected to."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Networking RP model"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_89d9a5f5","line":332,"range":{"start_line":331,"start_character":36,"end_line":332,"end_character":58},"in_reply_to":"df7087c5_0d718f0c","updated":"2018-03-19 16:54:32.000000000","message":"The bandwidth we are modelling is the bandwidth of the interface that connect the given server to a specific physical network. So requesting bandwidth is basically requesting bandwidth _towards a specific network_. Therefore a neutron port needs to specify which physical network its bandwidth is coming from. This means that the network RPs also need specify which physical network they providing bandwidth for.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":386,"context_line":"well to allow using a single numbered resource group to model a resource"},{"line_number":387,"context_line":"request of a Neutron port and still allow to refer to the NET_AGENT_* trait."},{"line_number":388,"context_line":"Also Neutron can freely decide to use vnic types as traits instead of"},{"line_number":389,"context_line":"NET_AGENT_*. The NET_AGENT_* used here as a simplistic approch that could"},{"line_number":390,"context_line":"already work for the current use case."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Note that Placement only supports a single un-numbered resource request group"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_ed4c5bc9","line":389,"range":{"start_line":389,"start_character":10,"end_line":389,"end_character":28},"updated":"2018-03-14 15:21:57.000000000","message":"nit: formatting gets wonked up by the use of * for italics.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":386,"context_line":"well to allow using a single numbered resource group to model a resource"},{"line_number":387,"context_line":"request of a Neutron port and still allow to refer to the NET_AGENT_* trait."},{"line_number":388,"context_line":"Also Neutron can freely decide to use vnic types as traits instead of"},{"line_number":389,"context_line":"NET_AGENT_*. The NET_AGENT_* used here as a simplistic approch that could"},{"line_number":390,"context_line":"already work for the current use case."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Note that Placement only supports a single un-numbered resource request group"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_8b67f4e9","line":389,"range":{"start_line":389,"start_character":10,"end_line":389,"end_character":28},"in_reply_to":"df7087c5_ed4c5bc9","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        \"name\": \"\","},{"line_number":416,"context_line":"        ..."},{"line_number":417,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":418,"context_line":"        \"resource_request\": {"},{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_4d0c6740","line":418,"updated":"2018-03-14 15:21:57.000000000","message":"Note to self, this is potentially going to get hairy in the future since neutron doesn\u0027t use microversions so they could change the format of this dictionary without us knowing, or opting into it. Hopefully any changes they\u0027d made would be backward compatible, i.e. don\u0027t remove any keys and only make additive changes to the dict.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        \"name\": \"\","},{"line_number":416,"context_line":"        ..."},{"line_number":417,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":418,"context_line":"        \"resource_request\": {"},{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_567ca571","line":418,"in_reply_to":"df7087c5_4d0c6740","updated":"2018-03-18 00:45:55.000000000","message":"Neutron is adding this dictionary to support this spec and any future work that may derive from it. In other words, we are adding this attribute to support Nova. We will not change it without talking to the Nova team. In any case, I will make sure that in the corresponding Neutron code we document very clearly the rules outlined by Matt in regards to changes to this attribute","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":418,"context_line":"        \"resource_request\": {"},{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":422,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":423,"context_line":"    }}"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_16962d96","line":420,"updated":"2018-03-18 00:45:55.000000000","message":"Please see comment to L328","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"device_id\": \"5e3898d7-11be-483e-9732-b2f5eccd2b2e\","},{"line_number":418,"context_line":"        \"resource_request\": {"},{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":422,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":423,"context_line":"    }}"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0994b5e7","line":420,"in_reply_to":"df7087c5_16962d96","updated":"2018-03-19 16:54:32.000000000","message":"see my answer there.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":422,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":423,"context_line":"    }}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_ad1bc37e","line":422,"range":{"start_line":422,"start_character":25,"end_line":422,"end_character":56},"updated":"2018-03-14 15:21:57.000000000","message":"nit: these would be strings since they are traits right?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":422,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":423,"context_line":"    }}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_2b6028cf","line":422,"range":{"start_line":422,"start_character":25,"end_line":422,"end_character":56},"in_reply_to":"df7087c5_2999791e","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            \"resources\": {"},{"line_number":420,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":421,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":422,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":423,"context_line":"    }}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_2999791e","line":422,"range":{"start_line":422,"start_character":25,"end_line":422,"end_character":56},"in_reply_to":"df7087c5_ad1bc37e","updated":"2018-03-19 16:54:32.000000000","message":"Right. I will fix it.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    \"resource_request\": {"},{"line_number":453,"context_line":"        \"resources1\": {\"BW\": 2,"},{"line_number":454,"context_line":"                       \"VF: 1},"},{"line_number":455,"context_line":"        \"required1\": [CUSTOM_PHYSNET_1, SRIOV],"},{"line_number":456,"context_line":"        \"resources2\": {\"BW\": 2},"},{"line_number":457,"context_line":"        \"required2\": [CUSTOM_PHYSNET_1, TOR]"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_28148143","line":454,"range":{"start_line":454,"start_character":23,"end_line":454,"end_character":26},"updated":"2018-03-14 15:21:57.000000000","message":"\"VF\"","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    \"resource_request\": {"},{"line_number":453,"context_line":"        \"resources1\": {\"BW\": 2,"},{"line_number":454,"context_line":"                       \"VF: 1},"},{"line_number":455,"context_line":"        \"required1\": [CUSTOM_PHYSNET_1, SRIOV],"},{"line_number":456,"context_line":"        \"resources2\": {\"BW\": 2},"},{"line_number":457,"context_line":"        \"required2\": [CUSTOM_PHYSNET_1, TOR]"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0ba1a4f8","line":454,"range":{"start_line":454,"start_character":23,"end_line":454,"end_character":26},"in_reply_to":"df7087c5_28148143","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    \"resource_request\": {"},{"line_number":453,"context_line":"        \"resources1\": {\"BW\": 2,"},{"line_number":454,"context_line":"                       \"VF: 1},"},{"line_number":455,"context_line":"        \"required1\": [CUSTOM_PHYSNET_1, SRIOV],"},{"line_number":456,"context_line":"        \"resources2\": {\"BW\": 2},"},{"line_number":457,"context_line":"        \"required2\": [CUSTOM_PHYSNET_1, TOR]"},{"line_number":458,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_4811b551","line":455,"range":{"start_line":455,"start_character":22,"end_line":455,"end_character":45},"updated":"2018-03-14 15:21:57.000000000","message":"nit: strings here and below","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    \"resource_request\": {"},{"line_number":453,"context_line":"        \"resources1\": {\"BW\": 2,"},{"line_number":454,"context_line":"                       \"VF: 1},"},{"line_number":455,"context_line":"        \"required1\": [CUSTOM_PHYSNET_1, SRIOV],"},{"line_number":456,"context_line":"        \"resources2\": {\"BW\": 2},"},{"line_number":457,"context_line":"        \"required2\": [CUSTOM_PHYSNET_1, TOR]"},{"line_number":458,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_cba64c10","line":455,"range":{"start_line":455,"start_character":22,"end_line":455,"end_character":45},"in_reply_to":"df7087c5_4811b551","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":475,"context_line":"REST API impact"},{"line_number":476,"context_line":"---------------"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"The Nova REST API is only impacted by a new failure scenario of the server"},{"line_number":479,"context_line":"create API. A microversion bump is needed to signal that server create call"},{"line_number":480,"context_line":"will fail if the network provided in the request body has a QoS minimum"},{"line_number":481,"context_line":"bandwidth policy rule attached."},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_483a15cc","line":481,"range":{"start_line":478,"start_character":0,"end_line":481,"end_character":31},"updated":"2018-03-14 15:21:57.000000000","message":"As noted above, I think this is unnecessary.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":475,"context_line":"REST API impact"},{"line_number":476,"context_line":"---------------"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"The Nova REST API is only impacted by a new failure scenario of the server"},{"line_number":479,"context_line":"create API. A microversion bump is needed to signal that server create call"},{"line_number":480,"context_line":"will fail if the network provided in the request body has a QoS minimum"},{"line_number":481,"context_line":"bandwidth policy rule attached."},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_497f0dab","line":481,"range":{"start_line":478,"start_character":0,"end_line":481,"end_character":31},"in_reply_to":"df7087c5_483a15cc","updated":"2018-03-19 16:54:32.000000000","message":"Let\u0027s agree above then I will update this section accordingly.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":487,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":488,"context_line":"which impact the Placement REST API."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Security impact"},{"line_number":491,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_483f75b3","line":488,"range":{"start_line":486,"start_character":0,"end_line":488,"end_character":36},"updated":"2018-03-14 15:21:57.000000000","message":"As noted above, we might need to also enforce generations in PUT /allocations/{consumer_id} if both nova and neutron are going to be writing allocations for the same consumer. It might not be a hard dependency though if we consider it a \"hardening opportunity\" later.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":487,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":488,"context_line":"which impact the Placement REST API."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Security impact"},{"line_number":491,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_b6d50146","line":488,"range":{"start_line":486,"start_character":0,"end_line":488,"end_character":36},"in_reply_to":"df7087c5_483f75b3","updated":"2018-03-18 00:45:55.000000000","message":"Based on this comment, can we assume in the Neutron side that we can proceed with the Placement APi as-is today?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":487,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":488,"context_line":"which impact the Placement REST API."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Security impact"},{"line_number":491,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_cbf40cf4","line":488,"range":{"start_line":486,"start_character":0,"end_line":488,"end_character":36},"in_reply_to":"df7087c5_a9090932","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":483,"context_line":"Neutron REST API impact is discussed in the separate"},{"line_number":484,"context_line":"`strict-minimum-bandwidth-support`_ Neutron spec."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":487,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":488,"context_line":"which impact the Placement REST API."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Security impact"},{"line_number":491,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a9090932","line":488,"range":{"start_line":486,"start_character":0,"end_line":488,"end_character":36},"in_reply_to":"df7087c5_b6d50146","updated":"2018-03-19 16:54:32.000000000","message":"@Matt: I will note the dependency. \n@Miguel: In the main case neutron will only create RPs and report inventories on those RPs. I think there you can assume that the today\u0027s placement API is sufficient. In case of supporting changing the bandwidth rule on an already bound port, or support subports with bandwidth rules neutron would need to update existing allocations. To do that safely placement need to support generation (basically atomic update) of such allocations. This still needs a new API microversion in Placement that does not exists yet.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":494,"context_line":"deployment into Placement. Deployers might want to keep this information hidden"},{"line_number":495,"context_line":"from the end user. Today Placement API is admin only so this information is"},{"line_number":496,"context_line":"hidden."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Notifications impact"},{"line_number":499,"context_line":"--------------------"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_085e5d11","line":497,"updated":"2018-03-14 15:21:57.000000000","message":"Along these same lines, would the \u0027resource_request\u0027 field in the port be admin-only like the binding:profile and other port binding information today? I would think so...but also likely out of scope for this spec since it\u0027s a neutron question.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":494,"context_line":"deployment into Placement. Deployers might want to keep this information hidden"},{"line_number":495,"context_line":"from the end user. Today Placement API is admin only so this information is"},{"line_number":496,"context_line":"hidden."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Notifications impact"},{"line_number":499,"context_line":"--------------------"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_56ca65a1","line":497,"in_reply_to":"df7087c5_085e5d11","updated":"2018-03-18 00:45:55.000000000","message":"We will keep it admin only in Neutron","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":494,"context_line":"deployment into Placement. Deployers might want to keep this information hidden"},{"line_number":495,"context_line":"from the end user. Today Placement API is admin only so this information is"},{"line_number":496,"context_line":"hidden."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"Notifications impact"},{"line_number":499,"context_line":"--------------------"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_ebd2305c","line":497,"in_reply_to":"df7087c5_56ca65a1","updated":"2018-03-22 18:41:21.000000000","message":"Noted it.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":514,"context_line":"* Nova will send more complex allocation candidate request to Placement as it"},{"line_number":515,"context_line":"  will include the port related resource request as well."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"As Placement does not seem to be a bottleneck today we does not foresee"},{"line_number":518,"context_line":"performance degradation due to the above changes."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_16c4ed91","line":517,"range":{"start_line":517,"start_character":55,"end_line":517,"end_character":63},"updated":"2018-03-18 00:45:55.000000000","message":"do not","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":514,"context_line":"* Nova will send more complex allocation candidate request to Placement as it"},{"line_number":515,"context_line":"  will include the port related resource request as well."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"As Placement does not seem to be a bottleneck today we does not foresee"},{"line_number":518,"context_line":"performance degradation due to the above changes."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_abc8b8a7","line":517,"range":{"start_line":517,"start_character":55,"end_line":517,"end_character":63},"in_reply_to":"df7087c5_16c4ed91","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":522,"context_line":""},{"line_number":523,"context_line":"This feature impacts multiple modules and creates new module dependencies."},{"line_number":524,"context_line":"The deployer needs to be aware that after this feature Neutron will depend on"},{"line_number":525,"context_line":"the Placement service."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"Also the deployer should be aware that after this feature the server create and"},{"line_number":528,"context_line":"move operations could fail due to bandwidth limits managed by Neutron."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_36c1f181","line":525,"updated":"2018-03-18 00:45:55.000000000","message":"Neutron already depends on the Placement service for Routed Networks","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":522,"context_line":""},{"line_number":523,"context_line":"This feature impacts multiple modules and creates new module dependencies."},{"line_number":524,"context_line":"The deployer needs to be aware that after this feature Neutron will depend on"},{"line_number":525,"context_line":"the Placement service."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"Also the deployer should be aware that after this feature the server create and"},{"line_number":528,"context_line":"move operations could fail due to bandwidth limits managed by Neutron."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_cb42cc0f","line":525,"in_reply_to":"df7087c5_36c1f181","updated":"2018-03-22 18:41:21.000000000","message":"Thanks for the information. I\u0027ve rephrased this sentence.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":544,"context_line":"existing instances and try to do the minimum bandwidth allocation in place."},{"line_number":545,"context_line":"This way the number of necessary migrations can be limited."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"*Question:* Can we have servers today with QoS minimum bandwidth policy rule?"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"If the answer is no then the upgrade can be made a lot simpler as we can assume"},{"line_number":550,"context_line":"that none of the bound ports in the system needs resource allocation. Therefore"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_563fc586","line":547,"updated":"2018-03-18 00:45:55.000000000","message":"Yes","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":544,"context_line":"existing instances and try to do the minimum bandwidth allocation in place."},{"line_number":545,"context_line":"This way the number of necessary migrations can be limited."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"*Question:* Can we have servers today with QoS minimum bandwidth policy rule?"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"If the answer is no then the upgrade can be made a lot simpler as we can assume"},{"line_number":550,"context_line":"that none of the bound ports in the system needs resource allocation. Therefore"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a437f0e3","line":547,"in_reply_to":"df7087c5_563fc586","updated":"2018-03-19 16:54:32.000000000","message":"In the meantime I realized that SRIOV agent implements the minimum bandwidth rule already. So technically we can have situation when bound ports with QoS minimum bandwidth rules exits during an upgrade. Does it also mean that the current SRIOV minimum bandwidth feature is something neutron officially supports and therefore cannot be broken by an upgrade?","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":544,"context_line":"existing instances and try to do the minimum bandwidth allocation in place."},{"line_number":545,"context_line":"This way the number of necessary migrations can be limited."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"*Question:* Can we have servers today with QoS minimum bandwidth policy rule?"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"If the answer is no then the upgrade can be made a lot simpler as we can assume"},{"line_number":550,"context_line":"that none of the bound ports in the system needs resource allocation. Therefore"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0b0be4d5","line":547,"in_reply_to":"df7087c5_a437f0e3","updated":"2018-03-22 18:41:21.000000000","message":"I removed the question and the paragraph below as the answer for the question makes the below paragraph invalid.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"If the answer is no then the upgrade can be made a lot simpler as we can assume"},{"line_number":550,"context_line":"that none of the bound ports in the system needs resource allocation. Therefore"},{"line_number":551,"context_line":"the deployer can simply do the upgrade and let every compute host used as"},{"line_number":552,"context_line":"host for non QoS aware port. See"},{"line_number":553,"context_line":"`Separating non QoS aware and QoS aware ports`_ how to do that. Then later on"},{"line_number":554,"context_line":"when he wants to have hosts that supports QoS aware ports then he has to make"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_b663c1b1","line":551,"range":{"start_line":551,"start_character":66,"end_line":551,"end_character":70},"updated":"2018-03-18 00:45:55.000000000","message":"be used","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":550,"context_line":"that none of the bound ports in the system needs resource allocation. Therefore"},{"line_number":551,"context_line":"the deployer can simply do the upgrade and let every compute host used as"},{"line_number":552,"context_line":"host for non QoS aware port. See"},{"line_number":553,"context_line":"`Separating non QoS aware and QoS aware ports`_ how to do that. Then later on"},{"line_number":554,"context_line":"when he wants to have hosts that supports QoS aware ports then he has to make"},{"line_number":555,"context_line":"sure that those hosts that are reconfigured for QoS aware ports doesn\u0027t have"},{"line_number":556,"context_line":"bound ports."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_d652f5de","line":553,"range":{"start_line":553,"start_character":48,"end_line":553,"end_character":51},"updated":"2018-03-18 00:45:55.000000000","message":"for how","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":552,"context_line":"host for non QoS aware port. See"},{"line_number":553,"context_line":"`Separating non QoS aware and QoS aware ports`_ how to do that. Then later on"},{"line_number":554,"context_line":"when he wants to have hosts that supports QoS aware ports then he has to make"},{"line_number":555,"context_line":"sure that those hosts that are reconfigured for QoS aware ports doesn\u0027t have"},{"line_number":556,"context_line":"bound ports."},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_1672ad7d","line":555,"range":{"start_line":555,"start_character":64,"end_line":555,"end_character":71},"updated":"2018-03-18 00:45:55.000000000","message":"don\u0027t","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c1114ddcd949c714dae325b6c3b7f7a52615f88d","unresolved":false,"context_lines":[{"line_number":581,"context_line":"  the requests in the RequestSpec object."},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"* Include the port related resources in the allocation candidate request in"},{"line_number":584,"context_line":"  nova-scheduler and nova-conductor and claim port related resources based"},{"line_number":585,"context_line":"  on a selected candidate."},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"* During port detach Nova needs to delete the port related allocations from"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_c80b85d3","line":584,"range":{"start_line":584,"start_character":17,"end_line":584,"end_character":35},"updated":"2018-03-14 15:21:57.000000000","message":"I assume conductor is listed here for the forced host evacuate and live migrate scenarios I mentioned above.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d47b4fd58da5091a1d0cdea2e362dc3a0993af4a","unresolved":false,"context_lines":[{"line_number":581,"context_line":"  the requests in the RequestSpec object."},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"* Include the port related resources in the allocation candidate request in"},{"line_number":584,"context_line":"  nova-scheduler and nova-conductor and claim port related resources based"},{"line_number":585,"context_line":"  on a selected candidate."},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"* During port detach Nova needs to delete the port related allocations from"}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_a43cd0bf","line":584,"range":{"start_line":584,"start_character":17,"end_line":584,"end_character":35},"in_reply_to":"df7087c5_c80b85d3","updated":"2018-03-19 16:54:32.000000000","message":"I did remember that conductor claim resources sometimes but I did not remember that this was the force host case.","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":606,"context_line":"Testing"},{"line_number":607,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_96031dbf","line":609,"range":{"start_line":609,"start_character":35,"end_line":609,"end_character":40},"updated":"2018-03-18 00:45:55.000000000","message":"tests","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":606,"context_line":"Testing"},{"line_number":607,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_f6685988","line":609,"range":{"start_line":609,"start_character":8,"end_line":609,"end_character":12},"updated":"2018-03-18 00:45:55.000000000","message":"tests","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":606,"context_line":"Testing"},{"line_number":607,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_0b344492","line":609,"range":{"start_line":609,"start_character":35,"end_line":609,"end_character":40},"in_reply_to":"df7087c5_96031dbf","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":606,"context_line":"Testing"},{"line_number":607,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_8b1ff406","line":609,"range":{"start_line":609,"start_character":8,"end_line":609,"end_character":12},"in_reply_to":"df7087c5_f6685988","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"dc7d49c5cd92f094339f9c52ddb46ed649dbb8cb","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."},{"line_number":613,"context_line":""},{"line_number":614,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_b608a1d9","line":611,"range":{"start_line":611,"start_character":17,"end_line":611,"end_character":22},"updated":"2018-03-18 00:45:55.000000000","message":"work","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"Tempest test as well as functional test will be added to ensure that server"},{"line_number":610,"context_line":"create operation, server move operations, shelve_offload and unshelve and"},{"line_number":611,"context_line":"interface detach works with QoS aware ports and the resource allocation is"},{"line_number":612,"context_line":"correct."},{"line_number":613,"context_line":""},{"line_number":614,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"df7087c5_2b18281c","line":611,"range":{"start_line":611,"start_character":17,"end_line":611,"end_character":22},"in_reply_to":"df7087c5_b608a1d9","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"6550dcda755c345c23b78f6fae96228d8df5c433"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"8066e284a24921feced7bf7c65f34c2a7fa2b38d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":107,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":108,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":109,"context_line":"resource and required traits from and different ports (i.e. one OVS and one"},{"line_number":110,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":111,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_8e6cfd36","line":109,"range":{"start_line":109,"start_character":34,"end_line":109,"end_character":37},"updated":"2018-03-21 23:56:13.000000000","message":"extra word? or did you mean \"from and to\"?","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":106,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":107,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":108,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":109,"context_line":"resource and required traits from and different ports (i.e. one OVS and one"},{"line_number":110,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":111,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_4bea3cd8","line":109,"range":{"start_line":109,"start_character":34,"end_line":109,"end_character":37},"in_reply_to":"df7087c5_171d5d72","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"954c3da5ee871eb090580920b390e71d5a7bad59","unresolved":false,"context_lines":[{"line_number":106,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":107,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":108,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":109,"context_line":"resource and required traits from and different ports (i.e. one OVS and one"},{"line_number":110,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":111,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_171d5d72","line":109,"range":{"start_line":109,"start_character":34,"end_line":109,"end_character":37},"in_reply_to":"df7087c5_8e6cfd36","updated":"2018-03-22 08:04:39.000000000","message":"s/and//","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1a3221ced6b79f684f9d2385566c23223296bd8c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":299,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":300,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":301,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":302,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":303,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"},{"line_number":304,"context_line":"  this configurability via neutron.conf. Then Neutron can add"},{"line_number":305,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` trait in resource request of the port that is QoS"},{"line_number":306,"context_line":"  aware and add `CUSTOM_BEST_EFFORT_BW_ONLY` trait otherwise. This solution"},{"line_number":307,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":308,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":309,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":310,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":311,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":312,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":313,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":314,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":315,"context_line":"  the conductor."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_5e5db776","line":315,"range":{"start_line":301,"start_character":0,"end_line":315,"end_character":16},"updated":"2018-03-19 15:04:44.000000000","message":"If we use *_ONLY traits then we can never combine them, though that would be desirable. For example it makes perfect sense to guarantee 5 gigabits of a 10 gigabit card to somebody and let the rest to be used on a best effort basis. To allow this we only need to turn the logic around and use traits CUSTOM_GUARANTEED_BW and CUSTOM_BEST_EFFORT_BW.\n\nIf the admin still wants to keep guaranteed and best effort traffic fully separated then s/he never puts both traits on the same rp. But one can mix them if one wants to. Even the possible starvation of best effort traffic (next to guaranteed traffix) could be easily addressed by a minimal inventory reservation.\n\nAlso given that we are standardizing these traits here, we could drop the CUSTOM_ prefix.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":298,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":299,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":300,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":301,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":302,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":303,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"},{"line_number":304,"context_line":"  this configurability via neutron.conf. Then Neutron can add"},{"line_number":305,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` trait in resource request of the port that is QoS"},{"line_number":306,"context_line":"  aware and add `CUSTOM_BEST_EFFORT_BW_ONLY` trait otherwise. This solution"},{"line_number":307,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":308,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":309,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":310,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":311,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":312,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":313,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":314,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":315,"context_line":"  the conductor."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_8ba05492","line":315,"range":{"start_line":301,"start_character":0,"end_line":315,"end_character":16},"in_reply_to":"df7087c5_451efb70","updated":"2018-03-22 18:41:21.000000000","message":"Added your advanced use case for future improvement possibility. I kept the CUSTOM prefix as I was lazy to think about a proper standard name for these traits as they will not be implemented in the first iteration.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6ab60537fb1676a153bbf3030a390a97d8d3f1c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"  host aggregates in Nova, one for QoS aware server and another for non QoS"},{"line_number":299,"context_line":"  aware servers. This separation can be done without changing either Nova or"},{"line_number":300,"context_line":"  Neutron. This is the proposed solution for the first version of this feature."},{"line_number":301,"context_line":"* Separating physical ports via traits. The Neutron agent can put traits, like"},{"line_number":302,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` and `CUSTOM_BEST_EFFORT_BW_ONLY` to the network"},{"line_number":303,"context_line":"  RPs to indicate which physical port belongs to which group. Neutron can offer"},{"line_number":304,"context_line":"  this configurability via neutron.conf. Then Neutron can add"},{"line_number":305,"context_line":"  `CUSTOM_GUARANTEED_BW_ONLY` trait in resource request of the port that is QoS"},{"line_number":306,"context_line":"  aware and add `CUSTOM_BEST_EFFORT_BW_ONLY` trait otherwise. This solution"},{"line_number":307,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":308,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":309,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":310,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":311,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":312,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":313,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":314,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":315,"context_line":"  the conductor."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_451efb70","line":315,"range":{"start_line":301,"start_character":0,"end_line":315,"end_character":16},"in_reply_to":"df7087c5_5e5db776","updated":"2018-03-20 10:27:32.000000000","message":"\u003e If we use *_ONLY traits then we can never combine them, though that\n \u003e would be desirable. For example it makes perfect sense to guarantee\n \u003e 5 gigabits of a 10 gigabit card to somebody and let the rest to be\n \u003e used on a best effort basis. To allow this we only need to turn the\n \u003e logic around and use traits CUSTOM_GUARANTEED_BW and\n \u003e CUSTOM_BEST_EFFORT_BW.\n \u003e \n \u003e If the admin still wants to keep guaranteed and best effort traffic\n \u003e fully separated then s/he never puts both traits on the same rp.\n \u003e But one can mix them if one wants to. Even the possible starvation\n \u003e of best effort traffic (next to guaranteed traffix) could be easily\n \u003e addressed by a minimal inventory reservation.\n \u003e \n\nThis is a pretty advanced use case that requires data plane enforcement to work. This specs aims for the first alternative based on nova host aggregates right now. But kept this second alternative for further reference as possible improvement. I will use your suggestion to improve the second option.\n\n \u003e Also given that we are standardizing these traits here, we could\n \u003e drop the CUSTOM_ prefix.\n\nSure.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1a3221ced6b79f684f9d2385566c23223296bd8c","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                 |"},{"line_number":370,"context_line":"                 |"},{"line_number":371,"context_line":"                 +------ Network RP"},{"line_number":372,"context_line":"                 |         traits: CUSTOM_PHYSNET_2, NET_AGENT_SRIOV"},{"line_number":373,"context_line":"                 |         inventory: {VF: 8, # VF resource is out of scope"},{"line_number":374,"context_line":"                 |                     NET_BANDWIDTH_INGRESS_BITS_SEC: 10000,"},{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_bba95391","line":372,"range":{"start_line":372,"start_character":53,"end_line":372,"end_character":68},"updated":"2018-03-19 15:04:44.000000000","message":"IMO it\u0027s up to Neutron (port binding) to decide which backend to use for a port. Placement should not pre-decide which backend to use. Or even know about which backends are supported. Placement should only know about their public (what\u0027s controllable through Neutron API) capabilities. Like which vnic_types are supported: VNIC_TYPE_DIRECT, VNIC_TYPE_FOO, etc.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                 |"},{"line_number":370,"context_line":"                 |"},{"line_number":371,"context_line":"                 +------ Network RP"},{"line_number":372,"context_line":"                 |         traits: CUSTOM_PHYSNET_2, NET_AGENT_SRIOV"},{"line_number":373,"context_line":"                 |         inventory: {VF: 8, # VF resource is out of scope"},{"line_number":374,"context_line":"                 |                     NET_BANDWIDTH_INGRESS_BITS_SEC: 10000,"},{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_cb0f2c86","line":372,"range":{"start_line":372,"start_character":53,"end_line":372,"end_character":68},"in_reply_to":"df7087c5_4003490e","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6ab60537fb1676a153bbf3030a390a97d8d3f1c","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                 |"},{"line_number":370,"context_line":"                 |"},{"line_number":371,"context_line":"                 +------ Network RP"},{"line_number":372,"context_line":"                 |         traits: CUSTOM_PHYSNET_2, NET_AGENT_SRIOV"},{"line_number":373,"context_line":"                 |         inventory: {VF: 8, # VF resource is out of scope"},{"line_number":374,"context_line":"                 |                     NET_BANDWIDTH_INGRESS_BITS_SEC: 10000,"},{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_4003490e","line":372,"range":{"start_line":372,"start_character":53,"end_line":372,"end_character":68},"in_reply_to":"df7087c5_bba95391","updated":"2018-03-20 10:27:32.000000000","message":"Good catch! I did not realized that. Sean originally suggested to use the vnic type here and now I see the reason why. As vnic_type is part of the neutron public API we should use that as traits on Network RPs to express what vnic_type the given RP can support (and that will eventually select the neutron backend as well).","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"24c6bf6fa75c3f9ee21acd937e946ff0219c3a36","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":376,"context_line":"                 |"},{"line_number":377,"context_line":"                 +------+Network RP"},{"line_number":378,"context_line":"                           traits: CUSTOM_PHYSNET_3, NET_AGENT_SRIOV"},{"line_number":379,"context_line":"                           inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC:100000,"},{"line_number":380,"context_line":"                                       NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_bd0a471d","line":378,"range":{"start_line":378,"start_character":35,"end_line":378,"end_character":51},"updated":"2018-03-22 14:11:02.000000000","message":"According to https://docs.openstack.org/ocata/networking-guide/config-sriov.html#enable-neutron-sriov-agent-compute we allow sr-iov configs where a physical net is backed by multiple PFs, like:\n\n [sriov_nic]\n physical_device_mappings \u003d physnet2:eth3,physnet2:eth4\n\nThis case cannot be described by the suggested rp-tree format. We may need something more expressive like this:\n\n* Network RP 1, traits: CUSTOM_PHYSNET2, CUSTOM_PHYSNET2_ETH3, VNIC_TYPE_DIRECT\n* Network RP 2, traits: CUSTOM_PHYSNET2, CUSTOM_PHYSNET2_ETH4, VNIC_TYPE_DIRECT","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":376,"context_line":"                 |"},{"line_number":377,"context_line":"                 +------+Network RP"},{"line_number":378,"context_line":"                           traits: CUSTOM_PHYSNET_3, NET_AGENT_SRIOV"},{"line_number":379,"context_line":"                           inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC:100000,"},{"line_number":380,"context_line":"                                       NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"bf659307_bba73350","line":378,"range":{"start_line":378,"start_character":35,"end_line":378,"end_character":51},"in_reply_to":"df7087c5_4b1b1cc9","updated":"2018-03-23 17:33:01.000000000","message":"I added a bit generalized note about this case below the figure.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                 |                     NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":376,"context_line":"                 |"},{"line_number":377,"context_line":"                 +------+Network RP"},{"line_number":378,"context_line":"                           traits: CUSTOM_PHYSNET_3, NET_AGENT_SRIOV"},{"line_number":379,"context_line":"                           inventory: {NET_BANDWIDTH_INGRESS_BITS_SEC:100000,"},{"line_number":380,"context_line":"                                       NET_BANDWIDTH_EGRESS_BITS_SEC:100000}"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_4b1b1cc9","line":378,"range":{"start_line":378,"start_character":35,"end_line":378,"end_character":51},"in_reply_to":"df7087c5_bd0a471d","updated":"2018-03-22 18:41:21.000000000","message":"I have to get back to this in the next iteration as I have to sleep on this.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6ab60537fb1676a153bbf3030a390a97d8d3f1c","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            \"resources\": {"},{"line_number":425,"context_line":"                \"NET_BANDWIDTH_INGRESS_BITS_SEC\": 1000,"},{"line_number":426,"context_line":"                \"NET_BANDWIDTH_EGRESS_BITS_SEC\": 1000 },"},{"line_number":427,"context_line":"            \"required\": [CUSTOM_PHYSNET_2, NET_AGENT_OVS]}"},{"line_number":428,"context_line":"    }}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_a0110556","line":427,"range":{"start_line":427,"start_character":43,"end_line":427,"end_character":56},"updated":"2018-03-20 10:27:32.000000000","message":"this needs to be vnic_type as Bence suggested above","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab2565f9336559210934276e81e3f13943c09387","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":".. _`nested-resource-providers`: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/nested-resource-providers.html"},{"line_number":643,"context_line":".. _`granular-resource-request`: https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/granular-resource-requests.html"},{"line_number":644,"context_line":".. _`strict-minimum-bandwidth-support`: https://bugs.launchpad.net/neutron/+bug/1578989"},{"line_number":645,"context_line":".. _`request-filter`: https://blueprints.launchpad.net/nova/+spec/placement-req-filter"},{"line_number":646,"context_line":".. _`override-compute-node-uuid`: https://blueprints.launchpad.net/nova/+spec/override-compute-node-uuid"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_82ec8e8f","line":644,"updated":"2018-03-14 14:32:48.000000000","message":"This will be the spec on neutron side that will contain the neutron specific details https://review.openstack.org/#/c/508149\n\nI will add this ref in the next update.","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2d5d3a14e7b50e49e49d132a0a4da489dbece94","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":".. _`nested-resource-providers`: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/nested-resource-providers.html"},{"line_number":643,"context_line":".. _`granular-resource-request`: https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/granular-resource-requests.html"},{"line_number":644,"context_line":".. _`strict-minimum-bandwidth-support`: https://bugs.launchpad.net/neutron/+bug/1578989"},{"line_number":645,"context_line":".. _`request-filter`: https://blueprints.launchpad.net/nova/+spec/placement-req-filter"},{"line_number":646,"context_line":".. _`override-compute-node-uuid`: https://blueprints.launchpad.net/nova/+spec/override-compute-node-uuid"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"df7087c5_0b7f64e0","line":644,"in_reply_to":"df7087c5_82ec8e8f","updated":"2018-03-22 18:41:21.000000000","message":"Done","commit_id":"95a5884be69f339d943e7c65b65b7b29627d3ac3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":110,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":111,"context_line":"resource requests besides the compute related resource requests.The requested"},{"line_number":112,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":113,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":114,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_0e951b87","line":111,"updated":"2018-03-23 16:36:52.000000000","message":"nit: missing space","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"The nova-scheduler uses this information from the RequestSpec to send an"},{"line_number":110,"context_line":"allocation candidate request to Placement that contains the port related"},{"line_number":111,"context_line":"resource requests besides the compute related resource requests.The requested"},{"line_number":112,"context_line":"resources and required traits from each port will be considered to be"},{"line_number":113,"context_line":"restricted to a single RP with a separate, numbered request group as defined in"},{"line_number":114,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_dec45595","line":111,"in_reply_to":"df7087c5_0e951b87","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":115,"context_line":"resource and required traits from different ports (i.e. one OVS and one"},{"line_number":116,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":117,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":120,"context_line":"modified to use the newly introduced network_resource_request from the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_b98d5b7d","line":117,"updated":"2018-03-23 16:36:52.000000000","message":"Alternatively we could extend and use the requested_networks (NetworkRequestList ovo) parameter of the build_instance code path to store and communicate the resource needs coming from the neutron ports. Then the select_destinations() scheduler rpc call needs to be extended with a new parameter holding a NetworkRequestList.","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":114,"context_line":"the `granular-resource-request`_ spec. This is necessary as mixing requested"},{"line_number":115,"context_line":"resource and required traits from different ports (i.e. one OVS and one"},{"line_number":116,"context_line":"SRIOV) towards placement will cause empty allocation candidate response as no"},{"line_number":117,"context_line":"RP will have both OVS and SRIOV traits at the same time."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":120,"context_line":"modified to use the newly introduced network_resource_request from the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_9e6c9d9d","line":117,"in_reply_to":"df7087c5_b98d5b7d","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":126,"context_line":"functionality supports."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Then Placement returns allocation candidates. After additional filtering in the"},{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_4ecd53b5","line":128,"updated":"2018-03-23 16:36:52.000000000","message":"and weighing","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":126,"context_line":"functionality supports."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Then Placement returns allocation candidates. After additional filtering in the"},{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_3e131110","line":128,"in_reply_to":"df7087c5_4ecd53b5","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":126,"context_line":"functionality supports."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Then Placement returns allocation candidates. After additional filtering in the"},{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_4e79cef9","line":130,"range":{"start_line":128,"start_character":46,"end_line":130,"end_character":34},"updated":"2018-03-23 16:36:52.000000000","message":"Neutron today selects the networking backend of a port during port binding by asking every backend available on the given compute host to try to bind the port. Neutron does this in the order of the mechanism drivers listed in ml2/mechanism_drivers config options. The first mechanism_driver that returns positive response will be selected. \n\nThis spec proposes to select the resource provider of the bandwidth resource with Placement + Nova. Placement will provide candidates, and then the filter scheduler in Nova will  select one specific candidate and claim the resources of that candidate. This resource claim will determine the backend selection. This means that Neutron cannot select the backend during port bind as that selection is predetermined by the filter scheduler. \n\nAs the order of the backend selection today is configurable via Neutron\u0027s ml2.conf, deployers might depend on this behavior. To allow the deployers to still influence the backend selection, after the current spec is implemented, a new Nova weigher needs to be introduced in the filter scheduler. This NeutronBackendWeigher does not want to specify order between hosts, instead it wants to specify order between allocation candidates targeting the same compute host. This weigher will get the preferred backend order from a new nova.conf option. The deployer has to make sure that the order of the backends are the same both in the Nova and in the Neutron config. To be able to implement this weigher the filter scheduler needs to be changed to support filtering and weighing allocation candidates instead of only filtering and weighing host states. \n\nNova implements a scheduling retry mechanism by asking the scheduler to generate a list of alternate hosts for a given select_destination request. If we want to fully simulate the Neutron backend selection mechanism then the Nova retry mechanism needs to consider not just alternate hosts but alternate allocation candidates (might targeting the same compute host) during re-schedule. \n\nThe chance scheduler uses placement so the overall bandwidth feature  can be supported with chance scheduler but this specific backend ordering cannot be supported as the chance scheduler does not support weighing.","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":126,"context_line":"functionality supports."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Then Placement returns allocation candidates. After additional filtering in the"},{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_1eaacd84","line":130,"range":{"start_line":128,"start_character":46,"end_line":130,"end_character":34},"in_reply_to":"df7087c5_4e79cef9","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":134,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":135,"context_line":"allocation is the sum of the resource amount each individual port requests."}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_eed0e7f9","line":132,"updated":"2018-03-23 16:36:52.000000000","message":"Neutron must ensure that the resources allocated in Placement for a port are the same resources that is consumed by that port from the physical infrastructure. To be able to do that Neutron needs to know the mapping between a port\u0027s resource request and a specific RP (or RPs) in the allocation record of the server.\n\nThere are multiple ways to achieve this:\n* During the binding of a port Nova sets the instance_uuid as the device_id of the port. Neutron can used this device_id to query the allocation record of the server from Placement. Then Neutron needs to figure out what parts of the overall allocation maps to the port being bound.\n* Nova selects the allocation candidate and figures out how to map parts of the resulting allocation to a given port. Then Nova communicates this information via the port binding Neutron API call.\n* Placement is extended to return the allocation candidates in a way that it contains the mapping between a granular resource request group from the request to the subset of the allocation in each returned allocation candidate. Then Nova needs to communicate those allocation subsets to Neutron which are related to each port in the request.\n\nIf Nova needs to communicate information via the port binding Neutron call then the necessary allocation data needs to be passed down to the nova-compute service as the port binding happens there. The raw allocation data is provided by the scheduler via the allocation_request field of the returned Selection object.\n\nBoth the request_spec and the requested_networks parameter of the build_instance code path are a viable option to transfer this data as both reaches the compute manager. The requested_networks parameter seems better as it also passed down to _build_networks_for_instance() call that will eventually leads to the port update in Neutron.\n\nFiguring out the mapping between the port\u0027s resource request and a subset of the allocation that fulfills it is doable outside of Placement but it could be pretty ugly. \nAlso to be able to calculate this mapping, information from every port\u0027s resource request needs to be available for the algorithm. Therefore Neutron cannot do this calculation at port binding time as ports are bound one by one.","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"nova-scheduler, the scheduler claims the resources in the selected candidate in"},{"line_number":130,"context_line":"a single transaction in Placement. The consumer_id of the created allocations"},{"line_number":131,"context_line":"is the instance_uuid. See `The consumer of the port related resources`_."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":134,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":135,"context_line":"allocation is the sum of the resource amount each individual port requests."}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_1e340d4a","line":132,"in_reply_to":"df7087c5_eed0e7f9","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d496bc177a69d90158b25808a983b7ebef89e8d3","unresolved":false,"context_lines":[{"line_number":374,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"New traits will be defined to distinguish a network back-end technologies:"},{"line_number":377,"context_line":"`NET_VNIC_TYPE_VIRTIO`, `NET_VNIC_TYPE_DIRECT`, `NET_VNIC_TYPE_MACVTAP`. Also"},{"line_number":378,"context_line":"new custom traits will be used to indicate which physical network a given"},{"line_number":379,"context_line":"Network RP is connected to."},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_65a95b7a","line":377,"range":{"start_line":377,"start_character":1,"end_line":377,"end_character":21},"updated":"2018-03-23 10:14:23.000000000","message":"NET_VNIC_NORMAL \nalso refer to the neutron api ref instead of listing random vnic_types here","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":374,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"New traits will be defined to distinguish a network back-end technologies:"},{"line_number":377,"context_line":"`NET_VNIC_TYPE_VIRTIO`, `NET_VNIC_TYPE_DIRECT`, `NET_VNIC_TYPE_MACVTAP`. Also"},{"line_number":378,"context_line":"new custom traits will be used to indicate which physical network a given"},{"line_number":379,"context_line":"Network RP is connected to."},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_de3d352d","line":377,"range":{"start_line":377,"start_character":1,"end_line":377,"end_character":21},"in_reply_to":"df7087c5_65a95b7a","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"dbb6ba30f3d8c30103abf3be227981191b8f0a2e","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   |"},{"line_number":398,"context_line":"   |"},{"line_number":399,"context_line":"   +-------+Network agent RP"},{"line_number":400,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":401,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":402,"context_line":"   |             +"},{"line_number":403,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_65515bd9","line":400,"range":{"start_line":400,"start_character":14,"end_line":400,"end_character":35},"updated":"2018-03-28 08:15:04.000000000","message":"After switching to vnic_type based traits I don\u0027t see the use of this anymore.","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"7cfc60dd2eef817f0bf7785f672080078744ae2b","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   |"},{"line_number":398,"context_line":"   |"},{"line_number":399,"context_line":"   +-------+Network agent RP"},{"line_number":400,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":401,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":402,"context_line":"   |             +"},{"line_number":403,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_48d6e051","line":400,"range":{"start_line":400,"start_character":14,"end_line":400,"end_character":35},"in_reply_to":"df7087c5_65515bd9","updated":"2018-03-28 09:15:52.000000000","message":"Ehh, please ignore. (Accidentally posted draft comment from the past.)","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d496bc177a69d90158b25808a983b7ebef89e8d3","unresolved":false,"context_lines":[{"line_number":403,"context_line":"   |             |"},{"line_number":404,"context_line":"   |             |"},{"line_number":405,"context_line":"   |             +------+Network RP"},{"line_number":406,"context_line":"   |             |         traits: CUSTOM_PHYSNET_1, NET_VNIC_TYPE_VIRTIO"},{"line_number":407,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_KBPS: 1000000,"},{"line_number":408,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_KBPS: 1000000}"},{"line_number":409,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_e50b2bd2","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":73},"updated":"2018-03-23 10:14:23.000000000","message":"there is no such thing that virtio vnic_type, I guess this should be NET_VNIC_TYPE_NORMAL based on the API ref [1].\n\n\n[1] https://developer.openstack.org/api-ref/network/v2/#ports","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":403,"context_line":"   |             |"},{"line_number":404,"context_line":"   |             |"},{"line_number":405,"context_line":"   |             +------+Network RP"},{"line_number":406,"context_line":"   |             |         traits: CUSTOM_PHYSNET_1, NET_VNIC_TYPE_VIRTIO"},{"line_number":407,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_KBPS: 1000000,"},{"line_number":408,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_KBPS: 1000000}"},{"line_number":409,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_7ef4295c","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":73},"in_reply_to":"df7087c5_91b4eb37","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":403,"context_line":"   |             |"},{"line_number":404,"context_line":"   |             |"},{"line_number":405,"context_line":"   |             +------+Network RP"},{"line_number":406,"context_line":"   |             |         traits: CUSTOM_PHYSNET_1, NET_VNIC_TYPE_VIRTIO"},{"line_number":407,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_KBPS: 1000000,"},{"line_number":408,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_KBPS: 1000000}"},{"line_number":409,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_fe3a7932","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":73},"in_reply_to":"df7087c5_e50b2bd2","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db30f9851fcfab626e3dfa428b25b585cdb4af3f","unresolved":false,"context_lines":[{"line_number":403,"context_line":"   |             |"},{"line_number":404,"context_line":"   |             |"},{"line_number":405,"context_line":"   |             +------+Network RP"},{"line_number":406,"context_line":"   |             |         traits: CUSTOM_PHYSNET_1, NET_VNIC_TYPE_VIRTIO"},{"line_number":407,"context_line":"   |             |         inventory: {NET_BANDWIDTH_INGRESS_KBPS: 1000000,"},{"line_number":408,"context_line":"   |             |                     NET_BANDWIDTH_EGRESS_KBPS: 1000000}"},{"line_number":409,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_91b4eb37","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":73},"in_reply_to":"df7087c5_e50b2bd2","updated":"2018-03-23 16:36:52.000000000","message":"To make the above NeutronBackEndWeigher work we need to but back the backend specific trait (i.e. NET_AGENT_OVS) here as that weigher will do the ordering between backends.","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d496bc177a69d90158b25808a983b7ebef89e8d3","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            \"resources\": {"},{"line_number":474,"context_line":"                \"NET_BANDWIDTH_INGRESS_KBPS\": 1000,"},{"line_number":475,"context_line":"                \"NET_BANDWIDTH_EGRESS_KBPS\": 1000 },"},{"line_number":476,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\", \"NET_VNIC_TYPE_VIRTIO\"]}"},{"line_number":477,"context_line":"    }}"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_45a777be","line":476,"range":{"start_line":476,"start_character":46,"end_line":476,"end_character":66},"updated":"2018-03-23 10:14:23.000000000","message":"NET_VNIC_TYPE_NORMAL","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f36cfb55a129ab988f7153f93febb4331d216cd","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            \"resources\": {"},{"line_number":474,"context_line":"                \"NET_BANDWIDTH_INGRESS_KBPS\": 1000,"},{"line_number":475,"context_line":"                \"NET_BANDWIDTH_EGRESS_KBPS\": 1000 },"},{"line_number":476,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\", \"NET_VNIC_TYPE_VIRTIO\"]}"},{"line_number":477,"context_line":"    }}"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf659307_3eeeb188","line":476,"range":{"start_line":476,"start_character":46,"end_line":476,"end_character":66},"in_reply_to":"df7087c5_45a777be","updated":"2018-03-23 17:33:01.000000000","message":"Done","commit_id":"782c3e7e5bc23e26ca3819878796856cf1844c9c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":101,"context_line":"generic call that not just generates PCI requests but also collects the"},{"line_number":102,"context_line":"requested resources from the Neutron ports."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The nova-api stores the requested resources and required traits in new field of"},{"line_number":105,"context_line":"the RequestSpec object called network_resource_request. The new"},{"line_number":106,"context_line":"network_resource_request field should not be persisted in the api database as"},{"line_number":107,"context_line":"it is computed data based on the resource requests from the Neutron ports and"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_ea35bef8","line":104,"range":{"start_line":104,"start_character":64,"end_line":104,"end_character":70},"updated":"2018-03-25 19:39:00.000000000","message":"in a new","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":101,"context_line":"generic call that not just generates PCI requests but also collects the"},{"line_number":102,"context_line":"requested resources from the Neutron ports."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"The nova-api stores the requested resources and required traits in new field of"},{"line_number":105,"context_line":"the RequestSpec object called network_resource_request. The new"},{"line_number":106,"context_line":"network_resource_request field should not be persisted in the api database as"},{"line_number":107,"context_line":"it is computed data based on the resource requests from the Neutron ports and"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_aabb1870","line":104,"range":{"start_line":104,"start_character":64,"end_line":104,"end_character":70},"in_reply_to":"bf659307_ea35bef8","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":127,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":128,"context_line":"modified to use the newly introduced network_resource_request from the"},{"line_number":129,"context_line":"RequestSpec object similarly to how this call includes resource from the flavor"},{"line_number":130,"context_line":"fields and from the flavor extra_spec."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Later on the resource request in the Neutron port API can be evolved to support"},{"line_number":133,"context_line":"the same level of granularity than the Nova flavor resource override"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_011ef00b","line":130,"updated":"2018-03-23 18:05:13.000000000","message":"++","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Then Placement returns allocation candidates. After additional filtering and"},{"line_number":137,"context_line":"weighing in the nova-scheduler, the scheduler claims the resources in the"},{"line_number":138,"context_line":"selected candidate in a single transaction in Placement. The consumer_id of the"},{"line_number":139,"context_line":"created allocations is the instance_uuid. See `The consumer of the port related"},{"line_number":140,"context_line":"resources`_."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e1e5fc0b","line":139,"range":{"start_line":138,"start_character":56,"end_line":139,"end_character":40},"updated":"2018-03-23 18:05:13.000000000","message":"yup, ++","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":143,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":144,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":147,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_61bb2ce5","line":144,"range":{"start_line":144,"start_character":38,"end_line":144,"end_character":44},"updated":"2018-03-23 18:05:13.000000000","message":"amounts of","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":143,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":144,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":147,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_a1c86474","line":144,"range":{"start_line":144,"start_character":73,"end_line":144,"end_character":74},"updated":"2018-03-23 18:05:13.000000000","message":"request","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"When multiple ports, having QoS policy rules towards the same physical network,"},{"line_number":143,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":144,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Server create with networks having QoS policy rule - out of scope"},{"line_number":147,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_4a77dcd5","line":144,"range":{"start_line":144,"start_character":73,"end_line":144,"end_character":74},"in_reply_to":"bf659307_a1c86474","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Nova schedules the server without considering any port related resource"},{"line_number":150,"context_line":"request, then on the compute host Nova will create a port in the requested"},{"line_number":151,"context_line":"network. As the port inherits the QoS policy from the network, the created port"},{"line_number":152,"context_line":"will have resource request attached to it. Because the resource request will"},{"line_number":153,"context_line":"only be available to Nova after the scheduling decision was made, this"},{"line_number":154,"context_line":"information cannot be used in such decision."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_650f9f2e","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":26},"updated":"2018-03-25 19:39:00.000000000","message":"will have a/the resource request","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Nova schedules the server without considering any port related resource"},{"line_number":150,"context_line":"request, then on the compute host Nova will create a port in the requested"},{"line_number":151,"context_line":"network. As the port inherits the QoS policy from the network, the created port"},{"line_number":152,"context_line":"will have resource request attached to it. Because the resource request will"},{"line_number":153,"context_line":"only be available to Nova after the scheduling decision was made, this"},{"line_number":154,"context_line":"information cannot be used in such decision."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_4a603c02","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":26},"in_reply_to":"bf659307_650f9f2e","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":151,"context_line":"network. As the port inherits the QoS policy from the network, the created port"},{"line_number":152,"context_line":"will have resource request attached to it. Because the resource request will"},{"line_number":153,"context_line":"only be available to Nova after the scheduling decision was made, this"},{"line_number":154,"context_line":"information cannot be used in such decision."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"},{"line_number":157,"context_line":"simplicity, therefore `moving Nova port create to the conductor`_ is not a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_051ca368","line":154,"range":{"start_line":154,"start_character":30,"end_line":154,"end_character":43},"updated":"2018-03-25 19:39:00.000000000","message":"such a decision / such decisions","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"network. As the port inherits the QoS policy from the network, the created port"},{"line_number":152,"context_line":"will have resource request attached to it. Because the resource request will"},{"line_number":153,"context_line":"only be available to Nova after the scheduling decision was made, this"},{"line_number":154,"context_line":"information cannot be used in such decision."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"For now we only want to support this feature for pre-created Neutron ports for"},{"line_number":157,"context_line":"simplicity, therefore `moving Nova port create to the conductor`_ is not a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_ca31ac0d","line":154,"range":{"start_line":154,"start_character":30,"end_line":154,"end_character":43},"in_reply_to":"bf659307_051ca368","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":162,"context_line":"`debated to have a microversion bump`_ for this API behavior change. At the end"},{"line_number":163,"context_line":"I was convinced that accepting but ignoring the resource needs of a Neturon"},{"line_number":164,"context_line":"port in Nova is a bug and changing that behavior to rejecting such request"},{"line_number":165,"context_line":"is a bugfix. Therefore we does not need a microversion bump."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"After Nova moves the port create to the conductor, the bandwidth request of the"},{"line_number":168,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_852193a2","line":165,"range":{"start_line":165,"start_character":26,"end_line":165,"end_character":30},"updated":"2018-03-25 19:39:00.000000000","message":"do","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":162,"context_line":"`debated to have a microversion bump`_ for this API behavior change. At the end"},{"line_number":163,"context_line":"I was convinced that accepting but ignoring the resource needs of a Neturon"},{"line_number":164,"context_line":"port in Nova is a bug and changing that behavior to rejecting such request"},{"line_number":165,"context_line":"is a bugfix. Therefore we does not need a microversion bump."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"After Nova moves the port create to the conductor, the bandwidth request of the"},{"line_number":168,"context_line":"port can be used for the scheduling in the same way as it is proposed to be"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_8a3bb4e9","line":165,"range":{"start_line":165,"start_character":26,"end_line":165,"end_character":30},"in_reply_to":"bf659307_852193a2","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":183,"context_line":"up."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Local delete is special only in a sense that the allocation cleanup happens"},{"line_number":186,"context_line":"after the compute host is recovered. If server is purged from the database"},{"line_number":187,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":188,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":189,"context_line":"proposed feature increase the type of the resources being orphaned this way."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_6538ffd2","line":186,"range":{"start_line":186,"start_character":37,"end_line":186,"end_character":46},"updated":"2018-03-25 19:39:00.000000000","message":"If a server","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":183,"context_line":"up."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Local delete is special only in a sense that the allocation cleanup happens"},{"line_number":186,"context_line":"after the compute host is recovered. If server is purged from the database"},{"line_number":187,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":188,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":189,"context_line":"proposed feature increase the type of the resources being orphaned this way."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_2a038811","line":186,"range":{"start_line":186,"start_character":37,"end_line":186,"end_character":46},"in_reply_to":"bf659307_6538ffd2","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":186,"context_line":"after the compute host is recovered. If server is purged from the database"},{"line_number":187,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":188,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":189,"context_line":"proposed feature increase the type of the resources being orphaned this way."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"},{"line_number":192,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e193bc5b","line":189,"range":{"start_line":189,"start_character":17,"end_line":189,"end_character":25},"updated":"2018-03-23 18:05:13.000000000","message":"increases","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"after the compute host is recovered. If server is purged from the database"},{"line_number":187,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":188,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":189,"context_line":"proposed feature increase the type of the resources being orphaned this way."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Interface_attach with pre-created port having QoS policy rule - out of scope"},{"line_number":192,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_5d6564e0","line":189,"range":{"start_line":189,"start_character":17,"end_line":189,"end_character":25},"in_reply_to":"bf659307_e193bc5b","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":199,"context_line":"need to request allocation candidates from Placement"},{"line_number":200,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":201,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":202,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_45693bbc","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":18},"updated":"2018-03-25 19:39:00.000000000","message":"Does it?  We talked about adding ?in_tree\u003d to GET /a_c, which would help in this case.  What else about this is complicated?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"need to request allocation candidates from Placement"},{"line_number":200,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":201,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":202,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_3dd0b01f","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":18},"in_reply_to":"bf659307_3ea9aa7a","updated":"2018-03-27 14:32:00.000000000","message":"Explained in the spec why I think it is complex.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"need to request allocation candidates from Placement"},{"line_number":200,"context_line":"(restricted to RP tree of the compute node of the server) to find the"},{"line_number":201,"context_line":"networking RP where the port related resource allocations needs to be created."},{"line_number":202,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_3ea9aa7a","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":18},"in_reply_to":"bf659307_45693bbc","updated":"2018-03-26 11:59:41.000000000","message":"Sure, it can be done. Complex in a sense that it will mean yet another place outside of the scheduler where nova will claim resources. Also this would be a the first place outside of the scheduler where nova would call the allocation candidate API. \n\nI would like to limit the scope of the spec so that this can be finished in about 2-4 cycles ;) I\u0027m happy to jump into implement the interface attach as the next feature.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":202,"context_line":"This seems complex enough not to consider it in the current scope."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"},{"line_number":206,"context_line":"case only the nova-compute could try to patch the allocations as the port only"},{"line_number":207,"context_line":"created in the compute manager."},{"line_number":208,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_056343de","line":205,"range":{"start_line":205,"start_character":68,"end_line":205,"end_character":70},"updated":"2018-03-25 19:39:00.000000000","message":"In","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"},{"line_number":206,"context_line":"case only the nova-compute could try to patch the allocations as the port only"},{"line_number":207,"context_line":"created in the compute manager."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":210,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_85a4330a","line":207,"range":{"start_line":206,"start_character":65,"end_line":207,"end_character":8},"updated":"2018-03-25 19:39:00.000000000","message":"?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"},{"line_number":206,"context_line":"case only the nova-compute could try to patch the allocations as the port only"},{"line_number":207,"context_line":"created in the compute manager."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":210,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_5d79e42c","line":207,"range":{"start_line":206,"start_character":65,"end_line":207,"end_character":8},"in_reply_to":"bf659307_3ec20a35","updated":"2018-03-27 14:32:00.000000000","message":"Added some extra words to explain this case","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additionally a similar situation arises when a network id is passed in the"},{"line_number":205,"context_line":"interface_attach request, where that network has a QoS policy rule. At that"},{"line_number":206,"context_line":"case only the nova-compute could try to patch the allocations as the port only"},{"line_number":207,"context_line":"created in the compute manager."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":210,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_3ec20a35","line":207,"range":{"start_line":206,"start_character":65,"end_line":207,"end_character":8},"in_reply_to":"bf659307_85a4330a","updated":"2018-03-26 11:59:41.000000000","message":"When only network id is passed in in the interface_attach API call then Nova is the one that creates the neutron port in that network, similarly how it is done when server create is called with network id. This port creation happens in late in the nova-compute service. \n\nI guess I missed the an \u0027is\u0027 in that part of the sentence.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":217,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":218,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":219,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":220,"context_line":"amount the port requests from the sum and updating the allocation"},{"line_number":221,"context_line":"accordingly."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_65ab1fd6","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":10},"updated":"2018-03-25 19:39:00.000000000","message":"amount of the","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":217,"context_line":"are attached to the server (e.g. two VFs on the same PF) then the resulting"},{"line_number":218,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":219,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":220,"context_line":"amount the port requests from the sum and updating the allocation"},{"line_number":221,"context_line":"accordingly."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_fdac788d","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":10},"in_reply_to":"bf659307_65ab1fd6","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":218,"context_line":"allocation is the sum of the resource amount each individual port requests."},{"line_number":219,"context_line":"Detaching one of these ports later is possible by subtracting the resource"},{"line_number":220,"context_line":"amount the port requests from the sum and updating the allocation"},{"line_number":221,"context_line":"accordingly."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":224,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_8118c0d3","line":221,"updated":"2018-03-23 18:05:13.000000000","message":"ack.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":234,"context_line":"Nova needs to re-calculate that from the ports\u0027 data before calling the"},{"line_number":235,"context_line":"scheduler."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Move operations with force host flag (evacuate, live-migrate) does not call the"},{"line_number":238,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":239,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":240,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e5888f72","line":237,"range":{"start_line":237,"start_character":62,"end_line":237,"end_character":66},"updated":"2018-03-25 19:39:00.000000000","message":"do","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":234,"context_line":"Nova needs to re-calculate that from the ports\u0027 data before calling the"},{"line_number":235,"context_line":"scheduler."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Move operations with force host flag (evacuate, live-migrate) does not call the"},{"line_number":238,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":239,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":240,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_7db2a8e8","line":237,"range":{"start_line":237,"start_character":62,"end_line":237,"end_character":66},"in_reply_to":"bf659307_e5888f72","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":234,"context_line":"Nova needs to re-calculate that from the ports\u0027 data before calling the"},{"line_number":235,"context_line":"scheduler."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Move operations with force host flag (evacuate, live-migrate) does not call the"},{"line_number":238,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":239,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":240,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"},{"line_number":241,"context_line":"copy the allocation from source host to destination host`_ by using the"},{"line_number":242,"context_line":"destination host as the RP. This will be lot more complex as there will be"},{"line_number":243,"context_line":"more than one RP to be replaced and Nova will have a hard time to figure out"},{"line_number":244,"context_line":"what Network RP from the source host maps to what Network RP on the"},{"line_number":245,"context_line":"destination host."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Shelve_offload and unshelve"},{"line_number":248,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_6161ec39","line":245,"range":{"start_line":237,"start_character":0,"end_line":245,"end_character":17},"updated":"2018-03-23 18:05:13.000000000","message":"this is precisely why the force_host code paths are so disastrous. They bypass the scheduler and therefore bypass all of the logic of allocation candidates requests and claiming of resources in an atomic fashion. :(","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":261,"context_line":"Later Neutron would need to request allocation candidates for the port related"},{"line_number":262,"context_line":"resources. The request needs to be restricted to the compute RP tree where the"},{"line_number":263,"context_line":"server, having the port, is running. Then Neutron could patch the server\u0027s"},{"line_number":264,"context_line":"allocation with the additional bandwidth resources."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"QoS policy rule bandwidth amount change on a bound port - not impacting Nova"},{"line_number":267,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_0591039a","line":264,"updated":"2018-03-25 19:39:00.000000000","message":"ditto above - If we have GET /a_c?in_tree\u003d... does that make this easier?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":261,"context_line":"Later Neutron would need to request allocation candidates for the port related"},{"line_number":262,"context_line":"resources. The request needs to be restricted to the compute RP tree where the"},{"line_number":263,"context_line":"server, having the port, is running. Then Neutron could patch the server\u0027s"},{"line_number":264,"context_line":"allocation with the additional bandwidth resources."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"QoS policy rule bandwidth amount change on a bound port - not impacting Nova"},{"line_number":267,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_1ef386a0","line":264,"in_reply_to":"bf659307_0591039a","updated":"2018-03-26 11:59:41.000000000","message":"Sure, with that API it is most probably doable but I\u0027d like to do it in a later phase to limit the scope.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":275,"context_line":"both Nova and Neutron could update / delete the same allocation these"},{"line_number":276,"context_line":"operations could lead to race conditions. To avoid data inconsistencies this"},{"line_number":277,"context_line":"feature can only be implemented after placement enforces resource provider"},{"line_number":278,"context_line":"generations during allocation update."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"QoS aware sub port create under a bound parent port"},{"line_number":281,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_a5f7f7f5","line":278,"updated":"2018-03-25 19:39:00.000000000","message":"reference that spec (um, there may not be a spec yet - but reference the blueprint (um, okay there\u0027s no blueprint yet either - never mind.))","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"both Nova and Neutron could update / delete the same allocation these"},{"line_number":276,"context_line":"operations could lead to race conditions. To avoid data inconsistencies this"},{"line_number":277,"context_line":"feature can only be implemented after placement enforces resource provider"},{"line_number":278,"context_line":"generations during allocation update."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"QoS aware sub port create under a bound parent port"},{"line_number":281,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_1e4866ca","line":278,"in_reply_to":"bf659307_a5f7f7f5","updated":"2018-03-26 11:59:41.000000000","message":"Yeah, I will refer to it when it is published.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":300,"context_line":"Finding the compute RP"},{"line_number":301,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Neutron already depends on the ``host`` conf variable to be set to the same id"},{"line_number":304,"context_line":"that Nova uses in the Neutron port binding. Nova uses the hostname in the port"},{"line_number":305,"context_line":"binding. If the ``host`` is not defined in the Neutron config then it defaults"},{"line_number":306,"context_line":"to the hostname as well. This way Neutron and Nova are in sync today. The same"},{"line_number":307,"context_line":"mechanism (i.e. the hostname) can be used in Neturon agent to find the compute"},{"line_number":308,"context_line":"RP created by Nova for the same compute host."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"Having non fully qualified hostnames in a deployment can cause ambiguity. For"},{"line_number":311,"context_line":"example different cells might contain hosts with the same hostname. This"},{"line_number":312,"context_line":"hostname ambiguity in a multicell deployment is already a problem without the"},{"line_number":313,"context_line":"currently proposed feature as Nova uses the hostname as the compute RP name in"},{"line_number":314,"context_line":"Placement and the name field has a unique constraint in the Placement db model."},{"line_number":315,"context_line":"So in an ambiguous situation the Nova compute services having non unique"},{"line_number":316,"context_line":"hostnames have already failed to create RPs in Placement."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"The ambiguity can be fixed by enforcing that hostnames are FQDNs. However as"},{"line_number":319,"context_line":"this problem is not special for the currently proposed feature this fix is out"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_45c5bb8d","line":316,"range":{"start_line":303,"start_character":0,"end_line":316,"end_character":57},"updated":"2018-03-25 19:39:00.000000000","message":"Thanks for this explanation.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":330,"context_line":"case of resize to same host. Therefore the port_id is not a good consumer_id."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":333,"context_line":"but the port bindig does not have a UUID today."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"In both cases having multiple allocations for a single server on a single host"},{"line_number":336,"context_line":"would make it complex to find every allocation for that server both for Nova"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_25bc4704","line":333,"range":{"start_line":333,"start_character":13,"end_line":333,"end_character":19},"updated":"2018-03-25 19:39:00.000000000","message":"binding","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":337,"context_line":"and for the deployer using the Placement API."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"Therefore this spec proposes to use the instance_uuid as the consumer_id for"},{"line_number":340,"context_line":"the port related resource as well."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Separating non QoS aware and QoS aware ports"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_0554a3c9","line":340,"updated":"2018-03-25 19:39:00.000000000","message":"I guess I\u0027m surprised this was ever a question.  The above must have sprung from some prior discussion.  Were there objections to using the instance UUID?\n\nFor someone reading this for the first time, it would make more sense to put this statement first in this section, and present the others as alternatives rejected for the reasons stated.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":337,"context_line":"and for the deployer using the Placement API."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"Therefore this spec proposes to use the instance_uuid as the consumer_id for"},{"line_number":340,"context_line":"the port related resource as well."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Separating non QoS aware and QoS aware ports"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_7e24020e","line":340,"in_reply_to":"bf659307_0554a3c9","updated":"2018-03-26 11:59:41.000000000","message":"Good point. I will move the proposed solution to be the first in this subsection. \n\nYes there was priory discussion having the port_id as the consumer_id as that would make the work in neutron easier. Consider that neutron needs to know which piece of allocated resources belongs to which physical entity in the system providing that resource. If the port_id was the consumer_id that would already communicate this mapping.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":337,"context_line":"and for the deployer using the Placement API."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"Therefore this spec proposes to use the instance_uuid as the consumer_id for"},{"line_number":340,"context_line":"the port related resource as well."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Separating non QoS aware and QoS aware ports"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_c04d0b73","line":340,"in_reply_to":"bf659307_7e24020e","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":360,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":361,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":362,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":363,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_855993ff","line":363,"range":{"start_line":363,"start_character":59,"end_line":363,"end_character":63},"updated":"2018-03-25 19:39:00.000000000","message":"rules","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":360,"context_line":"  would allow better granularity as a server can request guaranteed bandwidth"},{"line_number":361,"context_line":"  on its data port and can accept best effort connectivity on its control port."},{"line_number":362,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":363,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_004b0359","line":363,"range":{"start_line":363,"start_character":59,"end_line":363,"end_character":63},"in_reply_to":"bf659307_855993ff","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":362,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":363,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":367,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":368,"context_line":"  the conductor."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_a55e17e4","line":365,"range":{"start_line":365,"start_character":27,"end_line":365,"end_character":31},"updated":"2018-03-25 19:39:00.000000000","message":"ports / a port","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":362,"context_line":"  This solution needs additional work in Neutron but no additional work in"},{"line_number":363,"context_line":"  Nova. Also this would mean that ports without QoS policy rule would also have"},{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":367,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":368,"context_line":"  the conductor."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_c0766ba5","line":365,"range":{"start_line":365,"start_character":27,"end_line":365,"end_character":31},"in_reply_to":"bf659307_a55e17e4","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":367,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":368,"context_line":"  the conductor."},{"line_number":369,"context_line":"* If we use \\*_ONLY traits then we can never combine them, though that would be"},{"line_number":370,"context_line":"  desirable. For example it makes perfect sense to guarantee 5 gigabits of a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_45737b81","line":367,"range":{"start_line":367,"start_character":72,"end_line":367,"end_character":76},"updated":"2018-03-25 19:39:00.000000000","message":"moved","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":364,"context_line":"  at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would cause"},{"line_number":365,"context_line":"  scheduling problems with port created by the nova-compute. See"},{"line_number":366,"context_line":"  `Server create with networks having QoS policy rule - out of scope`_"},{"line_number":367,"context_line":"  Therefore this option can only be supported after nova port create is move to"},{"line_number":368,"context_line":"  the conductor."},{"line_number":369,"context_line":"* If we use \\*_ONLY traits then we can never combine them, though that would be"},{"line_number":370,"context_line":"  desirable. For example it makes perfect sense to guarantee 5 gigabits of a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e0792f93","line":367,"range":{"start_line":367,"start_character":72,"end_line":367,"end_character":76},"in_reply_to":"bf659307_45737b81","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c42c07c1779cf95ca4177d022672b15c1a83effa","unresolved":false,"context_lines":[{"line_number":388,"context_line":"-----------------"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"},{"line_number":391,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_KBPS` and"},{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_80008f36","line":391,"range":{"start_line":391,"start_character":48,"end_line":391,"end_character":52},"updated":"2018-03-26 14:01:52.000000000","message":"I didn\u0027t notice this earlier... I believe we had agreed to make resource classes as granular as possible. This should be NET_BANDWIDTH_INGRESS_BITS_PER_SECOND or possibly NET_BANDWIDTH_INGRESS_BYTES_PER_SECOND.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22b23123491fd6eac8913c33b7a3cebe416afea5","unresolved":false,"context_lines":[{"line_number":388,"context_line":"-----------------"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"},{"line_number":391,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_KBPS` and"},{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_cc7d611d","line":391,"range":{"start_line":391,"start_character":48,"end_line":391,"end_character":52},"in_reply_to":"bf659307_80008f36","updated":"2018-03-26 15:20:28.000000000","message":"First it was BITS_PER_SECOND then I looked at the QoS minimum bandwidth rule doc in Neutron [1] which uses kbps everywhere. So I tried to make the units consistent.\n\n\n[1] https://docs.openstack.org/neutron/pike/admin/config-qos.html","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":388,"context_line":"-----------------"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"},{"line_number":391,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_KBPS` and"},{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_603aff34","line":391,"range":{"start_line":391,"start_character":48,"end_line":391,"end_character":52},"in_reply_to":"bf659307_cc7d611d","updated":"2018-03-27 14:32:00.000000000","message":"Added both alternatives to the spec.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5ff9db361389c67d50cc1c56cb254c7b14f94afa","unresolved":false,"context_lines":[{"line_number":391,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_KBPS` and"},{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_d5df04d4","line":394,"range":{"start_line":394,"start_character":30,"end_line":394,"end_character":73},"updated":"2018-03-27 14:54:33.000000000","message":"perhaps: \"distinguish between different types of network back-end technologies.\"","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":391,"context_line":"each direction, named as `NET_BANDWIDTH_INGRESS_KBPS` and"},{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_d24f0fbb","line":394,"range":{"start_line":394,"start_character":30,"end_line":394,"end_character":73},"in_reply_to":"bf659307_d5df04d4","updated":"2018-03-27 18:32:58.000000000","message":"The paragraph has been removed per Jay\u0027s latest comment","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"},{"line_number":398,"context_line":"Network RP is connected to or in case of SRIOV which physical device the RP is"},{"line_number":399,"context_line":"mapped to."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e1873cb6","line":396,"range":{"start_line":395,"start_character":8,"end_line":396,"end_character":23},"updated":"2018-03-23 18:05:13.000000000","message":"these aren\u0027t network backends. they are vnic types... the network backend would be \"OVS\" or \"SRIOV\", right?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":392,"context_line":"`NET_BANDWIDTH_EGRESS_KBPS`."},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"},{"line_number":398,"context_line":"Network RP is connected to or in case of SRIOV which physical device the RP is"},{"line_number":399,"context_line":"mapped to."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f42fd1f3","line":396,"range":{"start_line":395,"start_character":8,"end_line":396,"end_character":23},"in_reply_to":"bf659307_e1873cb6","updated":"2018-03-26 11:59:41.000000000","message":"I was a bit sloppy explaining why I need VNIC_TYPE. Bence\u0027s comment [1] triggered adding the VNIC_TYPE instead of the backend type to the tree.\n\nThe main reason is that the VNIC_TYPE is a more generic terminology than the backend type.\n\nBoth openvswitch and linuxbridge backend implements the \u0027normal\u0027 VNIC_TYPE. Neutron dynamically selects one of the backend during the port binding. So I think Nova doesn\u0027t want to force the backend selection but want to simulate some of the dynamism (i.e. at least the preferred order between backends implementing the requested vnic_type) with a weigher. To be able to do that we need VNIC_TYPE in the resource_request of a port instead of backend type.\n\nIn the openvswitch and linuxbridge example expressing that a neutron port requests either openvswitch or linuxbridge backend would need OR relationship between requested traits. In the other hand the VNIC_TYPE_NORMAL trait in the request already express this OR relationship between every backend implementing the vnic_type.\n\nAlso the VNIC_TYPE is something that is already visible on the neutron API while the backend type does not.\n\n[1] https://review.openstack.org/#/c/502306/18/specs/rocky/approved/bandwidth-resource-provider.rst@372","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"},{"line_number":398,"context_line":"Network RP is connected to or in case of SRIOV which physical device the RP is"},{"line_number":399,"context_line":"mapped to."},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":402,"context_line":"object with DictOfStringsField type to store the resource and trait requests"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_81c200e9","line":399,"range":{"start_line":397,"start_character":0,"end_line":399,"end_character":10},"updated":"2018-03-23 18:05:13.000000000","message":"This is fine. It\u0027s also possible that placement aggregates could be created to represent both physical networks as well as switch groups. But either way would work.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":394,"context_line":"New traits will be defined to distinguish a network back-end technologies. For"},{"line_number":395,"context_line":"example `NET_VNIC_TYPE_NORMAL`, `NET_VNIC_TYPE_DIRECT`,"},{"line_number":396,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":397,"context_line":"Also new custom traits will be used to indicate which physical network a given"},{"line_number":398,"context_line":"Network RP is connected to or in case of SRIOV which physical device the RP is"},{"line_number":399,"context_line":"mapped to."},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":402,"context_line":"object with DictOfStringsField type to store the resource and trait requests"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_3e4c4ac6","line":399,"range":{"start_line":397,"start_character":0,"end_line":399,"end_character":10},"in_reply_to":"bf659307_81c200e9","updated":"2018-03-26 11:59:41.000000000","message":"I went with the first solution that popped to my mind but I will not the aggregates as that is a valid alternative Neutron can look at.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c42c07c1779cf95ca4177d022672b15c1a83effa","unresolved":false,"context_lines":[{"line_number":415,"context_line":"   |"},{"line_number":416,"context_line":"   |"},{"line_number":417,"context_line":"   +-------+Network agent RP"},{"line_number":418,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":419,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":420,"context_line":"   |             +"},{"line_number":421,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_80d72fc0","line":418,"range":{"start_line":418,"start_character":14,"end_line":418,"end_character":35},"updated":"2018-03-26 14:01:52.000000000","message":"OK, so if the VNIC_TYPE is what we will be using as a trait, there is no need to have a further set of traits that indicate the network backend (OVS, SRIOV, etc). So, I would much prefer you move the NET_VNIC_TYPE_NORMAL trait up to this level of provider.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":415,"context_line":"   |"},{"line_number":416,"context_line":"   |"},{"line_number":417,"context_line":"   +-------+Network agent RP"},{"line_number":418,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":419,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":420,"context_line":"   |             +"},{"line_number":421,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_514b0b2a","line":418,"range":{"start_line":418,"start_character":14,"end_line":418,"end_character":35},"in_reply_to":"bf659307_494ce39d","updated":"2018-03-27 14:32:00.000000000","message":"Added more explanation to the Data model impact section about the VNIC_TYPE trait","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22b23123491fd6eac8913c33b7a3cebe416afea5","unresolved":false,"context_lines":[{"line_number":415,"context_line":"   |"},{"line_number":416,"context_line":"   |"},{"line_number":417,"context_line":"   +-------+Network agent RP"},{"line_number":418,"context_line":"   |          traits: NET_AGENT_OVS"},{"line_number":419,"context_line":"   |          inventory: # later, model number of OVS ports here"},{"line_number":420,"context_line":"   |             +"},{"line_number":421,"context_line":"   |             |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_494ce39d","line":418,"range":{"start_line":418,"start_character":14,"end_line":418,"end_character":35},"in_reply_to":"bf659307_80d72fc0","updated":"2018-03-26 15:20:28.000000000","message":"I could not move the the VNIC_TYPE trait up here, I can copy it here. This is due to the fact that placement supports the granular resource groups in a way that a request is either for whole tree or for a single RP. If the VNIC_TYPE is moved up here but the BW resource kept down in the children then I would need a resource group that expresses resource request from a Networking _subtree_ .\n\n\nThe VNIC_TYPE is good information to use in the port as a required trait. The backend information does not needed for the allocation_candidate query or for the filtering in the scheduler. The backend information is needed for the NeutronBackendWeigher that tries to simulate the Neutron backend selection mechanism by implementing a preference order between backends.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c42c07c1779cf95ca4177d022672b15c1a83effa","unresolved":false,"context_lines":[{"line_number":436,"context_line":"   |"},{"line_number":437,"context_line":"   |"},{"line_number":438,"context_line":"   +-------+Network agent RP"},{"line_number":439,"context_line":"              traits: NET_AGENT_SRIOV"},{"line_number":440,"context_line":"                 +"},{"line_number":441,"context_line":"                 |"},{"line_number":442,"context_line":"                 |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_40e1179a","line":439,"range":{"start_line":439,"start_character":22,"end_line":439,"end_character":37},"updated":"2018-03-26 14:01:52.000000000","message":"and move the NET_VNIC_TYPE_DIRECT trait to here, remove the NET_AGENT_SRIOV trait entirely.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":436,"context_line":"   |"},{"line_number":437,"context_line":"   |"},{"line_number":438,"context_line":"   +-------+Network agent RP"},{"line_number":439,"context_line":"              traits: NET_AGENT_SRIOV"},{"line_number":440,"context_line":"                 +"},{"line_number":441,"context_line":"                 |"},{"line_number":442,"context_line":"                 |"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_915a03f1","line":439,"range":{"start_line":439,"start_character":22,"end_line":439,"end_character":37},"in_reply_to":"bf659307_40e1179a","updated":"2018-03-27 14:32:00.000000000","message":"Se my answer in L418","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":459,"context_line":"symmetric trees for OVS and SRIOV and to make sure that resources managed by"},{"line_number":460,"context_line":"different agents on the same host are structurally separated."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"The NET_VNIC_TYPE traits are used to here to differentiate between two"},{"line_number":463,"context_line":"resource request of two Neutron ports requesting different backend technologies"},{"line_number":464,"context_line":"towards the same phyisical network."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_ac1b7b71","line":464,"range":{"start_line":462,"start_character":0,"end_line":464,"end_character":35},"updated":"2018-03-23 18:05:13.000000000","message":"I see no need for the NET_VNIC_TYPE traits at all. The NET_BACKEND_OVS, NET_BACKEND_SRIOV should be sufficient to differentiate required backend topologies, no?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":459,"context_line":"symmetric trees for OVS and SRIOV and to make sure that resources managed by"},{"line_number":460,"context_line":"different agents on the same host are structurally separated."},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"The NET_VNIC_TYPE traits are used to here to differentiate between two"},{"line_number":463,"context_line":"resource request of two Neutron ports requesting different backend technologies"},{"line_number":464,"context_line":"towards the same phyisical network."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f466f151","line":464,"range":{"start_line":462,"start_character":0,"end_line":464,"end_character":35},"in_reply_to":"bf659307_ac1b7b71","updated":"2018-03-26 11:59:41.000000000","message":"See my answer at L397","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":463,"context_line":"resource request of two Neutron ports requesting different backend technologies"},{"line_number":464,"context_line":"towards the same phyisical network."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_ec3ad3cb","line":466,"range":{"start_line":466,"start_character":4,"end_line":466,"end_character":13},"updated":"2018-03-23 18:05:13.000000000","message":"I\u0027d call these NET_BACKEND instead of NET_AGENT, since AGENT implies an implementation detail.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"65ccd1fab6d1aa1665534e259bb0125b20feb0b6","unresolved":false,"context_lines":[{"line_number":463,"context_line":"resource request of two Neutron ports requesting different backend technologies"},{"line_number":464,"context_line":"towards the same phyisical network."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_a0b7d386","line":466,"range":{"start_line":466,"start_character":4,"end_line":466,"end_character":13},"in_reply_to":"bf659307_ec3ad3cb","updated":"2018-03-26 14:03:08.000000000","message":"Note that after reading your explanation of the VNIC_TYPE traits, I no longer believe we should have any traits for network backend.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":463,"context_line":"resource request of two Neutron ports requesting different backend technologies"},{"line_number":464,"context_line":"towards the same phyisical network."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_b4607934","line":466,"range":{"start_line":466,"start_character":4,"end_line":466,"end_character":13},"in_reply_to":"bf659307_ec3ad3cb","updated":"2018-03-26 11:59:41.000000000","message":"Sure","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5ff9db361389c67d50cc1c56cb254c7b14f94afa","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"Neutron might want to use additional traits that are not affecting the"},{"line_number":471,"context_line":"Placement decision but helps the neutron agents mapping Network RPs to physical"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_387e776b","line":468,"range":{"start_line":468,"start_character":44,"end_line":468,"end_character":69},"updated":"2018-03-27 14:54:33.000000000","message":"Perhaps a note or link to the section \"Impact on the Nova scheduler to simulate Neutron backend selection\"","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5ff9db361389c67d50cc1c56cb254c7b14f94afa","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"Neutron might want to use additional traits that are not affecting the"},{"line_number":471,"context_line":"Placement decision but helps the neutron agents mapping Network RPs to physical"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_15ffbc34","line":468,"range":{"start_line":468,"start_character":13,"end_line":468,"end_character":19},"updated":"2018-03-27 14:54:33.000000000","message":"order","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The NET_AGENT_OVS and NET_AGENT_SRIOV traits are added to the Network RPs as"},{"line_number":467,"context_line":"this information will be used by the new NeturonBackendWeigher in the filter"},{"line_number":468,"context_line":"scheduler to orderd allocation candidates in backend preference order."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"Neutron might want to use additional traits that are not affecting the"},{"line_number":471,"context_line":"Placement decision but helps the neutron agents mapping Network RPs to physical"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f24a53aa","line":468,"range":{"start_line":468,"start_character":44,"end_line":468,"end_character":69},"in_reply_to":"bf659307_387e776b","updated":"2018-03-27 18:32:58.000000000","message":"This paragraph has been removed per Jay\u0027s latest comment.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":474,"context_line":"want to add the these device names as custom traits to the given Network RP."},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"Note that Placement only supports a single un-numbered resource request group"},{"line_number":477,"context_line":"but a server can have multiple ports requesting resources. So to make the"},{"line_number":478,"context_line":"resource request of each port separated we need to use numbered resource groups"},{"line_number":479,"context_line":"in ports."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"Resource request in the port"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_050263b5","line":479,"range":{"start_line":477,"start_character":59,"end_line":479,"end_character":9},"updated":"2018-03-25 19:39:00.000000000","message":"Note that just using numbered request groups doesn\u0027t guarantee separation.  (But in this case IIUC you\u0027d only require separation if you need separate physnets, which will be accounted for via traits.)","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":474,"context_line":"want to add the these device names as custom traits to the given Network RP."},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"Note that Placement only supports a single un-numbered resource request group"},{"line_number":477,"context_line":"but a server can have multiple ports requesting resources. So to make the"},{"line_number":478,"context_line":"resource request of each port separated we need to use numbered resource groups"},{"line_number":479,"context_line":"in ports."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"Resource request in the port"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_d4c64d17","line":479,"range":{"start_line":477,"start_character":59,"end_line":479,"end_character":9},"in_reply_to":"bf659307_050263b5","updated":"2018-03-26 11:59:41.000000000","message":"Good point, I will clarify what level of separation we need here.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":474,"context_line":"want to add the these device names as custom traits to the given Network RP."},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"Note that Placement only supports a single un-numbered resource request group"},{"line_number":477,"context_line":"but a server can have multiple ports requesting resources. So to make the"},{"line_number":478,"context_line":"resource request of each port separated we need to use numbered resource groups"},{"line_number":479,"context_line":"in ports."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"Resource request in the port"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_b1ae2796","line":479,"range":{"start_line":477,"start_character":59,"end_line":479,"end_character":9},"in_reply_to":"bf659307_d4c64d17","updated":"2018-03-27 14:32:00.000000000","message":"I moved this paragraph closer to the VNIC_TYPE paragraph and added explanation about the needed separation.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":487,"context_line":"that a single port requests resources from a single RP. But we should not"},{"line_number":488,"context_line":"prevent later on extending this model with granular resource request as it is"},{"line_number":489,"context_line":"proposed for the flavor in the `granular-resource-request`_ spec. Nova will"},{"line_number":490,"context_line":"assume that the below request needs to be fulfilled from a single RP. Later on"},{"line_number":491,"context_line":"multiple resourcesX and requiredX keys can be added to the resource_request to"},{"line_number":492,"context_line":"express a more complex allocation schema, like asking bandwidth from the PF and"},{"line_number":493,"context_line":"also from the connected TOR switch."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_c52d4b47","line":490,"range":{"start_line":490,"start_character":52,"end_line":490,"end_character":68},"updated":"2018-03-25 19:39:00.000000000","message":"Nope, as written, this example might get the INGRESS and EGRESS from separate providers.  You need to use a numbered request group to ensure they get tied together.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f7e207855c76c5023271a30ce7c2da62940999af","unresolved":false,"context_lines":[{"line_number":487,"context_line":"that a single port requests resources from a single RP. But we should not"},{"line_number":488,"context_line":"prevent later on extending this model with granular resource request as it is"},{"line_number":489,"context_line":"proposed for the flavor in the `granular-resource-request`_ spec. Nova will"},{"line_number":490,"context_line":"assume that the below request needs to be fulfilled from a single RP. Later on"},{"line_number":491,"context_line":"multiple resourcesX and requiredX keys can be added to the resource_request to"},{"line_number":492,"context_line":"express a more complex allocation schema, like asking bandwidth from the PF and"},{"line_number":493,"context_line":"also from the connected TOR switch."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_6ae67c19","line":490,"range":{"start_line":490,"start_character":52,"end_line":490,"end_character":68},"in_reply_to":"bf659307_34a8e91d","updated":"2018-03-26 12:48:39.000000000","message":"This might be enough of a motivator to start namespacing the granular groups.  Because we have a similar issue wrt traits in images (although in that case it may be the opposite - wanting to correlate groups between image metadata and flavor rather than keep them distinct).\n\nLet\u0027s present both alternatives and see what other reviewers think.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":487,"context_line":"that a single port requests resources from a single RP. But we should not"},{"line_number":488,"context_line":"prevent later on extending this model with granular resource request as it is"},{"line_number":489,"context_line":"proposed for the flavor in the `granular-resource-request`_ spec. Nova will"},{"line_number":490,"context_line":"assume that the below request needs to be fulfilled from a single RP. Later on"},{"line_number":491,"context_line":"multiple resourcesX and requiredX keys can be added to the resource_request to"},{"line_number":492,"context_line":"express a more complex allocation schema, like asking bandwidth from the PF and"},{"line_number":493,"context_line":"also from the connected TOR switch."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_95798c94","line":490,"range":{"start_line":490,"start_character":52,"end_line":490,"end_character":68},"in_reply_to":"bf659307_6ae67c19","updated":"2018-03-27 14:32:00.000000000","message":"Added the alternative and proposed that do the request group syntax change only when the subtree scoping of a request group will also be introduced.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":487,"context_line":"that a single port requests resources from a single RP. But we should not"},{"line_number":488,"context_line":"prevent later on extending this model with granular resource request as it is"},{"line_number":489,"context_line":"proposed for the flavor in the `granular-resource-request`_ spec. Nova will"},{"line_number":490,"context_line":"assume that the below request needs to be fulfilled from a single RP. Later on"},{"line_number":491,"context_line":"multiple resourcesX and requiredX keys can be added to the resource_request to"},{"line_number":492,"context_line":"express a more complex allocation schema, like asking bandwidth from the PF and"},{"line_number":493,"context_line":"also from the connected TOR switch."}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_34a8e91d","line":490,"range":{"start_line":490,"start_character":52,"end_line":490,"end_character":68},"in_reply_to":"bf659307_c52d4b47","updated":"2018-03-26 11:59:41.000000000","message":"We are cheating here a bit. We would like to use a separate numbered group for each port\u0027s resource request. To do that Neutron would need to say resources1 for portA and resources2 for portB. Neutron cannot do that as Neutron does not know which ports will be used together in a single nova server create request. So Neutron cannot assign unique numbers to the request groups but Nova has to. Nova has to take the resource_request from each port and translate it to a unique request group numbering during the allocation_candidate request generation. Note that a given numbered group can come from the flavor extra_spec too so uniqueness can only be enforced in Nova where each requested group is known.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8c51f8a12b0c659e7686900ae6048c96795e2dfd","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            \"resources\": {"},{"line_number":506,"context_line":"                \"NET_BANDWIDTH_INGRESS_KBPS\": 1000,"},{"line_number":507,"context_line":"                \"NET_BANDWIDTH_EGRESS_KBPS\": 1000 },"},{"line_number":508,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\", \"NET_VNIC_TYPE_NORMAL\"]}"},{"line_number":509,"context_line":"    }}"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_8c51d711","line":508,"range":{"start_line":508,"start_character":45,"end_line":508,"end_character":67},"updated":"2018-03-23 18:05:13.000000000","message":"this would just be NET_BACKEND_OVS, right?","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            \"resources\": {"},{"line_number":506,"context_line":"                \"NET_BANDWIDTH_INGRESS_KBPS\": 1000,"},{"line_number":507,"context_line":"                \"NET_BANDWIDTH_EGRESS_KBPS\": 1000 },"},{"line_number":508,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\", \"NET_VNIC_TYPE_NORMAL\"]}"},{"line_number":509,"context_line":"    }}"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f4503135","line":508,"range":{"start_line":508,"start_character":45,"end_line":508,"end_character":67},"in_reply_to":"bf659307_8c51d711","updated":"2018-03-26 11:59:41.000000000","message":"Nope. We don\u0027t want to force the backend selection in placement in case multiple backend can support VNIC_TYPE_NORMAL like openvswitch and linuxbridge. See L397","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            \"resources\": {"},{"line_number":506,"context_line":"                \"NET_BANDWIDTH_INGRESS_KBPS\": 1000,"},{"line_number":507,"context_line":"                \"NET_BANDWIDTH_EGRESS_KBPS\": 1000 },"},{"line_number":508,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\", \"NET_VNIC_TYPE_NORMAL\"]}"},{"line_number":509,"context_line":"    }}"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_9128c334","line":508,"range":{"start_line":508,"start_character":45,"end_line":508,"end_character":67},"in_reply_to":"bf659307_f4503135","updated":"2018-03-27 14:32:00.000000000","message":"I added separate reasoning why we need both VNIC_TYPE and NET_BACKEND traits. Also there is a whole subsection about a `Simulate Neutron backend selection with a Nova weigher`_ that explanes the usage of the NET_BACKEND traits.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":512,"context_line":"Modeling bandwidth on physical nic and the connected TOR switch - out of scope"},{"line_number":513,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"The current feature only aiming for modeling the bandwidth resource on the"},{"line_number":516,"context_line":"compute host physical nic. However it is worth to look at the case when"},{"line_number":517,"context_line":"bandwidth is modeled both on the physical nic and on the connected TOR switch."},{"line_number":518,"context_line":"Such a TOR switch provides bandwidth resource for a list of compute hosts so a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_85275365","line":515,"range":{"start_line":515,"start_character":25,"end_line":515,"end_character":44},"updated":"2018-03-25 19:39:00.000000000","message":"aims to model","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":512,"context_line":"Modeling bandwidth on physical nic and the connected TOR switch - out of scope"},{"line_number":513,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"The current feature only aiming for modeling the bandwidth resource on the"},{"line_number":516,"context_line":"compute host physical nic. However it is worth to look at the case when"},{"line_number":517,"context_line":"bandwidth is modeled both on the physical nic and on the connected TOR switch."},{"line_number":518,"context_line":"Such a TOR switch provides bandwidth resource for a list of compute hosts so a"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f5aec8e5","line":515,"range":{"start_line":515,"start_character":25,"end_line":515,"end_character":44},"in_reply_to":"bf659307_85275365","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":513,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"The current feature only aiming for modeling the bandwidth resource on the"},{"line_number":516,"context_line":"compute host physical nic. However it is worth to look at the case when"},{"line_number":517,"context_line":"bandwidth is modeled both on the physical nic and on the connected TOR switch."},{"line_number":518,"context_line":"Such a TOR switch provides bandwidth resource for a list of compute hosts so a"},{"line_number":519,"context_line":"TOR switch could be modeled with a sharing RP. Let\u0027s assume the following setup"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_a52cd747","line":516,"range":{"start_line":516,"start_character":41,"end_line":516,"end_character":46},"updated":"2018-03-25 19:39:00.000000000","message":"worthwhile","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":513,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"The current feature only aiming for modeling the bandwidth resource on the"},{"line_number":516,"context_line":"compute host physical nic. However it is worth to look at the case when"},{"line_number":517,"context_line":"bandwidth is modeled both on the physical nic and on the connected TOR switch."},{"line_number":518,"context_line":"Such a TOR switch provides bandwidth resource for a list of compute hosts so a"},{"line_number":519,"context_line":"TOR switch could be modeled with a sharing RP. Let\u0027s assume the following setup"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_7584f85e","line":516,"range":{"start_line":516,"start_character":41,"end_line":516,"end_character":46},"in_reply_to":"bf659307_a52cd747","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":561,"context_line":"member_of:agg1.  Or marking PF1 and TOR1 with the same trait and using"},{"line_number":562,"context_line":"?required\u003d\u003cthat trait\u003e."},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"Impact on the Nova scheduler to simulate Neutron backend selection"},{"line_number":565,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"Neutron today selects the networking backend of a port during port binding by"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_051b431b","line":564,"updated":"2018-03-25 19:39:00.000000000","message":"Note to self: you are here","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cf5cd61aab784dce3814fa45e9b732396b15bde","unresolved":false,"context_lines":[{"line_number":718,"context_line":"migrate the servers and during the selection of the target of the migration the"},{"line_number":719,"context_line":"minimum bandwidth rule will be enforced by the scheduler. Tools can also be"},{"line_number":720,"context_line":"provided to search for existing instances and try to do the minimum bandwidth"},{"line_number":721,"context_line":"allocation in place. This way the number of necessary migrations can be limited."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"Implementation"},{"line_number":724,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_2afad641","line":721,"range":{"start_line":721,"start_character":79,"end_line":721,"end_character":80},"updated":"2018-03-25 19:39:00.000000000","message":"pep is failing you here.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":718,"context_line":"migrate the servers and during the selection of the target of the migration the"},{"line_number":719,"context_line":"minimum bandwidth rule will be enforced by the scheduler. Tools can also be"},{"line_number":720,"context_line":"provided to search for existing instances and try to do the minimum bandwidth"},{"line_number":721,"context_line":"allocation in place. This way the number of necessary migrations can be limited."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"Implementation"},{"line_number":724,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_b591309c","line":721,"range":{"start_line":721,"start_character":79,"end_line":721,"end_character":80},"in_reply_to":"bf659307_2afad641","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7a1d3a544d77c47f4a8a9941670008fa7570a62e","unresolved":false,"context_lines":[{"line_number":753,"context_line":""},{"line_number":754,"context_line":"* During port detach Nova needs to delete the port related allocations from"},{"line_number":755,"context_line":"  Placement if any."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":""},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_e1497c32","line":756,"updated":"2018-03-23 17:44:03.000000000","message":"* Implement the new NeutronBackendWeigher\n* Implement the algorithm that maps parts of the selected allocation candidate to to a certain port and communicate the result to Neutron during the port binding.","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":753,"context_line":""},{"line_number":754,"context_line":"* During port detach Nova needs to delete the port related allocations from"},{"line_number":755,"context_line":"  Placement if any."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":""},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_753718b2","line":756,"in_reply_to":"bf659307_e1497c32","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":766,"context_line":""},{"line_number":767,"context_line":"* `QoS minimum bandwidth allocation in Placement API`_ for the Neutron impacts"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"* `request-filter`_ to have a way to move the resource request from the port"},{"line_number":770,"context_line":"  to the RequestSpec"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_9563ccb1","line":769,"updated":"2018-03-27 14:32:00.000000000","message":"Spec does not use the request-filter feature to include the bandwidth related resource requests to the allocation candidate request","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddc62109cfbb63b2a54c3e5f05006a4e3723fa4e","unresolved":false,"context_lines":[{"line_number":802,"context_line":".. _`override-compute-node-uuid`: https://blueprints.launchpad.net/nova/+spec/override-compute-node-uuid"},{"line_number":803,"context_line":".. _`moving Nova port create to the conductor`: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/prep-for-network-aware-scheduling-pike.html"},{"line_number":804,"context_line":".. _`debated to have a microversion bump`: http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-03-20.log.html#t2018-03-20T13:50:47"},{"line_number":805,"context_line":".. _`vnic_types are defined in the Neutron API`: https://developer.openstack.org/api-ref/network/v2/#ports"},{"line_number":806,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_d4040dc9","line":805,"updated":"2018-03-26 11:59:41.000000000","message":"https://developer.openstack.org/api-ref/network/v2/#show-port-details","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f1ac26a79e012c9a54c1c1166b3482ec21fd3d9","unresolved":false,"context_lines":[{"line_number":802,"context_line":".. _`override-compute-node-uuid`: https://blueprints.launchpad.net/nova/+spec/override-compute-node-uuid"},{"line_number":803,"context_line":".. _`moving Nova port create to the conductor`: https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/prep-for-network-aware-scheduling-pike.html"},{"line_number":804,"context_line":".. _`debated to have a microversion bump`: http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-03-20.log.html#t2018-03-20T13:50:47"},{"line_number":805,"context_line":".. _`vnic_types are defined in the Neutron API`: https://developer.openstack.org/api-ref/network/v2/#ports"},{"line_number":806,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"bf659307_f54a4825","line":805,"in_reply_to":"bf659307_d4040dc9","updated":"2018-03-27 14:32:00.000000000","message":"Done","commit_id":"714d572a073232a288f69f71458575901fca9819"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":407,"context_line":"The End User can specify the vnic_type during port create and Neutron will make"},{"line_number":408,"context_line":"sure that the related trait will be part of the port\u0027s resource request."},{"line_number":409,"context_line":"Neutron agents will also make sure that the Network RPs, they create, will have"},{"line_number":410,"context_line":"the supported vnic_types as traits."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Also new custom traits will be used to indicate which physical network a given"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_590faae0","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":56},"updated":"2018-03-27 17:21:19.000000000","message":"strike","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":407,"context_line":"The End User can specify the vnic_type during port create and Neutron will make"},{"line_number":408,"context_line":"sure that the related trait will be part of the port\u0027s resource request."},{"line_number":409,"context_line":"Neutron agents will also make sure that the Network RPs, they create, will have"},{"line_number":410,"context_line":"the supported vnic_types as traits."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Also new custom traits will be used to indicate which physical network a given"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_d902dab4","line":409,"range":{"start_line":409,"start_character":68,"end_line":409,"end_character":69},"updated":"2018-03-27 17:21:19.000000000","message":"strike","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":406,"context_line":"`NET_VNIC_TYPE_MACVTAP`. These `vnic_types are defined in the Neutron API`_."},{"line_number":407,"context_line":"The End User can specify the vnic_type during port create and Neutron will make"},{"line_number":408,"context_line":"sure that the related trait will be part of the port\u0027s resource request."},{"line_number":409,"context_line":"Neutron agents will also make sure that the Network RPs, they create, will have"},{"line_number":410,"context_line":"the supported vnic_types as traits."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Also new custom traits will be used to indicate which physical network a given"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_ef4a70aa","line":409,"range":{"start_line":409,"start_character":68,"end_line":409,"end_character":69},"in_reply_to":"bf659307_d902dab4","updated":"2018-03-27 18:32:58.000000000","message":"the paragraph has been removed based on Jay\u0027s latest comment.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":484,"context_line":"towards the same physical network. The NET_VNIC_TYPE traits are added to the"},{"line_number":485,"context_line":"leaf RPs as a numbered granular resource group from the"},{"line_number":486,"context_line":"`granular-resource-request`_ feature always mapped to a single RP and the"},{"line_number":487,"context_line":"bandwidth resource already tight to the leaf RP. Note that Placement only"},{"line_number":488,"context_line":"supports a single un-numbered resource request group but a server can have"},{"line_number":489,"context_line":"multiple ports requesting resources from different physnets. So to make the"},{"line_number":490,"context_line":"resource request of each port separated, and to be able to express that the"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_99d30239","line":487,"range":{"start_line":487,"start_character":27,"end_line":487,"end_character":32},"updated":"2018-03-27 17:21:19.000000000","message":"tied?","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":484,"context_line":"towards the same physical network. The NET_VNIC_TYPE traits are added to the"},{"line_number":485,"context_line":"leaf RPs as a numbered granular resource group from the"},{"line_number":486,"context_line":"`granular-resource-request`_ feature always mapped to a single RP and the"},{"line_number":487,"context_line":"bandwidth resource already tight to the leaf RP. Note that Placement only"},{"line_number":488,"context_line":"supports a single un-numbered resource request group but a server can have"},{"line_number":489,"context_line":"multiple ports requesting resources from different physnets. So to make the"},{"line_number":490,"context_line":"resource request of each port separated, and to be able to express that the"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_4fd11ccd","line":487,"range":{"start_line":487,"start_character":27,"end_line":487,"end_character":32},"in_reply_to":"bf659307_99d30239","updated":"2018-03-27 18:32:58.000000000","message":"Done. Paragraph removed per Jay\u0027s comment.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":488,"context_line":"supports a single un-numbered resource request group but a server can have"},{"line_number":489,"context_line":"multiple ports requesting resources from different physnets. So to make the"},{"line_number":490,"context_line":"resource request of each port separated, and to be able to express that the"},{"line_number":491,"context_line":"two ports want resources from two different physnet provider marked by two"},{"line_number":492,"context_line":"different traits in the model, we need to use numbered resource groups for"},{"line_number":493,"context_line":"the ports. Note that two numbered granular resource request group do not ensure"},{"line_number":494,"context_line":"separation if both only requests resource from the same resource class. However"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_39e2f602","line":491,"range":{"start_line":491,"start_character":52,"end_line":491,"end_character":60},"updated":"2018-03-27 17:21:19.000000000","message":"providers","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":488,"context_line":"supports a single un-numbered resource request group but a server can have"},{"line_number":489,"context_line":"multiple ports requesting resources from different physnets. So to make the"},{"line_number":490,"context_line":"resource request of each port separated, and to be able to express that the"},{"line_number":491,"context_line":"two ports want resources from two different physnet provider marked by two"},{"line_number":492,"context_line":"different traits in the model, we need to use numbered resource groups for"},{"line_number":493,"context_line":"the ports. Note that two numbered granular resource request group do not ensure"},{"line_number":494,"context_line":"separation if both only requests resource from the same resource class. However"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_6fd420be","line":491,"range":{"start_line":491,"start_character":52,"end_line":491,"end_character":60},"in_reply_to":"bf659307_39e2f602","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":491,"context_line":"two ports want resources from two different physnet provider marked by two"},{"line_number":492,"context_line":"different traits in the model, we need to use numbered resource groups for"},{"line_number":493,"context_line":"the ports. Note that two numbered granular resource request group do not ensure"},{"line_number":494,"context_line":"separation if both only requests resource from the same resource class. However"},{"line_number":495,"context_line":"in this case the two groups (coming from two separate ports) will have"},{"line_number":496,"context_line":"different traits to ensure separation."},{"line_number":497,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_b9bfe6ce","line":494,"range":{"start_line":494,"start_character":24,"end_line":494,"end_character":32},"updated":"2018-03-27 17:21:19.000000000","message":"request","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":491,"context_line":"two ports want resources from two different physnet provider marked by two"},{"line_number":492,"context_line":"different traits in the model, we need to use numbered resource groups for"},{"line_number":493,"context_line":"the ports. Note that two numbered granular resource request group do not ensure"},{"line_number":494,"context_line":"separation if both only requests resource from the same resource class. However"},{"line_number":495,"context_line":"in this case the two groups (coming from two separate ports) will have"},{"line_number":496,"context_line":"different traits to ensure separation."},{"line_number":497,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_0fdb24ed","line":494,"range":{"start_line":494,"start_character":24,"end_line":494,"end_character":32},"in_reply_to":"bf659307_b9bfe6ce","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":511,"context_line":"groups per port."},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"Later on multiple resourcesX and requiredX keys can be added to the"},{"line_number":514,"context_line":"resource_request to express a more complex allocation schema, like asking"},{"line_number":515,"context_line":"bandwidth from the PF and also from the connected TOR switch."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"In the current scope Nova will assume that the below request needs to be"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_99a1c2ac","line":514,"range":{"start_line":514,"start_character":67,"end_line":514,"end_character":73},"updated":"2018-03-27 17:21:19.000000000","message":"\u0027requesting\u0027 or \u0027asking for\u0027","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":511,"context_line":"groups per port."},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"Later on multiple resourcesX and requiredX keys can be added to the"},{"line_number":514,"context_line":"resource_request to express a more complex allocation schema, like asking"},{"line_number":515,"context_line":"bandwidth from the PF and also from the connected TOR switch."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"In the current scope Nova will assume that the below request needs to be"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_6fed008a","line":514,"range":{"start_line":514,"start_character":67,"end_line":514,"end_character":73},"in_reply_to":"bf659307_99a1c2ac","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":521,"context_line":"`resources\u003cinteger\u003e` but the below example simply uses the `resources` key. So"},{"line_number":522,"context_line":"Nova will map the below `resources` key to the first unused numbered group in"},{"line_number":523,"context_line":"the allocation_candidate request. Neutron does not know which ports are used"},{"line_number":524,"context_line":"together in a server create request, and which numbered groups has already been"},{"line_number":525,"context_line":"used by the flavor extra_spec therefore Neutron cannot assign unique integer"},{"line_number":526,"context_line":"ids to the resource groups in these ports."},{"line_number":527,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_1995b240","line":524,"range":{"start_line":524,"start_character":63,"end_line":524,"end_character":66},"updated":"2018-03-27 17:21:19.000000000","message":"have","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":521,"context_line":"`resources\u003cinteger\u003e` but the below example simply uses the `resources` key. So"},{"line_number":522,"context_line":"Nova will map the below `resources` key to the first unused numbered group in"},{"line_number":523,"context_line":"the allocation_candidate request. Neutron does not know which ports are used"},{"line_number":524,"context_line":"together in a server create request, and which numbered groups has already been"},{"line_number":525,"context_line":"used by the flavor extra_spec therefore Neutron cannot assign unique integer"},{"line_number":526,"context_line":"ids to the resource groups in these ports."},{"line_number":527,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_af98f81a","line":524,"range":{"start_line":524,"start_character":63,"end_line":524,"end_character":66},"in_reply_to":"bf659307_1995b240","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":534,"context_line":"*single RP*. I foresee that the Placement query language will be extended to"},{"line_number":535,"context_line":"support request groups to be fulfilled by a provider subtree selected by the"},{"line_number":536,"context_line":"existence of a specific trait on the root RP of the subtree (e.g. this might be"},{"line_number":537,"context_line":"needed to express NUMA affinity). This could require another (possibly"},{"line_number":538,"context_line":"substantial) changes of the request group syntax. Therefore I think we can live"},{"line_number":539,"context_line":"with the currently proposed implicitly mapped group names for now and rework"},{"line_number":540,"context_line":"the group syntax only once covering both naming and scoping."}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_998f8222","line":537,"range":{"start_line":537,"start_character":53,"end_line":537,"end_character":60},"updated":"2018-03-27 17:21:19.000000000","message":"other","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":534,"context_line":"*single RP*. I foresee that the Placement query language will be extended to"},{"line_number":535,"context_line":"support request groups to be fulfilled by a provider subtree selected by the"},{"line_number":536,"context_line":"existence of a specific trait on the root RP of the subtree (e.g. this might be"},{"line_number":537,"context_line":"needed to express NUMA affinity). This could require another (possibly"},{"line_number":538,"context_line":"substantial) changes of the request group syntax. Therefore I think we can live"},{"line_number":539,"context_line":"with the currently proposed implicitly mapped group names for now and rework"},{"line_number":540,"context_line":"the group syntax only once covering both naming and scoping."}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_afc1d8e6","line":537,"range":{"start_line":537,"start_character":53,"end_line":537,"end_character":60},"in_reply_to":"bf659307_998f8222","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"            [the rest of the cn1 rp tree]"},{"line_number":574,"context_line":"                     /      \\"},{"line_number":575,"context_line":"    +-----+      +-----+  +-----+      +-----+"},{"line_number":576,"context_line":"    |TOR1 |......|PF1  |  |PF2  |......|TOR2 |"},{"line_number":577,"context_line":"    |BW: 8| agg1 |VF: 4|  |VF: 4| agg2 |BW: 8|"},{"line_number":578,"context_line":"    |     |      |BW: 4|  |BW: 4|      |     |"},{"line_number":579,"context_line":"    +-----+      +-----+  +-----+      +-----+"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"In this case to request bandwidth resource the Neutron port needs to contain"},{"line_number":582,"context_line":"two sets of BW resources one from the PF and one from the TOR."}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_f9a79ea6","line":579,"range":{"start_line":575,"start_character":0,"end_line":579,"end_character":46},"updated":"2018-03-27 17:21:19.000000000","message":"Not sure why this example has/needs bandwidth inventory in the PF RPs.  The issue remains (and is a little clearer IMO) if the PF just has VF inventory and the BW inventory is left to the TOR RP.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"            [the rest of the cn1 rp tree]"},{"line_number":574,"context_line":"                     /      \\"},{"line_number":575,"context_line":"    +-----+      +-----+  +-----+      +-----+"},{"line_number":576,"context_line":"    |TOR1 |......|PF1  |  |PF2  |......|TOR2 |"},{"line_number":577,"context_line":"    |BW: 8| agg1 |VF: 4|  |VF: 4| agg2 |BW: 8|"},{"line_number":578,"context_line":"    |     |      |BW: 4|  |BW: 4|      |     |"},{"line_number":579,"context_line":"    +-----+      +-----+  +-----+      +-----+"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"In this case to request bandwidth resource the Neutron port needs to contain"},{"line_number":582,"context_line":"two sets of BW resources one from the PF and one from the TOR."}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_ef29109b","line":579,"range":{"start_line":575,"start_character":0,"end_line":579,"end_character":46},"in_reply_to":"bf659307_f9a79ea6","updated":"2018-03-27 18:32:58.000000000","message":"True. I think I tried to find a way that this relevant to the current feature and the current feature does not model VFs on the PFs but models BW on the PFs.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":614,"context_line":"asking every mechanism driver available on the given compute host to try to"},{"line_number":615,"context_line":"bind the port. Neutron does this in the order of the mechanism drivers listed"},{"line_number":616,"context_line":"in ml2/mechanism_drivers config options. The first mechanism_driver that"},{"line_number":617,"context_line":"returns positive response will be selected."},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"This spec proposes to select the resource provider of the bandwidth resource"},{"line_number":620,"context_line":"with Placement + Nova. Placement will provide candidates, and then the filter"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_99b8e2c8","line":617,"range":{"start_line":617,"start_character":0,"end_line":617,"end_character":25},"updated":"2018-03-27 17:21:19.000000000","message":"returns a positive response","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":614,"context_line":"asking every mechanism driver available on the given compute host to try to"},{"line_number":615,"context_line":"bind the port. Neutron does this in the order of the mechanism drivers listed"},{"line_number":616,"context_line":"in ml2/mechanism_drivers config options. The first mechanism_driver that"},{"line_number":617,"context_line":"returns positive response will be selected."},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"This spec proposes to select the resource provider of the bandwidth resource"},{"line_number":620,"context_line":"with Placement + Nova. Placement will provide candidates, and then the filter"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_2f094830","line":617,"range":{"start_line":617,"start_character":0,"end_line":617,"end_character":25},"in_reply_to":"bf659307_99b8e2c8","updated":"2018-03-27 18:32:58.000000000","message":"removed the section per Jay\u0027s comment.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":629,"context_line":"new Nova weigher needs to be introduced in the filter scheduler. This new"},{"line_number":630,"context_line":"NeutronBackendWeigher does not want to specify order between hosts, instead it"},{"line_number":631,"context_line":"wants to specify order between allocation candidates targeting the same"},{"line_number":632,"context_line":"compute host. This weigher will get the preferred backend order from a new"},{"line_number":633,"context_line":"nova.conf option. The deployer has to make sure that the order of the backends"},{"line_number":634,"context_line":"are the same both in the Nova and in the Neutron config. To be able to"},{"line_number":635,"context_line":"implement this weigher the filter scheduler needs to be changed to support"},{"line_number":636,"context_line":"filtering and weighing allocation candidates instead of only filtering and"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_79b5cecc","line":633,"range":{"start_line":632,"start_character":64,"end_line":633,"end_character":16},"updated":"2018-03-27 17:21:19.000000000","message":"Is there a reason this new weigher can\u0027t get its preferred backend order from the ml2 conf?  I.e. why do we need a separate (identical, redundant) config value in a separate place?","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":629,"context_line":"new Nova weigher needs to be introduced in the filter scheduler. This new"},{"line_number":630,"context_line":"NeutronBackendWeigher does not want to specify order between hosts, instead it"},{"line_number":631,"context_line":"wants to specify order between allocation candidates targeting the same"},{"line_number":632,"context_line":"compute host. This weigher will get the preferred backend order from a new"},{"line_number":633,"context_line":"nova.conf option. The deployer has to make sure that the order of the backends"},{"line_number":634,"context_line":"are the same both in the Nova and in the Neutron config. To be able to"},{"line_number":635,"context_line":"implement this weigher the filter scheduler needs to be changed to support"},{"line_number":636,"context_line":"filtering and weighing allocation candidates instead of only filtering and"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_ef02700b","line":633,"range":{"start_line":632,"start_character":64,"end_line":633,"end_character":16},"in_reply_to":"bf659307_79b5cecc","updated":"2018-03-27 18:32:58.000000000","message":"I don\u0027t know if there is any precedent in OpenStack when one service reads another service\u0027s config file. I can see problems if these services are running in two different container.\nAnyhow the section has been removed.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":640,"context_line":"generate a list of alternate hosts for a given select_destination request. If"},{"line_number":641,"context_line":"we want to fully simulate the Neutron backend selection mechanism then the Nova"},{"line_number":642,"context_line":"retry mechanism needs to consider not just alternate hosts but alternate"},{"line_number":643,"context_line":"allocation candidates (might targeting the same compute host) during"},{"line_number":644,"context_line":"re-schedule."},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"The chance scheduler uses placement so the overall bandwidth feature can be"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_19ccd268","line":643,"range":{"start_line":643,"start_character":23,"end_line":643,"end_character":28},"updated":"2018-03-27 17:21:19.000000000","message":"possibly","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":640,"context_line":"generate a list of alternate hosts for a given select_destination request. If"},{"line_number":641,"context_line":"we want to fully simulate the Neutron backend selection mechanism then the Nova"},{"line_number":642,"context_line":"retry mechanism needs to consider not just alternate hosts but alternate"},{"line_number":643,"context_line":"allocation candidates (might targeting the same compute host) during"},{"line_number":644,"context_line":"re-schedule."},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"The chance scheduler uses placement so the overall bandwidth feature can be"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_f217b344","line":643,"range":{"start_line":643,"start_character":23,"end_line":643,"end_character":28},"in_reply_to":"bf659307_19ccd268","updated":"2018-03-27 18:32:58.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":"There are multiple alternatives:"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"* Extend Placement to return every allocation candidate in a way that parts of"},{"line_number":670,"context_line":"  the allocations in a candidate is always mapped to a single resource request"},{"line_number":671,"context_line":"  group. This needs substantial changes how Placement generates allocation"},{"line_number":672,"context_line":"  candidates today."},{"line_number":673,"context_line":"* Implement a mapping algorithm in Nova that takes the allocation candidate"},{"line_number":674,"context_line":"  selected by the scheduler, takes the resource requests from the ports in the"},{"line_number":675,"context_line":"  server create request and do the math to figure out the mapping. To do this"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_d9dada15","line":672,"range":{"start_line":669,"start_character":0,"end_line":672,"end_character":19},"updated":"2018-03-27 17:21:19.000000000","message":"This is something that\u0027s been brought up before, and it seems like a good idea at first blush.  However, ultimately it doesn\u0027t gain us anything.  The thing doing the work (neutron in this case) needs to be able to identify resources based on the resource class and which provider they came from.  But (and this is the important bit) if it can\u0027t distinguish between two resources, then *it doesn\u0027t matter which is which*.  (If it does matter, it means things were modeled wrong.)\n\nThis comes into play below...","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":"There are multiple alternatives:"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"* Extend Placement to return every allocation candidate in a way that parts of"},{"line_number":670,"context_line":"  the allocations in a candidate is always mapped to a single resource request"},{"line_number":671,"context_line":"  group. This needs substantial changes how Placement generates allocation"},{"line_number":672,"context_line":"  candidates today."},{"line_number":673,"context_line":"* Implement a mapping algorithm in Nova that takes the allocation candidate"},{"line_number":674,"context_line":"  selected by the scheduler, takes the resource requests from the ports in the"},{"line_number":675,"context_line":"  server create request and do the math to figure out the mapping. To do this"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_72ae4399","line":672,"range":{"start_line":669,"start_character":0,"end_line":672,"end_character":19},"in_reply_to":"bf659307_d9dada15","updated":"2018-03-27 18:32:58.000000000","message":"In general I agree that neutron as a whole should be able to do the mapping but the picture gets complicated when parts of neutron (the neutron server) needs the mapping information to be able to select the proper neutron-agent to send the request to. \n\nAnother complication is that neutron binds ports one by one independently. So if a two ports are in the request with similar needs then the resulting allocation might define which port will have which allocation. This means that neutron is free to choose both possible allocation-port pairing. But neutron needs to select the same pairing solution during both individual port binding procedure. \n\nFortunately after talking to Miguel and Jay it turned out that the only case where such freedom happens when two PFs provide access to the same physnet. In that case both port binding will be handled by the same SRIOV agent so we might have a chance to keep this pairing as an agent internal decision.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":670,"context_line":"  the allocations in a candidate is always mapped to a single resource request"},{"line_number":671,"context_line":"  group. This needs substantial changes how Placement generates allocation"},{"line_number":672,"context_line":"  candidates today."},{"line_number":673,"context_line":"* Implement a mapping algorithm in Nova that takes the allocation candidate"},{"line_number":674,"context_line":"  selected by the scheduler, takes the resource requests from the ports in the"},{"line_number":675,"context_line":"  server create request and do the math to figure out the mapping. To do this"},{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_590eca8d","line":678,"range":{"start_line":673,"start_character":0,"end_line":678,"end_character":8},"updated":"2018-03-27 17:21:19.000000000","message":"I\u0027m less worried about duplicating placement logic than about trying to reproduce mapping information that the neutron side already has.  It was responsible for constructing the RPs and their inventory to begin with, so that codebase ought to have access to whatever information allows it to map {RC+RP} to {resources}.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":670,"context_line":"  the allocations in a candidate is always mapped to a single resource request"},{"line_number":671,"context_line":"  group. This needs substantial changes how Placement generates allocation"},{"line_number":672,"context_line":"  candidates today."},{"line_number":673,"context_line":"* Implement a mapping algorithm in Nova that takes the allocation candidate"},{"line_number":674,"context_line":"  selected by the scheduler, takes the resource requests from the ports in the"},{"line_number":675,"context_line":"  server create request and do the math to figure out the mapping. To do this"},{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_52845f0c","line":678,"range":{"start_line":673,"start_character":0,"end_line":678,"end_character":8},"in_reply_to":"bf659307_590eca8d","updated":"2018-03-27 18:32:58.000000000","message":"\"so that coudebase ought to have access\"\nThe overall codebase yes, but it does not mean that individual services (neutron-server, neutron-agent) triggered at different times (once for binding port1 then a bit later for binding port2) has the necessary information to do their job.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"},{"line_number":682,"context_line":"  server create request at once. When two ports request similar resources,"},{"line_number":683,"context_line":"  e.g. 1G bandwidth from a vnic_type\u003ddirect, and then the resource allocation"},{"line_number":684,"context_line":"  was done in a way that the two ports got the resources from two different"},{"line_number":685,"context_line":"  (but logically equivalent) Network RPs then when Neutron does each individual"},{"line_number":686,"context_line":"  port binding it cannot make sure that each RP is used only for one port."},{"line_number":687,"context_line":""},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"How the mapping is communicated to Neutron"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_79862ede","line":686,"range":{"start_line":679,"start_character":0,"end_line":686,"end_character":74},"updated":"2018-03-27 17:21:19.000000000","message":"Prefer this.  I assume it\u0027s possible for the port binding process to see whether a particular resource is already consumed.  So following what I said above - if the port binding code can correlate a single port to a single piece of the allocation data, it\u0027s easy.  If there\u0027s more than one possibility, it can just pick one that\u0027s still available.  The binding process for one port will consume one resource from the allocation data.  It should always be the case that the number of port-ish resources in the allocation matches the number of ports we\u0027re binding.\n\nThere is one wrinkle, though, for the non-port-ish resources in the allocation.  It\u0027s possible for a request like resources1\u003dVF:1,BW:200\u0026resources2\u003dVF:1,BW:300 to land on a single RP, in which case the allocation will look like RP1 { VF: 2, BW: 500 }.  In that kind of situation, neutron will need a way to look back at the request side somehow to figure out that one VF gets BW:200 and the other gets 300.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"},{"line_number":682,"context_line":"  server create request at once. When two ports request similar resources,"},{"line_number":683,"context_line":"  e.g. 1G bandwidth from a vnic_type\u003ddirect, and then the resource allocation"},{"line_number":684,"context_line":"  was done in a way that the two ports got the resources from two different"},{"line_number":685,"context_line":"  (but logically equivalent) Network RPs then when Neutron does each individual"},{"line_number":686,"context_line":"  port binding it cannot make sure that each RP is used only for one port."},{"line_number":687,"context_line":""},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"How the mapping is communicated to Neutron"}],"source_content_type":"text/x-rst","patch_set":21,"id":"9f6a8fd7_16dec410","line":686,"range":{"start_line":679,"start_character":0,"end_line":686,"end_character":74},"in_reply_to":"bf659307_3a214fb1","updated":"2018-04-19 15:53:14.000000000","message":"I still think that Neutron cannot do the mapping as mostly because ports are bound one by one and Neutron does not known (and does not need to know) that what set of ports belongs to the same server and therefore what ports\u0027 resource are allocated together in placement.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"31c91fe5d69d4c77d96f00196c459f2d47c5901f","unresolved":false,"context_lines":[{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"},{"line_number":682,"context_line":"  server create request at once. When two ports request similar resources,"},{"line_number":683,"context_line":"  e.g. 1G bandwidth from a vnic_type\u003ddirect, and then the resource allocation"},{"line_number":684,"context_line":"  was done in a way that the two ports got the resources from two different"},{"line_number":685,"context_line":"  (but logically equivalent) Network RPs then when Neutron does each individual"},{"line_number":686,"context_line":"  port binding it cannot make sure that each RP is used only for one port."},{"line_number":687,"context_line":""},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"How the mapping is communicated to Neutron"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_3a214fb1","line":686,"range":{"start_line":679,"start_character":0,"end_line":686,"end_character":74},"in_reply_to":"bf659307_520e9f8d","updated":"2018-03-29 08:56:56.000000000","message":"It was discussed over IRC a lot [1]. But I guess there was no real conclusion. Meantime we got some deeper problems (see Miguel\u0027s comment on PS22 about physnet) so I have to get back to the mapping issue later.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-03-27.log.html#t2018-03-27T17:06:10","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f5d5f77e309c95971fd06b1f55bf653aad705cb5","unresolved":false,"context_lines":[{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"},{"line_number":682,"context_line":"  server create request at once. When two ports request similar resources,"},{"line_number":683,"context_line":"  e.g. 1G bandwidth from a vnic_type\u003ddirect, and then the resource allocation"},{"line_number":684,"context_line":"  was done in a way that the two ports got the resources from two different"},{"line_number":685,"context_line":"  (but logically equivalent) Network RPs then when Neutron does each individual"},{"line_number":686,"context_line":"  port binding it cannot make sure that each RP is used only for one port."},{"line_number":687,"context_line":""},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"How the mapping is communicated to Neutron"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_bc66f428","line":686,"range":{"start_line":679,"start_character":0,"end_line":686,"end_character":74},"in_reply_to":"bf659307_79862ede","updated":"2018-03-27 17:27:26.000000000","message":"Thinking about ways for neutron to have access to the original request data, perhaps the easiest thing is for nova to send it down along with the allocation data in the binding profile.  Because nova has already synthesized that information from the various possible sources (flavor, image, ports, etc.) and we want to avoid duplicating *that* logic on the neutron side - assuming we would even have access to all of those pieces from there.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":676,"context_line":"  Nova has every input data, but the algorithm might have similar complexity as"},{"line_number":677,"context_line":"  the Placement algorithm that generated the allocation candidates in the first"},{"line_number":678,"context_line":"  place."},{"line_number":679,"context_line":"* Alternatively we can try to implement a mapping algorithm in Neutron. However"},{"line_number":680,"context_line":"  it seems unfeasible because Neutron sees each port (and its binding)"},{"line_number":681,"context_line":"  individually while the resource allocation was done for every port in the"},{"line_number":682,"context_line":"  server create request at once. When two ports request similar resources,"},{"line_number":683,"context_line":"  e.g. 1G bandwidth from a vnic_type\u003ddirect, and then the resource allocation"},{"line_number":684,"context_line":"  was done in a way that the two ports got the resources from two different"},{"line_number":685,"context_line":"  (but logically equivalent) Network RPs then when Neutron does each individual"},{"line_number":686,"context_line":"  port binding it cannot make sure that each RP is used only for one port."},{"line_number":687,"context_line":""},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"How the mapping is communicated to Neutron"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_520e9f8d","line":686,"range":{"start_line":679,"start_character":0,"end_line":686,"end_character":74},"in_reply_to":"bf659307_bc66f428","updated":"2018-03-27 18:32:58.000000000","message":"I have to have a fresh mind for this to go through. So I will respond to this tomorrow.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"Regardless of where the mapping is generated (i.e. in Placement or in Nova)"},{"line_number":693,"context_line":"Nova will be the module that knows which allocation candidate is finally"},{"line_number":694,"context_line":"selected. Therefore Nova has to communicate the mapping to Neutron. This spec"},{"line_number":695,"context_line":"proposes to use the port binding to communicate such mapping."},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"In Nova the necessary allocation data needs to be passed down to the"},{"line_number":698,"context_line":"nova-compute service as the port binding happens there. The raw allocation"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_99c78213","line":695,"range":{"start_line":694,"start_character":68,"end_line":695,"end_character":61},"updated":"2018-03-27 17:21:19.000000000","message":"I don\u0027t know how much room we have in the binding profile, but as far as I\u0027m concerned, the entire allocation (resources + provider summaries) should be sent across to neutron, and let neutron figure out which parts it \"owns\".\n\nI believe this mean we\u0027re sending the same info N times if there are N ports on the instance.  I\u0027m still okay with that.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"Regardless of where the mapping is generated (i.e. in Placement or in Nova)"},{"line_number":693,"context_line":"Nova will be the module that knows which allocation candidate is finally"},{"line_number":694,"context_line":"selected. Therefore Nova has to communicate the mapping to Neutron. This spec"},{"line_number":695,"context_line":"proposes to use the port binding to communicate such mapping."},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"In Nova the necessary allocation data needs to be passed down to the"},{"line_number":698,"context_line":"nova-compute service as the port binding happens there. The raw allocation"}],"source_content_type":"text/x-rst","patch_set":21,"id":"9f6a8fd7_56dbdc19","line":695,"range":{"start_line":694,"start_character":68,"end_line":695,"end_character":61},"in_reply_to":"bf659307_9262f73d","updated":"2018-04-19 15:53:14.000000000","message":"Based on discussion with the Neutron guys, it seems that Neutron only needs the RP uuid providing bandwidth for the given port.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"05dc512ac4916a222eed9299f56d866ebaf384a4","unresolved":false,"context_lines":[{"line_number":691,"context_line":""},{"line_number":692,"context_line":"Regardless of where the mapping is generated (i.e. in Placement or in Nova)"},{"line_number":693,"context_line":"Nova will be the module that knows which allocation candidate is finally"},{"line_number":694,"context_line":"selected. Therefore Nova has to communicate the mapping to Neutron. This spec"},{"line_number":695,"context_line":"proposes to use the port binding to communicate such mapping."},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"In Nova the necessary allocation data needs to be passed down to the"},{"line_number":698,"context_line":"nova-compute service as the port binding happens there. The raw allocation"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_9262f73d","line":695,"range":{"start_line":694,"start_character":68,"end_line":695,"end_character":61},"in_reply_to":"bf659307_99c78213","updated":"2018-03-27 18:32:58.000000000","message":"We can add a new field to the binding profile that holds this if needed. And this \u0027if needed\u0027 part I\u0027m not sure about at the moment. I have to get back to this tomorrow.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":694,"context_line":"selected. Therefore Nova has to communicate the mapping to Neutron. This spec"},{"line_number":695,"context_line":"proposes to use the port binding to communicate such mapping."},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"In Nova the necessary allocation data needs to be passed down to the"},{"line_number":698,"context_line":"nova-compute service as the port binding happens there. The raw allocation"},{"line_number":699,"context_line":"data is provided by the scheduler via the allocation_request field of the"},{"line_number":700,"context_line":"returned Selection object."},{"line_number":701,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_5c00f867","line":698,"range":{"start_line":697,"start_character":33,"end_line":698,"end_character":20},"updated":"2018-03-27 17:21:19.000000000","message":"Most of this work may already be done for you - see [1].\n\n[1] https://review.openstack.org/#/c/511879/","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":712,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":715,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":716,"context_line":"which impact the Placement REST API."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_9cb8d0c8","line":715,"range":{"start_line":715,"start_character":40,"end_line":715,"end_character":68},"updated":"2018-03-27 17:21:19.000000000","message":"Reference (brand new) spec/bp [1].\n\n[1] Nested Resource Providers - Allocation Candidates https://review.openstack.org/556873","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":712,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"The Placement REST API is not directly impacted. However this feature depends"},{"line_number":715,"context_line":"on the `granular-resource-request`_ and `nested-resource-providers`_ features"},{"line_number":716,"context_line":"which impact the Placement REST API."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"}],"source_content_type":"text/x-rst","patch_set":21,"id":"9f6a8fd7_b6f59885","line":715,"range":{"start_line":715,"start_character":40,"end_line":715,"end_character":68},"in_reply_to":"bf659307_9cb8d0c8","updated":"2018-04-19 15:53:14.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"},{"line_number":719,"context_line":"port, or support trunk subports with bandwidth rules then Placement needs to"},{"line_number":720,"context_line":"enforce generations in PUT /allocations/{consumer_id} as both Nova and Neutron"},{"line_number":721,"context_line":"are going to be writing allocations for the same consumer."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_3ccc2460","line":720,"range":{"start_line":720,"start_character":23,"end_line":720,"end_character":26},"updated":"2018-03-27 17:21:19.000000000","message":"POST, probably.","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286f8dcf94851bbeee223cdc71a8441d67449d4d","unresolved":false,"context_lines":[{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"},{"line_number":719,"context_line":"port, or support trunk subports with bandwidth rules then Placement needs to"},{"line_number":720,"context_line":"enforce generations in PUT /allocations/{consumer_id} as both Nova and Neutron"},{"line_number":721,"context_line":"are going to be writing allocations for the same consumer."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"bf659307_1cd120fc","line":720,"range":{"start_line":720,"start_character":8,"end_line":720,"end_character":19},"updated":"2018-03-27 17:21:19.000000000","message":"Reference (brand new) spec/bp [1].\n\n[1] Add Generation to Consumers  https://review.openstack.org/556971","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"},{"line_number":719,"context_line":"port, or support trunk subports with bandwidth rules then Placement needs to"},{"line_number":720,"context_line":"enforce generations in PUT /allocations/{consumer_id} as both Nova and Neutron"},{"line_number":721,"context_line":"are going to be writing allocations for the same consumer."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"9f6a8fd7_3618a8d1","line":720,"range":{"start_line":720,"start_character":8,"end_line":720,"end_character":19},"in_reply_to":"bf659307_1cd120fc","updated":"2018-04-19 15:53:14.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":717,"context_line":""},{"line_number":718,"context_line":"If Neutron wants to support changing the bandwidth rule on an already bound"},{"line_number":719,"context_line":"port, or support trunk subports with bandwidth rules then Placement needs to"},{"line_number":720,"context_line":"enforce generations in PUT /allocations/{consumer_id} as both Nova and Neutron"},{"line_number":721,"context_line":"are going to be writing allocations for the same consumer."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"9f6a8fd7_d60e0c8c","line":720,"range":{"start_line":720,"start_character":23,"end_line":720,"end_character":26},"in_reply_to":"bf659307_3ccc2460","updated":"2018-04-19 15:53:14.000000000","message":"Done","commit_id":"3d16a2ab0ff2ada5838cb49ae7093e48925d1b2b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"52b8052e53966a7101ae549f72ca65577a76830b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"---------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"This spec needs to consider multiple flows and scenarios detailed in the"},{"line_number":54,"context_line":"following chapters."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Neutron agent first start"},{"line_number":57,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_3f4e4f6f","line":54,"range":{"start_line":54,"start_character":10,"end_line":54,"end_character":18},"updated":"2018-03-27 23:31:59.000000000","message":"nit: sections?","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"---------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"This spec needs to consider multiple flows and scenarios detailed in the"},{"line_number":54,"context_line":"following chapters."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Neutron agent first start"},{"line_number":57,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9f6a8fd7_53e52ea7","line":54,"range":{"start_line":54,"start_character":10,"end_line":54,"end_character":18},"in_reply_to":"bf659307_3f4e4f6f","updated":"2018-04-19 15:53:14.000000000","message":"Done","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"dbb6ba30f3d8c30103abf3be227981191b8f0a2e","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_f2dd6142","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"updated":"2018-03-28 08:15:04.000000000","message":"Unfortunately my testing shows otherwise:\n\n l2_conf.ini:\n [ml2_type_flat] \n flat_networks \u003d physnet0\n \n ovs_agent.ini:\n [ovs]\n bridge_mappings \u003d physnet0:br-physnet0\n \n sriov_agent.ini:\n [sriov_nic]\n physical_device_mappings \u003d physnet0:ens4\n \n openstack network create --provider-network-type flat --provider-physical-network physnet0 net0\n # succeeds\n \n neutron port-create net0 --name port0 --vnic-type normal --binding:host_id devstack1\n # create succeeds, binding succeeds with vif_type ovs\n neutron port-create net0 --name port1 --vnic-type direct --binding:host_id devstack1\n # create succeeds, binding succeeds with vif_type hw_veb\n\nSo you can have access to the same physnet on the same host via two different backends. Since the two backends do not share the same bandwidth (they use different physical network interfaces) this cannot be modeled in a resource provider without vnic_type/backend information.\n\nIn the setup above vnic_type information is enough. However if we had two backends supporting overlapping vnic_types then even vnic_type information would not be enough to replicate neutron\u0027s current port binding logic. However fully replicating neutron\u0027s current port binding logic in placement has other problems, namely that placement does not know about some dynamic information (eg. agent is live or dead) that\u0027s an input for neutron today.\n\nOf course we can choose to prohibit these cases but neutron does not prohibit them today.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c069648df9d2b04a38ec11f7f0c4afd401211bc8","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_feb04b45","line":420,"in_reply_to":"","updated":"2018-04-04 02:43:18.000000000","message":"The most common case for two different backend on one host that are connected to the same physnet is sriov an ovs.  This is a very common usecase. The fact that nova selected the neutron backend was considered a major feature as it would allow us to choose between Linux bridge and ovs on the same host a trait for a neutron extention such as vlan transparency. Lb can support vlan transparency but ovs does not. The sriov case is also simple to resolve by tagging the backend with the vnic types the support as traits and including the trait in the neutron port resource request.\n\nI dont think 4 is valid because at leaste in the sriov and ovs case they both may be connected to the same physnet but the will not be connected via the same nic as the vlan filter in the nic would prevent ovs vlan provider networks from working correctly when vfs are allocated.\n\nI have always recommend that prople depoying ovs and  sirov on the same host use the same physnet in the past and i would assume that is the default in most installers today","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1920ab182b65a24988cc95da8b4ef1296b769d3c","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9f6a8fd7_0d01b305","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"9f6a8fd7_56f19ccc","updated":"2018-04-20 16:11:10.000000000","message":"In the case of a user requesting an SR-IOV VF, then the request will be for some amount of SRIOV_NET_VF resource class, so they would request from placement like this:\n\n GET /allocation_candidates?resources\u003dSRIOV_NET_VF:1,NET_EGRESS_BANDWIDTH_KILOBITS_PER_SECOND:2000\u0026required\u003dCUSTOM_PHYSNET_A\n\nfor the case where the user is NOT requesting an SR-IOV VF, then the request would be just:\n\n GET /allocation_candidates?resources\u003dNET_EGRESS_BANDWIDTH_KILOBITS_PER_SECOND:2000\u0026required\u003dCUSTOM_PHYSNET_A\n\nwhat am I missing here?","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"12cc2cdc4dbb22d803833bb3b715db8def73371c","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_60958686","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_538b8166","updated":"2018-04-03 16:07:02.000000000","message":"Discussion continued here on how to workaround the problem of not having \"any(traits)\": http://eavesdrop.openstack.org/irclogs/%23openstack-neutron/%23openstack-neutron.2018-04-03.log.html#t2018-04-03T14:51:17\n\nMiguel said he\u0027ll sum up the outcome in a new patch set.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9f6a8fd7_56f19ccc","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_757f34ab","updated":"2018-04-19 15:53:14.000000000","message":"\u003e \u003e So you can have access to the same physnet on the same host via\n \u003e two\n \u003e \u003e different backends. Since the two backends do not share the same\n \u003e \u003e bandwidth (they use different physical network interfaces) this\n \u003e \u003e cannot be modeled in a resource provider without\n \u003e vnic_type/backend\n \u003e \u003e information.\n \u003e \n \u003e \u003e In the setup above vnic_type information is enough. However if we\n \u003e \u003e had two backends supporting overlapping vnic_types then even\n \u003e \u003e vnic_type information would not be enough to replicate neutron\u0027s\n \u003e \u003e current port binding logic.\n \u003e \n \u003e But we are not *trying* to replicate Neutron\u0027s port binding logic.\n \u003e All we are attempting to do is ensure that the placement service\n \u003e has an accurate picture of the resource inventories for various\n \u003e providers of those resources.\n \u003e \n \u003e The Neutron agent should be modeling the physical interface as a\n \u003e resource provider. Those resource providers should have inventory\n \u003e of NET_INGRESS_BANDWIDTH_KILOBITS_PER_SECOND. Both resource\n \u003e providers should both be tagged with the CUSTOM_PHYSNET0 trait.\n \u003e \n \u003e I am not willing to duplicate the complexity (oftentimes\n \u003e unnecessary complexity IMHO) of Neutron\u0027s port binding semantics in\n \u003e placement\u0027s API or in the os-traits library of standard\n \u003e capabilities/traits.\n \u003e \n \u003e At the end of the day, the user is going to be requesting some\n \u003e bandwidth be provided to their vNIC -- bandwidth that is ultimately\n \u003e provided by a physical NIC. Whether or not the vNIC is an OVS\n \u003e bridge or an SR-IOV VF makes no difference to the end user. And if\n \u003e it does make a difference to the end user, then they should be\n \u003e requesting a trait that indicates what that *difference* is, not\n \u003e what vNIC type the underlying network backend implements.\n\nThe end user does explicitly ask for SRIOV today by setting the binding:vnic_type to \u0027direct\u0027 in the Neutron port she creates. So when Placement + Nova select the provider of the bandwidth the user\u0027s vnic_type request needs to be considered.\n\n \u003e \n \u003e In other words, if the difference the *end user* expects is\n \u003e *faster* networking speeds from their vNIC being attached to an\n \u003e SR-IOV VF vs. an OVS bridge, then the trait decorating the physical\n \u003e network interface that provides SR-IOV VFs should be something like\n \u003e \"CUSTOM_NETWORKING_FAST\" or something like that.\n \u003e \n \u003e And the request being made to placement would be something like\n \u003e this:\n \u003e \n \u003e resources\u003dNET_INGRESS_BANDWIDTH_KILOBITS_PER_SECOND:200000\u0026required\u003dCUSTOM_NETWORKING_FAST\n \u003e \n\nSure, we can start mapping vnic_type \u003d \u0027direct\u0027 to trait CUSTOM_NETWORKING_FAST and vnic_type \u003d \u0027normal\u0027 to trait CUSTOM_NETWORKING_NORMAL etc. But the end user already knows about the vnic_type \u0027direct\u0027 if she uses SRIOV via Neutron so I don\u0027t see a problem using the same string in the trait as well.\n\n \u003e \u003e However fully replicating neutron\u0027s\n \u003e \u003e current port binding logic in placement has other problems,\n \u003e namely\n \u003e \u003e that placement does not know about some dynamic information (eg.\n \u003e \u003e agent is live or dead) that\u0027s an input for neutron today.\n \u003e \n \u003e And placement is never going to know about that kind of\n \u003e information.\n \u003e \n \u003e \u003e Of course we can choose to prohibit these cases but neutron does\n \u003e \u003e not prohibit them today.\n \u003e \n \u003e Let\u0027s try to separate placement and resource tracking concerns from\n \u003e Neutron\u0027s port binding logic. The two do not need to mix.\n\nUnfortunately the two do mix. :/ This spec proposes to use Placement and the nova-scheduler to select which bandwidth providing RP and therefore which physical device will provide the bandwidth for a given Neutron port. Today selecting the physical device happens during Neutron port binding but after this spec is implemented\nthis selection will happen when an allocation candidate is selected for the server in the nova-scheduler. In other words determining which RP will provide the bandwidth to a Neutron port decides about things that is done by the Neutron port binding today.\n\nI added similar explanation to the beginning of the latest PS.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"126b4c564c60ac40ca30af4d8d8bdbecba243187","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_cc153de7","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_757f34ab","updated":"2018-04-09 14:54:20.000000000","message":"Jay, I never intended to replicate Neutron\u0027s port binding logic with all its intricacies. Sorry if I made the wrong impression.\n\nI fully agree that a user should not know about whether a vnic is implemented by ovs or sr-iov. If the user prefers one over the other that should be expressed through quantitative and/or qualitative properties of the resource providers - what performance it can give - never through directly asking for a back-end.\n\nOn the other hand I fail to see how CUSTOM_NETWORKING_FAST is any different from CUSTOM_VNIC_TYPE_DIRECT other than introducing a new name for the same thing. I\u0027m sure you know that vnic_type is an input to neutron port binding. The output is the vif_type not vnic_type. In my mind asking for vnic_type direct is asking for the performance level of sr-iov, but not sr-iov itself. If I had been asking for sr-iov I\u0027d be asking for vif_type hw_veb. But I\u0027d consider that a bad idea just like you consider it a bad idea.\n\nAlso while not replicating Neutron\u0027s port binding logic as it is we do have to replicate a minimal subset of it, because we must choose a physical interface neutron is able to work with. The question is what is the minimum. We seem to agree on first answering the question: is the physnet available.\n\nI have one more in my mind, which gibi already started to expand once here in this spec. That is the preference order of neutron back-ends (as it is expressed by neutron via the ordered list of mechanism drivers).\n\nPlease consider Sean\u0027s use case: ovs and sr-iov on the same physnet on the same host. Assume we have a few (let\u0027s say 16) expensive VFs and many (let\u0027s say 1024) cheap ovs ports on the same host connected to the same physnet. Assume the user first wants some (200) ports without specifying any performance-describing traits. We may end up giving away some or all the expensive VFs when the user wasn\u0027t even asking for that level of performance. When he comes back asking for the performant ones there\u0027s no more. Neutron solved this by putting the mechanism drivers in preference order, so unqualified requests were satisfied by the cheapest driver.\n\nOne possible solution gibi already written about once involves backend traits and a scheduler weigher. Do you agree this is a valid problem to solve? Do you see an alternative to the scheduler weigher?","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4c380635319c772ed5f78b211708827e646d3600","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_538b8166","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_8768341d","updated":"2018-04-03 12:16:31.000000000","message":"I agree that we have to decide in placement already if there\u0027s a segment that we can bind. So I think (1) is a must.\n\nI also think (2) is viable for the purposes of this spec. (Until we have to deal with dynamic segments, but that\u0027s far away.)\n\nI find (3) problematic, because the granular-resource-request spec [1] does not support \"any(traits)\". It only supports \"all(traits)\".\n\nI\u0027m okay with (4). We just need to clearly document this as a limitation. If we want to enforce it automatically I\u0027d put the enforcement logic in neutron-server though. Because otherwise the so far independent agents would need to start knowing about each other\u0027s config.\n\n[1] https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/granular-resource-requests.html#numbered-request-groups","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e5a77450a44fa5dae5233879b643db52dfdda1a8","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_757f34ab","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_f2dd6142","updated":"2018-04-06 19:01:06.000000000","message":"\u003e So you can have access to the same physnet on the same host via two\n \u003e different backends. Since the two backends do not share the same\n \u003e bandwidth (they use different physical network interfaces) this\n \u003e cannot be modeled in a resource provider without vnic_type/backend\n \u003e information.\n\n \u003e In the setup above vnic_type information is enough. However if we\n \u003e had two backends supporting overlapping vnic_types then even\n \u003e vnic_type information would not be enough to replicate neutron\u0027s\n \u003e current port binding logic.\n\nBut we are not *trying* to replicate Neutron\u0027s port binding logic. All we are attempting to do is ensure that the placement service has an accurate picture of the resource inventories for various providers of those resources.\n\nThe Neutron agent should be modeling the physical interface as a resource provider. Those resource providers should have inventory of NET_INGRESS_BANDWIDTH_KILOBITS_PER_SECOND. Both resource providers should both be tagged with the CUSTOM_PHYSNET0 trait.\n\nI am not willing to duplicate the complexity (oftentimes unnecessary complexity IMHO) of Neutron\u0027s port binding semantics in placement\u0027s API or in the os-traits library of standard capabilities/traits.\n\nAt the end of the day, the user is going to be requesting some bandwidth be provided to their vNIC -- bandwidth that is ultimately provided by a physical NIC. Whether or not the vNIC is an OVS bridge or an SR-IOV VF makes no difference to the end user. And if it does make a difference to the end user, then they should be requesting a trait that indicates what that *difference* is, not what vNIC type the underlying network backend implements.\n\nIn other words, if the difference the *end user* expects is *faster* networking speeds from their vNIC being attached to an SR-IOV VF vs. an OVS bridge, then the trait decorating the physical network interface that provides SR-IOV VFs should be something like \"CUSTOM_NETWORKING_FAST\" or something like that.\n\nAnd the request being made to placement would be something like this:\n\n resources\u003dNET_INGRESS_BANDWIDTH_KILOBITS_PER_SECOND:200000\u0026required\u003dCUSTOM_NETWORKING_FAST\n\n \u003e However fully replicating neutron\u0027s\n \u003e current port binding logic in placement has other problems, namely\n \u003e that placement does not know about some dynamic information (eg.\n \u003e agent is live or dead) that\u0027s an input for neutron today.\n\nAnd placement is never going to know about that kind of information.\n\n \u003e Of course we can choose to prohibit these cases but neutron does\n \u003e not prohibit them today.\n\nLet\u0027s try to separate placement and resource tracking concerns from Neutron\u0027s port binding logic. The two do not need to mix.\n\nBest,\n\n-jay","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"31c91fe5d69d4c77d96f00196c459f2d47c5901f","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_fa5e7774","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_f2dd6142","updated":"2018-03-29 08:56:56.000000000","message":"This seems to invalidate lot of the changes I made in PS 22 (i.e. removing vnic_type). Miguel accepted Bence\u0027s (rubasov) findings [1]\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-neutron/%23openstack-neutron.2018-03-28.log.html#t2018-03-28T14:40:35","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"07a612cfd488f1319750c023a44aeadedff9174a","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"We made the following assumptions:"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_8768341d","line":420,"range":{"start_line":418,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"bf659307_fa5e7774","updated":"2018-03-29 22:02:39.000000000","message":"All the mechanism drivers in the Neutron reference implementation (referred to as back-ends in this spec) bind a port in a host when one of the segments of the port\u0027s network can be reached from the host. Binding a port is really binding it to a segment. In the code, that reachability is determined by checking that the physnet of one of the network segments is in the physnet -\u003e bridge / interface mappings of the agent of that mechanism driver running in the host and happens only in two places: https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/mech_agent.py#L252 (for OVS, Linuxbridge and macvtap) and https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/mech_sriov/mech_driver/mech_driver.py#L149 (for SR-IOV). As a consequence, for the purposes of this spec we can achieve coordination between Nova and Neutron:\n\n1) Having in each Network RP a trait indicating the physnet associated with it\n\n2) In the \"required\" attribute in L550 below, Neutron will return the physnets of all the port\u0027s network segments\n\n3) The scheduler will request from placement candidates with RPs that can satisfy the port\u0027s bandwidth requirement that also have in their traits any one of the physnets indicated in point 2  \n\n4) Require that physnets are not shared among mechanism drivers (back-ends) that support minimum bandwidth rules. We could enforce this during agents startup","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"f8f5b9c4924244dc3f9a1de89fb0aae97c9f7df8","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"* A Neutron physnet is always managed by a single Neutron backend on a given"},{"line_number":419,"context_line":"  compute host. So selecting a physnet with Placement + nova-scheduler"},{"line_number":420,"context_line":"  implicitly selects the Neutron backend."},{"line_number":421,"context_line":"* Two SRIOV physical functions (PFs) can give access to the same physnet on a"},{"line_number":422,"context_line":"  given compute but those PFs always implement the same vnic_type."},{"line_number":423,"context_line":"  This means that using only physnet traits in Placement and in"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_999fc564","line":420,"in_reply_to":"bf659307_feb04b45","updated":"2018-04-05 13:22:43.000000000","message":"Technically speaking the restriction of (4) can be easily lifted by bringing back the vnic_type traits. Or the backend traits if we want to even allow two backends on the same host connected to the same physnet both supporting minimum bandwidth guarantees for the same vnic_type. We need to decide if we want to bring them back or not. At this point I\u0027m +1 for having vnic_type traits.\n\nlong side note: I do not understand Sean\u0027s comments on vlan transparency at all. First I think neutron has everything today to bind a port with the proper vif_type (therefore backend) if it needs to support this or that feature (given the requirement can be expressed in the API).\n\nSecond I think nova has no business in preferring one neutron backend over the other. That\u0027s a neutron-internal decision and it should stay that way. A port may have properties (eg. being on a vlan transparent network) that may influence the binding choice, but that\u0027s where the influence should end.\n\nI think it\u0027s an important property of this design that placement is ignorant of the meaning of the RP-trees stored inside. If a placement client (here neutron) wants to change the structure of its data in placement DB that\u0027s possible as long as the placement query is changed alongside. But placement itself should not be affected by such a change. This way networking RP allocation is still neutron\u0027s internal logic despite the data being stored in and the query being performed by placement.\n\nIdeally nova should be ignorant of the same just as well. Unfortunately today that\u0027s not completely possible. Nova needs to know from where resource request pieces are coming from. On the way in how to combine the pieces into a single query leading to an atomic allocation. On the way out how to decompose the allocation. In order to tell neutron which part of the total allocation matches a port\u0027s piece of the overall resource request. Composing/decomposing the resource/allocation pieces naturally belongs to nova. But finer grained knowledge (eg. requiring particular backend traits) is still off-limits to nova. Otherwise we\u0027ll end up with an unnecessarily highly coupled system.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"52b8052e53966a7101ae549f72ca65577a76830b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"   |             |"},{"line_number":448,"context_line":"   |             |"},{"line_number":449,"context_line":"   |             +------+Network RP"},{"line_number":450,"context_line":"   |                       traits: CUSTOM_PHYSNET_2,"},{"line_number":451,"context_line":"   |                       inventory:"},{"line_number":452,"context_line":"   |                       {NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND: 100000,"},{"line_number":453,"context_line":"   |                        NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND: 100000}"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_657af888","line":450,"range":{"start_line":450,"start_character":27,"end_line":450,"end_character":51},"updated":"2018-03-27 23:31:59.000000000","message":"IIUC, when the scheduler queries placement for a host, it is going to provide 3 inputs:\n\n1) physnet\n2) ingress bandwidth requirement\n3) egress bandwidth requirement.\n\nCouldn\u0027t the query from the scheduler to placement be stated only with two inputs, namely ingress and egress bandwidth, an let the request be satisfied by ANY of the Network RPs in this tree? The selected physnet can then be communicated to Neutron in binding:profile when the port is bound","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c069648df9d2b04a38ec11f7f0c4afd401211bc8","unresolved":false,"context_lines":[{"line_number":447,"context_line":"   |             |"},{"line_number":448,"context_line":"   |             |"},{"line_number":449,"context_line":"   |             +------+Network RP"},{"line_number":450,"context_line":"   |                       traits: CUSTOM_PHYSNET_2,"},{"line_number":451,"context_line":"   |                       inventory:"},{"line_number":452,"context_line":"   |                       {NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND: 100000,"},{"line_number":453,"context_line":"   |                        NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND: 100000}"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_3e97a33c","line":450,"in_reply_to":"","updated":"2018-04-04 02:43:18.000000000","message":"With a multi provider network is the physnet only set when the port is bound. I forgot about that extion....\nIs that something we need to support in the first relase. The ability to do physnet aware placement seem a lot to loose for something i believe is not commonly use though i guess that is technically out of scope of this spec..\n\nIf we do move the port binding to the condctor/scheduler in the future i guess we can still fast fail and go to the next host before fown calling to the compute node but this is a very nice to have performance enhancement. \n\nCan i suggest that neutron would check the set of loaded extensions an only add the physnet trait to the port if the multi provider extention is not loaded.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"fc8fec2940bbb5c86310cc0c9ec9b63dcc95964a","unresolved":false,"context_lines":[{"line_number":447,"context_line":"   |             |"},{"line_number":448,"context_line":"   |             |"},{"line_number":449,"context_line":"   |             +------+Network RP"},{"line_number":450,"context_line":"   |                       traits: CUSTOM_PHYSNET_2,"},{"line_number":451,"context_line":"   |                       inventory:"},{"line_number":452,"context_line":"   |                       {NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND: 100000,"},{"line_number":453,"context_line":"   |                        NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND: 100000}"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_137410ce","line":450,"in_reply_to":"bf659307_3e97a33c","updated":"2018-04-04 08:40:52.000000000","message":"quick technical comment: Today ML2Plugin supports the multi-provider extension, so it\u0027s always loaded:\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/plugin.py#L151","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"31c91fe5d69d4c77d96f00196c459f2d47c5901f","unresolved":false,"context_lines":[{"line_number":447,"context_line":"   |             |"},{"line_number":448,"context_line":"   |             |"},{"line_number":449,"context_line":"   |             +------+Network RP"},{"line_number":450,"context_line":"   |                       traits: CUSTOM_PHYSNET_2,"},{"line_number":451,"context_line":"   |                       inventory:"},{"line_number":452,"context_line":"   |                       {NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND: 100000,"},{"line_number":453,"context_line":"   |                        NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND: 100000}"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_bae55f0b","line":450,"range":{"start_line":450,"start_character":27,"end_line":450,"end_character":51},"in_reply_to":"bf659307_657af888","updated":"2018-03-29 08:56:56.000000000","message":"We talked about it yesterday on IRC [1]. In summary:\n* I made an assumption before that port create time the physnet of the port is known. But this assumption is not true in case of multiprovider networks [2]. Therefore the port\u0027s resource request cannot contain the physnet trait\n* We agreed that Nova can pass to Neutron every trait that the selected Networking RP has during port binding\n* Miguel aims for a pure solution where only the bandwidth resource is requested through the port\u0027s resource request but I have concerns that this way the scheduler might select a Networking RP in a host that will lead to a failed port binding in neutron.\n\nI will try to describe my concern via abstract examples while Bence will study multiprovider networks [2] to see how that impact our current plans and how those might be related to my abstract concerns.\n\n[1]http://eavesdrop.openstack.org/irclogs/%23openstack-neutron/%23openstack-neutron.2018-03-28.log.html#t2018-03-28T14:43:14\n[2] https://developer.openstack.org/api-ref/network/v2/#multiple-provider-extension","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"52b8052e53966a7101ae549f72ca65577a76830b","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            \"resources\": {"},{"line_number":548,"context_line":"                \"NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\": 1000,"},{"line_number":549,"context_line":"                \"NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\": 1000 },"},{"line_number":550,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\"]}"},{"line_number":551,"context_line":"    }}"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_e565a8e2","line":550,"range":{"start_line":550,"start_character":24,"end_line":550,"end_character":44},"updated":"2018-03-27 23:31:59.000000000","message":"See my question to L450","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"f8f5b9c4924244dc3f9a1de89fb0aae97c9f7df8","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            \"resources\": {"},{"line_number":548,"context_line":"                \"NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\": 1000,"},{"line_number":549,"context_line":"                \"NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\": 1000 },"},{"line_number":550,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\"]}"},{"line_number":551,"context_line":"    }}"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_d9d8dd1f","line":550,"in_reply_to":"bf659307_1e865fba","updated":"2018-04-05 13:22:43.000000000","message":"While I agree that physnet based scheduling is an interesting use case I\u0027d suggest keeping it out of scope here. At this point the nova and neutron specs together are well above 1000 lines which tells me to cut the scope where possible.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            \"resources\": {"},{"line_number":548,"context_line":"                \"NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\": 1000,"},{"line_number":549,"context_line":"                \"NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\": 1000 },"},{"line_number":550,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\"]}"},{"line_number":551,"context_line":"    }}"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"9f6a8fd7_16900443","line":550,"in_reply_to":"bf659307_d9d8dd1f","updated":"2018-04-19 15:53:14.000000000","message":"My aim is not to remove the possibility of a port bind fail but I also don\u0027t want to increase the likelihood of such failure.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c069648df9d2b04a38ec11f7f0c4afd401211bc8","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            \"resources\": {"},{"line_number":548,"context_line":"                \"NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\": 1000,"},{"line_number":549,"context_line":"                \"NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\": 1000 },"},{"line_number":550,"context_line":"            \"required\": [\"CUSTOM_PHYSNET_2\"]}"},{"line_number":551,"context_line":"    }}"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_1e865fba","line":550,"in_reply_to":"bf659307_e565a8e2","updated":"2018-04-04 02:43:18.000000000","message":"This is not strictly needed for bandwidth based scheduleing but is a separate usecase that is almost as important in its own right. Today its very costly to retry on the compute node when a port fails to bind because a physnet is not available. If you have a multi cell deployment even more so as the is no retry to a second cell. E. G. If you get an allocation in cell 1 and it does not have a node connected to physnet2 you will get no valid host as all the candidates will fial. With the introduction of limit on the allocation candidates api this is even more likely as the nova schedule does not asses all host that support the request just the first n which make it more likely that the vm will fail to boot with no vaild host even though ther is capasity to create the istance on a node connected to the correct physnet.","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"52b8052e53966a7101ae549f72ca65577a76830b","unresolved":false,"context_lines":[{"line_number":658,"context_line":"build_instance code path are a viable option to transfer this data as both"},{"line_number":659,"context_line":"reaches the compute manager. The requested_networks parameter seems a better"},{"line_number":660,"context_line":"fit as it passed down to _build_networks_for_instance() call that will"},{"line_number":661,"context_line":"eventually leads to the port binding update in Neutron."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"REST API impact"},{"line_number":664,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"bf659307_8555ccc8","line":661,"range":{"start_line":661,"start_character":11,"end_line":661,"end_character":16},"updated":"2018-03-27 23:31:59.000000000","message":"lead","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"540cf190db05a69a24880a38d70d61d7479e698e","unresolved":false,"context_lines":[{"line_number":658,"context_line":"build_instance code path are a viable option to transfer this data as both"},{"line_number":659,"context_line":"reaches the compute manager. The requested_networks parameter seems a better"},{"line_number":660,"context_line":"fit as it passed down to _build_networks_for_instance() call that will"},{"line_number":661,"context_line":"eventually leads to the port binding update in Neutron."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"REST API impact"},{"line_number":664,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9f6a8fd7_f6031072","line":661,"range":{"start_line":661,"start_character":11,"end_line":661,"end_character":16},"in_reply_to":"bf659307_8555ccc8","updated":"2018-04-19 15:53:14.000000000","message":"Done","commit_id":"333c7ade2ae0ac44657e7c23191522e0b996d1aa"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"system."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Separations of responsibilities"},{"line_number":64,"context_line":"-------------------------------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Nova creates the root RP of the compute node RP tree as today"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_dcd43dc0","line":63,"range":{"start_line":63,"start_character":10,"end_line":63,"end_character":11},"updated":"2018-04-27 18:00:18.000000000","message":"Separation of responsibilities","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"system."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Separations of responsibilities"},{"line_number":64,"context_line":"-------------------------------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Nova creates the root RP of the compute node RP tree as today"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_7d8cc67e","line":63,"range":{"start_line":63,"start_character":10,"end_line":63,"end_character":11},"in_reply_to":"9f6a8fd7_dcd43dc0","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the resource request."},{"line_number":73,"context_line":"* Nova sends the allocation, it made in Placement, to the Neutron in the port"},{"line_number":74,"context_line":"  binding"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Scoping"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_5cf90d4b","line":73,"range":{"start_line":73,"start_character":7,"end_line":73,"end_character":65},"updated":"2018-04-27 18:00:18.000000000","message":"\"Nova passes the allocation information it received from placement during resource claiming to Neutron during port binding.\"","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the resource request."},{"line_number":73,"context_line":"* Nova sends the allocation, it made in Placement, to the Neutron in the port"},{"line_number":74,"context_line":"  binding"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Scoping"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_bdd7be4f","line":73,"range":{"start_line":73,"start_character":7,"end_line":73,"end_character":65},"in_reply_to":"9f6a8fd7_5cf90d4b","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":81,"context_line":"implemented the new Neutron API extension that introduces the port\u0027s"},{"line_number":82,"context_line":"resource_request field will be optional and turned off by default. Nova will"},{"line_number":83,"context_line":"check for this extension and fall back to the current resource handling"},{"line_number":84,"context_line":"behavior if the extension is not loaded."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Out of scope from Nova perspective:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_dca2fd4b","line":84,"updated":"2018-04-27 18:00:18.000000000","message":"++","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":89,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":90,"context_line":"  Neutron in each port binding."},{"line_number":91,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":92,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":93,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_3c91b9f2","line":90,"updated":"2018-04-27 18:00:18.000000000","message":"++","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":92,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":93,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"},{"line_number":94,"context_line":"  is global for an allocation_candidate request."},{"line_number":95,"context_line":"* Handling Neutron mechanism driver preference order in a weigher in the"},{"line_number":96,"context_line":"  nova-scheduler"},{"line_number":97,"context_line":"* Interface attach with a port or network having a QoS bandwidth policy rule as"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_dcbbdd6f","line":94,"updated":"2018-04-27 18:00:18.000000000","message":"Yup, this will need to be handled in the future by some layer that understands the relationship between multiple ports.","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":123,"context_line":"Neutron agent restart"},{"line_number":124,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":127,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":128,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":129,"context_line":"the RPs that were created by the agent. Also Neutron only modifies the pieces"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_e7116eae","line":126,"range":{"start_line":126,"start_character":0,"end_line":126,"end_character":18},"updated":"2018-04-27 18:00:18.000000000","message":"During restart the Neutron agent","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"Neutron agent restart"},{"line_number":124,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"During the restart the Neutron agent ensures that the proper RP tree exists in"},{"line_number":127,"context_line":"Placement with correct inventories and traits by creating / updating the RP"},{"line_number":128,"context_line":"tree if necessary. The Neutron agent only modifies the inventory and traits of"},{"line_number":129,"context_line":"the RPs that were created by the agent. Also Neutron only modifies the pieces"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_3dd5ee43","line":126,"range":{"start_line":126,"start_character":0,"end_line":126,"end_character":18},"in_reply_to":"9f6a8fd7_e7116eae","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":335,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":336,"context_line":"we would like to keep the units in sync."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":339,"context_line":"object with DictOfStringsField type to store the resource and trait requests"},{"line_number":340,"context_line":"coming from the Neutron ports. This field will not be persisted in the"},{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"The  `QoS minimum bandwidth allocation in Placement API`_ Neutron spec will"},{"line_number":344,"context_line":"propose the the modeling of the Networking RP subtree in Placement. Nova will"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_87b0b28d","line":341,"range":{"start_line":338,"start_character":0,"end_line":341,"end_character":9},"updated":"2018-04-27 18:00:18.000000000","message":"Alternately, we could rework the RequestSpec object structure to have a set of RequestGroup objects and have the nova-conductor simply unpack the port-specific resource requests and add them to the RequestSpec.request_groups attribute directly...","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":335,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":336,"context_line":"we would like to keep the units in sync."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":339,"context_line":"object with DictOfStringsField type to store the resource and trait requests"},{"line_number":340,"context_line":"coming from the Neutron ports. This field will not be persisted in the"},{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"The  `QoS minimum bandwidth allocation in Placement API`_ Neutron spec will"},{"line_number":344,"context_line":"propose the the modeling of the Networking RP subtree in Placement. Nova will"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_1dbcaada","line":341,"range":{"start_line":338,"start_character":0,"end_line":341,"end_character":9},"in_reply_to":"9f6a8fd7_87b0b28d","updated":"2018-05-02 13:44:07.000000000","message":"Would it also mean that the resource request coming from the flavor fields and extra_spec and traits coming from the ImageMeta as well moved to the new RequestSpec.request_groups attribute? That seems like a pretty nice solution to me, although it needs a bit of coordination between parallel features.","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7f250fdb01a118358827b671af2b70914f687e4c","unresolved":false,"context_lines":[{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"The  `QoS minimum bandwidth allocation in Placement API`_ Neutron spec will"},{"line_number":344,"context_line":"propose the the modeling of the Networking RP subtree in Placement. Nova will"},{"line_number":345,"context_line":"not depend on the exact structure of such model as Neutron will provide the"},{"line_number":346,"context_line":"port\u0027s resource request in an opaque way and Nova will only need to blindly"},{"line_number":347,"context_line":"include that resource request to the GET allocation_candidate request."}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_433a9c34","line":344,"range":{"start_line":344,"start_character":8,"end_line":344,"end_character":15},"updated":"2018-04-27 07:53:11.000000000","message":"nit: too much \u0027the\u0027s","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"The  `QoS minimum bandwidth allocation in Placement API`_ Neutron spec will"},{"line_number":344,"context_line":"propose the the modeling of the Networking RP subtree in Placement. Nova will"},{"line_number":345,"context_line":"not depend on the exact structure of such model as Neutron will provide the"},{"line_number":346,"context_line":"port\u0027s resource request in an opaque way and Nova will only need to blindly"},{"line_number":347,"context_line":"include that resource request to the GET allocation_candidate request."}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_3dbf2ed1","line":344,"range":{"start_line":344,"start_character":8,"end_line":344,"end_character":15},"in_reply_to":"9f6a8fd7_433a9c34","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"eef37202b1f5a18ab90afb49db3004a6504674ee","unresolved":false,"context_lines":[{"line_number":367,"context_line":"This any-traits type of request is not supported by Placement today but can be"},{"line_number":368,"context_line":"implemented similarly to member_of query param used for aggregate selection in"},{"line_number":369,"context_line":"Placement. This will be proposed in a separate spec"},{"line_number":370,"context_line":"`any-traits-in-allocation_candidates-query`_."},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"Mapping between physical resource consumption and claimed resources"},{"line_number":373,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_e12a957c","line":370,"updated":"2018-05-01 02:49:11.000000000","message":"Great!","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to the Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_c76b0aef","line":383,"range":{"start_line":383,"start_character":28,"end_line":383,"end_character":39},"updated":"2018-04-27 18:00:18.000000000","message":"to neutron","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to the Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_7dc4c65f","line":383,"range":{"start_line":383,"start_character":28,"end_line":383,"end_character":39},"in_reply_to":"9f6a8fd7_c76b0aef","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a8221b0325a9c1917f5cb1e4926030160da9bdc","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to the Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"},{"line_number":387,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_677c7eb5","line":384,"range":{"start_line":383,"start_character":40,"end_line":384,"end_character":51},"updated":"2018-04-27 18:00:18.000000000","message":"clearly there will need to be some mechanism in the Neutron API to indicate that the allocations information is being passed in the port binding dict. Is the plan to have a separate Neutron API extension for this, or is the plan to \"reuse\" the same Neutron API extension that will be used to signal that the requested resources are included in the port binding?","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"eef37202b1f5a18ab90afb49db3004a6504674ee","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to the Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"},{"line_number":387,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_81563906","line":384,"range":{"start_line":383,"start_character":40,"end_line":384,"end_character":51},"in_reply_to":"9f6a8fd7_677c7eb5","updated":"2018-05-01 02:49:11.000000000","message":"If I understand correctly, we will use the profile attribute in the port binding","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to the Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"},{"line_number":387,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_3d8dee30","line":384,"range":{"start_line":383,"start_character":40,"end_line":384,"end_character":51},"in_reply_to":"9f6a8fd7_81563906","updated":"2018-05-02 13:44:07.000000000","message":"@Jay: I think it needs to be in the same API extension because if neutron puts a resource_request parameter in the neutron port then neutron also needs the allocation information in the binding.\n\n@Miguel: yes, it will be in the binding_profile attribute, based on the proposal in the neutron spec.","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"eef37202b1f5a18ab90afb49db3004a6504674ee","unresolved":false,"context_lines":[{"line_number":390,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"The Placement REST API needs to be extended to support querying allocation"},{"line_number":393,"context_line":"candidates with an RP that has at least on of the traits form a list"},{"line_number":394,"context_line":"of requested traits. This feature will be described in the separate"},{"line_number":395,"context_line":"`any-traits-in-allocation_candidates-query`_ spec."},{"line_number":396,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_a159fd35","line":393,"range":{"start_line":393,"start_character":40,"end_line":393,"end_character":42},"updated":"2018-05-01 02:49:11.000000000","message":"one","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":390,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"The Placement REST API needs to be extended to support querying allocation"},{"line_number":393,"context_line":"candidates with an RP that has at least on of the traits form a list"},{"line_number":394,"context_line":"of requested traits. This feature will be described in the separate"},{"line_number":395,"context_line":"`any-traits-in-allocation_candidates-query`_ spec."},{"line_number":396,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_ddb152e3","line":393,"range":{"start_line":393,"start_character":40,"end_line":393,"end_character":42},"in_reply_to":"9f6a8fd7_a159fd35","updated":"2018-05-02 13:44:07.000000000","message":"Done","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7f250fdb01a118358827b671af2b70914f687e4c","unresolved":false,"context_lines":[{"line_number":522,"context_line":"Documentation Impact"},{"line_number":523,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"* User documentation about how to use the QoS aware ports."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_1ee5d70a","line":525,"range":{"start_line":525,"start_character":2,"end_line":525,"end_character":58},"updated":"2018-04-27 07:53:11.000000000","message":"\"A well formed\" admin doc perhaps as well to describe the configuration impact for both nova \u0026 neutron.","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"200d72bb2ab254d4c3b5e7cc567f576f125e17bd","unresolved":false,"context_lines":[{"line_number":522,"context_line":"Documentation Impact"},{"line_number":523,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"* User documentation about how to use the QoS aware ports."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_ab5a6a27","line":525,"range":{"start_line":525,"start_character":2,"end_line":525,"end_character":58},"in_reply_to":"9f6a8fd7_1ee5d70a","updated":"2018-04-27 11:03:11.000000000","message":"I don\u0027t forsee any configuration changes in nova (as we are not doing the weigher in this iteration). I agree that neutron documentation needs to describe how to configure neutron for this feature. However I think that is already planned as a networking guide update in https://review.openstack.org/#/c/508149/8/specs/rocky/minimum-bandwidth-allocation-placement-api.rst@655","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7d390269e2ec3a32933b87e2a5d13126656b7c8","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":".. _`nested-resource-providers`: https://review.openstack.org/556873"},{"line_number":538,"context_line":".. _`granular-resource-request`: https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/granular-resource-requests.html"},{"line_number":539,"context_line":".. _`QoS minimum bandwidth allocation in Placement API`: https://review.openstack.org/#/c/508149"},{"line_number":540,"context_line":".. _`override-compute-node-uuid`: https://blueprints.launchpad.net/nova/+spec/override-compute-node-uuid"},{"line_number":541,"context_line":".. _`vnic_types are defined in the Neutron API`:  \u003e https://developer.openstack.org/api-ref/network/v2/#show-port-details"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_14e08e25","line":538,"range":{"start_line":538,"start_character":88,"end_line":538,"end_character":94},"updated":"2018-04-25 08:29:07.000000000","message":"change it to the rocky version","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca3d8b8a9bc67eb5537156ef05f037fbda28571d","unresolved":false,"context_lines":[{"line_number":542,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":543,"context_line":".. _`separate bug`: https://bugs.launchpad.net/nova/+bug/1679750"},{"line_number":544,"context_line":".. _`QoS minimum bandwidth rule`: https://docs.openstack.org/neutron/pike/admin/config-qos.html"},{"line_number":545,"context_line":".. _`any-traits-in-allocation_candidates-query`: to be proposed"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_9dcbda51","line":545,"range":{"start_line":545,"start_character":2,"end_line":545,"end_character":63},"updated":"2018-05-02 13:44:07.000000000","message":"It is proposed now.","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"7f3fa07930ba5ff913ed8fafd70a31288544c077","unresolved":false,"context_lines":[{"line_number":542,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":543,"context_line":".. _`separate bug`: https://bugs.launchpad.net/nova/+bug/1679750"},{"line_number":544,"context_line":".. _`QoS minimum bandwidth rule`: https://docs.openstack.org/neutron/pike/admin/config-qos.html"},{"line_number":545,"context_line":".. _`any-traits-in-allocation_candidates-query`: to be proposed"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":24,"id":"9f6a8fd7_ae7d461d","line":545,"range":{"start_line":545,"start_character":2,"end_line":545,"end_character":63},"in_reply_to":"9f6a8fd7_9dcbda51","updated":"2018-05-02 15:14:55.000000000","message":"Nice!","commit_id":"b1b8eede78b77aa2549a3523ccd31d32a2bff2f9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25367ab9ee0e38fe8f0c1a075ddf36889edc3571","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  node root RP and reports bandwidth inventories"},{"line_number":69,"context_line":"* Neutron provides the resource_request of a port in the Neutron API"},{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the resource request."},{"line_number":73,"context_line":"* Nova passes the allocation information it received from placement during"},{"line_number":74,"context_line":"  resource claiming to Neutron during port binding."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_7503e80e","line":72,"range":{"start_line":71,"start_character":47,"end_line":72,"end_character":22},"updated":"2018-05-02 22:26:42.000000000","message":"Well, we need to account for collisions in granular request group numbers.  See below.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ed8c41d28a0016fb6e4fc4e834cdd1d638019ed","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  node root RP and reports bandwidth inventories"},{"line_number":69,"context_line":"* Neutron provides the resource_request of a port in the Neutron API"},{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the resource request."},{"line_number":73,"context_line":"* Nova passes the allocation information it received from placement during"},{"line_number":74,"context_line":"  resource claiming to Neutron during port binding."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_17386fd1","line":72,"range":{"start_line":71,"start_character":47,"end_line":72,"end_character":22},"in_reply_to":"5f7c97a3_7503e80e","updated":"2018-05-03 15:40:20.000000000","message":"Correct. Nova needs to assign number to the granular resource request groups. I clarified it here.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25367ab9ee0e38fe8f0c1a075ddf36889edc3571","unresolved":false,"context_lines":[{"line_number":172,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":173,"context_line":"modified to use the newly introduced network_resource_request from the"},{"line_number":174,"context_line":"RequestSpec object similarly to how this call includes resource from the flavor"},{"line_number":175,"context_line":"fields and from the flavor extra_spec."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Later on the resource request in the Neutron port API can be evolved to support"},{"line_number":178,"context_line":"the same level of granularity than the Nova flavor resource override"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_55feec05","line":175,"updated":"2018-05-02 22:26:42.000000000","message":"and now also the image.\n\nWe had a similar issue when we were talking about the image spec, which led us to limit the image properties to the un-numbered request group.  We need to solve that same problem here.\n\nNamely, if the network resource request uses resources1 and resources2, we may have to renumber those so as not to conflict with resources1 and resources2 from the flavor extra spec.\n\nProbably the cleanest solution is to design the network resource request data structure such that it has separate elements without numbers, and then have the util assign (otherwise-unused) numbers to those groups when it folds them into the overall request spec.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ed8c41d28a0016fb6e4fc4e834cdd1d638019ed","unresolved":false,"context_lines":[{"line_number":172,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":173,"context_line":"modified to use the newly introduced network_resource_request from the"},{"line_number":174,"context_line":"RequestSpec object similarly to how this call includes resource from the flavor"},{"line_number":175,"context_line":"fields and from the flavor extra_spec."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Later on the resource request in the Neutron port API can be evolved to support"},{"line_number":178,"context_line":"the same level of granularity than the Nova flavor resource override"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_b7b73b3b","line":175,"in_reply_to":"5f7c97a3_55feec05","updated":"2018-05-03 15:40:20.000000000","message":"\u003e and now also the image.\n \u003e \n\nat some point the FPGAs and maybe later the volume. :)\n\n \u003e We had a similar issue when we were talking about the image spec,\n \u003e which led us to limit the image properties to the un-numbered\n \u003e request group.  We need to solve that same problem here.\n \u003e \n\nAgree that the problem is similar. However here the solution needs to use numbered groups to allow expressing two ports with different physnet trait requests.\n\n \u003e Namely, if the network resource request uses resources1 and\n \u003e resources2, we may have to renumber those so as not to conflict\n \u003e with resources1 and resources2 from the flavor extra spec.\n \u003e \n\nAgree that we need to do some kind of numbering in nova.\n\n \u003e Probably the cleanest solution is to design the network resource\n \u003e request data structure such that it has separate elements without\n \u003e numbers, and then have the util assign (otherwise-unused) numbers\n \u003e to those groups when it folds them into the overall request spec.\n\nToday it is proposed that one port\u0027s resource request only uses a single group (as this is enough for everything today). This also means that the port\u0027s resource request does not need to use any numbering schema.\n\nI changed the proposed solution based on Jay\u0027s idea about reusing the RequestGroup object as storage for these data.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25367ab9ee0e38fe8f0c1a075ddf36889edc3571","unresolved":false,"context_lines":[{"line_number":336,"context_line":"we would like to keep the units in sync."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":339,"context_line":"object with DictOfStringsField type to store the resource and trait requests"},{"line_number":340,"context_line":"coming from the Neutron ports. This field will not be persisted in the"},{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_b572e010","line":339,"range":{"start_line":339,"start_character":12,"end_line":339,"end_character":30},"updated":"2018-05-02 22:26:42.000000000","message":"Per above issue, I\u0027d like some more detail on what this looks like.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ed8c41d28a0016fb6e4fc4e834cdd1d638019ed","unresolved":false,"context_lines":[{"line_number":336,"context_line":"we would like to keep the units in sync."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"A new network_resource_request field is added to the RequestSpec versioned"},{"line_number":339,"context_line":"object with DictOfStringsField type to store the resource and trait requests"},{"line_number":340,"context_line":"coming from the Neutron ports. This field will not be persisted in the"},{"line_number":341,"context_line":"database."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_e32ad18e","line":339,"range":{"start_line":339,"start_character":12,"end_line":339,"end_character":30},"in_reply_to":"5f7c97a3_b572e010","updated":"2018-05-03 15:40:20.000000000","message":"Done","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25367ab9ee0e38fe8f0c1a075ddf36889edc3571","unresolved":false,"context_lines":[{"line_number":355,"context_line":"each port\u0027s resource request to a single numbered resource request group as"},{"line_number":356,"context_line":"defined in `granular-resource-request`_ spec. That spec requires that the name"},{"line_number":357,"context_line":"of the numbered resource groups has a form of `resources\u003cinteger\u003e`. Nova will"},{"line_number":358,"context_line":"map a port\u0027s resource_request to the first unused numbered group in the"},{"line_number":359,"context_line":"allocation_candidate request. Neutron does not know which ports are used"},{"line_number":360,"context_line":"together in a server create request, and which numbered groups have already"},{"line_number":361,"context_line":"been used by the flavor extra_spec therefore Neutron cannot assign unique"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_75668854","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":64},"updated":"2018-05-02 22:26:42.000000000","message":"ah","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ed8c41d28a0016fb6e4fc4e834cdd1d638019ed","unresolved":false,"context_lines":[{"line_number":355,"context_line":"each port\u0027s resource request to a single numbered resource request group as"},{"line_number":356,"context_line":"defined in `granular-resource-request`_ spec. That spec requires that the name"},{"line_number":357,"context_line":"of the numbered resource groups has a form of `resources\u003cinteger\u003e`. Nova will"},{"line_number":358,"context_line":"map a port\u0027s resource_request to the first unused numbered group in the"},{"line_number":359,"context_line":"allocation_candidate request. Neutron does not know which ports are used"},{"line_number":360,"context_line":"together in a server create request, and which numbered groups have already"},{"line_number":361,"context_line":"been used by the flavor extra_spec therefore Neutron cannot assign unique"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_b7909b97","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":64},"in_reply_to":"5f7c97a3_75668854","updated":"2018-05-03 15:40:20.000000000","message":"I\u0027ve expanded this a bit to answer your above concerns.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25367ab9ee0e38fe8f0c1a075ddf36889edc3571","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_b5e0a098","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":24},"updated":"2018-05-02 22:26:42.000000000","message":"It will also need to know what the request looked like.  It ought to have access to this information, as that\u0027s where it came from, but I don\u0027t know whether that data survives all the hops back and forth.\n\nTo elaborate, let\u0027s say I requested two separate VFs, one with EGRESS 2000 and one with EGRESS 3000.  I get an allocation candidate where both of those are assigned from the same PF RP.  That allocation request will look like VF:2, EGRESS:5000.  So neutron will need to use the request itself to figure out that that 5000 needs to be divided into 2000 and 3000.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ed8c41d28a0016fb6e4fc4e834cdd1d638019ed","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"In the current scope we do not try to solve the whole problem of mapping"},{"line_number":382,"context_line":"resource request groups to allocation subsets. Instead Nova will send the whole"},{"line_number":383,"context_line":"allocation of the server to Neutron in the port binding of each port of the"},{"line_number":384,"context_line":"given server and let Neutron try to do the mapping."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":25,"id":"5f7c97a3_f7f7f3d3","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":24},"in_reply_to":"5f7c97a3_b5e0a098","updated":"2018-05-03 15:40:20.000000000","message":"\u003e It will also need to know what the request looked like.  It ought\n \u003e to have access to this information, as that\u0027s where it came from,\n \u003e but I don\u0027t know whether that data survives all the hops back and\n \u003e forth.\n \u003e \n\nI think this is the biggest limitation of the scope today but the proper solution would require a major complexity increase. Instead of boil the ocean we let neutron try to do as much mapping as needed for a certain binding. There could be port binding request where the mapping is ambiguous for neutron. In that case we accept the limitation that neutron might simply reject such port binding.  \n\n \u003e To elaborate, let\u0027s say I requested two separate VFs, one with\n \u003e EGRESS 2000 and one with EGRESS 3000.  I get an allocation\n \u003e candidate where both of those are assigned from the same PF RP. \n \u003e That allocation request will look like VF:2, EGRESS:5000.  So\n \u003e neutron will need to use the request itself to figure out that that\n \u003e 5000 needs to be divided into 2000 and 3000.\n\nIn this case neutron will see the same RP during each port binding with EGRESS:5000 allocation. I think neutron simply assume that if the request was smaller in the port being bound then the port will fit. \n\nThe more problematic case for me is when two ports request  the similar things and the request is satisfied from two different (but otherwise identical) RPs. In this case when the first port is bound, neutron can select any of the two RPs as physical device for the port but when the second port is bound neutron *has to know* which is the physical device that is already used for the first port to select the another device for the second port. In theory neutron can store such physical device selection internally so the second port binding can be done properly. But I let neutron to decide how to handle this.","commit_id":"3c2d204c572b4ffb801213cbcc9b76fafb2f239a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"attribute is described in `QoS minimum bandwidth allocation in Placement API`_"},{"line_number":54,"context_line":"Neutron spec."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Please note that today Neutron port binding could fail if the nova-scheduler"},{"line_number":57,"context_line":"selects a compute host where Neutron cannot bind the port. We are not aiming to"},{"line_number":58,"context_line":"remove this limitation by this spec but also we don\u0027t want to increase the"},{"line_number":59,"context_line":"frequency of such port binding failures as it would ruin the usability of the"},{"line_number":60,"context_line":"system."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_795f4341","line":57,"range":{"start_line":56,"start_character":0,"end_line":57,"end_character":58},"updated":"2018-05-04 15:40:56.000000000","message":"This is just the generic port binding failure for any number of reasons right? Like misconfiguration of the neutron agent, no more fixed IPs, over quota, etc...","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"attribute is described in `QoS minimum bandwidth allocation in Placement API`_"},{"line_number":54,"context_line":"Neutron spec."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Please note that today Neutron port binding could fail if the nova-scheduler"},{"line_number":57,"context_line":"selects a compute host where Neutron cannot bind the port. We are not aiming to"},{"line_number":58,"context_line":"remove this limitation by this spec but also we don\u0027t want to increase the"},{"line_number":59,"context_line":"frequency of such port binding failures as it would ruin the usability of the"},{"line_number":60,"context_line":"system."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_96ed38f1","line":57,"range":{"start_line":56,"start_character":0,"end_line":57,"end_character":58},"in_reply_to":"5f7c97a3_795f4341","updated":"2018-05-07 14:47:14.000000000","message":"Yes, this is the generic failure for the reasons you listed. Some of these failure modes, like no more fixed IPs case,  could be solved based on the work we propose here, but we don\u0027t want to do everything at once.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":67,"context_line":"* Neutron creates the networking RP tree of a compute node under the compute"},{"line_number":68,"context_line":"  node root RP and reports bandwidth inventories"},{"line_number":69,"context_line":"* Neutron provides the resource_request of a port in the Neutron API"},{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the actual resource request. But Nova needs to assign unique granular"},{"line_number":73,"context_line":"  resource request group suffix for each port\u0027s resource request."},{"line_number":74,"context_line":"* Nova passes the allocation information it received from placement during"},{"line_number":75,"context_line":"  resource claiming to Neutron during port binding."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Scoping"},{"line_number":78,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_fc758199","line":75,"range":{"start_line":70,"start_character":0,"end_line":75,"end_character":51},"updated":"2018-05-04 15:40:56.000000000","message":"nit: there seems to be a bullet missing in between these to explicitly say that the nova-scheduler will make the allocation \"claim\" on the resources. I was confused below thinking nova-scheduler would not claim nic bw resources but instead pass those through to neutron via port binding on the compute and it would make the \"claim\".\n\n\u003clater\u003e\n\nI see this is covered in the paragraph on L182.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"* Neutron creates the networking RP tree of a compute node under the compute"},{"line_number":68,"context_line":"  node root RP and reports bandwidth inventories"},{"line_number":69,"context_line":"* Neutron provides the resource_request of a port in the Neutron API"},{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the actual resource request. But Nova needs to assign unique granular"},{"line_number":73,"context_line":"  resource request group suffix for each port\u0027s resource request."},{"line_number":74,"context_line":"* Nova passes the allocation information it received from placement during"},{"line_number":75,"context_line":"  resource claiming to Neutron during port binding."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Scoping"},{"line_number":78,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_01e7a0e6","line":75,"range":{"start_line":70,"start_character":0,"end_line":75,"end_character":51},"in_reply_to":"5f7c97a3_fc758199","updated":"2018-05-07 14:47:14.000000000","message":"I added the extra bullet point.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Out of scope from Nova perspective:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":90,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":91,"context_line":"  Neutron in each port binding."},{"line_number":92,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":93,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":94,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_191f2f6d","line":91,"range":{"start_line":90,"start_character":33,"end_line":91,"end_character":31},"updated":"2018-05-04 15:40:56.000000000","message":"So this entire response?\n\nhttps://developer.openstack.org/api-ref/placement/#response-example-microversions-1-12\n\nWill nova also send the microversion used to get the allocation requests? I\u0027m thinking about our Selection object for alternate hosts:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/objects/selection.py#L41\n\nSince those are used in kind of a similar way, in that the scheduler made a request with a certain microversion and we need to pass that along to the cell conductor in case it needs to create an allocation, using the requests passed from the scheduler, and know what version to use to make the request so it matches the format in the allocation request.\n\n\u003clater\u003e\n\n(9:10:55 AM) giblet: mriedem: scheduler does the claim, but nova sends to neutron what was claimed\n\nThat wasn\u0027t clear to me up to this point, it sounded like nova-scheduler made the request for candidates and then passed the bw nic ones along to neutron via port binding.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Out of scope from Nova perspective:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":90,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":91,"context_line":"  Neutron in each port binding."},{"line_number":92,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":93,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":94,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_fc0d6b90","line":91,"range":{"start_line":90,"start_character":33,"end_line":91,"end_character":31},"in_reply_to":"5f7c97a3_191f2f6d","updated":"2018-05-07 14:47:14.000000000","message":"Nova will send the allocation request in the port binding in the same format as it is used in the PUT /allocations/{consumer_uuid} in Placement. Neutron will not use this to send PUT /allocations/{consumer_uuid} requests as Nova has already claimed these resources. I think we don\u0027t need to send the microversion along in this case as that is a placement microversion but neutron won\u0027t send this to placement.\n\nI added an extra sentence to the last bullet of the  \u0027Separation of responsibilities\u0027 section to clarify this.\n\n[1] https://developer.openstack.org/api-ref/placement/#update-allocations","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Out of scope from Nova perspective:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":90,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":91,"context_line":"  Neutron in each port binding."},{"line_number":92,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":93,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":94,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_b4792b94","line":91,"range":{"start_line":90,"start_character":33,"end_line":91,"end_character":31},"in_reply_to":"5f7c97a3_fc0d6b90","updated":"2018-05-08 17:19:37.000000000","message":"\u003e I think we don\u0027t need to send the microversion along in this case as that is a placement microversion but neutron won\u0027t send this to placement.\n\nBut presumably we\u0027re sending that format to neutron for a reason, right? So neutron can parse the request body to get things out of it. That format has changed over time, hence the reason for passing the microversion to placement. It\u0027s not required, since placement client side code could handle different versions conditionally based on the way the dict is structured.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":90,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":91,"context_line":"  Neutron in each port binding."},{"line_number":92,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":93,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":94,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"},{"line_number":95,"context_line":"  is global for an allocation_candidate request."},{"line_number":96,"context_line":"* Handling Neutron mechanism driver preference order in a weigher in the"},{"line_number":97,"context_line":"  nova-scheduler"},{"line_number":98,"context_line":"* Interface attach with a port or network having a QoS bandwidth policy rule as"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_bc6f09c4","line":95,"range":{"start_line":92,"start_character":2,"end_line":95,"end_character":48},"updated":"2018-05-04 15:40:56.000000000","message":"I don\u0027t really know what this means, but assume Eric wrote it and therefore it means something important about granular requests.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"* Mapping parts of a server\u0027s allocation back to the resource_request of each"},{"line_number":90,"context_line":"  individual port of the server. Instead Nova will send the whole allocation to"},{"line_number":91,"context_line":"  Neutron in each port binding."},{"line_number":92,"context_line":"* Supporting separate proximity policy for the granular resource request groups"},{"line_number":93,"context_line":"  created from the Neutron port\u0027s resource_request. Nova will use the policy"},{"line_number":94,"context_line":"  defined in the flavor extra_spec for the whole request as today such policy"},{"line_number":95,"context_line":"  is global for an allocation_candidate request."},{"line_number":96,"context_line":"* Handling Neutron mechanism driver preference order in a weigher in the"},{"line_number":97,"context_line":"  nova-scheduler"},{"line_number":98,"context_line":"* Interface attach with a port or network having a QoS bandwidth policy rule as"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_1c614737","line":95,"range":{"start_line":92,"start_character":2,"end_line":95,"end_character":48},"in_reply_to":"5f7c97a3_bc6f09c4","updated":"2018-05-07 14:47:14.000000000","message":"Currently Placement support a single policy per a_c request (none or isolate) that defines if a granular request group can overlap or not. Therefore Neutron cannot directly influence per port (or per set of ports) if the resulting allocations could overlap to the same RP or not.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"  is global for an allocation_candidate request."},{"line_number":96,"context_line":"* Handling Neutron mechanism driver preference order in a weigher in the"},{"line_number":97,"context_line":"  nova-scheduler"},{"line_number":98,"context_line":"* Interface attach with a port or network having a QoS bandwidth policy rule as"},{"line_number":99,"context_line":"  interface_attach does not call scheduler today."},{"line_number":100,"context_line":"* Server create with network having QoS policy rule as a port in this network"},{"line_number":101,"context_line":"  is created by the nova-compute *after* the scheduling decision. This spec"},{"line_number":102,"context_line":"  proposes to fail such boot in the compute-manager."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_5c6035cf","line":99,"range":{"start_line":98,"start_character":2,"end_line":99,"end_character":49},"updated":"2018-05-04 15:40:56.000000000","message":"Are we just going to ignore the network/port QoS in this case?\n\nThinking about how we handle multiattach volumes, before 2.60 we\u0027d allow you to attach a multiattach-capable volume to a single instance, but not more than one instance. When we added multiattach support, if you try attaching a multiattach-capable volume to an instance without using microversion \u003e\u003d 2.60 we fail:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/compute/api.py#L3829\n\nI know we\u0027ve talked about this before in this spec but I\u0027m not sure where we\u0027re at with it. I thought we agreed that trying to create a server or attach a port to a server with a QoS policy, which nova doesn\u0027t yet support (like before multiattach support for those kinds of volumes), we\u0027d fail saying we can\u0027t support those yet. Are we going to do the same for QoS ports? The difference between QoS ports and multiattach volumes here is that for volumes we can do both boot and attach, but for QoS ports we can only do boot (for now) it sounds like, so anytime anyone tried to attach a QoS port to an instance we\u0027d fail?\n\n\u003clater\u003e\n\nI guess L502 says we\u0027ll reject it now. Works for me. We could also do that as a bug fix today.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":95,"context_line":"  is global for an allocation_candidate request."},{"line_number":96,"context_line":"* Handling Neutron mechanism driver preference order in a weigher in the"},{"line_number":97,"context_line":"  nova-scheduler"},{"line_number":98,"context_line":"* Interface attach with a port or network having a QoS bandwidth policy rule as"},{"line_number":99,"context_line":"  interface_attach does not call scheduler today."},{"line_number":100,"context_line":"* Server create with network having QoS policy rule as a port in this network"},{"line_number":101,"context_line":"  is created by the nova-compute *after* the scheduling decision. This spec"},{"line_number":102,"context_line":"  proposes to fail such boot in the compute-manager."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_90477b4c","line":99,"range":{"start_line":98,"start_character":2,"end_line":99,"end_character":49},"in_reply_to":"5f7c97a3_5c6035cf","updated":"2018-05-07 14:47:14.000000000","message":"Yes, Nova will reject an interface attach with QoS port. Nova can checks if the port (passed in or created in the passed in network by nova) has a non empty resource request. If it has then we fail the request. As the port.resource_request will only be introduced by the Neutron side of this feature we have to wait for that to be available and then we can implement the the rejection.\n\nI don\u0027t want to reject does ports that has QoS policy attached that does not require any resource allocation, like DSCP rules.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatively we could extend and use the requested_networks"},{"line_number":169,"context_line":"(NetworkRequestList ovo) parameter of the build_instance code path to store and"},{"line_number":170,"context_line":"communicate the resource needs coming from the Neutron ports. Then the"},{"line_number":171,"context_line":"select_destinations() scheduler rpc call needs to be extended with a new"},{"line_number":172,"context_line":"parameter holding the NetworkRequestList."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":175,"context_line":"modified to use the newly introduced `requested_resources` field from the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_dcebe5ad","line":172,"range":{"start_line":170,"start_character":62,"end_line":172,"end_character":41},"updated":"2018-05-04 15:40:56.000000000","message":"Or we store requested_networks in the RequestSpec like we do for requested security groups:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/objects/request_spec.py#L81\n\nI kind of like the idea of putting the port-defined requested resources into the NetworkRequestList and then put that into the RequestSpec, since the port-defined resource requests are specific to the network request and part of the original server create request, so they fit in the request spec. Also, we store the result of create_pci_requests_for_sriov_ports in the RequestSpec already:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/objects/request_spec.py#L52\n\nSo that pattern already seems to be established.\n\nAs an aside, I\u0027ve always wondered why the requested networks and block device mappings from the initial server create aren\u0027t stored in the RequestSpec already. Presumably because we haven\u0027t needed to store them yet.\n\nThis is of course all implementation detail for how we plumb this stuff through, so we can bikeshed on it later.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Alternatively we could extend and use the requested_networks"},{"line_number":169,"context_line":"(NetworkRequestList ovo) parameter of the build_instance code path to store and"},{"line_number":170,"context_line":"communicate the resource needs coming from the Neutron ports. Then the"},{"line_number":171,"context_line":"select_destinations() scheduler rpc call needs to be extended with a new"},{"line_number":172,"context_line":"parameter holding the NetworkRequestList."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The `nova.scheduler.utils.resources_from_request_spec()` call needs to be"},{"line_number":175,"context_line":"modified to use the newly introduced `requested_resources` field from the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_90745b37","line":172,"range":{"start_line":170,"start_character":62,"end_line":172,"end_character":41},"in_reply_to":"5f7c97a3_dcebe5ad","updated":"2018-05-07 14:47:14.000000000","message":"Sure, that is also an alternative. However we don\u0027t need to store the whole NetworkRequestList as we only need the resource request part of it. I think the proposal to store RequestGroups in RequestSpec is pretty similar to how the InstancePCIRequest is stored today, as that also only contains the necessary information and not a whole NetworkRequest.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"RequestSpec object to generate the proper allocation candidate request."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Later on the resource request in the Neutron port API can be evolved to support"},{"line_number":179,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":180,"context_line":"functionality supports."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Then Placement returns allocation candidates. After additional filtering and"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_dc1205b2","line":179,"range":{"start_line":179,"start_character":30,"end_line":179,"end_character":34},"updated":"2018-05-04 15:40:56.000000000","message":"that","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":176,"context_line":"RequestSpec object to generate the proper allocation candidate request."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Later on the resource request in the Neutron port API can be evolved to support"},{"line_number":179,"context_line":"the same level of granularity than the Nova flavor resource override"},{"line_number":180,"context_line":"functionality supports."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Then Placement returns allocation candidates. After additional filtering and"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_f0982f6b","line":179,"range":{"start_line":179,"start_character":30,"end_line":179,"end_character":34},"in_reply_to":"5f7c97a3_dc1205b2","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Delete a server with ports having QoS policy rule"},{"line_number":193,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":194,"context_line":"During normal delete, local delete and shelve_offload Nova today deletes the"},{"line_number":195,"context_line":"resource allocation in placement where the consumer_id is the instance_uuid. As"},{"line_number":196,"context_line":"this allocation will include the port related resources those are also cleaned"},{"line_number":197,"context_line":"up."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_dc60c535","line":194,"range":{"start_line":194,"start_character":22,"end_line":194,"end_character":34},"updated":"2018-05-04 15:40:56.000000000","message":"nit: you might want to link to this:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/compute/api.py#L2023\n\nBecause we use the term \"local delete\" but it\u0027s kind of kind tribal knowledge.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Delete a server with ports having QoS policy rule"},{"line_number":193,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":194,"context_line":"During normal delete, local delete and shelve_offload Nova today deletes the"},{"line_number":195,"context_line":"resource allocation in placement where the consumer_id is the instance_uuid. As"},{"line_number":196,"context_line":"this allocation will include the port related resources those are also cleaned"},{"line_number":197,"context_line":"up."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_30b8e7c6","line":194,"range":{"start_line":194,"start_character":22,"end_line":194,"end_character":34},"in_reply_to":"5f7c97a3_dc60c535","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":196,"context_line":"this allocation will include the port related resources those are also cleaned"},{"line_number":197,"context_line":"up."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"Local delete is special only in a sense that the allocation cleanup happens"},{"line_number":200,"context_line":"after the compute host is recovered. If a server is purged from the database"},{"line_number":201,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":202,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":203,"context_line":"proposed feature increases the type of the resources being orphaned this way."},{"line_number":204,"context_line":"This issue is handled in a `separate bug`_"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":207,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3c4f79be","line":204,"range":{"start_line":199,"start_character":0,"end_line":204,"end_character":42},"updated":"2018-05-04 15:40:56.000000000","message":"This is actually fixed now:\n\nhttps://review.openstack.org/#/c/560706/\n\nSo you could probably drop this paragraph.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":196,"context_line":"this allocation will include the port related resources those are also cleaned"},{"line_number":197,"context_line":"up."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"Local delete is special only in a sense that the allocation cleanup happens"},{"line_number":200,"context_line":"after the compute host is recovered. If a server is purged from the database"},{"line_number":201,"context_line":"before the compute host is recovered the allocation record of the server won\u0027t"},{"line_number":202,"context_line":"be deleted in Placement. This is already a problem today, but the currently"},{"line_number":203,"context_line":"proposed feature increases the type of the resources being orphaned this way."},{"line_number":204,"context_line":"This issue is handled in a `separate bug`_"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":207,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_10b7ebd7","line":204,"range":{"start_line":199,"start_character":0,"end_line":204,"end_character":42},"in_reply_to":"5f7c97a3_3c4f79be","updated":"2018-05-07 14:47:14.000000000","message":"Awesome. Done.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":206,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":207,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"After the detach succeeds in Neutron and in the hypervisor, the nova-compute"},{"line_number":210,"context_line":"needs to delete the allocation related to the detached port in Placement."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":213,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3ce459ac","line":210,"range":{"start_line":209,"start_character":59,"end_line":210,"end_character":73},"updated":"2018-05-04 15:40:56.000000000","message":"OK so https://developer.openstack.org/api-ref/placement/#update-allocations and remove the port-defined resource classes but leave everything else intact, right?","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":206,"context_line":"Detach_interface with a port having QoS policy rule"},{"line_number":207,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"After the detach succeeds in Neutron and in the hypervisor, the nova-compute"},{"line_number":210,"context_line":"needs to delete the allocation related to the detached port in Placement."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Server move operations (cold migrate, evacuate, resize, live migrate)"},{"line_number":213,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3006a788","line":210,"range":{"start_line":209,"start_character":59,"end_line":210,"end_character":73},"in_reply_to":"5f7c97a3_3ce459ac","updated":"2018-05-07 14:47:14.000000000","message":"Right. This might need some logic if there are more than on port attached to the server to know what to remove.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Move operations with force host flag (evacuate, live-migrate) do not call the"},{"line_number":227,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":228,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":229,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"},{"line_number":230,"context_line":"copy the allocation from source host to destination host`_ by using the"},{"line_number":231,"context_line":"destination host as the RP. This will be lot more complex as there will be"},{"line_number":232,"context_line":"more than one RP to be replaced and Nova will have a hard time to figure out"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_5ca8351e","line":229,"updated":"2018-05-04 15:40:56.000000000","message":"We could fix this by resolving the TODO I haven\u0027t yet done:\n\nhttps://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L339","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Move operations with force host flag (evacuate, live-migrate) do not call the"},{"line_number":227,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":228,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":229,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"},{"line_number":230,"context_line":"copy the allocation from source host to destination host`_ by using the"},{"line_number":231,"context_line":"destination host as the RP. This will be lot more complex as there will be"},{"line_number":232,"context_line":"more than one RP to be replaced and Nova will have a hard time to figure out"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_b03e3727","line":229,"in_reply_to":"5f7c97a3_5ca8351e","updated":"2018-05-07 14:47:14.000000000","message":"Do you mean fixing it by introducing a new skip_filters rpc parameter to select_destinations? I can look into that as it would make the solution more uniform.\nAdded your link as a reference and added a specific workitem for this step.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Move operations with force host flag (evacuate, live-migrate) do not call the"},{"line_number":227,"context_line":"scheduler. So to make sure that every case is handled we have to go through"},{"line_number":228,"context_line":"every direct or indirect call of `reportclient.claim_resources()` function and"},{"line_number":229,"context_line":"ensure that the port related resources are handled properly. Today we `blindly"},{"line_number":230,"context_line":"copy the allocation from source host to destination host`_ by using the"},{"line_number":231,"context_line":"destination host as the RP. This will be lot more complex as there will be"},{"line_number":232,"context_line":"more than one RP to be replaced and Nova will have a hard time to figure out"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_f4e1e32b","line":229,"in_reply_to":"5f7c97a3_b03e3727","updated":"2018-05-08 17:19:37.000000000","message":"Right, the idea being, make everything go through the scheduler, including the force evacuate/live migrate flows.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":247,"context_line":"Finding the compute RP"},{"line_number":248,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Neutron already depends on the ``host`` conf variable to be set to the same id"},{"line_number":251,"context_line":"that Nova uses in the Neutron port binding. Nova uses the hostname in the port"},{"line_number":252,"context_line":"binding. If the ``host`` is not defined in the Neutron config then it defaults"},{"line_number":253,"context_line":"to the hostname as well. This way Neutron and Nova are in sync today. The same"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_7ce65119","line":250,"updated":"2018-05-04 15:40:56.000000000","message":"I\u0027m not sure this would work for ironic since the instance.host for ironic instances doesn\u0027t mean much, it\u0027s just the host that the nova-compute service is running on which is a proxy for the ironic service API to create and manage ironic nodes. So you could have \u003e1 ironic instance with the same compute service host but actually different compute node root providers.\n\nBTW, I\u0027m not advocating that we make this also fit the ironic scenario, just wondering - if ironic can\u0027t work with this, then it\u0027s probably something to mention in the out of scope section.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":247,"context_line":"Finding the compute RP"},{"line_number":248,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Neutron already depends on the ``host`` conf variable to be set to the same id"},{"line_number":251,"context_line":"that Nova uses in the Neutron port binding. Nova uses the hostname in the port"},{"line_number":252,"context_line":"binding. If the ``host`` is not defined in the Neutron config then it defaults"},{"line_number":253,"context_line":"to the hostname as well. This way Neutron and Nova are in sync today. The same"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_70fdff38","line":250,"in_reply_to":"5f7c97a3_7ce65119","updated":"2018-05-07 14:47:14.000000000","message":"I\u0027m also not sure how Ironic works today as the compute RP.name attribute has to be unique. Neutron does not own the networking devices on a baremetal compute so Neutron could not create resource providers for those devices. Therefore I noted baremetal support as out of scope.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":279,"context_line":"operations the two sets of allocations couldn\u0027t be distinguished, especially in"},{"line_number":280,"context_line":"case of resize to same host. Therefore the port_id is not a good consumer_id."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":283,"context_line":"but the port binding does not have a UUID today."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"In both cases having multiple allocations for a single server on a single host"},{"line_number":286,"context_line":"would make it complex to find every allocation for that server both for Nova"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_7c5f3141","line":283,"range":{"start_line":282,"start_character":0,"end_line":283,"end_character":48},"updated":"2018-05-04 15:40:56.000000000","message":"I don\u0027t really see how this is different from using the port_id as the consumer id above, regarding being a problem.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":279,"context_line":"operations the two sets of allocations couldn\u0027t be distinguished, especially in"},{"line_number":280,"context_line":"case of resize to same host. Therefore the port_id is not a good consumer_id."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":283,"context_line":"but the port binding does not have a UUID today."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"In both cases having multiple allocations for a single server on a single host"},{"line_number":286,"context_line":"would make it complex to find every allocation for that server both for Nova"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_b00dd73f","line":283,"range":{"start_line":282,"start_character":0,"end_line":283,"end_character":48},"in_reply_to":"5f7c97a3_7c5f3141","updated":"2018-05-07 14:47:14.000000000","message":"Also the port binding is created _after_ the allocation is made today, so we would have a chicken and egg here. I\u0027ve added one more sentence about it.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":283,"context_line":"but the port binding does not have a UUID today."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"In both cases having multiple allocations for a single server on a single host"},{"line_number":286,"context_line":"would make it complex to find every allocation for that server both for Nova"},{"line_number":287,"context_line":"and for the deployer using the Placement API."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_fc190188","line":287,"range":{"start_line":285,"start_character":0,"end_line":287,"end_character":45},"updated":"2018-05-04 15:40:56.000000000","message":"Well, we have talked several times about adding a \u0027type\u0027 field to the consumers table in placement so that we can distinguish a server instance from a migration and so forth - if we had that, we could distinguish an instance from a port consumer too. Just FYI.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":282,"context_line":"Another possibility would be to use a UUID from the port binding as consumer_id"},{"line_number":283,"context_line":"but the port binding does not have a UUID today."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"In both cases having multiple allocations for a single server on a single host"},{"line_number":286,"context_line":"would make it complex to find every allocation for that server both for Nova"},{"line_number":287,"context_line":"and for the deployer using the Placement API."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_902bfb92","line":287,"range":{"start_line":285,"start_character":0,"end_line":287,"end_character":45},"in_reply_to":"5f7c97a3_fc190188","updated":"2018-05-07 14:47:14.000000000","message":"Even if there would be a type field asking placement to return every allocation directly or indirectly connected to a given server would be hard. First the user / code should collect every possible consumers related to such server (like: port, fpga, volume etc) then ask for the allocation per consumer.\n\nThe real solution would be (for me) to introduce some kind of hierarchical allocation model or a possibility to group allocations (maybe in placement maybe not). So each sub allocation (port, fpga) can have its own consumer_uuid but they would be grouped together under the instace_uuid.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_5fb58730","line":292,"range":{"start_line":292,"start_character":31,"end_line":292,"end_character":36},"updated":"2018-05-04 15:40:56.000000000","message":"Can we say \"SR-IOV VF ports\" here? Otherwise I was confused how a port can be QoS aware and not at the same time.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":289,"context_line":"Separating non QoS aware and QoS aware ports"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"If QoS aware and non QoS aware ports are mixed on the same physical port then"},{"line_number":293,"context_line":"the minimum bandwidth rule cannot be fulfilled. The separation can be achieved"},{"line_number":294,"context_line":"at least on two levels:"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_9347854c","line":292,"range":{"start_line":292,"start_character":31,"end_line":292,"end_character":36},"in_reply_to":"5f7c97a3_5fb58730","updated":"2018-05-07 14:47:14.000000000","message":"In case of SRIOV it a single PF having one VF used by a QoS aware port and another VF used by non QoS aware port. \n\nIn case of OVS, assume that there is one physical device OVS is using on the compute. If that OVS needs to serve QoS and non QoS aware neutron ports then a fraction of the physical device bandwidth would be used by a port that did not define how much bandwidth it will use. Therefore we would end up in the same situation as in case of SRIOV.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":309,"context_line":"  Nova. Also this would mean that ports without QoS policy rules would also"},{"line_number":310,"context_line":"  have at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would"},{"line_number":311,"context_line":"  cause scheduling problems with a port created by the nova-compute."},{"line_number":312,"context_line":"  Therefore this option can only be supported after nova port create is moved"},{"line_number":313,"context_line":"  to the conductor."},{"line_number":314,"context_line":"* If we use \\*_ONLY traits then we can never combine them, though that would be"},{"line_number":315,"context_line":"  desirable. For example it makes perfect sense to guarantee 5 gigabits of a"},{"line_number":316,"context_line":"  10 gigabit card to somebody and let the rest to be used on a best effort"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_df82f74f","line":313,"range":{"start_line":312,"start_character":46,"end_line":313,"end_character":19},"updated":"2018-05-04 15:40:56.000000000","message":"nit: link to https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/prep-for-network-aware-scheduling-pike.html as a reference for future generations.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":309,"context_line":"  Nova. Also this would mean that ports without QoS policy rules would also"},{"line_number":310,"context_line":"  have at least a trait request (`CUSTOM_BEST_EFFORT_BW_ONLY`) and it would"},{"line_number":311,"context_line":"  cause scheduling problems with a port created by the nova-compute."},{"line_number":312,"context_line":"  Therefore this option can only be supported after nova port create is moved"},{"line_number":313,"context_line":"  to the conductor."},{"line_number":314,"context_line":"* If we use \\*_ONLY traits then we can never combine them, though that would be"},{"line_number":315,"context_line":"  desirable. For example it makes perfect sense to guarantee 5 gigabits of a"},{"line_number":316,"context_line":"  10 gigabit card to somebody and let the rest to be used on a best effort"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_339b11ca","line":313,"range":{"start_line":312,"start_character":46,"end_line":313,"end_character":19},"in_reply_to":"5f7c97a3_df82f74f","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Alternatives are discussed in their respective sub chapters in this spec."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Data model impact"},{"line_number":331,"context_line":"-----------------"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_1fc14f55","line":330,"updated":"2018-05-04 15:40:56.000000000","message":"Will we persist anything about the port\u0027s qos policy in the nova.network.model.VIF object? Looks like the port would have a qos_policy_id field set if the port has a qos policy associated with it. I don\u0027t know if that\u0027s something we\u0027d need in the network info cache or not.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Alternatives are discussed in their respective sub chapters in this spec."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"Data model impact"},{"line_number":331,"context_line":"-----------------"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Two new standard Resource Classes will be defined to represent the bandwidth in"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_93bc6506","line":330,"in_reply_to":"5f7c97a3_1fc14f55","updated":"2018-05-07 14:47:14.000000000","message":"I think we don\u0027t need to add anything new there.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":336,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_1f3cef91","line":339,"updated":"2018-05-04 15:40:56.000000000","message":"Again, I think we should store this in the NetworkRequest (per-port) object, which is in the NetworkRequestList, and store that in the RequestSpec. We can still *not* persist the entire network request list in the request spec if we don\u0027t want to, or we can even go so far as to null out the requested_resources in the individual NetworkRequest objects when persisting the RequestSpec. I just think it\u0027s cleaner to store the requested_resources per port with the per-port NetworkRequest objects we already have.\n\nIf we\u0027re at an impasse about how to model this implementation detail, ask Dan Smith aka King Solomon.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":336,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_c63d39bc","line":339,"in_reply_to":"5f7c97a3_1f3cef91","updated":"2018-05-07 14:47:14.000000000","message":"The currently proposed model would be:\n\nRequestSpec\n    requested_resources: ListOfObjectField(\u0027ResourceGroup\u0027)\n\nYour model would be something like: \n\nRequestSpec\n    requested_networks: NetworkRequestList(NetworkRequest)\n\nNetworkRequest\n    requested_resources: RequestGroup\n\nThe current proposal would allow to include other type of resource requests in a generic way (e.g. the resource request of an fpga or volume) into the RequestSpec in the future. The new proposal would allow to model the networking related resource requests only but would define which entity the request is coming from. Both give use something extra in the future.\n\nI don\u0027t know which direction is better. The RequestGroup idea came from Jay so I will ask his opinion.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":336,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_545a17f3","line":339,"in_reply_to":"5f7c97a3_bf47e01d","updated":"2018-05-08 17:19:37.000000000","message":"Ultimately I\u0027m OK with either approach and it\u0027s an implementation detail that we don\u0027t need block the spec on. When I asked Dan for an opinion on this last week, he didn\u0027t like storing anything in RequestSpec that isn\u0027t persisted, but if we don\u0027t do that, then we have to pass the requested_resources as a new RPC API parameter to select_destinations. Might want to ask Dan again about this during implementation.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"80b236991c9864dd82bfcea2b62ed3551a9dfa71","unresolved":false,"context_lines":[{"line_number":336,"context_line":"Neutron API already use this unit in the `QoS minimum bandwidth rule`_ API and"},{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_bf47e01d","line":339,"in_reply_to":"5f7c97a3_c63d39bc","updated":"2018-05-07 15:55:17.000000000","message":"I\u0027m in favor of the generic approach.  Having all RequestGroup in one place is going to be easier on most consuming code than having to know which fields to poke into to find stuff.  And we also don\u0027t have to spend time debating whether e.g. a NIC goes in NetworkRequest or DeviceRequest when the latter becomes a thing; or whether to have DeviceRequest or GPURequest+FPGARequest+...; or whether to split VirtualDevicePassthroughRequest from PhysicalDevicePassthroughRequest.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"13ed6fce97b503ec8ce935ec5791ae9b9672b0c4","unresolved":false,"context_lines":[{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."},{"line_number":343,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_83743c9b","line":340,"range":{"start_line":340,"start_character":31,"end_line":340,"end_character":44},"updated":"2018-05-03 15:48:58.000000000","message":"RequestGroup","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":337,"context_line":"we would like to keep the units in sync."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"A new `requested_resources` field is added to the RequestSpec versioned"},{"line_number":340,"context_line":"object with ListOfObjectField(\u0027ResourceGroup\u0027) type to store the resource and"},{"line_number":341,"context_line":"trait requests coming from the Neutron ports. This field will not be persisted"},{"line_number":342,"context_line":"in the database."},{"line_number":343,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_131375b7","line":340,"range":{"start_line":340,"start_character":31,"end_line":340,"end_character":44},"in_reply_to":"5f7c97a3_83743c9b","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":345,"context_line":"propose the modeling of the Networking RP subtree in Placement. Nova will"},{"line_number":346,"context_line":"not depend on the exact structure of such model as Neutron will provide the"},{"line_number":347,"context_line":"port\u0027s resource request in an opaque way and Nova will only need to blindly"},{"line_number":348,"context_line":"include that resource request to the GET allocation_candidate request."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"Resource request in the port"},{"line_number":351,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3f6d2b98","line":348,"range":{"start_line":348,"start_character":37,"end_line":348,"end_character":61},"updated":"2018-05-04 15:40:56.000000000","message":"nit: ``GET /allocation_candidates``","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":345,"context_line":"propose the modeling of the Networking RP subtree in Placement. Nova will"},{"line_number":346,"context_line":"not depend on the exact structure of such model as Neutron will provide the"},{"line_number":347,"context_line":"port\u0027s resource request in an opaque way and Nova will only need to blindly"},{"line_number":348,"context_line":"include that resource request to the GET allocation_candidate request."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"Resource request in the port"},{"line_number":351,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_664a2556","line":348,"range":{"start_line":348,"start_character":37,"end_line":348,"end_character":61},"in_reply_to":"5f7c97a3_3f6d2b98","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":355,"context_line":"that a single port requests resources from a single RP. Therefore Nova will map"},{"line_number":356,"context_line":"each port\u0027s resource request to a single numbered resource request group as"},{"line_number":357,"context_line":"defined in `granular-resource-request`_ spec. That spec requires that the name"},{"line_number":358,"context_line":"of the numbered resource groups has a form of `resources\u003cinteger\u003e`. Nova will"},{"line_number":359,"context_line":"map a port\u0027s resource_request to the first unused numbered group in the"},{"line_number":360,"context_line":"allocation_candidate request. Neutron does not know which ports are used"},{"line_number":361,"context_line":"together in a server create request, and which numbered groups have already"},{"line_number":362,"context_line":"been used by the flavor extra_spec therefore Neutron cannot assign unique"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3f020bb6","line":359,"range":{"start_line":358,"start_character":68,"end_line":359,"end_character":64},"updated":"2018-05-04 15:40:56.000000000","message":"So if the flavor extra specs already has something like:\n\nresources\u003d(unnumbered)\nresources1\u003d\u003cgroup1\u003e\nresources2\u003d\u003cgroup2\u003e\n\nThen we\u0027ll translate the port\u0027s resource request to a \"resources3\" group? Makes sense, I just want to make sure I grok this.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":355,"context_line":"that a single port requests resources from a single RP. Therefore Nova will map"},{"line_number":356,"context_line":"each port\u0027s resource request to a single numbered resource request group as"},{"line_number":357,"context_line":"defined in `granular-resource-request`_ spec. That spec requires that the name"},{"line_number":358,"context_line":"of the numbered resource groups has a form of `resources\u003cinteger\u003e`. Nova will"},{"line_number":359,"context_line":"map a port\u0027s resource_request to the first unused numbered group in the"},{"line_number":360,"context_line":"allocation_candidate request. Neutron does not know which ports are used"},{"line_number":361,"context_line":"together in a server create request, and which numbered groups have already"},{"line_number":362,"context_line":"been used by the flavor extra_spec therefore Neutron cannot assign unique"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_c66699ee","line":359,"range":{"start_line":358,"start_character":68,"end_line":359,"end_character":64},"in_reply_to":"5f7c97a3_3f020bb6","updated":"2018-05-07 14:47:14.000000000","message":"Correct. If,more than one port is requested during boot then resource3, resource4, etc will be created.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":395,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"The Placement REST API needs to be extended to support querying allocation"},{"line_number":398,"context_line":"candidates with an RP that has at least one of the traits form a list"},{"line_number":399,"context_line":"of requested traits. This feature will be described in the separate"},{"line_number":400,"context_line":"`any-traits-in-allocation_candidates-query`_ spec."},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_1fd86f51","line":398,"range":{"start_line":398,"start_character":58,"end_line":398,"end_character":62},"updated":"2018-05-04 15:40:56.000000000","message":"from","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":395,"context_line":"`QoS minimum bandwidth allocation in Placement API`_ Neutron spec."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"The Placement REST API needs to be extended to support querying allocation"},{"line_number":398,"context_line":"candidates with an RP that has at least one of the traits form a list"},{"line_number":399,"context_line":"of requested traits. This feature will be described in the separate"},{"line_number":400,"context_line":"`any-traits-in-allocation_candidates-query`_ spec."},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_46a049f5","line":398,"range":{"start_line":398,"start_character":58,"end_line":398,"end_character":62},"in_reply_to":"5f7c97a3_1fd86f51","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"None"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"Upgrade impact"},{"line_number":448,"context_line":"--------------"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"Servers could exist today with SRIOV ports having QoS policy and for them the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_5fa90779","line":447,"updated":"2018-05-04 15:40:56.000000000","message":"There is also the end user upgrade impact of the API changing where they can\u0027t create a server with a network that has a qos policy defined because nova-compute will start to fail when it does its port creation logic. However, we\u0027ve discussed this before and the qos policy extension in neutron is by default admin-only and considered experimental since nova-scheduler doesn\u0027t handle it yet - might be worth noting that and link to the neutron docs that also mention that limitation.\n\nhttps://docs.openstack.org/neutron/latest/admin/config-qos.html","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"None"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"Upgrade impact"},{"line_number":448,"context_line":"--------------"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"Servers could exist today with SRIOV ports having QoS policy and for them the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_469a8914","line":447,"in_reply_to":"5f7c97a3_5fa90779","updated":"2018-05-07 14:47:14.000000000","message":"Documented.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":499,"context_line":"* Delete the port related allocations from Placement after successful interface"},{"line_number":500,"context_line":"  detach operation"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3f4f6bbe","line":503,"range":{"start_line":502,"start_character":0,"end_line":503,"end_character":29},"updated":"2018-05-04 15:40:56.000000000","message":"As noted above, I think we can do this as a bug fix separate from the blueprint series. I think of it like trying to attach a multiattach volume before nova supported those types of volumes, or like trying to rebuild a volume-backed instance with a new image - the API accepted and ignored that for a long time incorrectly, and we eventually turned it into a hard failure in the API.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":499,"context_line":"* Delete the port related allocations from Placement after successful interface"},{"line_number":500,"context_line":"  detach operation"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_e66cf509","line":503,"range":{"start_line":502,"start_character":0,"end_line":503,"end_character":29},"in_reply_to":"5f7c97a3_3f4f6bbe","updated":"2018-05-07 14:47:14.000000000","message":"We could reject every interface_attach with port/network having QoS policy but the only problematic QoS policy rule will be the one the current Neutron spec proposes. All the currently existing rules can be supported without resource allocations in placement. So we don\u0027t want to blindly reject all the ports with QoS policy.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":499,"context_line":"* Delete the port related allocations from Placement after successful interface"},{"line_number":500,"context_line":"  detach operation"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_d402a7b4","line":503,"range":{"start_line":502,"start_character":0,"end_line":503,"end_character":29},"in_reply_to":"5f7c97a3_e66cf509","updated":"2018-05-08 17:19:37.000000000","message":"\u003e All the currently existing rules can be supported without resource allocations in placement. So we don\u0027t want to blindly reject all the ports with QoS policy.\n\nOK, that\u0027s news to me, I didn\u0027t know there was a difference, but I also don\u0027t really know anything about neutron QoS policy and I didn\u0027t read the neutron spec.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"},{"line_number":507,"context_line":"  it has"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_3fe44bac","line":507,"range":{"start_line":505,"start_character":2,"end_line":507,"end_character":8},"updated":"2018-05-04 15:40:56.000000000","message":"So we\u0027re going to create the port and then fail and delete the port?\n\nWouldn\u0027t it be easier to just check if the network, from which we\u0027re going to create the port, has a QoS policy associated with it and fail the port creation in that case? Looks like neutron network resources in the REST API have a qos_policy_id field which we can check. Hell, we could even determine this in the API and fail fast if the user requested specific networks, see:\n\nhttps://github.com/openstack/nova/blob/4b0d0ea9f18139d58103a520a6a4e9119e19a4de/nova/network/neutronv2/api.py#L1763\n\nThat\u0027s also something we could do as a bug fix, similar to the attach interface thing.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"},{"line_number":507,"context_line":"  it has"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_693516da","line":507,"range":{"start_line":505,"start_character":2,"end_line":507,"end_character":8},"in_reply_to":"5f7c97a3_3fe44bac","updated":"2018-05-07 14:47:14.000000000","message":"Yes, it means Nova will create the port, check the port\u0027s resource request and if it is not empty fail the boot whihc will lead to the deletion of the port.\n\nSee my comment on L503. We don\u0027t need to reject every QoS policy just the one that requests resources. \n\nIn theory we can read the qos_policy_id then fetch the policy object from Neutron API, then walk the rules in that object to see if there is a rule that will cause that the port\u0027s resource_request become non empty. But that seems pretty complicated.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":502,"context_line":"* Reject an interface_attach request that contains a port or a network having"},{"line_number":503,"context_line":"  a QoS policy rule attached."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"* Check in nova-compute that a port created by the nova-compute during server"},{"line_number":506,"context_line":"  boot has a non empty resource_request in the Neutron API and fail the boot if"},{"line_number":507,"context_line":"  it has"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_b4bfebce","line":507,"range":{"start_line":505,"start_character":2,"end_line":507,"end_character":8},"in_reply_to":"5f7c97a3_693516da","updated":"2018-05-08 17:19:37.000000000","message":"\u003e See my comment on L503. We don\u0027t need to reject every QoS policy just the one that requests resources.\n\nOK yeah that\u0027s new information to me and I believe that allocate_for_instance() will already delete the port we created on error:\n\nhttps://github.com/openstack/nova/blob/e778fc7b263d4d83fb4e7aeb5a3f73233163cfeb/nova/network/neutronv2/api.py#L1100\n\nBut it would need to be tested. Avoiding the port creation could be a later optimization TODO left in the code.","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed338ef4a7c24d3e92db16e71087e35e45ec7dbd","unresolved":false,"context_lines":[{"line_number":554,"context_line":".. _`vnic_types are defined in the Neutron API`:  \u003e https://developer.openstack.org/api-ref/network/v2/#show-port-details"},{"line_number":555,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":556,"context_line":".. _`separate bug`: https://bugs.launchpad.net/nova/+bug/1679750"},{"line_number":557,"context_line":".. _`QoS minimum bandwidth rule`: https://docs.openstack.org/neutron/pike/admin/config-qos.html"},{"line_number":558,"context_line":".. _`any-traits-in-allocation_candidates-query`: https://blueprints.launchpad.net/nova/+spec/any-traits-in-allocation-candidates-query"},{"line_number":559,"context_line":".. _`mixing-required-traits-with-any-traits`: https://blueprints.launchpad.net/nova/+spec/mixing-required-traits-with-any-traits"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_dfd0b753","line":557,"range":{"start_line":557,"start_character":69,"end_line":557,"end_character":73},"updated":"2018-05-04 15:40:56.000000000","message":"latest","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8340ae7aa792bf8fad184951b25afc4fd4bc5ad4","unresolved":false,"context_lines":[{"line_number":554,"context_line":".. _`vnic_types are defined in the Neutron API`:  \u003e https://developer.openstack.org/api-ref/network/v2/#show-port-details"},{"line_number":555,"context_line":".. _`blindly copy the allocation from source host to destination host`: https://github.com/openstack/nova/blob/9273b082026080122d104762ec04591c69f75a44/nova/scheduler/utils.py#L372"},{"line_number":556,"context_line":".. _`separate bug`: https://bugs.launchpad.net/nova/+bug/1679750"},{"line_number":557,"context_line":".. _`QoS minimum bandwidth rule`: https://docs.openstack.org/neutron/pike/admin/config-qos.html"},{"line_number":558,"context_line":".. _`any-traits-in-allocation_candidates-query`: https://blueprints.launchpad.net/nova/+spec/any-traits-in-allocation-candidates-query"},{"line_number":559,"context_line":".. _`mixing-required-traits-with-any-traits`: https://blueprints.launchpad.net/nova/+spec/mixing-required-traits-with-any-traits"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"5f7c97a3_091342b7","line":557,"range":{"start_line":557,"start_character":69,"end_line":557,"end_character":73},"in_reply_to":"5f7c97a3_dfd0b753","updated":"2018-05-07 14:47:14.000000000","message":"Done","commit_id":"dab08add2456463d1aa5b610b041965e537a9d01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Currently there is no method in the Nova scheduler to place a server"},{"line_number":22,"context_line":"based on the network bandwidth available in a host. The Placement service"},{"line_number":23,"context_line":"doesn\u0027t track the different network back-ends present in a host and their"},{"line_number":24,"context_line":"available bandwidth."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_85bb9cc2","line":23,"range":{"start_line":23,"start_character":54,"end_line":23,"end_character":56},"updated":"2018-05-08 16:01:43.000000000","message":"on","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":66,"context_line":"* Nova creates the root RP of the compute node RP tree as today"},{"line_number":67,"context_line":"* Neutron creates the networking RP tree of a compute node under the compute"},{"line_number":68,"context_line":"  node root RP and reports bandwidth inventories"},{"line_number":69,"context_line":"* Neutron provides the resource_request of a port in the Neutron API"},{"line_number":70,"context_line":"* Nova takes the ports\u0027 resource_request and includes it in the GET"},{"line_number":71,"context_line":"  /allocation_candidate request. Nova does not need to understand or manipulate"},{"line_number":72,"context_line":"  the actual resource request. But Nova needs to assign unique granular"}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_a5da5814","line":69,"range":{"start_line":69,"start_character":23,"end_line":69,"end_character":39},"updated":"2018-05-08 16:01:43.000000000","message":"``resource_request``?","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"* Nova passes the allocation information it received from placement during"},{"line_number":76,"context_line":"  resource claiming to Neutron during port binding. Nova will send this"},{"line_number":77,"context_line":"  information in the same format as the PUT ``/allocations/{consumer_uuid}``"},{"line_number":78,"context_line":"  request uses in Placement. Neutron will not use this to send PUT"},{"line_number":79,"context_line":"  ``/allocations/{consumer_uuid}`` requests as Nova has already claimed these"},{"line_number":80,"context_line":"  resources."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_b4504b0c","line":78,"range":{"start_line":78,"start_character":10,"end_line":78,"end_character":14},"updated":"2018-05-08 17:19:37.000000000","message":"used","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":149,"context_line":"server in Nova and passes in the port UUID in the server create request."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Nova fetches the port data from Neutron. This already happens in"},{"line_number":152,"context_line":"create_pci_requests_for_sriov_ports in the current code base. The port contains"},{"line_number":153,"context_line":"the requested resources and required traits. See"},{"line_number":154,"context_line":"`Resource request in the port`_."},{"line_number":155,"context_line":""}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_e555b051","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":35},"updated":"2018-05-08 16:01:43.000000000","message":"``create_pci_requests_for_sriov_ports``","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":153,"context_line":"the requested resources and required traits. See"},{"line_number":154,"context_line":"`Resource request in the port`_."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"The create_pci_requests_for_sriov_ports() call needs to be refactored to a more"},{"line_number":157,"context_line":"generic call that not just generates PCI requests but also collects the"},{"line_number":158,"context_line":"requested resources from the Neutron ports."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_0551cc62","line":156,"range":{"start_line":156,"start_character":4,"end_line":156,"end_character":39},"updated":"2018-05-08 16:01:43.000000000","message":"ditto","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a2887cd8614f004226633f5665b5f40e1227975a","unresolved":false,"context_lines":[{"line_number":351,"context_line":"propose the modeling of the Networking RP subtree in Placement. Nova will"},{"line_number":352,"context_line":"not depend on the exact structure of such model as Neutron will provide the"},{"line_number":353,"context_line":"port\u0027s resource request in an opaque way and Nova will only need to blindly"},{"line_number":354,"context_line":"include that resource request to the ``GET allocation_candidates`` request."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"Resource request in the port"},{"line_number":357,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_745dd3e7","line":354,"range":{"start_line":354,"start_character":43,"end_line":354,"end_character":44},"updated":"2018-05-08 17:19:37.000000000","message":"nit: /allocation_candidates","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f4bdae94d9841d4d0f167d10ac551b8eeb081ba","unresolved":false,"context_lines":[{"line_number":403,"context_line":"The Placement REST API needs to be extended to support querying allocation"},{"line_number":404,"context_line":"candidates with an RP that has at least one of the traits from a list"},{"line_number":405,"context_line":"of requested traits. This feature will be described in the separate"},{"line_number":406,"context_line":"`any-traits-in-allocation_candidates-query`_ spec."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"This feature also depends on the `granular-resource-request`_ and"},{"line_number":409,"context_line":"`nested-resource-providers`_ features which impact the Placement REST API."}],"source_content_type":"text/x-rst","patch_set":27,"id":"5f7c97a3_e524d0c8","line":406,"range":{"start_line":406,"start_character":25,"end_line":406,"end_character":26},"updated":"2018-05-08 16:01:43.000000000","message":"s/_/-/","commit_id":"7d29f3410260747eb0d4fc3d9610b491d4af398f"}]}
