)]}'
{"specs/backlog/approved/neutron-routed-networks.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Neutron Routed Networks"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":".. TODO Blueprint doesn\u0027t exist yet.  Should it?"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/neutron-routed-networks"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_a8b373e8","line":11,"updated":"2016-01-08 16:45:04.000000000","message":"in theory, yes, but its not really a bit issue either way.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a0d7d2338f6a3c0018d718dbe063e2619bca5","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Neutron Routed Networks"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":".. TODO Blueprint doesn\u0027t exist yet.  Should it?"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/neutron-routed-networks"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_3ac0227c","line":11,"in_reply_to":"fa69d971_a8b373e8","updated":"2016-01-08 17:01:56.000000000","message":"I\u0027ll just leave it like this for now.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"b3b493aa5b1d1d88fd85eefe7ba5ff62a44064ab","unresolved":false,"context_lines":[{"line_number":19,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":20,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":21,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":22,"context_line":"scheduling and possibly migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"__ operators-rfe_"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_81d61326","line":22,"updated":"2016-01-06 17:39:14.000000000","message":"Are you limiting this discussion to only VLAN or are you thinking of applying it to other encapsulation methods?","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":19,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":20,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":21,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":22,"context_line":"scheduling and possibly migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"__ operators-rfe_"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_91d82581","line":22,"in_reply_to":"fa69d971_81d61326","updated":"2016-01-08 16:45:04.000000000","message":"+1 it does feel like in many cases, it could be done purely with routing, etc, rather than having to involved VLANs.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"748de36f2a929507a806fba856ed0981ad16fc00","unresolved":false,"context_lines":[{"line_number":19,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":20,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":21,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":22,"context_line":"scheduling and possibly migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"__ operators-rfe_"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_84b9b37b","line":22,"in_reply_to":"fa69d971_81d61326","updated":"2016-01-08 16:40:05.000000000","message":"I\u0027ll say that I\u0027ve pretty much only had VLAN in mind but I\u0027m not sure why it needs to be limited to that.  What are your thoughts?  Maybe you could ask this over in the Neutron spec unless you think this topic has relevance to the Nova aspects of this work.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f18cb6b062bc182afbb4291b6ccad67eecc182a9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":20,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":21,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":22,"context_line":"scheduling and possibly migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"__ operators-rfe_"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_68e6a616","line":22,"in_reply_to":"fa69d971_91d82581","updated":"2016-01-11 09:10:12.000000000","message":"good point, its not really important from the Nova point of view. We could always cover that in the neutron spec.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":45,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"To avoid this constraint on the scheduler, Neutron needs to be able to leave"},{"line_number":48,"context_line":"the IP address unassigned until after the port is bound to a host."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"A related implication is that some segments may have subnets that are exhausted"},{"line_number":51,"context_line":"meaning no IP availability for that segment.   Other segments will normally"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_4b83cecc","line":48,"updated":"2016-01-08 16:45:04.000000000","message":"Currently, with nova-network and cells v1, the reverse happens.\n\nYou pick the host, then get the IP address. Now this does mean you tend to have \"lumpy\" allocation of IP addresses between your L2 networks.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a0d7d2338f6a3c0018d718dbe063e2619bca5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"To avoid this constraint on the scheduler, Neutron needs to be able to leave"},{"line_number":48,"context_line":"the IP address unassigned until after the port is bound to a host."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"A related implication is that some segments may have subnets that are exhausted"},{"line_number":51,"context_line":"meaning no IP availability for that segment.   Other segments will normally"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_9feee089","line":48,"in_reply_to":"fa69d971_4b83cecc","updated":"2016-01-08 17:01:56.000000000","message":"\"You pick the host, then get the IP address\" is what I\u0027m after here.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"2012da67c0d7d064bb642c0561be90dfbd4dbf20","unresolved":false,"context_lines":[{"line_number":60,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_6508d2da","line":63,"updated":"2016-01-06 18:26:00.000000000","message":"The former is as much a problem for the guest VM as for nova. It would be the same as network details changing suddenly at any time. This could be made to look like hot plugging the network, but not all guests would deal with it. It would certainly be invasive.\n\nAnother note is that (at least for qemu) right now, the point at which the VM that is active switches from being the source to destination is at the end of the copy. That may change to being at some point in the middle of the copy - and the copy could take hours. So its not at all clear when the network details are going to change from the user perspective.\n\nIn the general case it might be better to stop the VM, move it, and start it again.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f18cb6b062bc182afbb4291b6ccad67eecc182a9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_28ec2ef2","line":63,"in_reply_to":"fa69d971_0454e31e","updated":"2016-01-11 09:10:12.000000000","message":"Right, I think we just have to disallow that, at least for the first implementation.\n\nIf we manage to fix it, cool beans, but doesn\u0027t feel like it should be a requirement.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"860d7fddf2de05d0267e5f1991eb9062e6c5afd4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da6ed579_903d1adf","line":63,"in_reply_to":"fa69d971_28ec2ef2","updated":"2016-01-14 21:36:35.000000000","message":"+1  I was leaning toward disallowing which kind of means that live migration will be constrained to a segment.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"748de36f2a929507a806fba856ed0981ad16fc00","unresolved":false,"context_lines":[{"line_number":60,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_0454e31e","line":63,"in_reply_to":"fa69d971_6508d2da","updated":"2016-01-08 16:40:05.000000000","message":"This is what worries me, that it is pretty much up to the guest VM to handle a change in network parameters.  With the different kinds of guest OSes available, it could prove very difficult to come up with something that works universally.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"},{"line_number":67,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_4bb66e8b","line":64,"updated":"2016-01-08 16:45:04.000000000","message":"live-migrate does generally assume a single L2 domain. I think thats a reasonable restriction to add to the live-migrate operation.\n\nAs an aside, with cells v1, this happens by accident, as each compute node only knows about its nearby compute nodes anyways, so its just considered invalid to migrate between cells.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"860d7fddf2de05d0267e5f1991eb9062e6c5afd4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":62,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":63,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":64,"context_line":"currently out of plan in Neutron."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Use Cases"},{"line_number":67,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da6ed579_b01b7e80","line":64,"in_reply_to":"fa69d971_4bb66e8b","updated":"2016-01-14 21:36:35.000000000","message":"Just +1\u0027d above.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":71,"context_line":"on end users.  For example, they may boot two VMs and discover that the two VMs"},{"line_number":72,"context_line":"cannot reach each other over L2.  However, they can expect them to be reachable"},{"line_number":73,"context_line":"over L3.  End users will be able to look at the new boolean *l2-adjacency* flag"},{"line_number":74,"context_line":"on their network to set this expectation."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_6e5a602c","line":74,"updated":"2016-01-08 16:45:04.000000000","message":"So there are some plans around describing where an instance is in your datacenter, and then mapping that so \"server groups\"\nhttps://review.openstack.org/#/c/247654/\n\nWith the again, you can say, give my two VMs L2 connectivity.\n\nThe importance here is the scheduler can spread between all L2 zones, rather than building in a specific L2 zone requested by the end user.\n\nA common use case for the above is supporting shared IP addresses, and those two VMs wanting to gARP each other. But none of those things are upstream at this point, its just to illustrate the idea.\n\nWhat is the l2-adjacency flag? I should re-read that neutron spec I guess.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f18cb6b062bc182afbb4291b6ccad67eecc182a9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"on end users.  For example, they may boot two VMs and discover that the two VMs"},{"line_number":72,"context_line":"cannot reach each other over L2.  However, they can expect them to be reachable"},{"line_number":73,"context_line":"over L3.  End users will be able to look at the new boolean *l2-adjacency* flag"},{"line_number":74,"context_line":"on their network to set this expectation."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_68946642","line":74,"in_reply_to":"fa69d971_3f5a5451","updated":"2016-01-11 09:10:12.000000000","message":"Ah, gotcha, thanks. Totally makes sense. Signal to users which networks have weakened the previous L2 reachability assumption.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"860d7fddf2de05d0267e5f1991eb9062e6c5afd4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"on end users.  For example, they may boot two VMs and discover that the two VMs"},{"line_number":72,"context_line":"cannot reach each other over L2.  However, they can expect them to be reachable"},{"line_number":73,"context_line":"over L3.  End users will be able to look at the new boolean *l2-adjacency* flag"},{"line_number":74,"context_line":"on their network to set this expectation."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da6ed579_10012a06","line":74,"in_reply_to":"fa69d971_68946642","updated":"2016-01-14 21:36:35.000000000","message":"Exactly.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a0d7d2338f6a3c0018d718dbe063e2619bca5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"on end users.  For example, they may boot two VMs and discover that the two VMs"},{"line_number":72,"context_line":"cannot reach each other over L2.  However, they can expect them to be reachable"},{"line_number":73,"context_line":"over L3.  End users will be able to look at the new boolean *l2-adjacency* flag"},{"line_number":74,"context_line":"on their network to set this expectation."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_3f5a5451","line":74,"in_reply_to":"fa69d971_6e5a602c","updated":"2016-01-08 17:01:56.000000000","message":"If l2-adjacency is set to True on a network, you would expect guaranteed L2 reachability.  If it is set to False on a network, there is no guarantee.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdbece269ed379516c3a7db936efded571db6f64","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"},{"line_number":78,"context_line":"throughout.  They\u0027ll need to consider the effect of this on their end users."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"__ neutron-spec_"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_3fc0147c","line":78,"updated":"2016-01-08 16:45:04.000000000","message":"Yes, we should thinking through this a touch more.\n\nIts creating ports upfront, then reusing wants that have an IP address also. Your IP defines where your VM needs to go.\n\nI am sure there are other things lurking.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"860d7fddf2de05d0267e5f1991eb9062e6c5afd4","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"},{"line_number":78,"context_line":"throughout.  They\u0027ll need to consider the effect of this on their end users."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"__ neutron-spec_"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da6ed579_bb77df9e","line":78,"in_reply_to":"fa69d971_28442eb5","updated":"2016-01-14 21:36:35.000000000","message":"Sounds reasonable to me as a first step.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3a3a0d7d2338f6a3c0018d718dbe063e2619bca5","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"},{"line_number":78,"context_line":"throughout.  They\u0027ll need to consider the effect of this on their end users."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"__ neutron-spec_"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_bad3b25e","line":78,"in_reply_to":"fa69d971_3fc0147c","updated":"2016-01-08 17:01:56.000000000","message":"In general, I don\u0027t want having a particular IP to drive where your VM needs to go.  There may be specific use cases where an already allocated IP needs to drive placement of the VM but I hope that the general case is the other way around.  Placement of the VM would drive allocation of the IP.\n\nIn general, one IP is not better than another IP.  The only reason IPs should be considered in VM placement is if a subnet is exhausted.","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f18cb6b062bc182afbb4291b6ccad67eecc182a9","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Deployer impact is discussed in the `Neutron spec`__.  Deployers will make the"},{"line_number":77,"context_line":"decision to deploy a network that does not support guaranteed L2 reachability"},{"line_number":78,"context_line":"throughout.  They\u0027ll need to consider the effect of this on their end users."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"__ neutron-spec_"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa69d971_28442eb5","line":78,"in_reply_to":"fa69d971_bad3b25e","updated":"2016-01-11 09:10:12.000000000","message":"So the problem is, I see lots of users that have decided to hard code their IP everywhere (yes, they should learn not to do that, but its a thing).\n\nSo they like keeping their IP address more than their root disk, generally.\n\nHaving said all that, totally agreed that the standard case should be pick the host first (with an appreciation of relavant IP capacity), then get the IP from neutron. Thats totally cool.\n\nFor the first cut, we could simply fail the build if we detect the IP address is on a port, and that doesn\u0027t work for the chosen host. Will need that protection long term anyway (for when admins bypass the scheduler with a direct host build). But we will need to do better than that in the log run, somehow (probably have hosts report available subnet uuids, or similar).","commit_id":"d768b2a99d666d8ce4f0370c38ddf3a788c759e5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"      Binding may fail in this case if the segment is out of IP addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"1. User has a port that is bound to a segment and provides it to nova boot."},{"line_number":88,"context_line":"   Such a port will have an IP address.  I expect that Nova will ask Neutron"},{"line_number":89,"context_line":"   for the segment to which the port is bound.  Given that segment, the"},{"line_number":90,"context_line":"   scheduler should place the instance on a compute host belonging to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_8f646b49","line":87,"updated":"2016-01-29 06:57:20.000000000","message":"I\u0027m not sure this is something Nova will allow. In a discussion around vlan-aware-vms, Ian Wells pointed out to me that Nova will refuse to use a port that is already bound.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dd7c1ff2fba69ba7730d84627ff7fc1342493b01","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"      Binding may fail in this case if the segment is out of IP addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"1. User has a port that is bound to a segment and provides it to nova boot."},{"line_number":88,"context_line":"   Such a port will have an IP address.  I expect that Nova will ask Neutron"},{"line_number":89,"context_line":"   for the segment to which the port is bound.  Given that segment, the"},{"line_number":90,"context_line":"   scheduler should place the instance on a compute host belonging to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_f40b2b22","line":87,"updated":"2016-02-01 06:33:13.000000000","message":"The port may have an IP address, but it won\u0027t be bound to a segment if it is unbound. I think we can support that use case, the wording just needs to be updated to not say that it is bound to a segment.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"93ff7703af67e430a46333ac67fdad9020a7708a","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"      Binding may fail in this case if the segment is out of IP addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"1. User has a port that is bound to a segment and provides it to nova boot."},{"line_number":88,"context_line":"   Such a port will have an IP address.  I expect that Nova will ask Neutron"},{"line_number":89,"context_line":"   for the segment to which the port is bound.  Given that segment, the"},{"line_number":90,"context_line":"   scheduler should place the instance on a compute host belonging to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a5ae5dd_68f63bd9","line":87,"in_reply_to":"7a5de9d1_168108fb","updated":"2016-02-02 23:48:53.000000000","message":"I think the wording is correct as is.  But, I\u0027ll try to clear it up.\n\nDon\u0027t mistake being bound to a host to being bound to a segment.  If a port has an IP address from a segment then it must be bound to that segment.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"      Binding may fail in this case if the segment is out of IP addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"1. User has a port that is bound to a segment and provides it to nova boot."},{"line_number":88,"context_line":"   Such a port will have an IP address.  I expect that Nova will ask Neutron"},{"line_number":89,"context_line":"   for the segment to which the port is bound.  Given that segment, the"},{"line_number":90,"context_line":"   scheduler should place the instance on a compute host belonging to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_422e0844","line":87,"in_reply_to":"7a5de9d1_8f646b49","updated":"2016-01-31 17:32:21.000000000","message":"So this port is bound to an IP address, not bound to an instance.\n\nI think we have to support this use case, due to the cases where Nova does not delete the port (and indeed when the user wants to re-use a port).","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"      Binding may fail in this case if the segment is out of IP addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"1. User has a port that is bound to a segment and provides it to nova boot."},{"line_number":88,"context_line":"   Such a port will have an IP address.  I expect that Nova will ask Neutron"},{"line_number":89,"context_line":"   for the segment to which the port is bound.  Given that segment, the"},{"line_number":90,"context_line":"   scheduler should place the instance on a compute host belonging to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_168108fb","line":87,"in_reply_to":"7a5de9d1_f40b2b22","updated":"2016-02-01 20:23:33.000000000","message":"It will be bound to a segment indirectly.  The IP address is allocated from a subnet and the subnet is bound to a segment.  Therefore, the IP address is bound to a segment.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dd7c1ff2fba69ba7730d84627ff7fc1342493b01","unresolved":false,"context_lines":[{"line_number":96,"context_line":"      instance should fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"1. User calls Nova boot and passes a network id.  The Nova scheduler will call"},{"line_number":99,"context_line":"   Neutron to create a port, place the instance, and then bind that port to the"},{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_94151741","line":99,"updated":"2016-02-01 06:33:13.000000000","message":"Right, I was just pointing out that this use case will actually be exactly the same as the current port workflow from Nova\u0027s perspective. It won\u0027t see a difference because the entire binding will be completed during the port create.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"      instance should fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"1. User calls Nova boot and passes a network id.  The Nova scheduler will call"},{"line_number":99,"context_line":"   Neutron to create a port, place the instance, and then bind that port to the"},{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_2f5bf788","line":99,"updated":"2016-01-29 06:57:20.000000000","message":"This doesn\u0027t match the order of operations I saw when testing. When Nova creates a port, it passes the host_id at the same time so the binding and segment association will all happen before anything is even returned to Nova. Therefore this scenario should work fine even without the IP address restriction lifted from Nova.\n\nFor example, here is a request received from Nova to create a port (note the binding:host_id field):\n\nhttp://logs.openstack.org/86/272986/2/check/gate-tempest-dsvm-neutron-full/59d337b/logs/screen-q-svc.txt.gz#_2016-01-27_18_36_30_320","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":96,"context_line":"      instance should fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"1. User calls Nova boot and passes a network id.  The Nova scheduler will call"},{"line_number":99,"context_line":"   Neutron to create a port, place the instance, and then bind that port to the"},{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_a2157ce5","line":99,"in_reply_to":"7a5de9d1_2f5bf788","updated":"2016-01-31 17:32:21.000000000","message":"So its the nova-compute process that sends the port create request.\n\nBut that all happens after the scheduler has picked the host, so thats just an implementation detail really, not a blocker for me.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"      instance should fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"1. User calls Nova boot and passes a network id.  The Nova scheduler will call"},{"line_number":99,"context_line":"   Neutron to create a port, place the instance, and then bind that port to the"},{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_36b204e6","line":99,"in_reply_to":"7a5de9d1_94151741","updated":"2016-02-01 20:23:33.000000000","message":"I actually was wondering if this order of operations was quite right when I wrote it.  I suspected it was how @Kevin describes it and had a todo to confirm it.  I\u0027ll reword this in the next revision to reflect this.  Thanks, @Kevin","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dd7c1ff2fba69ba7730d84627ff7fc1342493b01","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_b4129355","line":103,"updated":"2016-02-01 06:33:13.000000000","message":"Ah, I didn\u0027t know it rendered in HTML correctly.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_4f5e7377","line":103,"updated":"2016-01-29 06:57:20.000000000","message":"^ \u003c- nit: all of the use cases are numbered 1","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_02db3050","line":103,"in_reply_to":"7a5de9d1_4f5e7377","updated":"2016-01-31 17:32:21.000000000","message":"For me that is correct, because its easier to add things, and it will render correctly in html anyways.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"93ff7703af67e430a46333ac67fdad9020a7708a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   compute host where it chose to place the instance.  I expect this scenario"},{"line_number":101,"context_line":"   will work the same as if the user created a port with no segment binding."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_4a78ecf8","line":103,"in_reply_to":"7a5de9d1_b4129355","updated":"2016-02-02 23:48:53.000000000","message":"Actually, I just looked at the rendered output.  It doesn\u0027t render correctly!  In markdown it would.  I get markdown and rst mixed up all of the time.  I need to use # instead of a number to auto-number.  Thanks, @Kevin","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b50967d4cb2bd7a1adcdaa082e03e3d8b2b442cd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":109,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_e07062a6","line":106,"range":{"start_line":106,"start_character":29,"end_line":106,"end_character":31},"updated":"2016-01-30 00:30:29.000000000","message":"This is something like creating a cluster and having a distributed network, where all the hosts have access the same segment with right ip access.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":103,"context_line":"1. An instance is live-migrated to another host.  In this case, the port"},{"line_number":104,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":105,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":106,"context_line":"   same segment (or aggregate)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":109,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_02b25006","line":106,"range":{"start_line":106,"start_character":29,"end_line":106,"end_character":31},"in_reply_to":"7a5de9d1_e07062a6","updated":"2016-01-31 17:32:21.000000000","message":"I believe thats the use case described above, so thats fine.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"of the port.  In those details, Neutron includes the subnet_id in the fixed_ips"},{"line_number":116,"context_line":"field.  The subnet might be linked to a segment_id.  If this discovery process"},{"line_number":117,"context_line":"yields a segment id then we\u0027re in one use case.  If there is no subnet_id or no"},{"line_number":118,"context_line":"segment_id, then we\u0027re in the other use case.  Note that this discovery can"},{"line_number":119,"context_line":"result in a segment_id for IPv4 and another for IPv6."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"There might be some opportunity to optimize this discovery by providing"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_ef55df4f","line":118,"updated":"2016-01-29 06:57:20.000000000","message":"I don\u0027t see how IPv4 and IPv6 can be on different segments for the same port. The segment is where the L2 traffic from the port lands, it isn\u0027t different for V4 vs V6 L3 traffic. Did you mean a different subnet_id?","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"of the port.  In those details, Neutron includes the subnet_id in the fixed_ips"},{"line_number":116,"context_line":"field.  The subnet might be linked to a segment_id.  If this discovery process"},{"line_number":117,"context_line":"yields a segment id then we\u0027re in one use case.  If there is no subnet_id or no"},{"line_number":118,"context_line":"segment_id, then we\u0027re in the other use case.  Note that this discovery can"},{"line_number":119,"context_line":"result in a segment_id for IPv4 and another for IPv6."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"There might be some opportunity to optimize this discovery by providing"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_761e3c71","line":118,"in_reply_to":"7a5de9d1_ef55df4f","updated":"2016-02-01 20:23:33.000000000","message":"Yeah, this seems a bit funny.  I wanted to point it out since an IP is bound to a subnet and the subnet is bound to a segment.  We\u0027ll end up getting to a segment id by following both paths.\n\nI think it is a reasonable restriction to require that following both paths resolves to the *same* segment.  We could do this by explicitly binding the port directly to the segment with a new field on the port.  Or, we could just check subnets as they are bound to the port.  The former could help us avoid race conditions more easily but might be seen as a redundancy in the data model.\n\nI\u0027ll reword this here and then we can take the discussion over to the Neutron spec.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"result in a segment_id for IPv4 and another for IPv6."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"There might be some opportunity to optimize this discovery by providing"},{"line_number":122,"context_line":"segment_id directly in a field on the port like the fixed_ips field."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"If there are multiple fixed ips on the port for either IPv4 or IPv6 then the"},{"line_number":125,"context_line":"segment should be the same across them all."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_0f515b62","line":122,"updated":"2016-01-29 06:57:20.000000000","message":"+1. I suspect this will be packed with the rest of the segment details included in the port\u0027s segment details that we already show.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"result in a segment_id for IPv4 and another for IPv6."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"There might be some opportunity to optimize this discovery by providing"},{"line_number":122,"context_line":"segment_id directly in a field on the port like the fixed_ips field."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"If there are multiple fixed ips on the port for either IPv4 or IPv6 then the"},{"line_number":125,"context_line":"segment should be the same across them all."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_111fd25b","line":122,"in_reply_to":"7a5de9d1_0f515b62","updated":"2016-02-01 20:23:33.000000000","message":"Noted","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dd7c1ff2fba69ba7730d84627ff7fc1342493b01","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_541b1f73","line":139,"updated":"2016-02-01 06:33:13.000000000","message":"This isn\u0027t a good assumption to start out with (especially if the idea is that we will have manual configuration) because segments are things that are created during runtime when a network is created. I think maybe there is a little confusion between physnets and segments.\n\nA physnet is something that can be known at deployment time because they are statically defined in config files for the Neutron server and agent. So if we wanted Nova to know about physnets via config, that would be more feasible than to be configured with segments. But a compute node can even have multiple physnets...\n\nA segment is created when a network is created and it is a combination of a physnet and an encapsulation (e.g. flat or VLAN) plus any encap details (e.g. VLAN tag). (overlay protocols have no physnet)\n\n\nAgents are configured with bridge_mappings that define which local bridge a physnet belongs to. This tells the agent which thing it needs to patch to when handling segments for that network. For example:\n\nbridge_mappings\u003dphysnet-main:br-bond0,physnet-mgmt:br-mgt0\n\n\nThen when a provider network is created, it references the physnet:\n\n\nneutron net-create MY_NETWORK --provider:physical_network physnet-main --provider:network_type vlan\n\n\nThis will call the VLAN type driver to allocate a segment, which will assign a VLAN ID that is unique to that physnet. The segment info can then be seen inside of the network details.\n\n\nSo configuring segment mappings on each compute node would be a bit of a nightmare because neutron network objects would have to be created via the Neutron server before Nova compute could be configured.\n\n1:1 mappings between compute and segment is incompatible with VLANs right out of the gate and misprepresents the actual data model in Neutron, which would confuse operators even more about what a segment is.\n\nThe more I think about this, the more I think it needs to be a bit more dynamic and abstracted so Nova doesn\u0027t need quite so many internal details. What if we have an API on the Neutron side that Nova can call (or that Nova has which Neutron pushes to) that indicates which hosts can access a given subnet. Then when Nova goes to schedule it looks at the network\u0027s subnets and if any are restricted to a segment it can reference this info from Neutron so it knows which hosts are attached to subnets with availability.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_af4fe7bb","line":139,"updated":"2016-01-29 06:57:20.000000000","message":"This will be automatically managed by Neutron informing Nova or Nova asking Neutron somehow, right? This would be a mess to keep consistent if operators have to manually configure Nova as well. Consider the case where VLANs are used within a rack to increase the scale inside of a rack. Each compute node will be attached to many segments in that case so manual configuration would suck. :)\n\nOn that same note, since each aggregate is only representing one segment, is it possible to have compute nodes that are members of multiple aggregates?","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_916bc284","line":139,"in_reply_to":"7a5de9d1_541b1f73","updated":"2016-02-01 20:23:33.000000000","message":"@Kevin  I think the API that you\u0027re asking for near the end of your latest post is the aggregates API.  Isn\u0027t that the abstraction that Neutron should use to teach Nova about the segments?\n\nJay Pipe\u0027s scheduling specs describe how aggregates can be used for this.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8f55cdf9aaae58a91d54fdaf68fedd5f0e5fbe52","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_e6d4ef20","line":139,"in_reply_to":"7a5de9d1_6da31b01","updated":"2016-01-30 23:06:07.000000000","message":"I should clarify a bit. I definitely agree that Neutron will need this. What I  meant to ask was \"Does Nova support compute nodes being members of multiple aggregates?\"","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_f1ad56e9","line":139,"in_reply_to":"7a5de9d1_af4fe7bb","updated":"2016-02-01 20:23:33.000000000","message":"@Kevin I was assuming that hosts can belong to multiple aggregates.  I based this assumption off several examples that I\u0027ve heard of using aggregates for multiple independent things where restricting a compute host to a single aggregate would be insane.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cdf5e7a6f9c4946aad8444d3ae8abdc2bf5b101","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_6da31b01","line":139,"in_reply_to":"7a5de9d1_af4fe7bb","updated":"2016-01-29 17:05:15.000000000","message":"i would say yes. for example if the compute node had both an ovs and an sriov interface available the ovs interface may not be connected to the same top of rack switch as the sriov nics. even if you only had ovs you could have multiple provider bridges that are connected to discreet l2 network segments. so a host could certainly be able to reach multiple l2 segments. so yes the same host could be in multiple host aggregates.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_513a2a9a","line":139,"in_reply_to":"7a5de9d1_e2cdb485","updated":"2016-02-01 20:23:33.000000000","message":"@John Assuming hosts can only contact one segment won\u0027t quite do.  But, I think we can add just a little to the way you stated it and I\u0027ll be happy:  \"hosts can only contact one segment within a given network\".\n\nWe already have multiple operators asking for multiple networks representing different L3 domains.  I\u0027ve heard operators call these \"development\" and \"production\", \"blue\" and \"red\", and even \"Coke\" and \"Pepsi\" networks.  Each compute will need access to a segment under each of them.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Neutron will be a resource provider as described in the `generic resource"},{"line_number":137,"context_line":"pools specification`__.   So, it will create aggregates corresponding to its"},{"line_number":138,"context_line":"segments so that Nova has the same mapping as Neutron does of hosts to"},{"line_number":139,"context_line":"segments."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"__ generic-resource-pools_"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_e2cdb485","line":139,"in_reply_to":"7a5de9d1_e6d4ef20","updated":"2016-01-31 17:32:21.000000000","message":"Nova supports hosts being in many aggregates, thats all fine.\n\nI think we are assuming hosts can only contact one segment. I am not sure we mention that here. Its a nice simplifying assumption, but also one we could relax in the future if that need is proven.\n\nNow the double config is less than idea, but I am OK starting with that, as its simpler for the initial cut (less coupling).","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"such an aggregate."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Things start to get a little bit fuzzy when you consider creating ports using"},{"line_number":180,"context_line":"Neutron outside of Nova and then bringing those port to Nova to create"},{"line_number":181,"context_line":"instances.  Today, these ports always have IP addresses.  However, with routed"},{"line_number":182,"context_line":"networks, it is necessary to have the ability to create ports without IP"},{"line_number":183,"context_line":"addresses because we want Nova to have the freedom to schedule the instance to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_71a726bd","line":180,"range":{"start_line":180,"start_character":42,"end_line":180,"end_character":52},"updated":"2016-02-01 20:23:33.000000000","message":"*them","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":189,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":190,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":191,"context_line":"   first place."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"1. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":194,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_cf4a63ac","line":191,"updated":"2016-01-29 06:57:20.000000000","message":"+1. Nova should know the difference between when it needs to create an IP address vs when one is already available for it.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c8422556058b84eedec2ea38fceae065e8594c5c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"to record the port id as the consumer instead of the instance.  Then, Neutron"},{"line_number":208,"context_line":"could ask Nova when the port is unbound from the compute instance if Nova had"},{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_6fc80f23","line":210,"updated":"2016-01-29 06:57:20.000000000","message":"Then when that port is used again, we would need to decrement the reserved field, right? This seems like it will be hard to keep straight.\n\nWhat if we just have all ports with ownership \u0027compute:\u0027 counted in the allocations table and all other port owners counted in the reserved? So when an instance is terminated, it doesn\u0027t release the allocation if the port isn\u0027t deleted. Essentially Nova would have inventory of all of the \u0027compute:\u0027 ports.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"to record the port id as the consumer instead of the instance.  Then, Neutron"},{"line_number":208,"context_line":"could ask Nova when the port is unbound from the compute instance if Nova had"},{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_b1483eb4","line":210,"in_reply_to":"7a5de9d1_42c92825","updated":"2016-02-01 20:23:33.000000000","message":"@John, I\u0027m not sure we ever really had the working solution fully specified.  I wrote this here to check my understanding.  I felt like @Jay thought we had a workable solution.  Maybe he can chime in and correct anything I got incorrect.\n\nSo, you\u0027re suggesting that Neutron remove Nova\u0027s claim in the allocation table and increment reserved when the port is bound?  Let me think about this.  This could work.  Here\u0027s how I see it:\n\n1. Nova creates an allocation *unless* it was given a port that already had an IP address.  This makes sense because if we give Nova an IP address we would want it to create an allocation.  That\u0027d be like it was trying to reserve another IP address.\n2. After the port is bound, Neutron makes a call to the scheduler to delete the allocation and reset the reserved field.  You said that we should increment the existing reserved value but I wonder if it should send an absolute reserved value each time.  I\u0027m thinking that always sending the absolute reserved value could avoid races with other operations that consume ports outside of Nova.\n\nI think about this approach this way:  the allocation in Nova is useful to keep other instances of the Nova scheduler off of the IPs until Neutron gets a chance to allocate the IP internally, then the allocation isn\u0027t really useful to Nova anymore because we want to transfer ownership of the resource back to Neutron (hence deleting the allocation and adjusting \"reserved\").\n\nThis is a little bit different than what I had understood before but I think it could work.  Did I get it right this time?  :)  Or, am I still off?  :(","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"to record the port id as the consumer instead of the instance.  Then, Neutron"},{"line_number":208,"context_line":"could ask Nova when the port is unbound from the compute instance if Nova had"},{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_d1293ae7","line":210,"in_reply_to":"7a5de9d1_6fc80f23","updated":"2016-02-01 20:23:33.000000000","message":"@Kevin I thought about doing this but it broke down in the following scenario:\n\nA Nova instance is destroyed releasing the port with an IP address.  It will release its allocation because the instance consuming it no longer exists.  I don\u0027t think it makes sense for Nova to keep the allocation with no instance hanging around to consume it (or does it?).\n\nSo, according to Nova, it can schedule a new instance to consume that IP again.  However, the IP isn\u0027t consumable by Nova unless you use the same port because Neutron can\u0027t give that IP to just any new port.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b155b351bd60e21373fb928c30001cce0e241a59","unresolved":false,"context_lines":[{"line_number":207,"context_line":"to record the port id as the consumer instead of the instance.  Then, Neutron"},{"line_number":208,"context_line":"could ask Nova when the port is unbound from the compute instance if Nova had"},{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_42c92825","line":210,"in_reply_to":"7a5de9d1_6fc80f23","updated":"2016-01-31 17:32:21.000000000","message":"Not sure I actually had a workable solution for this yet, it was really just a way for the two sides to know about what each other are doing.\n\nI actually like the idea of Neutron calling out after the port binding has happened to remove the claim and update the reserved value in an \"atomic\" REST API call to the scheduler (well basically its doing a compare and swap operation). That is an increment reserved and remove the claim operation, so that the deallocation can make multiple calls (i.e. don\u0027t send a new reserved value, just update the existing value by the required amount).\n\nWe do need to think how the above interacts with the periodic sync up of the data, but I think its \"safe\" racy, in that we underestimate the IP addresses.","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fee00f8b9de6b50956cd1a20b067e8ba2ef25800","unresolved":false,"context_lines":[{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Alternatives"},{"line_number":215,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_827f20aa","line":212,"updated":"2016-01-31 17:47:20.000000000","message":"I think we may want to talk about a process that checks for orphaned reservation.\n\nThe fact Neutron is generally removing the reservation makes that much less resource intensive, but I think we should still discuss how we get from port_uuid to instance_uuid, so we can see if that reservation is orphaned or not. Given we don\u0027t want that in the reservations table, it seems like we might want a separate table that stores port_uuid to instance_uuid mappings in a searchable way (replacing the network_info blob, maybe instead we have a blob for each port?)","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0358b2957fd12a5de43990221e8d600a90e0d17c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"an allocation for it.  If it did, it could delete it after incrementing the"},{"line_number":210,"context_line":"reserved field thus transferring ownership of the allocation back to Neutron."},{"line_number":211,"context_line":"At least, that is how I imagined it working when he brought this up as an"},{"line_number":212,"context_line":"alternative."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Alternatives"},{"line_number":215,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_dc615106","line":212,"in_reply_to":"7a5de9d1_827f20aa","updated":"2016-02-01 20:23:33.000000000","message":"Okay, we do need to think about removing orphaned allocations.  The problem that I see is differentiating between allocations we should keep and those that shouldn\u0027t be there:\n\nKeep:  Allocation for instance Nova knows about but hasn\u0027t fully created.\nDon\u0027t Keep:  Allocation for an instance that no longer exists.\nDon\u0027t Keep:  Allocation for an instance that is running\n    -\u003e Presumably the port is already bound and Neutron is tracking the IP\n\nCould Nova use data it already has to figure this out (e.g. the instance state)?  Do we need the port_id in there anywhere?","commit_id":"87bd8a2efae3cee798ec0ab669f38c787724311c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":15,"context_line":"scaled networks by routing instead of large L2 broadcast domains.  For example,"},{"line_number":16,"context_line":"deployers may have routers at each top-of-rack.  Instead of a single VLAN"},{"line_number":17,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":18,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":19,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":20,"context_line":"scheduling and possibly migration."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_0ba438a4","line":18,"updated":"2016-03-21 21:08:22.000000000","message":"Isn\u0027t the above essentially the hierarchical port binding use case?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":15,"context_line":"scaled networks by routing instead of large L2 broadcast domains.  For example,"},{"line_number":16,"context_line":"deployers may have routers at each top-of-rack.  Instead of a single VLAN"},{"line_number":17,"context_line":"covering the deployment, each rack would have its own VLAN and the routers will"},{"line_number":18,"context_line":"provide reachability to the rest of the racks over L3.  `Operators want Neutron"},{"line_number":19,"context_line":"to model this like a single network`__.  This has implications for Nova"},{"line_number":20,"context_line":"scheduling and possibly migration."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_64a6c1c2","line":18,"in_reply_to":"fa0719c6_0ba438a4","updated":"2016-03-22 14:15:36.000000000","message":"There is some discussion about this in the Neutron spec here [1].  The hierarchical port binding use case is useful for overlaying L2 networks on top of the routed network physical topology but what many operators really want to do is to eliminate L2 networks and allow users to boot to a shared L3 network without having to provide overlays or tenant networking.\n\n [1] https://review.openstack.org/#/c/225384/19/specs/mitaka/routed-networks.rst@46","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_eba0e492","line":41,"updated":"2016-03-21 21:08:22.000000000","message":"s/compute hosts then/compute hosts, then/","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_04f9c580","line":41,"in_reply_to":"fa0719c6_eba0e492","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To avoid this constraint on the scheduler, Neutron needs to be able to leave"},{"line_number":46,"context_line":"the IP address unassigned until after the port is bound to a host."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"A related implication is that some segments may have subnets that are exhausted"},{"line_number":49,"context_line":"meaning no IP availability for that segment.   Other segments will normally"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_4bae3086","line":46,"updated":"2016-03-21 21:08:22.000000000","message":"If the scheduler *doesn\u0027t* take IP address affinity-to-segment into account before placing the workload to a destination, then we could result in the workload failing to get an IP address during spawn due to exhaustion of IPs on that segment. So, really, I think it\u0027s not an \"artificial\" constraint on the scheduler at all. It\u0027s simply an additional filter that should be fulfilled during placement decisions. And I don\u0027t consider it to be severe, really :)","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To avoid this constraint on the scheduler, Neutron needs to be able to leave"},{"line_number":46,"context_line":"the IP address unassigned until after the port is bound to a host."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"A related implication is that some segments may have subnets that are exhausted"},{"line_number":49,"context_line":"meaning no IP availability for that segment.   Other segments will normally"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_4421fdfa","line":46,"in_reply_to":"fa0719c6_4bae3086","updated":"2016-03-22 14:15:36.000000000","message":"Considering availability across segments is discussed in the next paragraph.  I think what you\u0027re describing is what I\u0027m trying to say there.\n\nThere is a big difference between 1) considering IP availability across segments and 2) picking an absolute IP address before considering all other scheduling constraints which must be understood.  1) motivates the creation of a resource provider in the scheduler to handle availability.  2) motivates the need to defer IP allocation until after host binding.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":51,"context_line":"the scheduler.  This is a resource that is under the control of Neutron.  This"},{"line_number":52,"context_line":"links this spec with the `spec about adding resource providers`__."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"__ resource-providers-spec_"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":57,"context_line":"continue to work, the VM must be migrated to another host with reachability to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_2babfc75","line":54,"updated":"2016-03-21 21:08:22.000000000","message":"I think you mean generic-resource-pools, which is a *part* of the resource-providers blueprint *series*.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":51,"context_line":"the scheduler.  This is a resource that is under the control of Neutron.  This"},{"line_number":52,"context_line":"links this spec with the `spec about adding resource providers`__."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"__ resource-providers-spec_"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":57,"context_line":"continue to work, the VM must be migrated to another host with reachability to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_64cc0136","line":54,"in_reply_to":"fa0719c6_2babfc75","updated":"2016-03-22 14:15:36.000000000","message":"While writing this paragraph, I was thinking that we\u0027ll need to create a resource provider to manage this resource.  That\u0027s why I linked it to that one.  To be honest, I found it difficult to follow the split of this series in to many little specs.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":56,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":57,"context_line":"continue to work, the VM must be migrated to another host with reachability to"},{"line_number":58,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":59,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":60,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":61,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":62,"context_line":"currently out of plan in Neutron."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_8bb688da","line":59,"updated":"2016-03-21 21:08:22.000000000","message":"Not sure whether you meant \"visible\" in place of \"viable\" above?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":56,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":57,"context_line":"continue to work, the VM must be migrated to another host with reachability to"},{"line_number":58,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":59,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":60,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":61,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":62,"context_line":"currently out of plan in Neutron."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_64f36174","line":59,"in_reply_to":"fa0719c6_8bb688da","updated":"2016-03-22 14:15:36.000000000","message":"I meant viable.  Only IP addresses from the correct subnets will work successfully on a segment.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":58,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":59,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":60,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":61,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":62,"context_line":"currently out of plan in Neutron."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_6bbb34c5","line":61,"updated":"2016-03-21 21:08:22.000000000","message":"@edleafe is absolutely correct, Miguel. Remember, live migration is NOT a command that a normal user would *ever* get to run. Only a cloud administrator would ever manually trigger a live-migration, typically to do maintenance on a compute node. And the entire point of the live migration is to do it so the tenant never even knew it happened ;) So, clearly, changing an IP address would mess with that!","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c9ec5dc0137d633d79c146bc20d84b7ef3793b5a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"continue to work, the VM must be migrated to another host with reachability to"},{"line_number":58,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":59,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":60,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":61,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":62,"context_line":"currently out of plan in Neutron."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5aef4532_4e808df7","line":61,"range":{"start_line":60,"start_character":75,"end_line":61,"end_character":55},"updated":"2016-03-09 22:31:20.000000000","message":"It isn\u0027t. People would be very upset if their VMs suddenly switched IP addresses.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":58,"context_line":"the same network segment.  Otherwise, migration must be enhanced to either"},{"line_number":59,"context_line":"allow changing the IP in the VM to one that is viable on the new segment or"},{"line_number":60,"context_line":"using a routing protocol and proxy arp to move the IP to another segment.  I\u0027m"},{"line_number":61,"context_line":"not sure if the former option is viable in Nova at all.  The latter is"},{"line_number":62,"context_line":"currently out of plan in Neutron."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_8495d5e5","line":61,"in_reply_to":"fa0719c6_6bbb34c5","updated":"2016-03-22 14:15:36.000000000","message":"I\u0027ll just remove this.  When I wrote it, I didn\u0027t think it would be a possibility but I mentioned it because someone brought it up in a discussion I had.  I don\u0027t even remember who.  It isn\u0027t really important, I think we all agree that live migration should be constrained to the same segment, right?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":65,"context_line":"----------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"In the following use cases, there is an assumption that all \"segments\" in"},{"line_number":68,"context_line":"Neutron will correspond to \"aggregates\" in Nova."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. User has a port without a binding to a segment and provides it to nova boot."},{"line_number":71,"context_line":"   Such a port will not have an IP address until after the scheduler places the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_cbb080e0","line":68,"updated":"2016-03-21 21:08:22.000000000","message":"Meh, kinda. :) There should be an assumption that all segments in Neutron can be associated with one or more aggregates in Nova via the proposed new `nova resource-pool-create` and `nova resource-pool-associated-aggregate` command and REST API.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":65,"context_line":"----------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"In the following use cases, there is an assumption that all \"segments\" in"},{"line_number":68,"context_line":"Neutron will correspond to \"aggregates\" in Nova."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. User has a port without a binding to a segment and provides it to nova boot."},{"line_number":71,"context_line":"   Such a port will not have an IP address until after the scheduler places the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_249169f1","line":68,"in_reply_to":"fa0719c6_cbb080e0","updated":"2016-03-22 14:15:36.000000000","message":"That\u0027s what I was thinking when I wrote this, I\u0027ll clarify it as you suggest.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":72,"context_line":"   instance and the port gets bound to that host.  Then, Neutron can assign an"},{"line_number":73,"context_line":"   IP address from a segment which that compute host can reach."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   In this use case, the scheduler must take in to consideration the"},{"line_number":76,"context_line":"   availability of IP addresses in each of the segments.  For example, there"},{"line_number":77,"context_line":"   could be some segments in the network which are out of addresses completely."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_abb54cce","line":75,"updated":"2016-03-21 21:08:22.000000000","message":"s/in to/into/","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":72,"context_line":"   instance and the port gets bound to that host.  Then, Neutron can assign an"},{"line_number":73,"context_line":"   IP address from a segment which that compute host can reach."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   In this use case, the scheduler must take in to consideration the"},{"line_number":76,"context_line":"   availability of IP addresses in each of the segments.  For example, there"},{"line_number":77,"context_line":"   could be some segments in the network which are out of addresses completely."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_7fddae13","line":75,"in_reply_to":"fa0719c6_abb54cce","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c1925fd9ad05fe3efef6e2bf4fa0537bde4e71c3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"     addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a5ae5dd_20088627","line":88,"updated":"2016-02-08 09:49:29.000000000","message":"Ah, so it\u0027s just the implicit relationship you are highlighting here. I would rather you just said that it is \u0027associated\u0027 to a segment then. \u0027bound to a segment\u0027 means something very specific in the ML2 port binding model (e.g. search this page for \u0027bound_segment\u0027 https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/driver_api.py#L350) so we need to be careful with that phrase when discussing a Neutron port\u0027s status.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"70b99c247cf84c2d46892ddf7b4cf4a9b58d5cdf","unresolved":false,"context_lines":[{"line_number":85,"context_line":"     addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a5ae5dd_191d9b66","line":88,"updated":"2016-02-03 01:14:14.000000000","message":"I\u0027m not sure I understand what this means. From ML2\u0027s perspective, when a port is bound, it is bound to a segment (or multiple segments in hierarchical port binding case). When a port\u0027s host_id is cleared it will be transitioned to the unbound status and any segment bindings will be cleared[1]. So from a port binding terminology, the port in this example will not be bound to a segment.\n\nThere will be a segment that ML2 will have to select during port binding if the IP address the port already has is restricted to a specific segment. However, if the IP address is not restricted (i.e. a subnet as it exists now), the port binding will not be restricted to any segments.\n\nAre you hinting that as part of this work we shouldn\u0027t unbind the port from the segments when it\u0027s placed in the unbound state? \n\n1. https://github.com/openstack/neutron/blob/fe5de3cc5d09811304ade20006cefa4eb4746cd0/neutron/plugins/ml2/plugin.py#L281-L286","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"57c972b9dc07102e00ee6af11d9fbba3e6ebd562","unresolved":false,"context_lines":[{"line_number":85,"context_line":"     addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a5ae5dd_8f882224","line":88,"in_reply_to":"5a5ae5dd_191d9b66","updated":"2016-02-03 23:05:07.000000000","message":"The IP address is allocated from a subnet and the subnet is associated to a segment.  Thus, the IP is associated with a segment regardless of what binding records exist in the DB.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6c6787bec955df64cf0fd28eb10f333364ea19d3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"     addresses."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a5ae5dd_e9279b60","line":88,"in_reply_to":"5a5ae5dd_20088627","updated":"2016-02-08 19:09:33.000000000","message":"ok","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c9ec5dc0137d633d79c146bc20d84b7ef3793b5a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5aef4532_6e6c6935","line":89,"range":{"start_line":89,"start_character":3,"end_line":89,"end_character":62},"updated":"2016-03-09 22:31:20.000000000","message":"The user has to specify the subnet ID when requesting the port, so I think it would be better to simply have the user also supply that subnet ID to nova when booting an instance, saving a call to Neutron.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_0bcb9854","line":89,"updated":"2016-03-21 21:08:22.000000000","message":"Yes, what @edleafe says here matches what Carl and I discussed in Bristol and matches the 2a) use case from the generic-resource-pools blueprint as well.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"51442446f2a44ced78eb0a92eeec1187a919ffc4","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_647ec1e5","line":89,"in_reply_to":"fa0719c6_0bcb9854","updated":"2016-03-21 22:56:35.000000000","message":"Providing the port id during the boot will be sufficient. Not needed to pass the subnet id. By passing the port id we have all the data we need. Please see my comment to line 175 in the generic-resource-pools spec: https://review.openstack.org/#/c/253187/15","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. User has a port that has an IP address and thus is bound to a segment (but"},{"line_number":88,"context_line":"   not bound to a host).  He/She provides it to nova boot.  I expect that Nova"},{"line_number":89,"context_line":"   will ask Neutron for the segment to which the port is bound by getting the"},{"line_number":90,"context_line":"   details of the port.  Given that segment, the scheduler should place the"},{"line_number":91,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_e4093133","line":89,"in_reply_to":"fa0719c6_0bcb9854","updated":"2016-03-22 14:15:36.000000000","message":"There might have been some misunderstanding in Bristol.  Maybe I overlooked this detail in Jay\u0027s spec.  I think we should revisit this.  The user isn\u0027t required to supply the subnet id today, right?  (See L111)  Wouldn\u0027t it be great to do this without changing the way the user interacts with nova or neutron?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":97,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":98,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":99,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":100,"context_line":"   will work pretty much the same as it does today."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":103,"context_line":"   already has an IP address.  That IP address is only viable in the same"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_ebc74443","line":100,"updated":"2016-03-21 21:08:22.000000000","message":"Correct.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":102,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":103,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":104,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":105,"context_line":"   same segment (or aggregate)."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":108,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_4bc5903a","line":105,"updated":"2016-03-21 21:08:22.000000000","message":"Correct. The above is use case 2b) in the generic-resource-pools spec.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a82f33f1922941be578ce2934bb47abe8758d35a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"to create an instance (or to add it to an existing instance), they appear the"},{"line_number":109,"context_line":"same at first::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  nova boot --network port_id\u003d$PORT_ID"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":114,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_41f641d8","line":111,"range":{"start_line":111,"start_character":14,"end_line":111,"end_character":21},"updated":"2016-03-21 00:35:28.000000000","message":"This should be --nic","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":108,"context_line":"to create an instance (or to add it to an existing instance), they appear the"},{"line_number":109,"context_line":"same at first::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"  nova boot --network port_id\u003d$PORT_ID"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":114,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_9f7362b1","line":111,"range":{"start_line":111,"start_character":14,"end_line":111,"end_character":21},"in_reply_to":"fa0719c6_41f641d8","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":118,"context_line":"-----------------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Not yet.  ;)  However, this is a priority for Neutron.  Please consider that in"},{"line_number":121,"context_line":"your prioritization."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Proposed change"},{"line_number":124,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_2bc2dc33","line":121,"updated":"2016-03-21 21:08:22.000000000","message":"Just remove this section. We no longer use it in the spec template.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":118,"context_line":"-----------------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Not yet.  ;)  However, this is a priority for Neutron.  Please consider that in"},{"line_number":121,"context_line":"your prioritization."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Proposed change"},{"line_number":124,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_5f870a61","line":121,"in_reply_to":"fa0719c6_2bc2dc33","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":128,"context_line":"corresponding to its segments so that Nova has the same mapping as Neutron does"},{"line_number":129,"context_line":"of hosts to segments.  This automatic management of the aggregates could be"},{"line_number":130,"context_line":"completed later than sooner.  I do believe it is important and shouldn\u0027t be"},{"line_number":131,"context_line":"thrown out of scope lightly."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"__ generic-resource-pools_"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_8bdde816","line":131,"updated":"2016-03-21 21:08:22.000000000","message":"There is no reason for Neutron to create and maintain aggregates. This is information Nova already knows and all that is necessary is to tell Nova which aggregates are associated with which Neutron segments. This can be done using the proposed `nova resource-pool-create; nova resource-pool-update-inventory` commands introduced in the generic-resource-pools blueprint","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":128,"context_line":"corresponding to its segments so that Nova has the same mapping as Neutron does"},{"line_number":129,"context_line":"of hosts to segments.  This automatic management of the aggregates could be"},{"line_number":130,"context_line":"completed later than sooner.  I do believe it is important and shouldn\u0027t be"},{"line_number":131,"context_line":"thrown out of scope lightly."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"__ generic-resource-pools_"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_44073d1c","line":131,"in_reply_to":"fa0719c6_8bdde816","updated":"2016-03-22 14:15:36.000000000","message":"How does Nova already have these aggregates?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a82f33f1922941be578ce2934bb47abe8758d35a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Next, we create a resource_pool for each of the segments.  The pool has a"},{"line_number":146,"context_line":"resource class (e.g. \"IPV4_ADDRESS\" or \"IPV6_ADDRESS\") in common with other"},{"line_number":147,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":148,"context_line":"by setting the \"external id\" of the resource pool equal to the UUID of the"},{"line_number":149,"context_line":"segment in Neutron.  These resource pools are linked to the host aggegates"},{"line_number":150,"context_line":"through the aggregate_resource_pools table."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_81c17931","line":148,"range":{"start_line":148,"start_character":16,"end_line":148,"end_character":27},"updated":"2016-03-21 00:35:28.000000000","message":"In the generic resource pools spec (https://review.openstack.org/#/c/253187/15/specs/newton/approved/generic-resource-pools.rst, line 142) they mention an attribute \u0027uuid\u0027 for this purpose. You should refer to the correct \u0027uuid\u0027 attribute here","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Next, we create a resource_pool for each of the segments.  The pool has a"},{"line_number":146,"context_line":"resource class (e.g. \"IPV4_ADDRESS\" or \"IPV6_ADDRESS\") in common with other"},{"line_number":147,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":148,"context_line":"by setting the \"external id\" of the resource pool equal to the UUID of the"},{"line_number":149,"context_line":"segment in Neutron.  These resource pools are linked to the host aggegates"},{"line_number":150,"context_line":"through the aggregate_resource_pools table."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_6be214d7","line":148,"updated":"2016-03-21 21:08:22.000000000","message":"We actually got rid of the `external_id` column from the resource_providers table. You can now simply create the resource pool passing a --uuid value equal to the Neutron subnet UUID. They are, after all, univerally-unique identifiers :)","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Next, we create a resource_pool for each of the segments.  The pool has a"},{"line_number":146,"context_line":"resource class (e.g. \"IPV4_ADDRESS\" or \"IPV6_ADDRESS\") in common with other"},{"line_number":147,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":148,"context_line":"by setting the \"external id\" of the resource pool equal to the UUID of the"},{"line_number":149,"context_line":"segment in Neutron.  These resource pools are linked to the host aggegates"},{"line_number":150,"context_line":"through the aggregate_resource_pools table."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_e507687f","line":148,"in_reply_to":"fa0719c6_6be214d7","updated":"2016-03-22 14:15:36.000000000","message":"I see the resource pool corresponding with the segment instead of the subnet.  A segment might have multiple subnets.  The IP availability is the collective availability of them all, not just one of them.  So, I would modify your statement by replacing subnet with segment.\n\nSo, the UUID of the resource pool is the same as that of the segment?  I guess I could buy that if you consider the segment and the resource pool one and the same.  I\u0027m not convinced this is the case.  I see the resource pool as being one component of the segment, not the segment itself.  If they are not the same and are merely related, then the identifier is not universally unique.\n\nWhat if the segment provides resource pools for two or more independent kinds of resources?  The standard practice to use the segment UUID as the id for the resource pool breaks down, doesn\u0027t it?  We can only have one resource pool with the id.\n\nI\u0027ll change this for now with a note that I have this concern.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":153,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"},{"line_number":154,"context_line":"to a resource_pool through the resource_providers table.  Basically, these"},{"line_number":155,"context_line":"fields together give the number of IP addresses available for allocation in"},{"line_number":156,"context_line":"Nova (its capacity from Nova\u0027s point of view)::"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_cbe7e0e2","line":154,"updated":"2016-03-21 21:08:22.000000000","message":"In an amendment to the original resource-providers schema, we removed the resource_pools table entirely and just use the one resource_providers table now:\n\nhttps://review.openstack.org/#/c/283253/2/specs/mitaka/approved/resource-providers.rst","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":163,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_abec2cc8","line":164,"updated":"2016-03-21 21:08:22.000000000","message":"Correct. Though it\u0027s important to point out that *Neutron* doesn\u0027t actually need to set this. Instead, an external script could call the Nova API or use the `nova resource-pool-update-inventory` command. You could do this, I suppose, in neutron-server but it could just as easily be done outside of it on a cron job of some sort.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":163,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_a5029009","line":164,"in_reply_to":"fa0719c6_abec2cc8","updated":"2016-03-22 14:15:36.000000000","message":"There is room to discuss the precise mechanism by which this will be done.  The point is that it is communicating data from Neutron to Nova and I see it as a Neutron responsibility to initiate it and it most certainly will be done by a call to the Nova API.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a82f33f1922941be578ce2934bb47abe8758d35a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"},{"line_number":168,"context_line":"ports, DHCP ports and other non-Nova ports.  It must only include such IPs"},{"line_number":169,"context_line":"which fall in the allocation_pool(s) on the subnet(s) attached to the segment."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1af94dfe_ad8dadd4","line":167,"updated":"2016-03-21 00:35:28.000000000","message":"s/perview/purview","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"},{"line_number":168,"context_line":"ports, DHCP ports and other non-Nova ports.  It must only include such IPs"},{"line_number":169,"context_line":"which fall in the allocation_pool(s) on the subnet(s) attached to the segment."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_0bd27800","line":167,"updated":"2016-03-21 21:08:22.000000000","message":"s/perview/purview/","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"},{"line_number":168,"context_line":"ports, DHCP ports and other non-Nova ports.  It must only include such IPs"},{"line_number":169,"context_line":"which fall in the allocation_pool(s) on the subnet(s) attached to the segment."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_3f35f6d9","line":167,"in_reply_to":"1af94dfe_ad8dadd4","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":164,"context_line":"updated in a subnet-update call."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"},{"line_number":168,"context_line":"ports, DHCP ports and other non-Nova ports.  It must only include such IPs"},{"line_number":169,"context_line":"which fall in the allocation_pool(s) on the subnet(s) attached to the segment."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_bf20e69c","line":167,"in_reply_to":"fa0719c6_0bd27800","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":166,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":167,"context_line":"consumed outside of Nova\u0027s perview.  This includes IP addresses used on router"},{"line_number":168,"context_line":"ports, DHCP ports and other non-Nova ports.  It must only include such IPs"},{"line_number":169,"context_line":"which fall in the allocation_pool(s) on the subnet(s) attached to the segment."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"The allocations table is linked through the same resource_providers table.  It"},{"line_number":172,"context_line":"has a \"used\" field on it indicating how many IP addresses are consumed.   It"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_ebce2459","line":169,"updated":"2016-03-21 21:08:22.000000000","message":"++","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":173,"context_line":"will have one row for each consumer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The \"capacity\" should include one IP address for every time the Nova scheduler"},{"line_number":176,"context_line":"could create an entry in its allocations table.  When the sum of the"},{"line_number":177,"context_line":"allocations is equal to \"capacity\" then the resource will be consider exhausted"},{"line_number":178,"context_line":"from Nova\u0027s point of view.  The scheduler will no longer place hosts inside"},{"line_number":179,"context_line":"such an aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_4bdc7012","line":176,"updated":"2016-03-21 21:08:22.000000000","message":"Remove the first sentence. It\u0027s not necessary and actually is confusing. There is no \"capacity\" field. It is simply the result of:\n\n (total - reserved) * allocation_ratio\n\nallocation_ratio is 1.0 by default and should be 1.0 for IPV4_ADDRESS resource class pools, clearly, since you cannot allow any resource overcommit for IPv4 addresses :)","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":173,"context_line":"will have one row for each consumer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The \"capacity\" should include one IP address for every time the Nova scheduler"},{"line_number":176,"context_line":"could create an entry in its allocations table.  When the sum of the"},{"line_number":177,"context_line":"allocations is equal to \"capacity\" then the resource will be consider exhausted"},{"line_number":178,"context_line":"from Nova\u0027s point of view.  The scheduler will no longer place hosts inside"},{"line_number":179,"context_line":"such an aggregate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_5f4f0a92","line":176,"in_reply_to":"fa0719c6_4bdc7012","updated":"2016-03-22 14:15:36.000000000","message":"I had stated that capacity is total - reserved on L158 and I put capacity in quotes.  I ignored allocation_ratio under the unstated assumption that it should be 1.0 which I thought would be clear.  Nonetheless, I\u0027ll see what I can do to clarify.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":190,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":191,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":192,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":193,"context_line":"   first place."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":196,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_2bd93c22","line":193,"updated":"2016-03-21 21:08:22.000000000","message":"This is correct.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":196,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"},{"line_number":197,"context_line":"   resource pool to reserve it in.  I\u0027d then expect Nova to create a row in the"},{"line_number":198,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":199,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":202,"context_line":"please chime in you can improve on this."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_8b04c87e","line":199,"updated":"2016-03-21 21:08:22.000000000","message":"Also correct.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"442f0c24f09b6d9b11aaf56570338f08dc245d88","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"#. After the port is bound to a host, Neutron makes a call to the scheduler to"},{"line_number":214,"context_line":"   delete the allocation and reset the reserved field.  If there is no"},{"line_number":215,"context_line":"   allocation then this call should still work."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"   An alternative to setting the reserved field to an absolute value is to have"},{"line_number":218,"context_line":"   the call to the scheduler increment the reserved field by the number of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_6b097495","line":215,"updated":"2016-03-21 21:08:22.000000000","message":"No, this is not needed. There is no communication needed between Neutron and the scheduler when the port is bound to a host. If the port did not have an IP associated with it when nova boot was called, the scheduler creates an allocation record for the IPV4_ADDRESS when it determines which host to place the instance on. This IPV4_ADDRESS record in the allocations table stays until the instance is terminated or migrated. In the cases when the user calls nova boot, passing in a port that already has an IP address, then the scheduler simply uses that information to determine which hosts it can place the instance on, but it does not make a record of that IPV4_ADDRESS in the allocations table, because *Nova* didn\u0027t actually claim that IP address... the user did prior to calling Nova. And therefore, Neutron would simply pass to the `nova resource-pool-update-inventory` the count of ports that had been created by a user and associated with an IP address in that segment manually (as opposed to bound by Nova during instance launch).\n\nNeutron *must* have a way of differentiating ports that are associated to an IP by Nova and ports that are associated to an IP by a user, outside of Nova. Is this true?","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"565ca5e6d394c7234b5d7d4924d67b3e2cb86ac7","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"#. After the port is bound to a host, Neutron makes a call to the scheduler to"},{"line_number":214,"context_line":"   delete the allocation and reset the reserved field.  If there is no"},{"line_number":215,"context_line":"   allocation then this call should still work."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"   An alternative to setting the reserved field to an absolute value is to have"},{"line_number":218,"context_line":"   the call to the scheduler increment the reserved field by the number of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_8193e04e","line":215,"in_reply_to":"fa0719c6_6b097495","updated":"2016-03-22 15:24:42.000000000","message":"\u003e This IPV4_ADDRESS record in the allocations table stays until the instance is terminated or migrated\n\nWhat happens to the allocation when the instance is migrated?\n\n\u003e Neutron *must* have a way of differentiating ports that are associated to an IP by Nova and ports that are associated to an IP by a user, outside of Nova. Is this true?\n\nRight now, this isn\u0027t true as far as I know.  Both ports end up in the same state when they ultimately end up bound to a compute host and no record is kept to distinguish how they came to be in that state.  I\u0027ll consider this.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a82f33f1922941be578ce2934bb47abe8758d35a","unresolved":false,"context_lines":[{"line_number":220,"context_line":"   racy because Neutron will also need to make calls to adjust the reserved"},{"line_number":221,"context_line":"   field for port allocations made outside of Nova.  Also, if any calls result"},{"line_number":222,"context_line":"   in an error or are missed for some other reason, the field could get out of"},{"line_number":223,"context_line":"   sink.  Setting to an absolute value should be self-correcting."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"I think about this approach this way:  the allocation in Nova\u0027s scheduler is"},{"line_number":226,"context_line":"useful to keep other Nova scheduler instances off of the IPs until Neutron gets"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1af94dfe_b017c243","line":223,"updated":"2016-03-21 00:35:28.000000000","message":"s/sink/synch","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0461d12867b9badc577f41acab46e8de289e5222","unresolved":false,"context_lines":[{"line_number":220,"context_line":"   racy because Neutron will also need to make calls to adjust the reserved"},{"line_number":221,"context_line":"   field for port allocations made outside of Nova.  Also, if any calls result"},{"line_number":222,"context_line":"   in an error or are missed for some other reason, the field could get out of"},{"line_number":223,"context_line":"   sink.  Setting to an absolute value should be self-correcting."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"I think about this approach this way:  the allocation in Nova\u0027s scheduler is"},{"line_number":226,"context_line":"useful to keep other Nova scheduler instances off of the IPs until Neutron gets"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_08839357","line":223,"in_reply_to":"1af94dfe_b017c243","updated":"2016-03-22 14:15:36.000000000","message":"Done","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c9ec5dc0137d633d79c146bc20d84b7ef3793b5a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":228,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":229,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":230,"context_line":"\"reserved\")."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"While I expect the above algorithm to work in general, intermittent failures"},{"line_number":233,"context_line":"could leave us with orphaned allocations in the scheduler.  This would"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5aef4532_f9c04552","line":230,"updated":"2016-03-09 22:31:20.000000000","message":"I don\u0027t think that this will be optimal, as it will require a great deal of back-and-forth messaging to keep things straight. \u0027Reserved\u0027 is not really meant to be used this way; that\u0027s what the allocated number is for. In any event, when a port is released by Neutron, it will need to send Nova a message to reflect that a previously allocated address is now available.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"c18de344994ee29b1dbc84915f9be4b2a3b5a09c","unresolved":false,"context_lines":[{"line_number":227,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":228,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":229,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":230,"context_line":"\"reserved\")."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"While I expect the above algorithm to work in general, intermittent failures"},{"line_number":233,"context_line":"could leave us with orphaned allocations in the scheduler.  This would"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa0719c6_32e984e7","line":230,"in_reply_to":"5aef4532_f9c04552","updated":"2016-03-22 16:08:40.000000000","message":"\u003e I don\u0027t think that this will be optimal, as it will require a great deal of back-and-forth messaging to keep things straight.\n\nI tend to agree with you but I\u0027m not convinced that we have identified a better way yet.\n\n\u003e \u0027Reserved\u0027 is not really meant to be used this way; that\u0027s what the allocated number is for\n\nThis presupposes that the scheduler has the complete story for allocations within the pool.  The source of truth for allocations is Neutron\u0027s IPAM and allocations from the same pool can be made there without involving Nova at all.  Hence, available IPs are subject to change without a corresponding change in the allocated number.  The only way I can see to reflect this change is by adjusting the reserved field.\n\nThe problem that I\u0027m trying to solve here is that Neutron currently has no way to tell the difference between ports for which Nova is holding an allocation and ports where it is not.  Jay touches on this in his first comment on L215.  My proposed solution here only uses allocations in the scheduler until the IP is actually allocated in Neutron and Neutron acknowledges that in the reserved field.  It avoids having to differentiate.\n\nJay\u0027s proposal seems to be for Neutron to differentiate which I believe would require something extra in the Neutron port model and may require some extra work to ensure consistency but I need to think this through.","commit_id":"a21df35c2d4b7577524f6d926f7305dde3436425"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"d6d073f731a990899295962170808b9b26ed2207","unresolved":false,"context_lines":[{"line_number":37,"context_line":"that IP addresses assigned to ports are constrained to a potentially small"},{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts, then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_a3ba656c","line":40,"updated":"2016-03-30 11:11:05.000000000","message":"In the light of our discussion below, I don\u0027t understand what \"Currently, Nova requires an IP address on a port\" really means.  Specifically, the discussion below says that Nova is quite happy to schedule a VM to a host, without a port having been pre-created, and _then_ to ask Neutron to create a port for that VM on the chosen host.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bb536fb5abdabd31d6b05f59a93ad663dd053852","unresolved":false,"context_lines":[{"line_number":37,"context_line":"that IP addresses assigned to ports are constrained to a potentially small"},{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts, then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_9de8a77e","line":40,"in_reply_to":"1a122d0e_fa5281dc","updated":"2016-04-15 22:37:23.000000000","message":"I\u0027d like to collect feedback on what to do about this on this review: https://review.openstack.org/#/c/299591/","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9fd41003da2d4b8e351d14d0cad3f5bfe5129c9f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"that IP addresses assigned to ports are constrained to a potentially small"},{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts, then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_fa5281dc","line":40,"in_reply_to":"9a061dce_636a601c","updated":"2016-04-15 21:42:07.000000000","message":"\u003e (which, as far as I know, is how Nova would like it done going forward.)\n\nMore or less since the more exotic ways to create a port require more proxy code in nova and we want to avoid that, so more exotic ports get created in neutron first and then provided to nova when booting the instance. Similar to boot from volume where people want to add volume-type to that flow, and we\u0027ve rejected it as adding more proxy code to an already relatively complex operation.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"that IP addresses assigned to ports are constrained to a potentially small"},{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts, then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_636a601c","line":40,"in_reply_to":"ba0121b8_a3ba656c","updated":"2016-04-15 16:50:59.000000000","message":"I\u0027ll make this clear that this requirement holds only when a port is pre-created and given to Nova (which, as far as I know, is how Nova would like it done going forward.)","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":37,"context_line":"that IP addresses assigned to ports are constrained to a potentially small"},{"line_number":38,"context_line":"subset of compute hosts."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Currently, Nova requires an IP address on a port.  If this requirement is kept,"},{"line_number":41,"context_line":"and that IP address is constrained to a small subset of compute hosts, then the"},{"line_number":42,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":43,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_21c9e559","line":40,"in_reply_to":"ba0121b8_a3ba656c","updated":"2016-04-14 16:43:49.000000000","message":"Our API exposes information about the networks attached to an instance. That can\u0027t really be changed, so we have to get that information at some point. It doesn\u0027t, however, have to be done during or before scheduling necessarily.\n\nI think this is pointing out that right now, we assume the IP is attached to the port and that we can get it whenever we want (and/or at allocation time if we do it). If we change that (which is fine I think) we just need a way to get that from neutron at the right point in the process. Since we have async events from neutron to nova, I think we should be fine to handle it that way.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"f6759dc3f72496c516aed5375406890c1a6fd5f8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_a068c288","line":99,"updated":"2016-03-29 17:24:10.000000000","message":"The wording at this point confused me, and I\u0027m still not 100% sure that I have it right.  When I first read this, I thought it was describing something that is already true in OpenStack today - and therefore that there is already a common case where Nova selects the host before Neutron allocates the IP.  If so, that would contradict the \"Currently, Nova requires an IP address on a port\" statement above.\n\nI think now that that is not the case, and that instead you\u0027re describing what you\u0027d like the behavior to be.  I guess this is somewhat signaled by the section title \"Use Cases\", but I think it would be help to be more explicit about this.\n\nBut then there\u0027s that last sentence \"I expect ... today.\"  So I\u0027m not sure - is this what already happens in the \"launch instance(s) on a specified network\" case, or not?","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"d6d073f731a990899295962170808b9b26ed2207","unresolved":false,"context_lines":[{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_c384b9d5","line":99,"in_reply_to":"ba0121b8_2032e710","updated":"2016-03-30 11:11:05.000000000","message":"Thanks for explaining.  This is actually rather exciting news for me, because it means that in the most critical case, it is _already_ possible for Neutron to consider the chosen host when allocating the IP for a VM, and that no Nova changes are needed for this.\n\nIn terms of the clarity of this spec, I think it would help reviewers if you could differentiate more clearly between \"This is what already happens today\" and \"This is the behavior that we would like that is different from what happens today\".","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"01181073d64d54e3c47b5a30f91d78d811abb521","unresolved":false,"context_lines":[{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_2032e710","line":99,"in_reply_to":"ba0121b8_a068c288","updated":"2016-03-29 22:43:01.000000000","message":"Yes, Nova selects the host and then creates the port. This happens in http://git.openstack.org/cgit/openstack/nova/tree/nova/network/neutronv2/api.py#n652. This code is executed by the compute manager in the host where the instance has been scheduled to run. However, currently, Neutron doesn\u0027t have any constraints as to what IP address to assign to the port, due to the assumption of a single L2 domain. What will change with routed networks is that Neutron will set a segment and allocate an IP address based on the host where the instance will run. From the point of view of this Nova code, not much is changing. That explains the \"I expect ... today.\" sentence at the end of the paragraph. Maybe it should be changed for clarity\u0027s sake.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":107,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_3ca58ca1","line":104,"updated":"2016-04-14 16:43:49.000000000","message":"I just want to comment here that I\u0027m concerned about the complexity involved with the above _four_ options. We already have bugs aplenty in the code that lets you provide (or not provide) a port, or network id, or neither. The description above really kinda feels like we are just making the problem worse.\n\nCan we not shrink the problem a bit by removing some of the possibilities above? For example, the second option above, where nova needs to check that the port given is already bound to a segment, ask neutron what pool/aggregate that belongs to, and then restrict the scheduler to that pool. Maybe that\u0027s mostly the same as the first option, but where we determine that the port is unbound and can go anywhere.\n\nAnyway, I\u0027m just not looking forward to more degrees of freedom in the model, given that we already suck and we don\u0027t really even have to do most of what you\u0027re describing above.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bb536fb5abdabd31d6b05f59a93ad663dd053852","unresolved":false,"context_lines":[{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":107,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_7da4ab56","line":104,"in_reply_to":"1a122d0e_4e72e4e6","updated":"2016-04-15 22:37:23.000000000","message":"Let me give the second use case a little bit more thought.  On one hand, it is a use case we support today.  A user can hang on to a port even after an instance has gone away and give it back to Nova to boot another instance.  What would we do about that case?  Would Neutron strip the IP from the port when Nova updates the port?","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Regarding the use cases where the user has a port and brings that port to Nova"},{"line_number":107,"context_line":"to create an instance (or to add it to an existing instance), they appear the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_4e72e4e6","line":104,"in_reply_to":"5a18252c_3ca58ca1","updated":"2016-04-15 17:24:11.000000000","message":"I have also been concerned about the complexity.  Sometimes, I just have to get the plan down on paper and let it stew to see how bad it really is.  I\u0027ve been think of a new possibility for a couple of weeks.  I ran it by Jay in a video chat we had recently and I\u0027ve been meaning to update this spec all week.  (Just haven\u0027t had the time).  I\u0027ll update it today and hopefully it will be more palatable.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"f6759dc3f72496c516aed5375406890c1a6fd5f8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_069c26bf","line":115,"updated":"2016-03-29 17:24:10.000000000","message":"Regarding this whole Problem Description section, I also suggest that we don\u0027t necessarily need to solve all of the use cases at once - perhaps it would make for a more tractable spec and body of implementation work if we concentrated only on the most compelling use cases.\n\nBased on the original \u0027LDT\u0027 RFE bug, I think the critical use case is the \"launch instance(s) on a specified network\" one.  And from my own perspective that is also the important case.  I don\u0027t know if anyone is wanting the preallocated port cases.\n\nThe live migration and IP resource aspects are interesting but also not critical AFAIK; FWIW I\u0027d put those as less important than the primary use case, but more important than the preallocated port cases.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"01181073d64d54e3c47b5a30f91d78d811abb521","unresolved":false,"context_lines":[{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_fbba6022","line":115,"in_reply_to":"ba0121b8_069c26bf","updated":"2016-03-29 22:43:01.000000000","message":"I agree with the assertion \u0027the critical use case is the \"launch instance(s) on a specified network\"\u0027. That is why I am reluctant to let this work to be overly complicated by use case 2b, \u0027Port has an IP address already\u0027. In my opinion, that complication is not justified given that use case 2b will not serve that many users","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_430f5ce1","line":115,"in_reply_to":"ba0121b8_26e4a339","updated":"2016-04-15 16:50:59.000000000","message":"@Neil:  https://review.openstack.org/#/c/299591/\n\nFrom what I understand, Nova would like to move toward the pre-allocated port use case for various reasons.  We can\u0027t ignore it.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0388a38966c21b0d43ff1a50831e524df9dae2cc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_3d2c9801","line":115,"in_reply_to":"ba0121b8_26e4a339","updated":"2016-04-14 00:14:48.000000000","message":"@Neil: While the \"launch an instance on a specific network\" use case is indeed a primary one, the NFV space has been itching for the preallocated port use cases, particularly around the service function chaining and NFVO meta layers. Being able to construct a series of service chains with preallocated ports and then launch a set of VNFs that compose that service function chain using those preallocated ports on the nova boot command is a big request I\u0027ve heard from a number of folks.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"d6d073f731a990899295962170808b9b26ed2207","unresolved":false,"context_lines":[{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_26e4a339","line":115,"in_reply_to":"ba0121b8_fbba6022","updated":"2016-03-30 11:11:05.000000000","message":"Agreed.  I haven\u0027t yet read everything that you\u0027ve proposed for this case, but my feeling is that _if_ the user/operator/Neutron gives Nova a port that already has an IP address, then the user/operator/Neutron can also give Nova a scheduler filter for the set of hosts that can handle that IP address.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"f6759dc3f72496c516aed5375406890c1a6fd5f8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"corresponding to its segments so that Nova has the same mapping as Neutron does"},{"line_number":122,"context_line":"of hosts to segments.  This automatic management of the aggregates could be"},{"line_number":123,"context_line":"completed later than sooner.  I do believe it is important and shouldn\u0027t be"},{"line_number":124,"context_line":"thrown out of scope lightly."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"__ generic-resource-pools_"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_46de1e40","line":124,"updated":"2016-03-29 17:24:10.000000000","message":"I\u0027m confused here because the section title is \"Proposed change\", and this is a Nova spec, but it appears (at least for the first few paragraphs) that you are saying that no Nova changes are needed.\n\nCould you restructure this into separate sections covering:\n\n- How Neutron will use existing (or already planned) Nova facilities to meet part of the requirement.\n\n- What further Nova changes are needed (if any).","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bb536fb5abdabd31d6b05f59a93ad663dd053852","unresolved":false,"context_lines":[{"line_number":121,"context_line":"corresponding to its segments so that Nova has the same mapping as Neutron does"},{"line_number":122,"context_line":"of hosts to segments.  This automatic management of the aggregates could be"},{"line_number":123,"context_line":"completed later than sooner.  I do believe it is important and shouldn\u0027t be"},{"line_number":124,"context_line":"thrown out of scope lightly."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"__ generic-resource-pools_"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_3d307356","line":124,"in_reply_to":"ba0121b8_46de1e40","updated":"2016-04-15 22:37:23.000000000","message":"So far, this has mostly been discussion about what might need to change.  As we\u0027re converging on agreement, it is possible that nothing will have to change aside from the scheduler work that is already in the works.  So, It might be that we just reach agreement and abandon this spec as \"no change needed\" or something like that.  For now, I like how the discussion has progressed in this spec.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f7326fc2843dd5cb8e3a8bf05c9c31fc354b0552","unresolved":false,"context_lines":[{"line_number":140,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":141,"context_line":"by setting the UUID of the resource pool equal to the UUID of the segment in"},{"line_number":142,"context_line":"Neutron.  These resource pools are linked to the host aggregates through the"},{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da0c15f0_21483687","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":24},"updated":"2016-03-28 00:15:32.000000000","message":"In the generic resource pools spec (https://review.openstack.org/#/c/253187) this table is named \u0027resource_provider_aggregates\u0027 in the \"Data model impact\u0027 section. For clarity, I suggest using the same name here","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1473da7c102d14237f2634dde5c86cf93f278a70","unresolved":false,"context_lines":[{"line_number":140,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":141,"context_line":"by setting the UUID of the resource pool equal to the UUID of the segment in"},{"line_number":142,"context_line":"Neutron.  These resource pools are linked to the host aggregates through the"},{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da0c15f0_2e3631e6","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":24},"in_reply_to":"da0c15f0_21483687","updated":"2016-03-28 16:23:34.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"dc8fbccb8050e96df86e19cb9e0ebc100eb75b14","unresolved":false,"context_lines":[{"line_number":142,"context_line":"Neutron.  These resource pools are linked to the host aggregates through the"},{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"},{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa0719c6_4d5299de","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":21},"updated":"2016-03-22 16:19:05.000000000","message":"concerned","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":142,"context_line":"Neutron.  These resource pools are linked to the host aggregates through the"},{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"},{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_a3ee38ea","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":21},"in_reply_to":"fa0719c6_4d5299de","updated":"2016-04-15 16:50:59.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"eb0c3fe42c4aa81a80ecd8b058923f17bae3b7c3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"},{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"},{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_40727bae","line":146,"updated":"2016-03-29 20:34:14.000000000","message":"different","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":143,"context_line":"aggregate_resource_pools table."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. Note: I\u0027m conerned about using the same UUID for the resource pool and the"},{"line_number":146,"context_line":"   segment.  UUIDs are \"universally unique\" so if one is used in two difference"},{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"},{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_63e4200d","line":146,"in_reply_to":"ba0121b8_40727bae","updated":"2016-04-15 16:50:59.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"eb0c3fe42c4aa81a80ecd8b058923f17bae3b7c3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"},{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"},{"line_number":150,"context_line":"   have two pools with the same id.  So for, we only have one resource pool --"},{"line_number":151,"context_line":"   IP availability -- that is provided from the segment.  What else could be"},{"line_number":152,"context_line":"   provided from a network segment?"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_a0b0b744","line":150,"updated":"2016-03-29 20:34:14.000000000","message":"far","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":147,"context_line":"   places, it should still be identifying the same resource.  So, resource"},{"line_number":148,"context_line":"   pools are the same as segments?  I don\u0027t think this holds.  What if segments"},{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"},{"line_number":150,"context_line":"   have two pools with the same id.  So for, we only have one resource pool --"},{"line_number":151,"context_line":"   IP availability -- that is provided from the segment.  What else could be"},{"line_number":152,"context_line":"   provided from a network segment?"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_43dd9c41","line":150,"in_reply_to":"ba0121b8_a0b0b744","updated":"2016-04-15 16:50:59.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"},{"line_number":150,"context_line":"   have two pools with the same id.  So for, we only have one resource pool --"},{"line_number":151,"context_line":"   IP availability -- that is provided from the segment.  What else could be"},{"line_number":152,"context_line":"   provided from a network segment?"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":155,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_7cfa6444","line":152,"updated":"2016-04-14 16:43:49.000000000","message":"I think it does hold. We need a way to uniquely identify a segment as a pool of finite resource within nova. We also need a way to match a request with that pool so that we know it needs to be taken from there. That means we need some identifier (or mapping) between all three of those things (the request, the neutron segment and our pool). I think the uuid of the segment makes sense here.\n\nWe\u0027d do the same thing for disk, which is use the uuid of the disk, or storage provider to identify it externally, in our pool for counting reasons, and in a request where we\u0027re specifically asking for our storage to be taken from a particular place.\n\nIf we don\u0027t do this we just need a mapping, right? I don\u0027t see the point.\n\nRegarding your concern about multiple types of resources from the same provider. In nova, we model the resource provider as one thing (which is really just the uuid and a name) and an inventory of resources of a given type as another thing. One provider can provide multiple resource types and would have multiple inventories as a result. It can\u0027t provide two sets of IPv4 addresses (else we\u0027d have no way to tell them apart) but it could provide IPv4 addresses, IPv6 addresses, and X.25 addresses (smirk) if we wanted.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"   need to be linked to two or more difference kinds of resources?  We can\u0027t"},{"line_number":150,"context_line":"   have two pools with the same id.  So for, we only have one resource pool --"},{"line_number":151,"context_line":"   IP availability -- that is provided from the segment.  What else could be"},{"line_number":152,"context_line":"   provided from a network segment?"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":155,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_6ee8807d","line":152,"in_reply_to":"5a18252c_7cfa6444","updated":"2016-04-15 17:24:11.000000000","message":"Fair enough.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":164,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":165,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":166,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":167,"context_line":"this use case."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":170,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_f71def62","line":167,"updated":"2016-04-14 16:43:49.000000000","message":"Oh come on, can\u0027t you guys support address oversubscription? What if you use the bottom half of the TCP port space and I use the top half on a given address?\n\n(totally joking)","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":165,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":166,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":167,"context_line":"this use case."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":170,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_9aa7174f","line":167,"in_reply_to":"5a18252c_f71def62","updated":"2016-04-15 17:24:11.000000000","message":"I\u0027ll give this some really really really serious consideration.  Do you want to set up a summit session about this?  I\u0027ll find a slot for a weekly meeting starting next week because we really should start hashing this out before the summit session so that we have some idea of how we\u0027re going to do it.  We\u0027ll probably need a mid-cycle dedicated to this.  How is May looking for you?","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"eb0c3fe42c4aa81a80ecd8b058923f17bae3b7c3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"The \"capacity\" -- derived as shown above -- should conceptually include one IP"},{"line_number":179,"context_line":"address for every time the Nova scheduler could create an entry in its"},{"line_number":180,"context_line":"allocations table.  When the sum of the allocations is equal to \"capacity\" then"},{"line_number":181,"context_line":"the resource will be consider exhausted from Nova\u0027s point of view.  The"},{"line_number":182,"context_line":"scheduler will no longer place hosts inside such an aggregate."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Things get more complex when you consider creating ports using Neutron outside"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_402a7b2d","line":181,"updated":"2016-03-29 20:34:14.000000000","message":"considered","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"61ffba5a6e35071dc5a37f1c55809e03a27dcafa","unresolved":false,"context_lines":[{"line_number":178,"context_line":"The \"capacity\" -- derived as shown above -- should conceptually include one IP"},{"line_number":179,"context_line":"address for every time the Nova scheduler could create an entry in its"},{"line_number":180,"context_line":"allocations table.  When the sum of the allocations is equal to \"capacity\" then"},{"line_number":181,"context_line":"the resource will be consider exhausted from Nova\u0027s point of view.  The"},{"line_number":182,"context_line":"scheduler will no longer place hosts inside such an aggregate."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Things get more complex when you consider creating ports using Neutron outside"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_43b47cf1","line":181,"in_reply_to":"ba0121b8_402a7b2d","updated":"2016-04-15 16:50:59.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":193,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":194,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":195,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":196,"context_line":"   first place."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":199,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_f7c7af95","line":196,"updated":"2016-04-14 16:43:49.000000000","message":"Um, I\u0027m super confused about this. How is this not in conflict with your second option above in the list of four? If you are suggesting that we automatically not add an inventory record for this because it\u0027s assumed to be already-allocated, I\u0027m really concerned. I know what you\u0027re getting at here: neutron has already allocated it, so it\u0027s not actually available for other instances to consume. However, I think it\u0027s a huge problem for our tables to not be internally consistent where we know that for a given port attached to an instance we have a matching allocation for it.\n\nThis is getting into what I describe above as concerning about the complexity increase here. I would _much_ prefer that we not make the assumption you assert here and always have an allocation for anything we are consuming.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":193,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":194,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":195,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":196,"context_line":"   first place."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":199,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_8ec19c83","line":196,"in_reply_to":"5a18252c_f7c7af95","updated":"2016-04-15 17:24:11.000000000","message":"Why do you need to know that you have an allocation for every port?  Is this an OCD thing or do you see real problems coming from not having it?  \n\nIf Nova is handling availability for IPs that really aren\u0027t generally available, we open the possibility of over subscribing the IP space.  You\u0027ll have instances trying to claim allocations that Nova thinks should be reserved but the claim in Neutron fails.  The only way that I can see this working is if Neutron carves out a special chunk of IP space reserved for Nova and confines Nova to it.  That way, Nova can act like the source of truth for how this chunk is consumed.\n\nBut, that\u0027s not the way that Neutron works and I don\u0027t think we want to go there because chopping up the IP space and reserving it for particular purposes just ends up fragmenting it.  With IPv4 that is undesirable in many cases.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"dc8fbccb8050e96df86e19cb9e0ebc100eb75b14","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa0719c6_ad89b528","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"updated":"2016-03-22 16:19:05.000000000","message":"Note to reviewers.  I don\u0027t claim to have this all figured out yet.  I\u0027m hoping for some alternate ideas that we can compare and discuss.  Please try to be detailed when describing your alternate ideas and please consider all of the following use cases:\n\n1. Nova creates the port.\n    (nova boot --nic network_id\u003d...)\n2. User creates the port\n    (nova boot --nic port_id\u003d...)\n    a. Port doesn\u0027t have an IP address until after scheduling\n        (scheduler needs to take in to account IP availability)\n    b. Port has an IP address already\n        (user reuses existing port)\n        (live migration too)\n\nAre there other use cases that I missed?","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"445e3a7c2ae720d362c41a351843d0704c0fa1c8","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_5cc1d4e3","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"in_reply_to":"ba0121b8_01d1f0cd","updated":"2016-03-29 16:16:28.000000000","message":"A PDF of the diagram:  https://drive.google.com/file/d/15jPeVfReWKhYyI5c3m2ULyhUWv5lg7l64OqQuYl4eAdgsWrrFbwaNzrYv39W6rbtJ7HmksbTq4xM1Zg6/view?usp\u003dsharing","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"01181073d64d54e3c47b5a30f91d78d811abb521","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_b6211d50","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"in_reply_to":"ba0121b8_5cc1d4e3","updated":"2016-03-29 22:43:01.000000000","message":"Another alternative is what I call the \"Eventually Consistent\" approach. The premise is that we can tolerate the Nova view of IP allocations to become slightly out of date if in exchange we simplify the interaction with Neutron.\n\nLet\u0027s start with use case 2b. If nova is given a port with an IP address, it must conclude that the corresponding segment has availability and therefore the only valid course of action is to schedule the instance in a host with access to said segment. After all, the ultimate arbiter of IP address availability in a segment is Neutron. In this case, Nova will add a row to the allocations table.\n\nThe last paragraph raises the possibility of the following situation:\n\n- A segment is almost full.\n- Neutron consumes the last available IP address for a request of use case 2b and Nova has not been notified yet.\n- Nova attempts to create / update a port on that segment for a request of use cases 1 or 2a, because its view of the segments IP availability has been rendered out of data\n\nIn this situation, Nova\u0027s port create / update request will be failed by Neutron because it knows the segment is full. Nova will simply attempt to schedule the instance / port to a different segment / host combination. The following is worth noting:\n\n- This situation will only happen when a segment is almost full. If the segment is not close to full, port creations / updates will succeed on it even if Nova\u0027s view of the segment is out of date. So not many Nova boots will be penalized by the re-tries.\n- Nova\u0027s view of the segment \u0027eventually\u0027 catches up when it receives the use case 2b request and processes it as described above.\n- For all the use cases, Nova adds a record to the allocation table whenever it succeeds scheduling a port to a segment / host pair. This is what keeps the \u0027eventual consistency\u0027 of this approach.\n- One implication is that Nova\u0027s code to create / update ports has to be moved out of the compute manager to the scheduler.\n\nThis alternative proposal is not complete yet. We need to work out the details of how to return ip addresses to a resource pool, specifically for use cases 2a and 2b. Those ports may continue existing for a long time after the Nova instance is deleted. What is the mechanism for Neutron to notify Nova the release of the corresponding ip addresses when the ports are eventually deleted?","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1473da7c102d14237f2634dde5c86cf93f278a70","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba0121b8_01d1f0cd","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"in_reply_to":"da0c15f0_7ecbe0a5","updated":"2016-03-28 16:23:34.000000000","message":"@Miguel, I have a few concerns.\n\nUsing a separate subnet for use case 2b has a few disadvantages.\n\n1. It complicates the management of subnets for administrators.  They\u0027ve got another constraint to think about when planning and sizing subnets across the deployment.\n\n2. It increases fragmentation of addresses which could be a source of pain if public IPv4 addresses are used and are scarce.\n\n3. It seems to force associating subnets to resource providers.  My hope is that the segment would be associated with the resource provider instead of individual subnets.  The reason that I think this is important is that a segment may have a number of subnets, especially with IPv4 where the IP space might be fragmented.  I\u0027ve heard from a couple of operators (Cern in particular) who plan to use 10-12 subnets within a segment.  Representing each of these with different resource provider would be the wrong thing to do since they are really part of a single pool of IPs for the segment.\n\nAnother issue is that I don\u0027t think it is possible to keep the use cases separate like this.  Take a look at the diagram that I drew [1] by opening it in draw.io (click the link and then click open with \u003cbrowser\u003e).  Imagine a port that is allocated from Neutron with no IP address.  Give the port to Nova, boot a VM, and then destroy the VM.  The port will still exist and will have an IP address.  Yet, Nova has no allocation for the IP address.  This port started in use case 2a and later is used in use case 2b.\n\n[1] https://drive.google.com/file/d/0B4AotMGstEW6TE5XdzMxWXhHa3M/view?usp\u003dsharing","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"05f5cf4e4f7a10aaa2d3c8355400d3ba5990fbd7","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa0719c6_a91e8d6d","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"in_reply_to":"fa0719c6_ad89b528","updated":"2016-03-23 15:30:33.000000000","message":"I drew this state diagram yesterday that has helped me visualize things more easily.  I found that I have to think through the whole thing again if I haven\u0027t thought about it for a week.  See if it helps you [1].\n\n [1] https://drive.google.com/file/d/0B4AotMGstEW6TE5XdzMxWXhHa3M/view?usp\u003dsharing","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f7326fc2843dd5cb8e3a8bf05c9c31fc354b0552","unresolved":false,"context_lines":[{"line_number":201,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":202,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"I think the following algorithm could work.  There may be some better ideas,"},{"line_number":205,"context_line":"please chime in you can improve on this."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Neutron will make a call to the scheduler to remove Nova\u0027s claim in the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da0c15f0_7ecbe0a5","line":204,"range":{"start_line":204,"start_character":8,"end_line":204,"end_character":42},"in_reply_to":"fa0719c6_ad89b528","updated":"2016-03-28 00:15:32.000000000","message":"In this comment, I am making the following assumptions:\n\n1) Aggregates and resource pools have been setup as described in lines 119 to 182 above\n\n2) When Nova is given a pre-created port to boot an instance, Nova will call Neutron to retrieve the port\u0027s details, as described in lines 106 to 114.\n\nUnder these assumptions, use cases 1 (Nova creates the port) and 2a (user creates the port which gets an IP address after instance scheduling) can be handled as described in scenario 2a of the generic resource pools spec (https://review.openstack.org/#/c/253187) without any further synchronization between Nova and Neutron.\n\nThis leaves Use case 2b (port has an IP address already) for which we need to come up with a more complex interaction between Nova and Neutron. This stems from the fact that when Neutron is creating the port and assigning an IP address to it from a given segment, the picture that Nova has of addresses availability in that segment is rendered out of date for a period of time. So the challenge is how to safely update Nova\u0027s view of reality, without Neutron relinquishing its role as the manager of IP addresses allocation and without creating race conditions.\n\nIn my opinion, we have to take a payoff mentality in deciding how to address use case 2b. And I think the payoff is low if we want to implement a totally seamless solution from the point of view of the operator. The complexity of what we need to implement will increase a lot beyond what we have specified so far. And I believe the number of users served by use case 2b is relatively low: the vast majority of users will fit in cases 1 and 2a. So why incur increasing significantly the complexity of the solution to serve a relatively small number of users?\n\nAt the same time, I think we have all the mechanisms we need in this spec and the generic resources pool spec to address use case 2b if we are willing to deliver a solution that is not completely seamless to the operator. This is how it would work:\n\n1) The operator will create two subnets for each segment where use case 2b needs to be supported. One of the subnets will be for Nova to allocate IP addresses for use cases 1 and 2a. The second subnet will be exclusively under Neutron\u0027s control to support use case 2b.\n\n2) The operator will create two generic resource pools for each aggregate. The first pool will be associated with the subnet for use cases 1 and 2a. The second pool will be associated with the subnet for use case 2b.\n\n3) The resource pools to support use cases 1 and 2a will be setup with \u0027total\u0027 and \u0027reserved\u0027 attributes that will enable Nova to \"allocate\" IP addresses from them.\n\n4) The resource pools to support use case 2b will setup with a \u0027total\u0027 attribute equal to the \u0027reserved\u0027 attribute, so Nova cannot \"allocate\" IP addresses from them.\n\n5) When Nova receives boot requests with only use cases 1 and 2a, it will find resource pools where ((total - reserved) * allocation_ratio) \u003e 0.\n\n6) When Nova receives boot requests with use case 2b, it will check that the resource pool corresponding to the port\u0027s subnet has \u0027total\u0027 equal to \u0027reserved\u0027 (the subnet\u0027s id is returned by a GET port request). If this is true, the boot can proceed. Otherwise, the boot request is failed.\n\nThe pros of this approach are:\n\n- We have all the mechanisms we need to implement it already spelled out in this spec and in the generic resource pools one.\n\n- Neutron retains its role as the only IP allocation manager.\n\n- No pesky race conditions between Nova and Neutron\n\nThe cons of this approach are:\n\n- Operator\u0027s admins have more setup to do to support use case 2b\n\n- There is the potential of IP address waste. In my opinion, this can be minimized by a sensible setup approach by the operator.\n\nI want to emphasize that this \"2 subnets per segment\" approach is only needed if the operator wants to enable use case 2b. Furthermore, it is only needed in aggregates that will support use case 2b.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"#. After the port is bound to a host, Neutron makes a call to the scheduler to"},{"line_number":217,"context_line":"   delete the allocation and reset the reserved field.  If there is no"},{"line_number":218,"context_line":"   allocation then this call should still work."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"   An alternative to setting the reserved field to an absolute value is to have"},{"line_number":221,"context_line":"   the call to the scheduler increment the reserved field by the number of"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_57c30357","line":218,"updated":"2016-04-14 16:43:49.000000000","message":"I think this is a lot of has-to-work synchronous calling between the components that is likely to be super flaky if these communications are delayed and some script is pushing hard on neutron and then nova, expecting all the numbers to worked out behind the scenes as fast as it can make the API calls.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"#. After the port is bound to a host, Neutron makes a call to the scheduler to"},{"line_number":217,"context_line":"   delete the allocation and reset the reserved field.  If there is no"},{"line_number":218,"context_line":"   allocation then this call should still work."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"   An alternative to setting the reserved field to an absolute value is to have"},{"line_number":221,"context_line":"   the call to the scheduler increment the reserved field by the number of"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_5ac73f45","line":218,"in_reply_to":"5a18252c_57c30357","updated":"2016-04-15 17:24:11.000000000","message":"I think we\u0027re actually going to move away from this a bit.  Neutron won\u0027t be deleting any allocations but will still adjust the reserved field of the allocation pool to reflect IPs not available to Nova.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"560e3fe03b86ce6fb4f4215a36761f5f770266cb","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"I think about this approach this way:  the allocation in Nova\u0027s scheduler is"},{"line_number":229,"context_line":"useful to keep other Nova scheduler instances off of the IPs until Neutron gets"},{"line_number":230,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":231,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":232,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":233,"context_line":"\"reserved\")."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_9de61542","line":230,"range":{"start_line":230,"start_character":46,"end_line":230,"end_character":52},"updated":"2016-04-07 21:32:26.000000000","message":"s/Neuton/Neutron","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"I think about this approach this way:  the allocation in Nova\u0027s scheduler is"},{"line_number":229,"context_line":"useful to keep other Nova scheduler instances off of the IPs until Neutron gets"},{"line_number":230,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":231,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":232,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":233,"context_line":"\"reserved\")."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_1a878710","line":230,"range":{"start_line":230,"start_character":46,"end_line":230,"end_character":52},"in_reply_to":"9a061dce_9de61542","updated":"2016-04-15 17:24:11.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"560e3fe03b86ce6fb4f4215a36761f5f770266cb","unresolved":false,"context_lines":[{"line_number":230,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":231,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":232,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":233,"context_line":"\"reserved\")."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"While I expect the above algorithm to work in general, intermittent failures"},{"line_number":236,"context_line":"could leave us with orphaned allocations in the scheduler.  This would"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a061dce_3ddb897d","line":233,"updated":"2016-04-07 21:32:26.000000000","message":"As in my last comment, we also need to account for the opposite: when an IP address is de-allocated in Neutron, it needs to return that resource to Nova.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":230,"context_line":"a chance to allocate the IP internally.  Once Neuton has allocated it then it"},{"line_number":231,"context_line":"isn\u0027t really useful to Nova anymore because we want to transfer ownership of"},{"line_number":232,"context_line":"the resource back to Neutron (hence deleting the allocation and adjusting"},{"line_number":233,"context_line":"\"reserved\")."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"While I expect the above algorithm to work in general, intermittent failures"},{"line_number":236,"context_line":"could leave us with orphaned allocations in the scheduler.  This would"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_7af83b7d","line":233,"in_reply_to":"9a061dce_3ddb897d","updated":"2016-04-15 17:24:11.000000000","message":"Done","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a1a37f585e4361865aa3bd3189f7cb1740521","unresolved":false,"context_lines":[{"line_number":261,"context_line":"Nova use data it already has to figure this out (e.g. the instance state)?  Do"},{"line_number":262,"context_line":"we need the port_id stored?"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Another open question is what will trigger cleaning up orphans and how often?"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Alternatives"},{"line_number":267,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a18252c_b77a57ef","line":264,"updated":"2016-04-14 16:43:49.000000000","message":"Yeah, I\u0027m super concerned about all the \"or this, or this, and if this thing, then that condition over there\" logic.\n\nI\u0027m not sure what to suggest as a concrete improvement here, other than to try to constrain the number of possibilities. As much as we suck at things like consistency of quota numbers matching up, existing bugs around leaking ports and not cleaning up things if they were allocated in a certain way, I\u0027m just really not in favor of upleveling the complexity of all of this in this way.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"7af98aedbbc6e1bf14070d47395880a3c027584a","unresolved":false,"context_lines":[{"line_number":261,"context_line":"Nova use data it already has to figure this out (e.g. the instance state)?  Do"},{"line_number":262,"context_line":"we need the port_id stored?"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Another open question is what will trigger cleaning up orphans and how often?"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Alternatives"},{"line_number":267,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a122d0e_ceef14af","line":264,"in_reply_to":"5a18252c_b77a57ef","updated":"2016-04-15 17:24:11.000000000","message":"This should be simplified in the next revision.","commit_id":"2aa7d6da14ad98925d72a4bc08cd365aeb59de0d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":56,"context_line":"continue to work, the VM must be migrated to another host with reachability to"},{"line_number":57,"context_line":"the same network segment."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Use Cases"},{"line_number":60,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dbe59909","line":57,"updated":"2016-04-26 21:13:37.000000000","message":"Just a small comment, given it\u0027s possible to force to live-migrate to a specific destination (hence by bypassing the scheduler), it means that admins could break that rule.\n\nThat\u0027s acceptable to me (they should know what they do), but the \"must\" here is a bit strong IMHO.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"For live migration, the VM already has an IP address.  For that IP address to"},{"line_number":56,"context_line":"continue to work, the VM must be migrated to another host with reachability to"},{"line_number":57,"context_line":"the same network segment."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Use Cases"},{"line_number":60,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_3c14674b","line":57,"in_reply_to":"1a122d0e_dbe59909","updated":"2016-04-27 15:37:12.000000000","message":"\"must\" is appropriate in this sentence.  It satisfies \"For that IP address to continue to work\".  However, your point is good and I will adjust this paragraph to distinguish between move operations involving the scheduler and those that don\u0027t.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   availability of IP addresses in each of the segments.  For example, there"},{"line_number":76,"context_line":"   could be some segments in the network which are out of addresses completely."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":79,"context_line":"     In this case, the segment and IP address of the new port will be set when"},{"line_number":80,"context_line":"     the new port is bound to the compute host.  Since the port was unbound to"},{"line_number":81,"context_line":"     begin with, there should be no restriction."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_59689f87","line":78,"updated":"2016-04-24 19:31:18.000000000","message":"Can the new port be in a different segment from the existing attached port that the instance was booted with? Or not because the instance is already on a compute host within a given segment, so the second port attached has to also be in that segment so the compute host can reach it.\n\nOr maybe not given the wording on L142 about a host having access to multiple segments.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   availability of IP addresses in each of the segments.  For example, there"},{"line_number":76,"context_line":"   could be some segments in the network which are out of addresses completely."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":79,"context_line":"     In this case, the segment and IP address of the new port will be set when"},{"line_number":80,"context_line":"     the new port is bound to the compute host.  Since the port was unbound to"},{"line_number":81,"context_line":"     begin with, there should be no restriction."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_c423fabb","line":78,"in_reply_to":"1a122d0e_59689f87","updated":"2016-04-26 21:13:37.000000000","message":"I think we shouldn\u0027t restrict the host only accessing one single segment. I can think about some topologies where some hosts could have access to multiple L2 segments for good reasons. \nIn my mind, I just see the host being part of 2 aggregates mapping different Neutron resource pools.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   availability of IP addresses in each of the segments.  For example, there"},{"line_number":76,"context_line":"   could be some segments in the network which are out of addresses completely."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":79,"context_line":"     In this case, the segment and IP address of the new port will be set when"},{"line_number":80,"context_line":"     the new port is bound to the compute host.  Since the port was unbound to"},{"line_number":81,"context_line":"     begin with, there should be no restriction."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_1cbd2b68","line":78,"in_reply_to":"1a122d0e_c423fabb","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":90,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":93,"context_line":"     In this case, the segment of the new port must match that of the existing"},{"line_number":94,"context_line":"     ports.  If not, adding the port to the instance should fail."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_d912ef08","line":94,"range":{"start_line":93,"start_character":5,"end_line":94,"end_character":11},"updated":"2016-04-24 19:31:18.000000000","message":"OK, goes back to my previous question.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":93,"context_line":"     In this case, the segment of the new port must match that of the existing"},{"line_number":94,"context_line":"     ports.  If not, adding the port to the instance should fail."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_fed95ef4","line":94,"range":{"start_line":93,"start_character":5,"end_line":94,"end_character":11},"in_reply_to":"1a122d0e_d912ef08","updated":"2016-04-26 21:13:37.000000000","message":"What about if I want some host having multiple segments ?","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":90,"context_line":"   instance on a compute host belonging to the corresponding aggregate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"   - A similar use case is to add an additional port to an existing instance."},{"line_number":93,"context_line":"     In this case, the segment of the new port must match that of the existing"},{"line_number":94,"context_line":"     ports.  If not, adding the port to the instance should fail."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_9c55bb51","line":94,"range":{"start_line":93,"start_character":5,"end_line":94,"end_character":11},"in_reply_to":"1a122d0e_fed95ef4","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":93,"context_line":"     In this case, the segment of the new port must match that of the existing"},{"line_number":94,"context_line":"     ports.  If not, adding the port to the instance should fail."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_79047bbf","line":96,"updated":"2016-04-24 19:31:18.000000000","message":"Is this also how the auto-allocated-topology case is going to work?","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":93,"context_line":"     In this case, the segment of the new port must match that of the existing"},{"line_number":94,"context_line":"     ports.  If not, adding the port to the instance should fail."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":97,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dc1d73bf","line":96,"in_reply_to":"1a122d0e_79047bbf","updated":"2016-04-27 15:37:12.000000000","message":"Yes.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_59ffffa9","line":101,"range":{"start_line":101,"start_character":18,"end_line":101,"end_character":31},"updated":"2016-04-24 19:31:18.000000000","message":"I expect this is the same for rebuild/evacuate.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dee582a4","line":101,"range":{"start_line":101,"start_character":18,"end_line":101,"end_character":31},"in_reply_to":"1a122d0e_59ffffa9","updated":"2016-04-26 21:13:37.000000000","message":"I\u0027d say \"any move operation calling out the scheduler\". That leaves evacuate and live-mig as specific cases because they can bypass the scheduler.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":99,"context_line":"   will work pretty much the same as it does today."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"#. An instance is live-migrated to another host.  In this case, the port"},{"line_number":102,"context_line":"   already has an IP address.  That IP address is only viable in the same"},{"line_number":103,"context_line":"   segment.  The scheduler must only consider target hosts that belong to the"},{"line_number":104,"context_line":"   same segment (or aggregate)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dc4613bf","line":101,"range":{"start_line":101,"start_character":18,"end_line":101,"end_character":31},"in_reply_to":"1a122d0e_dee582a4","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_b92c534b","line":114,"range":{"start_line":114,"start_character":33,"end_line":114,"end_character":64},"updated":"2016-04-24 19:31:18.000000000","message":"Just to confirm my understanding, no segment on the port means the deployment isn\u0027t using routed networks and it\u0027s the same as how things work today?","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":113,"context_line":"of the port.  In those details, Neutron will include the segment_id of the"},{"line_number":114,"context_line":"port if it is bound to a segment or None if there is no segment."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Proposed change"},{"line_number":117,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_1c908b42","line":114,"range":{"start_line":114,"start_character":33,"end_line":114,"end_character":64},"in_reply_to":"1a122d0e_b92c534b","updated":"2016-04-27 15:37:12.000000000","message":"None in this case means that the port isn\u0027t yet bound and so it doesn\u0027t really have a segment.  When port binding occurs, it will get an IP address and a segment.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Note, as this discussion has progressed, I think we\u0027ve converged on something"},{"line_number":120,"context_line":"that may not require any further change in Nova beyond the scheduler work"},{"line_number":121,"context_line":"already being planned by the scheduler team.  Is that true?  If so, what should"},{"line_number":122,"context_line":"we do with this spec?  I\u0027d like to have somewhere to record agreement that what"},{"line_number":123,"context_line":"I propose below will work.  Actually, what I really need to know is that my"},{"line_number":124,"context_line":"assumptions about when Nova will create an allocation for an IP address are"},{"line_number":125,"context_line":"correct."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_fe75deca","line":123,"range":{"start_line":122,"start_character":23,"end_line":123,"end_character":28},"updated":"2016-04-26 21:13:37.000000000","message":"that\u0027s a backlog spec, so I think it\u0027s okay to not really need a proposal, just a consensus.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Note, as this discussion has progressed, I think we\u0027ve converged on something"},{"line_number":120,"context_line":"that may not require any further change in Nova beyond the scheduler work"},{"line_number":121,"context_line":"already being planned by the scheduler team.  Is that true?  If so, what should"},{"line_number":122,"context_line":"we do with this spec?  I\u0027d like to have somewhere to record agreement that what"},{"line_number":123,"context_line":"I propose below will work.  Actually, what I really need to know is that my"},{"line_number":124,"context_line":"assumptions about when Nova will create an allocation for an IP address are"},{"line_number":125,"context_line":"correct."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_1cbb6be6","line":123,"range":{"start_line":122,"start_character":23,"end_line":123,"end_character":28},"in_reply_to":"1a122d0e_fe75deca","updated":"2016-04-27 15:37:12.000000000","message":"This isn\u0027t really relevant anymore actually since my assumptions about Nova creating allocations were not correct and there is some work to do in Nova.  I\u0027ll take this paragraph out of the next revision.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"We\u0027re making the assumption that a host can appear in any number of aggregates."},{"line_number":137,"context_line":"This was questioned and then confirmed so I thought I\u0027d state it here"},{"line_number":138,"context_line":"explicitly.  I think aggregates would be insane if this weren\u0027t true."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_bfb8052c","line":138,"updated":"2016-04-21 18:05:03.000000000","message":"That is true for aggregates, yes.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"We\u0027re making the assumption that a host can appear in any number of aggregates."},{"line_number":137,"context_line":"This was questioned and then confirmed so I thought I\u0027d state it here"},{"line_number":138,"context_line":"explicitly.  I think aggregates would be insane if this weren\u0027t true."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_d5b1cbe1","line":138,"in_reply_to":"1a122d0e_9e966aee","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"We\u0027re making the assumption that a host can appear in any number of aggregates."},{"line_number":137,"context_line":"This was questioned and then confirmed so I thought I\u0027d state it here"},{"line_number":138,"context_line":"explicitly.  I think aggregates would be insane if this weren\u0027t true."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_9e966aee","line":138,"in_reply_to":"1a122d0e_bfb8052c","updated":"2016-04-26 21:13:37.000000000","message":"We can remove that paragraph honestly.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"This was questioned and then confirmed so I thought I\u0027d state it here"},{"line_number":138,"context_line":"explicitly.  I think aggregates would be insane if this weren\u0027t true."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"},{"line_number":142,"context_line":"and a host can belong to one segment from each of the networks.  This is much"},{"line_number":143,"context_line":"like today, hosts can touch more than one network.  Internally, it has multiple"},{"line_number":144,"context_line":"bridges representing them."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_34bf77ab","line":141,"range":{"start_line":140,"start_character":0,"end_line":141,"end_character":33},"updated":"2016-04-26 21:13:37.000000000","message":"I\u0027m confused like Matt now. TBH, I don\u0027t see a problem with an host having 2 segments.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":137,"context_line":"This was questioned and then confirmed so I thought I\u0027d state it here"},{"line_number":138,"context_line":"explicitly.  I think aggregates would be insane if this weren\u0027t true."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"},{"line_number":142,"context_line":"and a host can belong to one segment from each of the networks.  This is much"},{"line_number":143,"context_line":"like today, hosts can touch more than one network.  Internally, it has multiple"},{"line_number":144,"context_line":"bridges representing them."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dce4533d","line":141,"range":{"start_line":140,"start_character":0,"end_line":141,"end_character":33},"in_reply_to":"1a122d0e_34bf77ab","updated":"2016-04-27 15:37:12.000000000","message":"Fair enough.  I\u0027ll take this stuff out.  It is actually just complicating the spec.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"We\u0027ll make a simplifying assumption at first that a host can only belong to a"},{"line_number":141,"context_line":"single segment within a network.  However, there may be more than one network"},{"line_number":142,"context_line":"and a host can belong to one segment from each of the networks.  This is much"},{"line_number":143,"context_line":"like today, hosts can touch more than one network.  Internally, it has multiple"},{"line_number":144,"context_line":"bridges representing them."},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_3e8e36d0","line":142,"range":{"start_line":142,"start_character":4,"end_line":142,"end_character":63},"updated":"2016-04-26 21:13:37.000000000","message":"I agree with that sentence (see the discussion above)","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"like today, hosts can touch more than one network.  Internally, it has multiple"},{"line_number":144,"context_line":"bridges representing them."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Next, we create a resource_pool for each of the segments.  The pool has a"},{"line_number":147,"context_line":"resource class (e.g. \"IPV4_ADDRESS\" or \"IPV6_ADDRESS\") in common with other"},{"line_number":148,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":149,"context_line":"by setting the UUID of the resource pool equal to the UUID of the segment in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_14d35b05","line":146,"range":{"start_line":146,"start_character":6,"end_line":146,"end_character":15},"updated":"2016-04-26 21:13:37.000000000","message":"who is \"we\" ? Should that be something we should document for operators wanting that, or should it be something done elsewhere, by example Neutron using the novaclient?","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":143,"context_line":"like today, hosts can touch more than one network.  Internally, it has multiple"},{"line_number":144,"context_line":"bridges representing them."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Next, we create a resource_pool for each of the segments.  The pool has a"},{"line_number":147,"context_line":"resource class (e.g. \"IPV4_ADDRESS\" or \"IPV6_ADDRESS\") in common with other"},{"line_number":148,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":149,"context_line":"by setting the UUID of the resource pool equal to the UUID of the segment in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_b5040f7e","line":146,"range":{"start_line":146,"start_character":6,"end_line":146,"end_character":15},"in_reply_to":"1a122d0e_14d35b05","updated":"2016-04-27 15:37:12.000000000","message":"I imagined that it would be Neutron using the nova client.  I can clarify.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"__ resource-providers-spec_"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":164,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":165,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":166,"context_line":"this use case."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":169,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_59ed3fee","line":166,"range":{"start_line":163,"start_character":0,"end_line":166,"end_character":14},"updated":"2016-04-24 19:31:18.000000000","message":"I\u0027m missing something here, is Neutron calling back to Nova to update this information, or is Nova calling Neutron to get this information and update it\u0027s allocation table, i.e. user does subnet-update in Neutron which sends an event or REST API call to Nova to update it\u0027s allocations for that resource pool?","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"__ resource-providers-spec_"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":164,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":165,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":166,"context_line":"this use case."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":169,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_9c42db3c","line":166,"range":{"start_line":163,"start_character":0,"end_line":166,"end_character":14},"in_reply_to":"1a122d0e_59725f4a","updated":"2016-04-27 15:37:12.000000000","message":"Glad you worked it out.  I\u0027ll update a little bit to make it clear.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3a50d3b32df4fffa5572626c9b9d55bdde9307b","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"__ resource-providers-spec_"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Neutron will set \"total\" to the size of the allocation pool(s) on the subnets."},{"line_number":164,"context_line":"This will remain mostly static but could change if the allocation pool is"},{"line_number":165,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":166,"context_line":"this use case."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":169,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_59725f4a","line":166,"range":{"start_line":163,"start_character":0,"end_line":166,"end_character":14},"in_reply_to":"1a122d0e_59ed3fee","updated":"2016-04-24 19:40:22.000000000","message":"Nevermind, just read the generic-resource-pools spec. So the Neutron service user calls the REST API on the Nova scheduler to update this information. OK.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":166,"context_line":"this use case."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":169,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"},{"line_number":170,"context_line":"ports, DHCP ports and other non-Nova ports.  It also includes ports for Nova"},{"line_number":171,"context_line":"instances which are given to Nova with IP addresses already allocated.  It will"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_74cd6f30","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":7},"updated":"2016-04-26 21:13:37.000000000","message":"I guess my question (about who is \"we\") above is clarified, that\u0027s neutron which calls out Nova, not an operator setting those fields.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":165,"context_line":"updated in a subnet-update call.  The allocation_ratio will always be 1.0 in"},{"line_number":166,"context_line":"this use case."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Neutron should set reserved to the total number of IP addresses which are"},{"line_number":169,"context_line":"consumed outside of Nova\u0027s purview.  This includes IP addresses used on router"},{"line_number":170,"context_line":"ports, DHCP ports and other non-Nova ports.  It also includes ports for Nova"},{"line_number":171,"context_line":"instances which are given to Nova with IP addresses already allocated.  It will"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_55ec9bba","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":7},"in_reply_to":"1a122d0e_74cd6f30","updated":"2016-04-27 15:37:12.000000000","message":"Right.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"ports, DHCP ports and other non-Nova ports.  It also includes ports for Nova"},{"line_number":171,"context_line":"instances which are given to Nova with IP addresses already allocated.  It will"},{"line_number":172,"context_line":"only include such IPs which fall in the allocation_pool(s) on the subnet(s)"},{"line_number":173,"context_line":"attached to the segment.  This is easy for Neutron to calculate."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The allocations table is linked through the same resource_providers table.  It"},{"line_number":176,"context_line":"has a \"used\" field on it indicating how many IP addresses are consumed.   It"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_dfd3415e","line":173,"updated":"2016-04-21 18:05:03.000000000","message":"This should be just reduced to \"overhead stuff like network, broadcast, dhcp, dns, etc\"","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":170,"context_line":"ports, DHCP ports and other non-Nova ports.  It also includes ports for Nova"},{"line_number":171,"context_line":"instances which are given to Nova with IP addresses already allocated.  It will"},{"line_number":172,"context_line":"only include such IPs which fall in the allocation_pool(s) on the subnet(s)"},{"line_number":173,"context_line":"attached to the segment.  This is easy for Neutron to calculate."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The allocations table is linked through the same resource_providers table.  It"},{"line_number":176,"context_line":"has a \"used\" field on it indicating how many IP addresses are consumed.   It"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_f9c161e5","line":173,"in_reply_to":"1a122d0e_dfd3415e","updated":"2016-04-27 15:37:12.000000000","message":"I\u0027ll shorten this.  I\u0027m going to a little bit about allocation pools just as a note to myself that Neutron needs to make a distinction.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"will have one row for each consumer."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"The \"capacity\" -- derived as shown above -- should conceptually include one IP"},{"line_number":180,"context_line":"address for every time the Nova scheduler could create an entry in its"},{"line_number":181,"context_line":"allocations table.  When the sum of the allocations is equal to \"capacity\" then"},{"line_number":182,"context_line":"the resource will be considered exhausted from Nova\u0027s point of view.  The"},{"line_number":183,"context_line":"scheduler will no longer place hosts inside such an aggregate."},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_3215c7e4","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":17},"updated":"2016-04-26 21:13:37.000000000","message":"That\u0027s currently not yet a consensus. You should just explain \"every time Nova sets an allocation entry\" IMHO.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":177,"context_line":"will have one row for each consumer."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"The \"capacity\" -- derived as shown above -- should conceptually include one IP"},{"line_number":180,"context_line":"address for every time the Nova scheduler could create an entry in its"},{"line_number":181,"context_line":"allocations table.  When the sum of the allocations is equal to \"capacity\" then"},{"line_number":182,"context_line":"the resource will be considered exhausted from Nova\u0027s point of view.  The"},{"line_number":183,"context_line":"scheduler will no longer place hosts inside such an aggregate."},{"line_number":184,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_39a11947","line":181,"range":{"start_line":180,"start_character":23,"end_line":181,"end_character":17},"in_reply_to":"1a122d0e_3215c7e4","updated":"2016-04-27 15:37:12.000000000","message":"I\u0027m not sure I understand the distinction.  I\u0027ll try to clarify.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":194,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":195,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":196,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":197,"context_line":"   first place."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":200,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_9fba6909","line":197,"updated":"2016-04-21 18:05:03.000000000","message":"Remove this.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"217654916ec4764005430258fab94f890dfc61d9","unresolved":false,"context_lines":[{"line_number":194,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":195,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":196,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":197,"context_line":"   first place."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":200,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_d296133d","line":197,"in_reply_to":"1a122d0e_9fba6909","updated":"2016-04-26 21:13:37.000000000","message":"Agreed, tbc, that\u0027s Neutron driving the reserved field, Nova just uses the allocation table.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":194,"context_line":"   should be counted as part of the \"reserved\" addresses in the pool.  Given"},{"line_number":195,"context_line":"   this, I wouldn\u0027t expect Nova to create a row in the allocations table to"},{"line_number":196,"context_line":"   consume this IP because it was not available for consumption by Nova in the"},{"line_number":197,"context_line":"   first place."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"#. If I give Nova a port with no IP address, I wouldn\u0027t expect to count that"},{"line_number":200,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_55001b02","line":197,"in_reply_to":"1a122d0e_d296133d","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":200,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"},{"line_number":201,"context_line":"   resource pool to reserve it in.  I\u0027d then expect Nova to create a row in the"},{"line_number":202,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":203,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Basically, Nova needs to create an allocation *unless* it was given a port that"},{"line_number":206,"context_line":"already had an IP address."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_3faa3586","line":203,"updated":"2016-04-21 18:05:03.000000000","message":"This will happen after scheduling at claim time (as it currently is on the compute node). It can be the same for either case where we came with an allocated port or not, and simply communicates to nova that the allocation has been made from the pool so the math works out.\n\nLater, we can move normal allocation to before the scheduler as necessary, and then provide any available binding information to the scheduler so it can make an informed decision during the scheduling phase. After the scheduling part has completed (either in conductor or compute) we finish binding the port with neutron, if necessary. On success, we write the allocation to our table.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":200,"context_line":"   port in \"reserved\" because it has no IP address and we wouldn\u0027t know which"},{"line_number":201,"context_line":"   resource pool to reserve it in.  I\u0027d then expect Nova to create a row in the"},{"line_number":202,"context_line":"   allocations table to consume the IP address it gets when the port is bound"},{"line_number":203,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Basically, Nova needs to create an allocation *unless* it was given a port that"},{"line_number":206,"context_line":"already had an IP address."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_3928f932","line":203,"in_reply_to":"1a122d0e_3faa3586","updated":"2016-04-27 15:37:12.000000000","message":"I attempted to rewrite this.  I should\u0027ve done it immediately after our call last week but I didn\u0027t.  Hopefully, my understanding is still good.  I used as much of your wording as possible so hopefully I get it right.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Basically, Nova needs to create an allocation *unless* it was given a port that"},{"line_number":206,"context_line":"already had an IP address."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Neutron can identify which ports to count in the reserved field by how the IP"},{"line_number":209,"context_line":"was assigned.  If the IP was assigned in a port create or update call that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_1faf7995","line":206,"updated":"2016-04-21 18:05:03.000000000","message":"Not this.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f386dc9dfb547d2aeebaebba3dd42dd553b53657","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Basically, Nova needs to create an allocation *unless* it was given a port that"},{"line_number":206,"context_line":"already had an IP address."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Neutron can identify which ports to count in the reserved field by how the IP"},{"line_number":209,"context_line":"was assigned.  If the IP was assigned in a port create or update call that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_f9b40bf3","line":206,"in_reply_to":"1a122d0e_1faf7995","updated":"2016-04-24 19:31:18.000000000","message":"Nova wants to always be tracking the allocation regardless of whether or not the port came to nova with an IP address already or not. Otherwise we\u0027re going to have some special case weirdness in Nova I\u0027d think which we want to avoid.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   to a host.  If it didn\u0027t, we could have a race to consume that IP."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Basically, Nova needs to create an allocation *unless* it was given a port that"},{"line_number":206,"context_line":"already had an IP address."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Neutron can identify which ports to count in the reserved field by how the IP"},{"line_number":209,"context_line":"was assigned.  If the IP was assigned in a port create or update call that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_75039710","line":206,"in_reply_to":"1a122d0e_f9b40bf3","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe13e16c7a683a85af7de98a06f1ea2285da75c9","unresolved":false,"context_lines":[{"line_number":209,"context_line":"was assigned.  If the IP was assigned in a port create or update call that"},{"line_number":210,"context_line":"carried host binding information, then Nova would have created an allocation"},{"line_number":211,"context_line":"for it.  Otherwise, it wouldn\u0027t have."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Alternatives"},{"line_number":214,"context_line":"------------"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_bf9e4561","line":212,"updated":"2016-04-21 18:05:03.000000000","message":"Or this.","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b6d064a20ee8477becd52f05159d753bbd0ea73","unresolved":false,"context_lines":[{"line_number":209,"context_line":"was assigned.  If the IP was assigned in a port create or update call that"},{"line_number":210,"context_line":"carried host binding information, then Nova would have created an allocation"},{"line_number":211,"context_line":"for it.  Otherwise, it wouldn\u0027t have."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Alternatives"},{"line_number":214,"context_line":"------------"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a122d0e_150a2326","line":212,"in_reply_to":"1a122d0e_bf9e4561","updated":"2016-04-27 15:37:12.000000000","message":"Done","commit_id":"ee36ba75ca2551fa3f03bb929fae654317d1f9b5"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"c45bc918172a5294c59c550cd0558d3fada6b9ec","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Problem description"},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"`Neutron has a spec`__ under active review for how this will be handled in"},{"line_number":29,"context_line":"Neutron.  Each L2 network is referred to as a segment.  Other terminology is in"},{"line_number":30,"context_line":"discussion in the spec."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1a122d0e_8d73c77f","line":28,"updated":"2016-04-27 16:43:58.000000000","message":"Now merged :-)","commit_id":"c1d827f53c3ae4ef176c8d294998860102b0721e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"29f60fd3875a8a19bc6b933058482ed43a2a59b1","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"The \"capacity\" -- derived as shown above -- includes IP addresses available to"},{"line_number":165,"context_line":"Nova.  When the sum of the allocations is equal to \"capacity\" then the resource"},{"line_number":166,"context_line":"will be considered exhausted from Nova\u0027s point of view.  The scheduler should no"},{"line_number":167,"context_line":"longer place hosts inside such an aggregate."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"There can be a race to consume IP resources for any given segment.  In current"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1a122d0e_421df960","line":166,"range":{"start_line":166,"start_character":79,"end_line":166,"end_character":80},"updated":"2016-04-27 19:24:52.000000000","message":"Oops, column 80 here.","commit_id":"c1d827f53c3ae4ef176c8d294998860102b0721e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In the following use cases, there is an assumption that all segments in Neutron"},{"line_number":64,"context_line":"can be associated with one or more aggregates in Nova via the `proposed new`__"},{"line_number":65,"context_line":"`nova resource-pool-create` and `nova resource-pool-associated-aggregate`"},{"line_number":66,"context_line":"command and REST API."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"__ generic-resource-pools_"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_379d770a","line":65,"updated":"2016-05-17 16:53:23.000000000","message":"The generic resource pools spec was changed to refer to the OSC instead of nova CLI. So the above should be:\n\n `openstack resource-pool create` and `openstack resource-pool add aggregate`","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In the following use cases, there is an assumption that all segments in Neutron"},{"line_number":64,"context_line":"can be associated with one or more aggregates in Nova via the `proposed new`__"},{"line_number":65,"context_line":"`nova resource-pool-create` and `nova resource-pool-associated-aggregate`"},{"line_number":66,"context_line":"command and REST API."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"__ generic-resource-pools_"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_9b86fc62","line":65,"in_reply_to":"dab17558_379d770a","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"90c7b8c8d5d88e7c63c40620c50412cd8a1cc7ae","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"__ generic-resource-pools_"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. User has a port without a binding to a segment and provides it to nova boot."},{"line_number":71,"context_line":"   Such a port will not have an IP address until after the scheduler places the"},{"line_number":72,"context_line":"   instance and the port gets bound to that host.  Then, Neutron can assign an"},{"line_number":73,"context_line":"   IP address from a segment which that compute host can reach."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   In this use case, the scheduler must take into consideration the"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_4f221253","line":72,"range":{"start_line":70,"start_character":3,"end_line":72,"end_character":49},"updated":"2016-05-17 21:30:10.000000000","message":"This fails today without this change, right?\n\nhttps://review.openstack.org/#/c/299591","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"     to the instance\u0027s host.  If not, adding the port to the instance should"},{"line_number":96,"context_line":"     fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":99,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":100,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":101,"context_line":"   will work pretty much the same as it does today."}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_38ac3bec","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":47},"updated":"2016-05-17 20:37:43.000000000","message":"Is this network not in a segment and thus should be checked to see if it\u0027s an aggregate that\u0027s in a resource pool which would be used by the nova scheduler?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":95,"context_line":"     to the instance\u0027s host.  If not, adding the port to the instance should"},{"line_number":96,"context_line":"     fail."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"#. User calls Nova boot and passes a network id.  The Nova scheduler will place"},{"line_number":99,"context_line":"   the instance and then call Neutron to create a port.  Neutron will use the"},{"line_number":100,"context_line":"   host binding to set the segment and allocate the IP.  I expect this scenario"},{"line_number":101,"context_line":"   will work pretty much the same as it does today."}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_fb23c855","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":47},"in_reply_to":"dab17558_38ac3bec","updated":"2016-05-18 00:31:33.000000000","message":"The segments won\u0027t generally be visible to users.  Networks are composed of segments and it is still the higher level network that users will see.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d3ba1908a3e1378ffd1bac90d3bb16c55454303","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"  nova boot --nic port_id\u003d$PORT_ID"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"To distinguish, I expect Nova will make a call to Neutron to show the details"},{"line_number":115,"context_line":"of the port.  In those details, Neutron will include the segment_id of the each"},{"line_number":116,"context_line":"fixed_ip on the port if it is bound to a segment or None if late binding is"},{"line_number":117,"context_line":"being used and the segment isn\u0027t yet known."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Proposed change"},{"line_number":120,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_afba9ebd","line":117,"range":{"start_line":114,"start_character":0,"end_line":117,"end_character":43},"updated":"2016-05-17 21:31:53.000000000","message":"Does this allow us to avoid checking a new attribute on the port to see if binding is deferred, which we talked about in IRC?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":133,"context_line":"resource pools but each pool is specific to a segment id.  The linkage is set"},{"line_number":134,"context_line":"by setting the UUID of the resource pool equal to the UUID of the segment in"},{"line_number":135,"context_line":"Neutron.  These resource pools are linked to the host aggregates through the"},{"line_number":136,"context_line":"resource_provider_aggregates table."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":139,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_17a03341","line":136,"updated":"2016-05-17 16:53:23.000000000","message":"++ Exactly correct.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":139,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"},{"line_number":140,"context_line":"to a resource_pool through the resource_providers table.  Basically, these"},{"line_number":141,"context_line":"fields together give the number of IP addresses available for allocation in"},{"line_number":142,"context_line":"Nova (its capacity from Nova\u0027s point of view)::"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_778b7fc3","line":140,"updated":"2016-05-17 16:53:23.000000000","message":"Technically, there is no resource_pools table. There is only a resource_providers table :) I think that actually this doesn\u0027t need to get into that level of detail though. Just saying that the resource pool has a record in an inventories table for each resource class it has some capacity for and zero or more records in an allocations table representing consumers of that class of resource.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"The next `spec about resource providers`__ adds schema for \"total\" and"},{"line_number":139,"context_line":"\"reserved\" fields in the inventories table.  The inventories table is linked to"},{"line_number":140,"context_line":"to a resource_pool through the resource_providers table.  Basically, these"},{"line_number":141,"context_line":"fields together give the number of IP addresses available for allocation in"},{"line_number":142,"context_line":"Nova (its capacity from Nova\u0027s point of view)::"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_36dd67e0","line":140,"in_reply_to":"dab17558_778b7fc3","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"The allocations table is linked through the same resource_providers table.  It"},{"line_number":160,"context_line":"has a \"used\" field on it indicating how many IP addresses are consumed.   It"},{"line_number":161,"context_line":"will have one row for each consumer."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"The \"capacity\" -- derived as shown above -- includes IP addresses available to"},{"line_number":164,"context_line":"Nova.  When the sum of the allocations is equal to \"capacity\" then the resource"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_57863bb9","line":161,"updated":"2016-05-17 16:53:23.000000000","message":"Correct.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":163,"context_line":"The \"capacity\" -- derived as shown above -- includes IP addresses available to"},{"line_number":164,"context_line":"Nova.  When the sum of the allocations is equal to \"capacity\" then the resource"},{"line_number":165,"context_line":"will be considered exhausted from Nova\u0027s point of view.  The scheduler should"},{"line_number":166,"context_line":"no longer place hosts inside such an aggregate."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"There can be a race to consume IP resources for any given segment.  In current"},{"line_number":169,"context_line":"Nova, the claim is made on the compute node after scheduling is done.   This"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_b79167f3","line":166,"updated":"2016-05-17 16:53:23.000000000","message":"++","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a339aa1ab2331e277d19b1669e74e5fee1e5bc14","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  any available binding information to the scheduler so it can make an"},{"line_number":180,"context_line":"  informed decision during the scheduling phase.  For example, if the port has"},{"line_number":181,"context_line":"  an IP address already, that IP address must be used on the right segment"},{"line_number":182,"context_line":"  which limits the set of hosts that can be considered by the scheduler."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"- After the scheduling part has completed Nova finishes binding the port with"},{"line_number":185,"context_line":"  neutron, if necessary.  On success, Nova writes the allocation to its table."}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_978c23d8","line":182,"updated":"2016-05-17 16:53:23.000000000","message":"The above is John G\u0027s spec for pre-allocating-before-scheduling. ++","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  any available binding information to the scheduler so it can make an"},{"line_number":180,"context_line":"  informed decision during the scheduling phase.  For example, if the port has"},{"line_number":181,"context_line":"  an IP address already, that IP address must be used on the right segment"},{"line_number":182,"context_line":"  which limits the set of hosts that can be considered by the scheduler."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"- After the scheduling part has completed Nova finishes binding the port with"},{"line_number":185,"context_line":"  neutron, if necessary.  On success, Nova writes the allocation to its table."}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_9d043918","line":182,"in_reply_to":"dab17558_978c23d8","updated":"2016-05-17 20:37:43.000000000","message":"Yar: https://review.openstack.org/#/c/313001/","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Alternatives"},{"line_number":190,"context_line":"------------"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"TODO"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Data model impact"},{"line_number":195,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_5815bf3d","line":192,"updated":"2016-05-17 20:37:43.000000000","message":"None?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Alternatives"},{"line_number":190,"context_line":"------------"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"TODO"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Data model impact"},{"line_number":195,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_05e62baf","line":192,"in_reply_to":"dab17558_5815bf3d","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"Data model impact"},{"line_number":195,"context_line":"-----------------"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"TODO"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"REST API impact"},{"line_number":200,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_b82aeb7b","line":197,"updated":"2016-05-17 20:37:43.000000000","message":"None.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":194,"context_line":"Data model impact"},{"line_number":195,"context_line":"-----------------"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"TODO"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"REST API impact"},{"line_number":200,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_e5e8477d","line":197,"in_reply_to":"dab17558_b82aeb7b","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"REST API impact"},{"line_number":200,"context_line":"---------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"TODO"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Security impact"},{"line_number":205,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_f820f39b","line":202,"updated":"2016-05-17 20:37:43.000000000","message":"I think this is None.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"REST API impact"},{"line_number":200,"context_line":"---------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"TODO"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Security impact"},{"line_number":205,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_4504b348","line":202,"in_reply_to":"dab17558_f820f39b","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Security impact"},{"line_number":205,"context_line":"---------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"TODO"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Notifications impact"},{"line_number":210,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_583c9fc7","line":207,"updated":"2016-05-17 20:37:43.000000000","message":"None?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":204,"context_line":"Security impact"},{"line_number":205,"context_line":"---------------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"TODO"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Notifications impact"},{"line_number":210,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_25ffef34","line":207,"in_reply_to":"dab17558_583c9fc7","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"Notifications impact"},{"line_number":210,"context_line":"--------------------"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"TODO"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Other end user impact"},{"line_number":215,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_b8514b10","line":212,"updated":"2016-05-17 20:37:43.000000000","message":"I think None, at least as far as this spec is concerned. The generic resource pools spec has some notification stuff in it, but this just uses that.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":214,"context_line":"Other end user impact"},{"line_number":215,"context_line":"---------------------"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"TODO"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Performance Impact"},{"line_number":220,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_1855f7f8","line":217,"updated":"2016-05-17 20:37:43.000000000","message":"?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"Other end user impact"},{"line_number":215,"context_line":"---------------------"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"TODO"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Performance Impact"},{"line_number":220,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_65f5774f","line":217,"in_reply_to":"dab17558_1855f7f8","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"Performance Impact"},{"line_number":220,"context_line":"------------------"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"TODO"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Other deployer impact"},{"line_number":225,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_586adfb3","line":222,"updated":"2016-05-17 20:37:43.000000000","message":"As noted in John\u0027s spec, there are going to be extra calls to Neutron before scheduling when a port is provided, which will have some overhead.\n\nhttps://review.openstack.org/#/c/313001/","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":219,"context_line":"Performance Impact"},{"line_number":220,"context_line":"------------------"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"TODO"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Other deployer impact"},{"line_number":225,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_c596e3ee","line":222,"in_reply_to":"dab17558_586adfb3","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Other deployer impact"},{"line_number":225,"context_line":"---------------------"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"TODO"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Developer impact"},{"line_number":230,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_78e08326","line":227,"updated":"2016-05-17 20:37:43.000000000","message":"What kind of upgrade hand-holding is going to be required between nova and neutron to make this come together? Nova will need to be deployed with the placement API endpoint from the generic-resource-pools spec, and Neutron will need to be upgraded to use that. If Neutron is upgraded before Nova and the placement API isn\u0027t available, things just get a bit explodey on the Neutron side.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":224,"context_line":"Other deployer impact"},{"line_number":225,"context_line":"---------------------"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"TODO"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Developer impact"},{"line_number":230,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_761ecfbb","line":227,"in_reply_to":"dab17558_78e08326","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":229,"context_line":"Developer impact"},{"line_number":230,"context_line":"----------------"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"TODO"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_b8d4ab46","line":232,"updated":"2016-05-17 20:37:43.000000000","message":"I think None.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":229,"context_line":"Developer impact"},{"line_number":230,"context_line":"----------------"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"TODO"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_0210e157","line":232,"in_reply_to":"dab17558_b8d4ab46","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"Assignee(s)"},{"line_number":239,"context_line":"-----------"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"TODO"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Work Items"},{"line_number":244,"context_line":"----------"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"TODO"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_98bc4707","line":246,"range":{"start_line":241,"start_character":0,"end_line":246,"end_character":4},"updated":"2016-05-17 20:37:43.000000000","message":"?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"__ neutron-spec_"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"This also depends on adding the `concept of resource providers`__ to Nova which"},{"line_number":259,"context_line":"is currently under discussion within the scheduler subteam."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"__ resource-providers-spec_"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_f841130b","line":259,"range":{"start_line":258,"start_character":74,"end_line":259,"end_character":59},"updated":"2016-05-17 20:37:43.000000000","message":"Already merged.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"__ neutron-spec_"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"This also depends on adding the `concept of resource providers`__ to Nova which"},{"line_number":259,"context_line":"is currently under discussion within the scheduler subteam."},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"__ resource-providers-spec_"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_a5991f21","line":259,"range":{"start_line":258,"start_character":74,"end_line":259,"end_character":59},"in_reply_to":"dab17558_f841130b","updated":"2016-05-18 00:31:33.000000000","message":"Done","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Testing"},{"line_number":265,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"TODO"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_584dbf3c","line":267,"updated":"2016-05-17 20:37:43.000000000","message":"?","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Testing"},{"line_number":265,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"TODO"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_f680ffc0","line":267,"in_reply_to":"dab17558_584dbf3c","updated":"2016-05-18 00:31:33.000000000","message":"Still thinking.  I\u0027m going to post a new version for input.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0509bcb1ff427771f3e05c910164d6187254107d","unresolved":false,"context_lines":[{"line_number":270,"context_line":"Documentation Impact"},{"line_number":271,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"TODO"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_58749f66","line":273,"updated":"2016-05-17 20:37:43.000000000","message":"Operators guide / deployment docs would need to be updated for this to all fit together.","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aad56d62d0911b2c742b2415cf3c51b06002eae4","unresolved":false,"context_lines":[{"line_number":270,"context_line":"Documentation Impact"},{"line_number":271,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"TODO"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dab17558_366f272c","line":273,"in_reply_to":"dab17558_58749f66","updated":"2016-05-18 00:31:33.000000000","message":"ditto","commit_id":"9ee279824778bbcf3a233901463beec93ef34a35"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"e334fd6bf6e5b1fafdcba5cb2a953ef7787a6e56","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":3,"context_line":" License."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"dab17558_767fefaa","line":3,"updated":"2016-05-18 00:37:54.000000000","message":"Should this spec be moved to specs/newton/approved/neutron-routed-networks.rst?","commit_id":"dab8bc52c6bea46d63f57379e7cb99ca1f816ab0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7af4927c8ca68575488b99e8ef8c52f2b218af04","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The next `spec about resource providers`__ adds resource pools.  The resource"},{"line_number":128,"context_line":"pool has a record in an inventories table for IPs as a resource class.  It"},{"line_number":129,"context_line":"effectively gives the capacity of the pool from Nova\u0027s perspective::"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  capacity \u003d (total - reserved) * allocation_ratio"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"bab6814e_8a13d165","line":129,"updated":"2016-05-19 18:46:12.000000000","message":"Meh, this is OK but a little inaccurate. The resource-providers spec added the inventories and allocations tables while the generic-resource-pools spec added the plumbing to relate a resource provider to multiple aggregates and expose shared resources as inventory records on a pool/provider.","commit_id":"177abe0c65be9a374154ae36c592524d9fb02e0c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1f02f0ea9ae859f59042c8e0c2084ac8daa53b42","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The next `spec about resource providers`__ adds resource pools.  The resource"},{"line_number":128,"context_line":"pool has a record in an inventories table for IPs as a resource class.  It"},{"line_number":129,"context_line":"effectively gives the capacity of the pool from Nova\u0027s perspective::"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  capacity \u003d (total - reserved) * allocation_ratio"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"bab6814e_472a772d","line":129,"in_reply_to":"bab6814e_8a13d165","updated":"2016-05-19 22:03:23.000000000","message":"I\u0027m not going to try to reiterate what each of these specs does.  I lost track a little when the original blew up into about 5 different now ones.  I\u0027ll try to revise a little to avoid including unnecessary and incorrect details.","commit_id":"177abe0c65be9a374154ae36c592524d9fb02e0c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7af4927c8ca68575488b99e8ef8c52f2b218af04","unresolved":false,"context_lines":[{"line_number":317,"context_line":".. _neutron-spec: https://review.openstack.org/#/c/225384/"},{"line_number":318,"context_line":".. _prep-for-network-aware-scheduling: https://review.openstack.org/#/c/313001/"},{"line_number":319,"context_line":".. _resource-providers-spec: https://review.openstack.org/#/c/225546/7/specs/mitaka/approved/resource-providers.rst"},{"line_number":320,"context_line":".. _generic-resource-pools: https://review.openstack.org/#/c/253187/5/specs/mitaka/approved/generic-resource-pools.rst"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":11,"id":"bab6814e_6a166d56","line":320,"updated":"2016-05-19 18:46:12.000000000","message":"Guys, please update the above link. The Newton approved generic resource pools spec is here:\n\nhttps://review.openstack.org/#/c/300176/16/specs/newton/approved/generic-resource-pools.rst","commit_id":"177abe0c65be9a374154ae36c592524d9fb02e0c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1f02f0ea9ae859f59042c8e0c2084ac8daa53b42","unresolved":false,"context_lines":[{"line_number":317,"context_line":".. _neutron-spec: https://review.openstack.org/#/c/225384/"},{"line_number":318,"context_line":".. _prep-for-network-aware-scheduling: https://review.openstack.org/#/c/313001/"},{"line_number":319,"context_line":".. _resource-providers-spec: https://review.openstack.org/#/c/225546/7/specs/mitaka/approved/resource-providers.rst"},{"line_number":320,"context_line":".. _generic-resource-pools: https://review.openstack.org/#/c/253187/5/specs/mitaka/approved/generic-resource-pools.rst"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":11,"id":"bab6814e_873bbf37","line":320,"in_reply_to":"bab6814e_6a166d56","updated":"2016-05-19 22:03:23.000000000","message":"Done","commit_id":"177abe0c65be9a374154ae36c592524d9fb02e0c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"87541a96bb8adc549151285173caf413f4da1e1e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":42,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":43,"context_line":"To avoid it, Neutron needs to be able to leave the IP address unassigned until"},{"line_number":44,"context_line":"after the port is bound to a host."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"A related but much less severe constraint is that of IP availability across"},{"line_number":47,"context_line":"segments.  Some segments might be exhausted and that should be considered by"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bab6814e_5737904c","line":44,"updated":"2016-05-26 16:27:17.000000000","message":"Nit: we will probably still fail the build if the IP is not present after binding the port to the host (i.e. if the binding fails), but its a nit.","commit_id":"5b57bfc5cd0be1448b82668b44094cded6d8af5b"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"a8861c544e507bf2f0d90d1a22018c5d87713497","unresolved":false,"context_lines":[{"line_number":41,"context_line":"scheduler would have to constrain scheduling to that subset.  This is not"},{"line_number":42,"context_line":"ideal.  It is an artificial constraint on the scheduler and is pretty severe."},{"line_number":43,"context_line":"To avoid it, Neutron needs to be able to leave the IP address unassigned until"},{"line_number":44,"context_line":"after the port is bound to a host."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"A related but much less severe constraint is that of IP availability across"},{"line_number":47,"context_line":"segments.  Some segments might be exhausted and that should be considered by"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9abb7d3a_0ef86c7a","line":44,"in_reply_to":"bab6814e_5737904c","updated":"2016-05-31 16:14:23.000000000","message":"We have discussed the possibility of an unaddressed port.  However, that doesn\u0027t need to be included in the scope of this spec.","commit_id":"5b57bfc5cd0be1448b82668b44094cded6d8af5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"87541a96bb8adc549151285173caf413f4da1e1e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"Testing"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"TODO Full unit testing will be done.  Tempest testing?"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bab6814e_02530818","line":297,"updated":"2016-05-26 16:27:17.000000000","message":"We should fill this out.\n\nI think we ideally want to look at a neutron multi-node job that tests out routed networks.","commit_id":"5b57bfc5cd0be1448b82668b44094cded6d8af5b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d91af981cc9d1a9ec2871f43daa50558813f4b88","unresolved":false,"context_lines":[{"line_number":294,"context_line":"Testing"},{"line_number":295,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"TODO Full unit testing will be done.  Tempest testing?"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bab6814e_6c7e3be5","line":297,"in_reply_to":"bab6814e_02530818","updated":"2016-05-26 23:00:20.000000000","message":"Right, please update it.","commit_id":"5b57bfc5cd0be1448b82668b44094cded6d8af5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"87541a96bb8adc549151285173caf413f4da1e1e","unresolved":false,"context_lines":[{"line_number":301,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"TODO Most of the documentation impact will be in the network guide.  What is"},{"line_number":304,"context_line":"needed in the Nova docs?"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bab6814e_e248845e","line":304,"updated":"2016-05-26 16:27:17.000000000","message":"Lets just say update the admin docs?","commit_id":"5b57bfc5cd0be1448b82668b44094cded6d8af5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b0e9c90de82a789ebcab79ba292eacf58847b92a","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"All new functionality will be covered with unit tests.  On the Neutron side,"},{"line_number":305,"context_line":"we\u0027ll be looking to creat a multi-node job which tests out routed networks."},{"line_number":306,"context_line":"It will include tests specifically for the use cases mentioned in this spec."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9abb7d3a_9ee0a1ce","line":306,"updated":"2016-06-02 09:19:39.000000000","message":"I wish this said it would also run on Nova, but it should be easy to add it in the experimental queue / add it into the mix.","commit_id":"b2042327aaf8933a4b747bedd52214097ee77929"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3238c2ac079d7da912b1ac00bc044a7b7b479ae2","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"All new functionality will be covered with unit tests.  On the Neutron side,"},{"line_number":305,"context_line":"we\u0027ll be looking to creat a multi-node job which tests out routed networks."},{"line_number":306,"context_line":"It will include tests specifically for the use cases mentioned in this spec."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9abb7d3a_f4e3b231","line":306,"in_reply_to":"9abb7d3a_9ee0a1ce","updated":"2016-06-02 16:56:47.000000000","message":"I\u0027ll look to run this on Nova too.","commit_id":"b2042327aaf8933a4b747bedd52214097ee77929"}],"specs/newton/approved/neutron-routed-networks.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"caa3efc8cc25ea2941cd982ba9e14c190fcc29df","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Neutron Routed Networks"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/neutron-routed-networks"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In Neutron, there is a priority effort to support routed networks.  A routed"},{"line_number":14,"context_line":"network, in this context, is a physical network infrastructure that implements"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_c925225d","line":11,"updated":"2016-06-03 01:16:35.000000000","message":"This needs to be created so we can approve it and target it for newton.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f66b1a285adbd4146509f9bb077dfdccc76c855c","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  nova boot --nic port_id\u003d$PORT_ID"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Nova will make a call to Neutron to get or create a port and will receive the"},{"line_number":163,"context_line":"details of the port in the response.  In those details, Neutron will include"},{"line_number":164,"context_line":"the segment_id of the each fixed_ip on the port if it is bound to a segment."},{"line_number":165,"context_line":"This segment_id will be used to lookup the resource provider for IP addresses"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_a6456d18","line":162,"range":{"start_line":162,"start_character":40,"end_line":162,"end_character":49},"updated":"2016-06-03 00:48:01.000000000","message":"This doesn\u0027t seem correct if the user is providing a port.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb4f092451323b078294cbc4f174949d6d08c285","unresolved":false,"context_lines":[{"line_number":173,"context_line":"address allocated on port update when host binding information is provided."},{"line_number":174,"context_line":"Ports with \"none\" in ip_allocation are not intended to have an IP address"},{"line_number":175,"context_line":"allocation at all.  It is beyond the scope of this patch to handle ports with"},{"line_number":176,"context_line":"\"none.\""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Alternatives"},{"line_number":179,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_e0b5a27e","line":176,"updated":"2016-06-02 21:42:15.000000000","message":"I\u0027m not exactly sure why nova needs to care about the immediate/deferred thing, as I would expect we\u0027ll just show the details of the port and require an allocation for the segment if it is so bound, regardless. But anyway, I\u0027m sure there\u0027s some detail I\u0027m missing and I was previously pretty caught up on this proposal so I think I\u0027m fine.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e222c1127a7ac38d71e4134ede99ec7dac970067","unresolved":false,"context_lines":[{"line_number":172,"context_line":"allocated on port create.  Ports with \"deferred\" ip_allocation will have an IP"},{"line_number":173,"context_line":"address allocated on port update when host binding information is provided."},{"line_number":174,"context_line":"Ports with \"none\" in ip_allocation are not intended to have an IP address"},{"line_number":175,"context_line":"allocation at all.  It is beyond the scope of this patch to handle ports with"},{"line_number":176,"context_line":"\"none.\""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Alternatives"},{"line_number":179,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_a9809e47","line":176,"range":{"start_line":175,"start_character":20,"end_line":176,"end_character":7},"updated":"2016-06-03 01:15:21.000000000","message":"What should nova do if the ports ip_allocation is \u0027none\u0027? Fail?","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f66b1a285adbd4146509f9bb077dfdccc76c855c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"address allocated on port update when host binding information is provided."},{"line_number":174,"context_line":"Ports with \"none\" in ip_allocation are not intended to have an IP address"},{"line_number":175,"context_line":"allocation at all.  It is beyond the scope of this patch to handle ports with"},{"line_number":176,"context_line":"\"none.\""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Alternatives"},{"line_number":179,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_862b0933","line":176,"in_reply_to":"9abb7d3a_e0b5a27e","updated":"2016-06-03 00:48:01.000000000","message":"There is an explicit check somewhere in the validation code that happens in the API about fixed IPs on the port and would fail if there isn\u0027t a fixed IP, hence the need for the \u0027deferred\u0027 flag for a type check on the port. It\u0027s a workaround for that validation.\n\nI believe it\u0027s this:\n\nhttps://github.com/openstack/nova/blob/a0bedb332c96b363f0fd6acfa81b5937a82244eb/nova/network/neutronv2/api.py#L1119\n\nBecause the port details are a nebulous dict, the nova code can just do something like:\n\nport.get(\u0027ip_allocation\u0027, \u0027immediate\u0027)\n\nHacky but it\u0027s backward compatible at least.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e222c1127a7ac38d71e4134ede99ec7dac970067","unresolved":false,"context_lines":[{"line_number":250,"context_line":"when Nova attempts to create a port and that fails."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Finally, the deferred IP allocation use case will not work because Nova will"},{"line_number":253,"context_line":"refuse to use a port without an IP address until it has been upgraded.  The use"},{"line_number":254,"context_line":"cases that don\u0027t involve deferred IP allocation will work until the above IP"},{"line_number":255,"context_line":"exhaustion problem is encountered."},{"line_number":256,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_4962d2d9","line":253,"updated":"2016-06-03 01:15:21.000000000","message":"Because of the check for port[\u0027ip_allocation\u0027] noted above.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb4f092451323b078294cbc4f174949d6d08c285","unresolved":false,"context_lines":[{"line_number":254,"context_line":"cases that don\u0027t involve deferred IP allocation will work until the above IP"},{"line_number":255,"context_line":"exhaustion problem is encountered."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"If Nova is upgrade and Neutron is not, then there is no problem because routed"},{"line_number":258,"context_line":"provider networks and deferred IP address ports are not possible."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_e043e26a","line":257,"range":{"start_line":257,"start_character":11,"end_line":257,"end_character":18},"updated":"2016-06-02 21:42:15.000000000","message":"Should be \"upgraded\"","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e222c1127a7ac38d71e4134ede99ec7dac970067","unresolved":false,"context_lines":[{"line_number":279,"context_line":"  conductor.  Use that segment_id to look up the resource provider for IP"},{"line_number":280,"context_line":"  address."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"* Allow deferred or no IP addresses on ports by looking at the ip_allocation"},{"line_number":283,"context_line":"  attribute on the port."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"* Neutron to curate host aggregates and resource pools within Nova.  (This is"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_c9f24206","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":44},"updated":"2016-06-03 01:15:21.000000000","message":"Above you said that this spec doesn\u0027t deal with the none case, so I\u0027m not sure if you intend on Nova failing if it encounters one of those or not.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb4f092451323b078294cbc4f174949d6d08c285","unresolved":false,"context_lines":[{"line_number":282,"context_line":"* Allow deferred or no IP addresses on ports by looking at the ip_allocation"},{"line_number":283,"context_line":"  attribute on the port."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"* Neutron to curate host aggregates and resource pools within Nova.  (This is"},{"line_number":286,"context_line":"  Neutron acting as a client to the Nova API, isn\u0027t it?  So, it isn\u0027t really a"},{"line_number":287,"context_line":"  Nova work item.)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9abb7d3a_a0171a53","line":286,"range":{"start_line":285,"start_character":70,"end_line":286,"end_character":55},"updated":"2016-06-02 21:42:15.000000000","message":"Yup","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb4f092451323b078294cbc4f174949d6d08c285","unresolved":false,"context_lines":[{"line_number":305,"context_line":"create a multi-node job to run on Neutron and Nova which tests out routed"},{"line_number":306,"context_line":"networks.  It will include tests specifically for the use cases mentioned in"},{"line_number":307,"context_line":"this spec."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"Documentation Impact"},{"line_number":311,"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":14,"id":"9abb7d3a_a34c4477","line":308,"updated":"2016-06-02 21:42:15.000000000","message":"Presumably we can test the bound/unbound pre-allocate/post-allocate business in tempest by just creating different kinds of ports, even without a multinode job right?\n\nOf course, we\u0027ll want some unit and probably functional tests in the nova tree to validate that the new paths work in addition to the existing ones you note above will be covered by current stuff. But, I think that\u0027s a given.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e222c1127a7ac38d71e4134ede99ec7dac970067","unresolved":false,"context_lines":[{"line_number":305,"context_line":"create a multi-node job to run on Neutron and Nova which tests out routed"},{"line_number":306,"context_line":"networks.  It will include tests specifically for the use cases mentioned in"},{"line_number":307,"context_line":"this spec."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"Documentation Impact"},{"line_number":311,"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":14,"id":"9abb7d3a_094baa2c","line":308,"in_reply_to":"9abb7d3a_a34c4477","updated":"2016-06-03 01:15:21.000000000","message":"Yeah I think we\u0027re going to want to test the happy path even with single-node gate-tempest-dsvm-neutron-full, so a single host in a single host aggregate which is the resource pool. The more advanced segregation stuff with multiple computes is going to need to get baked in with the generic-resource-pools work anyway to make sure the scheduling is working, although you could test that out with in-tree nova functional tests. But the neutron stuff for routed networks will need to be a scenario test in Tempest I think.","commit_id":"67377ed376cc56f49120db9af6adfbcea16270a9"}]}
