)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add prep-for-network-aware-scheduling spec"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a spec for the work to split allocate_for_instance into to parts,"},{"line_number":10,"context_line":"such that we will be able to do network aware scheduling in the near"},{"line_number":11,"context_line":"future for neutron\u0027s routed networks spec."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_e1e49bad","line":9,"updated":"2016-05-12 14:44:17.000000000","message":"s/to parts/two parts/?","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"42a44503a1fb07829d596339ae2a1a82167e8cbb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add prep-for-network-aware-scheduling spec"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a spec for the work to split allocate_for_instance into to parts,"},{"line_number":10,"context_line":"such that we will be able to do network aware scheduling in the near"},{"line_number":11,"context_line":"future for neutron\u0027s routed networks spec."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_2cc49d90","line":9,"in_reply_to":"dab17558_e1e49bad","updated":"2016-05-13 15:12:03.000000000","message":"doh, lets call that a typo","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"}],"specs/newton/approved/prep-for-network-aware-scheduling.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"that has no public IPs available. This is being added into Neutron by the"},{"line_number":22,"context_line":"Routed Networks feature."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"To make this possible, we need to know the details of all the users ports,"},{"line_number":25,"context_line":"and what resources are required, before asking the scheduler for a host."},{"line_number":26,"context_line":"In addition, after picking a location, we should check there is an IP"},{"line_number":27,"context_line":"available before continuing with the rest of the build process."}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_c1e1979c","line":24,"updated":"2016-05-12 14:44:17.000000000","message":"s/users ports/user\u0027s requested ports/","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8b8816fb7c2c6a9146519d5b6ae40f3d91035fdb","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"To make this possible, we need to know the details of all the users ports,"},{"line_number":25,"context_line":"and what resources are required, before asking the scheduler for a host."},{"line_number":26,"context_line":"In addition, after picking a location, we should check there is an IP"},{"line_number":27,"context_line":"available before continuing with the rest of the build process."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"As an aside, the allocate_for_instance call that currently contains both"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_c8737c14","line":26,"range":{"start_line":26,"start_character":49,"end_line":26,"end_character":60},"updated":"2016-05-12 13:59:23.000000000","message":"check that there","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"available before continuing with the rest of the build process."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"As an aside, the allocate_for_instance call that currently contains both"},{"line_number":30,"context_line":"parts of that operation has proved very difficult to maintain and evolve."},{"line_number":31,"context_line":"Splitting that code into a separate get/create ports and bind ports phase"},{"line_number":32,"context_line":"should help make that code easier to navigate."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_21ed038f","line":30,"updated":"2016-05-12 14:44:17.000000000","message":"No, I think has alone is what John meant above :)","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8b8816fb7c2c6a9146519d5b6ae40f3d91035fdb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"available before continuing with the rest of the build process."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"As an aside, the allocate_for_instance call that currently contains both"},{"line_number":30,"context_line":"parts of that operation has proved very difficult to maintain and evolve."},{"line_number":31,"context_line":"Splitting that code into a separate get/create ports and bind ports phase"},{"line_number":32,"context_line":"should help make that code easier to navigate."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_8b920e9e","line":30,"range":{"start_line":30,"start_character":24,"end_line":30,"end_character":27},"updated":"2016-05-12 13:59:23.000000000","message":"s/has/and has/","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"As an aside, the allocate_for_instance call that currently contains both"},{"line_number":30,"context_line":"parts of that operation has proved very difficult to maintain and evolve."},{"line_number":31,"context_line":"Splitting that code into a separate get/create ports and bind ports phase"},{"line_number":32,"context_line":"should help make that code easier to navigate."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_01f27f6f","line":32,"updated":"2016-05-12 14:44:17.000000000","message":"++","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split neutron\u0027s allocate_for_instance into two"},{"line_number":43,"context_line":"distinct phases: get/create ports and bind ports. Currently we create ports"},{"line_number":44,"context_line":"or update ports, depending on if they were passed in. This moves to logic to"},{"line_number":45,"context_line":"optionally create a port, then later always update the port with the binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_61e70bad","line":42,"updated":"2016-05-12 14:44:17.000000000","message":"Agreed with Dan. You should replace \"neutron\u0027s\" with \"the nova-compute manager\u0027s\"","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8b8816fb7c2c6a9146519d5b6ae40f3d91035fdb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split neutron\u0027s allocate_for_instance into two"},{"line_number":43,"context_line":"distinct phases: get/create ports and bind ports. Currently we create ports"},{"line_number":44,"context_line":"or update ports, depending on if they were passed in. This moves to logic to"},{"line_number":45,"context_line":"optionally create a port, then later always update the port with the binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_ab4a7225","line":42,"range":{"start_line":42,"start_character":21,"end_line":42,"end_character":36},"updated":"2016-05-12 13:59:23.000000000","message":"this makes it sound like we\u0027re splitting something in neutron, which may be confusing.","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"42a44503a1fb07829d596339ae2a1a82167e8cbb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split neutron\u0027s allocate_for_instance into two"},{"line_number":43,"context_line":"distinct phases: get/create ports and bind ports. Currently we create ports"},{"line_number":44,"context_line":"or update ports, depending on if they were passed in. This moves to logic to"},{"line_number":45,"context_line":"optionally create a port, then later always update the port with the binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_0c7279e3","line":42,"in_reply_to":"dab17558_61e70bad","updated":"2016-05-13 15:12:03.000000000","message":"oops, yeah.","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":16530,"name":"Wajdi Al-Hawari","email":"w.hawari@gmail.com","username":"wajdi"},"change_message_id":"880712ce350bdc692c2d11f05488caa03b528906","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split neutron\u0027s allocate_for_instance into two"},{"line_number":43,"context_line":"distinct phases: get/create ports and bind ports. Currently we create ports"},{"line_number":44,"context_line":"or update ports, depending on if they were passed in. This moves to logic to"},{"line_number":45,"context_line":"optionally create a port, then later always update the port with the binding"},{"line_number":46,"context_line":"details."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_d58cf1db","line":44,"updated":"2016-05-11 15:22:02.000000000","message":"nit: Should \"This moves to logic to\" be \"This moves the logic to\"?","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split neutron\u0027s allocate_for_instance into two"},{"line_number":43,"context_line":"distinct phases: get/create ports and bind ports. Currently we create ports"},{"line_number":44,"context_line":"or update ports, depending on if they were passed in. This moves to logic to"},{"line_number":45,"context_line":"optionally create a port, then later always update the port with the binding"},{"line_number":46,"context_line":"details."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_41ec878f","line":44,"updated":"2016-05-12 14:44:17.000000000","message":"s/moves to logic/changes the logic/","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"and can be deleted."},{"line_number":53,"context_line":"For nova-network users, the get/create ports can be a noop."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The third step is to move the port binding into the conductor, right after"},{"line_number":56,"context_line":"the scheduler has picked an appropriate host. We will not be able to run"},{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_a101f33b","line":55,"updated":"2016-05-12 14:44:17.000000000","message":"Hmm, technically this is not the \"port binding\" step you are talking about here. Rather, it is the IP allocation/assignment (IPAM) step. The port binding step is done on the compute host to associate a vNIC in a guest to a Neutron port and plug the VIF into the network appropriately.","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"42a44503a1fb07829d596339ae2a1a82167e8cbb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"and can be deleted."},{"line_number":53,"context_line":"For nova-network users, the get/create ports can be a noop."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The third step is to move the port binding into the conductor, right after"},{"line_number":56,"context_line":"the scheduler has picked an appropriate host. We will not be able to run"},{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_2020219b","line":55,"in_reply_to":"dab17558_a101f33b","updated":"2016-05-13 15:12:03.000000000","message":"there is no IPAM step today, its in the port create. Its the \"assign port to a compute host step\", that will in the future optionally include an IPAM step, as required.","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8b8816fb7c2c6a9146519d5b6ae40f3d91035fdb","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"We could attempt to add more complexity into the existing"},{"line_number":71,"context_line":"allocate_for_instance code. But history has shown that is likely to create"},{"line_number":72,"context_line":"many regressions."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_6bb36a0b","line":72,"updated":"2016-05-12 13:59:23.000000000","message":"This is NOT al alternative :D\n\nBut, okay, for completeness sake.. :)","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"42a44503a1fb07829d596339ae2a1a82167e8cbb","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"We could attempt to add more complexity into the existing"},{"line_number":71,"context_line":"allocate_for_instance code. But history has shown that is likely to create"},{"line_number":72,"context_line":"many regressions."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_00719da8","line":72,"in_reply_to":"dab17558_6bb36a0b","updated":"2016-05-13 15:12:03.000000000","message":":)","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6fb46320b750a68949cb4e8ed82d5052b7f98e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"---------------"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Eventually it could mean we don\u0027t need any neutron related credentials on"},{"line_number":88,"context_line":"all the compute nodes. This work will not achieve that goal, but it is a"},{"line_number":89,"context_line":"step in the right direction."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Notifications impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_81fe6f36","line":88,"updated":"2016-05-12 14:44:17.000000000","message":"s/all the/any of the/","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":16530,"name":"Wajdi Al-Hawari","email":"w.hawari@gmail.com","username":"wajdi"},"change_message_id":"880712ce350bdc692c2d11f05488caa03b528906","unresolved":false,"context_lines":[{"line_number":110,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":111,"context_line":"port."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"This also generally move more load into the nova-conductor nodes, but on the"},{"line_number":114,"context_line":"upside this reduces the load on the nova-compute nodes."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_b5e16c2c","line":113,"updated":"2016-05-11 15:22:02.000000000","message":"nit: s/move/moves/","commit_id":"5c150ada3c16074ec8b35b51cc7d1484ac32c496"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_fe610c3a","line":43,"range":{"start_line":43,"start_character":26,"end_line":43,"end_character":57},"updated":"2016-05-17 16:18:57.000000000","message":"Which is totally a neutron only concept, nova-network doesn\u0027t do anything for these. So I guess the nova-network impl of these would just be noop.\n\n--\n\nHi, it\u0027s me from the future, I just read line 53.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_def2486e","line":45,"range":{"start_line":45,"start_character":9,"end_line":45,"end_character":19},"updated":"2016-05-17 16:18:57.000000000","message":"Optionally? Meaning a port wasn\u0027t requested in the server create request?","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6e825a044abca7ff2f004e40e94665f1072d13f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_d7efc284","line":45,"range":{"start_line":45,"start_character":9,"end_line":45,"end_character":19},"in_reply_to":"dab17558_b4ab2574","updated":"2016-05-17 19:53:52.000000000","message":"Yeah, just making sure we\u0027re talking about the same thing.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03790a4494991a39cceb0a62ca4702131557a54c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_bcd48647","line":45,"range":{"start_line":45,"start_character":9,"end_line":45,"end_character":19},"in_reply_to":"dab17558_c55f03e3","updated":"2016-05-18 09:37:02.000000000","message":"thats the idea, to simplify things.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"42a843d7088e7e0d747a9bd087448c58d487357b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_c55f03e3","line":45,"range":{"start_line":45,"start_character":9,"end_line":45,"end_character":19},"in_reply_to":"dab17558_d7efc284","updated":"2016-05-17 23:23:03.000000000","message":"So, after this change, port binding will always come with a port update and never with a port create.\n\nThis really doesn\u0027t matter much to Neutron, I guess.  It already works on both.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"The first step is to split the nova-compute manager\u0027s allocate_for_instance"},{"line_number":43,"context_line":"into two distinct phases: get/create ports and bind ports. Currently we create"},{"line_number":44,"context_line":"ports or update ports, depending on if they were passed in. This changes the"},{"line_number":45,"context_line":"logic to optionally create a port, then later always update the port with the"},{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_b4ab2574","line":45,"range":{"start_line":45,"start_character":9,"end_line":45,"end_character":19},"in_reply_to":"dab17558_def2486e","updated":"2016-05-17 16:34:30.000000000","message":"when a port uuid is provided, you don\u0027t need to create the port.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_21b535ec","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"updated":"2016-05-17 16:18:57.000000000","message":"It\u0027s more than just that, there is also the DNS hostname stuff among some other things:\n\nhttps://github.com/openstack/nova/blob/5252f337f4640c407dd80d6b4ec731fe6b45e63f/nova/network/neutronv2/api.py#L723\n\nWe also have the fun non-working PF passthrough stuff:\n\nhttps://github.com/openstack/nova/blob/5252f337f4640c407dd80d6b4ec731fe6b45e63f/nova/network/neutronv2/api.py#L692\n\nMaybe that just gets handled on update in the compute.\n\nAnother thing is the MAC address list that the Ironic driver provides for allocate_for_instance, which is used to validate that a requested port\u0027s mac is in that list else we fail:\n\nhttps://github.com/openstack/nova/blob/5252f337f4640c407dd80d6b4ec731fe6b45e63f/nova/network/neutronv2/api.py#L383\n\nThat\u0027s still going to be a thing that we fail on the compute I think, unless we get the mac\u0027s from the hypervisor once the scheduler has picked a host but before we send the build request to that compute node.\n\nBefore we make blanket assertions that we\u0027ll just do the port create in conductor and update it on the compute node later (or update in conductor later), I think we need some more details in the various port create/update cases here and which ones require actual information from the compute that we land on, at least for the port binding host and MACs.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ebfbd47bf789196fb310e9c9a4b1a5f14a3a44cf","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_8938f1ef","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"bab6814e_8b7e9eac","updated":"2016-05-25 21:09:17.000000000","message":"John is correct in that there is no change in the overall logic of assigning the dns_name attribute to the port. We just need to be careful where in the new code we assign it. Currently, we do the following:\n\n1) If the port binding extension is not enabled in Neutron, the dns_name attribute is added to the port\u0027s create / update request by _populate_neutron_extension_values here https://github.com/openstack/nova/blob/5252f337f4640c407dd80d6b4ec731fe6b45e63f/nova/network/neutronv2/api.py#L743, because this request is executed in the user\u0027s context. For the dns_name attribute to be sent to the correct zone in Designate, the port create / update request has to be processed by Neutron in the user context\n\n2) If the port binding extension is enabled in Neutron, Nova\u0027s port create / update request takes place with an admin context and, as a consequence, it doesn\u0027t carry the dns_name attribute, which is set by an additional update request with the user context by _update_port_dns_name here: https://github.com/openstack/nova/blob/5252f337f4640c407dd80d6b4ec731fe6b45e63f/nova/network/neutronv2/api.py#L756\n\nIn the new code, I see these two cases being managed as follows:\n\n1) Case 1 can be handled adding the dns_name attribute to the port update request that will be executed in the bind port step.\n\n2) Case 2 will be handled by an additional update port request with the user context, that will be executed right after the one described in point 1. This can be accomplished by calling _update_port_dns_name\n\nNet net, the situation will be equivalent to one we have now: if the port binding extension is enabled in Neutron, we will execute one additional port update operation to set the port\u0027s dns_name attribute","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_f42c8d03","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"dab17558_21b535ec","updated":"2016-05-17 16:34:30.000000000","message":"Yeah, MAC addresses are a sticking point. Been talking with the ironic folks about the details on how they want that to work. Currently its totally broken for when you provide an already created port up front. \n\nDNS is fine I believe, as its an instance name related thing we can do just like we do today in the update port phase.\n\nI have not been putting that detail in here, as I feel its best worked out in code review.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"744133edbfd3d12a0cdbb62c251470364aa93494","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_8b7e9eac","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"dab17558_9b16fca4","updated":"2016-05-18 09:00:28.000000000","message":"@mriedem: yeah, happy to add the concern in here, and the rough plan. I just wanted to not get too bogged down here.\n\n@carl: So DNS does require two port updates today, this doesn\u0027t change that logic.\n\nMy current thinking is to update the MAC, when required, during the second phase. Generally we don\u0027t change the MAC at all. It sounded like that was generally OK on the neutron side, although that sounds very suspect to me.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"e64f88257be6998034752c399cb3389e697dcd46","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_9b16fca4","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"dab17558_e09f95ff","updated":"2016-05-17 23:41:05.000000000","message":"https://github.com/openstack/nova/blob/39d60220f7/nova/network/neutronv2/api.py#L692","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6e825a044abca7ff2f004e40e94665f1072d13f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_f76da603","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"dab17558_f42c8d03","updated":"2016-05-17 19:53:52.000000000","message":"I think the spec should at least say something about the MAC address issue, otherwise I feel like the spec is mostly unicorns and rainbows and will be a breeze to implement, which I don\u0027t think is going to be the case with some of these edge case issues. The nitty gritty details in the code review is fine, but at least some mention of known sticky points would be good to have in here. I\u0027m especially concerned about knowing what we\u0027re getting into with this before we start doing it because it sounds like we\u0027re going to make the routed networks blueprint dependent on this, which puts that blueprint (which is already dependent on generic-resource-pools) at a very high risk to not land in Newton. Don\u0027t get me wrong, I\u0027m all for refactoring this flow, it\u0027s the right thing to do, I just want to know what we\u0027re getting into when we invest in it.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"42a843d7088e7e0d747a9bd087448c58d487357b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"this code until all compute nodes have been upgraded to the newest version."},{"line_number":58,"context_line":"Until all nodes have been upgraded, the new nodes will still have to run this"},{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_e09f95ff","line":61,"range":{"start_line":60,"start_character":60,"end_line":61,"end_character":49},"in_reply_to":"dab17558_f76da603","updated":"2016-05-17 23:23:03.000000000","message":"I\u0027d like to see something about the MAC issue in the spec, too.  Do we need to be able to defer mac address assignment too?  Or, allow update of the mac address?    I\u0027m getting deja vu, don\u0027t we allow updating the MAC?[1]  Those are just off the top of my head.  But, if we\u0027re always going to create a port before scheduling and binding then we need to figure this out.\n\nThe DNS is a bit sticky, too, right?  Isn\u0027t there something about the credentials used for a port update.  Does it mean there will always be two port updates (one for binding, one for dns)?  I\u0027d like Miguel Lavalle to comment here.\n\n[1] https://review.openstack.org/#/c/112129/","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"42a843d7088e7e0d747a9bd087448c58d487357b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"},{"line_number":65,"context_line":"conductor, after the scheduler is called. For cells v1 users, this should"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_20acfdeb","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":30},"updated":"2016-05-17 23:23:03.000000000","message":"Will this still be okay when some compute hosts have not yet been upgraded?","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03790a4494991a39cceb0a62ca4702131557a54c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"code on the Compute node. While annoying, this move is only to help with"},{"line_number":60,"context_line":"faster retries, and as such, should not block any progress. Note this port"},{"line_number":61,"context_line":"update step includes setting the host on the port, and in the future will"},{"line_number":62,"context_line":"be the point an IP is assigned, if the port does not yet have an IP."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For nova-network, we can run the existing allocate-for-instance logic in the"},{"line_number":65,"context_line":"conductor, after the scheduler is called. For cells v1 users, this should"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_fc80ce48","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":30},"in_reply_to":"dab17558_20acfdeb","updated":"2016-05-18 09:37:02.000000000","message":"If we require all the computes to be upgrade before this works, we can block supporting the new feature until all the computes are upgraded. But I am hoping we can avoid that.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Alternatives"},{"line_number":70,"context_line":"------------"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"We could attempt to add more complexity into the existing"},{"line_number":73,"context_line":"allocate_for_instance code. But history has shown that is likely to create"},{"line_number":74,"context_line":"many regressions."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_a17ac5b7","line":72,"updated":"2016-05-17 16:18:57.000000000","message":"FWIW, this is the get-me-a-network code added to neutron\u0027s allocate_for_instance method:\n\nhttps://review.openstack.org/#/c/316275/3/nova/network/neutronv2/api.py\n\nWhich isn\u0027t to intrusive. However, now that I think about it, if the Nova Newton API says you can auto-allocate a network bu the compute node allocate_for_instance code doesn\u0027t have that change (the build request lands on a Mitaka compute), then it\u0027s going to fail.\n\nThe nova compute API does the validation for the quotas, which checks to see if Neutron has the auto-allocated-topology API available and ready to use, but that doesn\u0027t mean we\u0027re going to land on a compute that supports using it. Arg. So either I have to restrict to computes that are new enough to do that, or we have a fail/reschedule loop...","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"Alternatives"},{"line_number":70,"context_line":"------------"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"We could attempt to add more complexity into the existing"},{"line_number":73,"context_line":"allocate_for_instance code. But history has shown that is likely to create"},{"line_number":74,"context_line":"many regressions."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_d4998920","line":72,"in_reply_to":"dab17558_a17ac5b7","updated":"2016-05-17 16:34:30.000000000","message":"Yeah, we need to block until we reach the required min service version.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Notifications impact"},{"line_number":94,"context_line":"--------------------"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Notifications may now have a different host and service, but they should"},{"line_number":97,"context_line":"be otherwise identical."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Other end user impact"},{"line_number":100,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_b41b2572","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":23},"updated":"2016-05-17 16:18:57.000000000","message":"Which notifications? Can you be more specific here?","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Notifications impact"},{"line_number":94,"context_line":"--------------------"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Notifications may now have a different host and service, but they should"},{"line_number":97,"context_line":"be otherwise identical."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Other end user impact"},{"line_number":100,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_74b25d95","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":23},"in_reply_to":"dab17558_b41b2572","updated":"2016-05-17 16:34:30.000000000","message":"Actually I am not sure there are any... if there were, this shouldn\u0027t change them too much.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"42a843d7088e7e0d747a9bd087448c58d487357b","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Currently the neutron port binding is done in parallel with other long running"},{"line_number":108,"context_line":"tasks that the compute node performs during the boot process. This moves the"},{"line_number":109,"context_line":"port creation and binding into the critical path of the boot process."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"When Nova is creating ports for users, instead of just calling port create"},{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_e0caf59e","line":109,"range":{"start_line":109,"start_character":26,"end_line":109,"end_character":68},"updated":"2016-05-17 23:23:03.000000000","message":"Might want to be clear on what the critical path is.  I remember discussing the middle stage of the three new conductor stages as the super critical path.  As I recall, it wasn\u0027t as big a deal to have some longer running tasks in the other two stages.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03790a4494991a39cceb0a62ca4702131557a54c","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Currently the neutron port binding is done in parallel with other long running"},{"line_number":108,"context_line":"tasks that the compute node performs during the boot process. This moves the"},{"line_number":109,"context_line":"port creation and binding into the critical path of the boot process."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"When Nova is creating ports for users, instead of just calling port create"},{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_bc080693","line":109,"range":{"start_line":109,"start_character":26,"end_line":109,"end_character":68},"in_reply_to":"dab17558_e0caf59e","updated":"2016-05-18 09:37:02.000000000","message":"I am confused, there are only two stages: create and update?","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":113,"context_line":"port."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"},{"line_number":116,"context_line":"upside this reduces the load on the nova-compute nodes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_d4786991","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":55},"updated":"2016-05-17 16:18:57.000000000","message":"What about the load on the Neutron API? I think moving this to conductor means we\u0027ll be actually hitting the Neutron API more since we\u0027ll be doing a create port and update port, rather than just create. Maybe it\u0027s not a big deal, I just know we\u0027ve worried about that in the past.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"42a843d7088e7e0d747a9bd087448c58d487357b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":113,"context_line":"port."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"},{"line_number":116,"context_line":"upside this reduces the load on the nova-compute nodes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_a0e10dd2","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":55},"in_reply_to":"dab17558_146e71ff","updated":"2016-05-17 23:23:03.000000000","message":"There will be a little more load on Neutron API.  But, port binding information and IP allocation are probably the two most expensive parts of a port create/update.  Both of these will only ever be performed in one of the two calls, not both.\n\nSo, the expensive stuff will be spread over the two calls.  We\u0027ll pay twice for basic API call overhead and a few basic things but I don\u0027t think it will be a big deal.\n\nI agree this is a necessary evil.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03790a4494991a39cceb0a62ca4702131557a54c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":113,"context_line":"port."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"},{"line_number":116,"context_line":"upside this reduces the load on the nova-compute nodes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_bc2f66f5","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":55},"in_reply_to":"dab17558_a0e10dd2","updated":"2016-05-18 09:37:02.000000000","message":"Ok, that sounds more reassuring.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":112,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":113,"context_line":"port."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"},{"line_number":116,"context_line":"upside this reduces the load on the nova-compute nodes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_146e71ff","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":55},"in_reply_to":"dab17558_d4786991","updated":"2016-05-17 16:34:30.000000000","message":"Yes, thats what I was trying to say on line 111, but forgot to mention neutron API load explicitly. It feels like a necessary evil here.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":139,"context_line":"----------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Split allocate_for_instance into two functions"},{"line_number":142,"context_line":"* Move create/get port into the conductor, before calling the scheduler,"},{"line_number":143,"context_line":"  such that allocate_for_instance no longer creates ports, no op for nova-net"},{"line_number":144,"context_line":"* Move the remainder of allocate_for_instance into conductor, for both"},{"line_number":145,"context_line":"  nova-net and neutron"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_f4d12d58","line":142,"range":{"start_line":142,"start_character":2,"end_line":142,"end_character":41},"updated":"2016-05-17 16:18:57.000000000","message":"So are you literally planning on moving the code from nova.network.neutronv2.api.API into nova.conductor.manager.ConductorManager? Or just having conductor call the methods on the network API?","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6e825a044abca7ff2f004e40e94665f1072d13f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"----------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Split allocate_for_instance into two functions"},{"line_number":142,"context_line":"* Move create/get port into the conductor, before calling the scheduler,"},{"line_number":143,"context_line":"  such that allocate_for_instance no longer creates ports, no op for nova-net"},{"line_number":144,"context_line":"* Move the remainder of allocate_for_instance into conductor, for both"},{"line_number":145,"context_line":"  nova-net and neutron"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_f220149c","line":142,"range":{"start_line":142,"start_character":2,"end_line":142,"end_character":41},"in_reply_to":"dab17558_9716e346","updated":"2016-05-17 19:53:52.000000000","message":"OK, yeah, agree with doing it in the network service implementations.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":139,"context_line":"----------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Split allocate_for_instance into two functions"},{"line_number":142,"context_line":"* Move create/get port into the conductor, before calling the scheduler,"},{"line_number":143,"context_line":"  such that allocate_for_instance no longer creates ports, no op for nova-net"},{"line_number":144,"context_line":"* Move the remainder of allocate_for_instance into conductor, for both"},{"line_number":145,"context_line":"  nova-net and neutron"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_9716e346","line":142,"range":{"start_line":142,"start_character":2,"end_line":142,"end_character":41},"in_reply_to":"dab17558_f4d12d58","updated":"2016-05-17 16:34:30.000000000","message":"Eventually creating a new \"create_ports\" or similar API in nova.network.neutronv2.api.API that is a no op for nova-network, or something a bit like that.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"580559128547e301c5b13a1d2dacc0aa7682dfa1","unresolved":false,"context_lines":[{"line_number":152,"context_line":"Testing"},{"line_number":153,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Grenade + neutron should cover this well."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Documentation Impact"},{"line_number":158,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_f4380da2","line":155,"updated":"2016-05-17 16:18:57.000000000","message":"Hrm, nova doesn\u0027t gate on grenade + neutron today, so we\u0027d have to make that happen. Honestly we should start doing that anyway given nova-network is deprecated.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"201de2af1c7081603fd55749df3a189a06e411e7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"Testing"},{"line_number":153,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Grenade + neutron should cover this well."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Documentation Impact"},{"line_number":158,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_1721539e","line":155,"in_reply_to":"dab17558_f4380da2","updated":"2016-05-17 16:34:30.000000000","message":"yeah.","commit_id":"17f4fd3a99785542ade2559e93663e08310614d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d8ddbf85fc0ed0e6240aed14e9d846eba4586e44","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Some IP subnets can be restricted to a subset of hosts, due to an operators"},{"line_number":20,"context_line":"network configuration. In this environment, it means you could build somewhere"},{"line_number":21,"context_line":"that has no public IPs available. This is being added into Neutron by the"},{"line_number":22,"context_line":"Routed Networks feature."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_d7e562dc","line":19,"range":{"start_line":19,"start_character":66,"end_line":19,"end_character":75},"updated":"2016-05-31 13:45:47.000000000","message":"this should be:\n\n operators\u0027\n\nI think.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d8ddbf85fc0ed0e6240aed14e9d846eba4586e44","unresolved":false,"context_lines":[{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."},{"line_number":49,"context_line":"In terms of upgrades, we need to ensure old compute nodes don\u0027t re-create"},{"line_number":50,"context_line":"ports that the scheduler has already created. Similarly, when deleting an"},{"line_number":51,"context_line":"instance, the old node should correctly know which ports were created by Nova"},{"line_number":52,"context_line":"and can be deleted."},{"line_number":53,"context_line":"For nova-network users, the get/create ports can be a noop."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_97659a1f","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":45},"updated":"2016-05-31 13:45:47.000000000","message":"I think we\u0027ll be okay here since they currently don\u0027t create a port if they are passed one from the API, right?","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"65edd78bb1dd02fe0d0c151f06c27b76f902d9d6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."},{"line_number":49,"context_line":"In terms of upgrades, we need to ensure old compute nodes don\u0027t re-create"},{"line_number":50,"context_line":"ports that the scheduler has already created. Similarly, when deleting an"},{"line_number":51,"context_line":"instance, the old node should correctly know which ports were created by Nova"},{"line_number":52,"context_line":"and can be deleted."},{"line_number":53,"context_line":"For nova-network users, the get/create ports can be a noop."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_9ee56f0a","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":45},"in_reply_to":"9abb7d3a_3f5e3812","updated":"2016-06-01 14:52:57.000000000","message":"Or \"the scheduling process\". That\u0027s how I read it anyway. From the compute node\u0027s perspective it happened \"already\" which is all that really matters.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f2f6564c2aaca26d124696ae1bd2e3144209e571","unresolved":false,"context_lines":[{"line_number":46,"context_line":"binding details."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Second, we want to move the get/create ports before the scheduler is called."},{"line_number":49,"context_line":"In terms of upgrades, we need to ensure old compute nodes don\u0027t re-create"},{"line_number":50,"context_line":"ports that the scheduler has already created. Similarly, when deleting an"},{"line_number":51,"context_line":"instance, the old node should correctly know which ports were created by Nova"},{"line_number":52,"context_line":"and can be deleted."},{"line_number":53,"context_line":"For nova-network users, the get/create ports can be a noop."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_3f5e3812","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":45},"in_reply_to":"9abb7d3a_97659a1f","updated":"2016-05-31 16:36:48.000000000","message":"Not sure how the scheduler can create a port... I guess you wanted to say \"that the conductor has already created before calling out the scheduler\", right?","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f2f6564c2aaca26d124696ae1bd2e3144209e571","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Eventually it could mean we don\u0027t need any neutron related credentials on"},{"line_number":98,"context_line":"any of the compute nodes. This work will not achieve that goal, but it is a"},{"line_number":99,"context_line":"step in the right direction."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Notifications impact"},{"line_number":102,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_3fe3d834","line":99,"updated":"2016-05-31 16:36:48.000000000","message":"Well, that\u0027s certainly a side-effect, not sure it\u0027s worthwhile to mention it here tho.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cc88c9cba7da84e34d0342a44bc39e0b38260ab7","unresolved":false,"context_lines":[{"line_number":119,"context_line":"When Nova is creating ports for users, instead of just calling port create"},{"line_number":120,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":121,"context_line":"port. This will slightly increase the load on the Neutron API during the boot"},{"line_number":122,"context_line":"process. However this should be minimal, as we are not duplicating any of"},{"line_number":123,"context_line":"the expensive parts of the process, such as port binding and IP allocation."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_68d6bec6","line":122,"updated":"2016-05-28 00:23:12.000000000","message":"I keep bringing up the case where we want to spin N VMs at once, and in general doubling the number of calls especially on busy systems is not something I would claim to have minimal effects. I think it will have an effect, but I don\u0027t know if there\u0027s any way to mitigate it unless we make this logic conditional to the nature of the scheduling requested. We may end up trading complexity with complexity but at least the refactoring should help breaking down the functionality into manageable pieces.\n\nTo be fair, when booting a VM lots of API calls are made to Neutron, and say that  X \u003e\u003e 1, then X + 1 would roughly be X.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2306fc208debd74a506708469f9f116527d898f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"When Nova is creating ports for users, instead of just calling port create"},{"line_number":120,"context_line":"with all the parameters, will now first create the port and later update the"},{"line_number":121,"context_line":"port. This will slightly increase the load on the Neutron API during the boot"},{"line_number":122,"context_line":"process. However this should be minimal, as we are not duplicating any of"},{"line_number":123,"context_line":"the expensive parts of the process, such as port binding and IP allocation."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"This also generally moves more load into the nova-conductor nodes, but on the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_54e4d0aa","line":122,"in_reply_to":"9abb7d3a_68d6bec6","updated":"2016-05-31 13:31:06.000000000","message":"Yeah, it certainly a trade. But this seems like the correct one. At least we are not making multiple \"expensive\" calls, there is no lost work. The extra work is only a \"read the db\" request.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f2f6564c2aaca26d124696ae1bd2e3144209e571","unresolved":false,"context_lines":[{"line_number":129,"context_line":"---------------------"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"We will need the neutron credentials on nova-conductor, which may not"},{"line_number":132,"context_line":"currently have been happening."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Developer impact"},{"line_number":135,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_df972c38","line":132,"updated":"2016-05-31 16:36:48.000000000","message":"IIRC, we\u0027re calling the Neutron API in the n-api service when verifying the base options but that\u0027s not a conductor thing tho.","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"65edd78bb1dd02fe0d0c151f06c27b76f902d9d6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"---------------------"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"We will need the neutron credentials on nova-conductor, which may not"},{"line_number":132,"context_line":"currently have been happening."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Developer impact"},{"line_number":135,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9abb7d3a_be7f9313","line":132,"in_reply_to":"9abb7d3a_df972c38","updated":"2016-06-01 14:52:57.000000000","message":"Right, but it will be needed on conductor going forward. Maybe you\u0027re just confirming that it\u0027s not needed in conductor at the moment?","commit_id":"021f4a16bf01b8c1e6cfa9b8c82a51cbba2a08ca"}]}
