)]}'
{"specs/queens/approved/granular-resource-requests.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e3cf516228bafc0e89e534ec610f7a76e5015083","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  with a particular set of traits, and requesting a *different* allocation of"},{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_39734983","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":34},"updated":"2017-10-10 13:34:50.000000000","message":"With Req 2 and the already existing \u0027all resource providers in\na single allocation candidate will have the same ``root_provider_uuid``\u0027 we can express two ends of the spectrum. Resource is local to the smallest undividable entity (RP) or that the resource is local only to the largest meaningful entity (the root RP). This raises the question what about if a resource needs to be local to a real subtree of the RP tree of a root provider? Is the proposed solution extendable in the future to support that as well?\n\nAs an example consider that we have two NUMA nodes and each NUMA node has the same hardware setup you defined in the Use Cases section. (Those NUMA nodes might provide resources directly like VCPU or HugePage but that is not important here)\n\nThis setup allows three different type of requests.\n* Two VFs from the same PF -\u003e resource local to an RP\n* Two VFs from the same compute node but not necessarily from the same PF -\u003e resource local to the root provider only\n* Two VFs from the same NUMA node but not necessarily from the same PF -\u003e this is the new case I\u0027m after in this comment.\n\nAs far as I understand the numbered resource request only allows expressing that the resource is local to a single RP and using the non numbered syntax only allow to express that the request is local to the root provider only.\n\nCan we change the syntaxt to something more flexible and extendable? For example:\nresources:\u003clocality\u003e:\u003cnumbering\u003e:resourceClassA \u003d resource count\n\nWhere the \u003cnumbering\u003e is the same grouping schema you described. The \u003cnumbering\u003e part is optional and if not specified this means the non numbered resource request case.\n\nThe \u003clocality\u003e can have two values today:\n* same-root-RP \n* same-RP\n\nThe \u003clocality\u003e is also optional and defaults to same-root-RP to get back the current behavior.\n\nThis way the above NUMA case can be supported by introducing a third possible value for \u003clocality\u003e:\n* same-1-ancestor\n\nWhere same-1-ancestor means the provided resources should have the same parent RPs but they don\u0027t need to come from the same RP. Similarly same-2-ancestor would mean the resource should have the same grand parent RP etc.\n\nI know that this getting complex but the generic provider tree construct already allows pretty complex resource provider setup so the complexity of the possible allocation candidate requests is just a consequence of the generality of the resource model in my head.","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2a668ca7b0e2d42f35674ad071415c5cfde2b080","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  with a particular set of traits, and requesting a *different* allocation of"},{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_a2193e89","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":34},"in_reply_to":"5f4e5783_39734983","updated":"2017-10-10 14:35:39.000000000","message":"Yeah, we definitely need to handle this kind of semantic.\n\nBut\n\nI think jaypipes was planning to do that with \"aggregate distance\".\n\nI\u0027d like to hear Jay\u0027s reaction to your suggestion.  Perhaps it would be easier to do it this way vs. aggregate distance.","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"43dc03a679af25738dc33238fe50cd87bf89dcbc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  with a particular set of traits, and requesting a *different* allocation of"},{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_b624bfc7","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":34},"in_reply_to":"5f4e5783_a2193e89","updated":"2017-10-11 13:08:26.000000000","message":"On further reflection, I\u0027m also thinking this level of complexity (if not handled by some other mechanism like aggregates) might tip us over the edge into needing a full-on JSON-based API.  (Which I need to add to the Alternatives section.)\n\nOr, instead of overloading the resources key, add a separate key or keys that can be included in the numbered grouping.  E.g.:\n\n max_affinityN\u003dX\n min_affinityN\u003dY\n\nNote that this still doesn\u0027t allow you to express distance from one grouping to another, which is also important (e.g. to express (anti-)affinity of VFs).\n\nGiven the scope of the possibilities, IMO it\u0027s not worth complicating the syntax expressed here against the possibility of a future design requirement that\u0027s as yet not fully understood.\n\nBut I\u0027ll update the spec to bring up these issues and explicitly state that they\u0027re out of scope for now.  Cool?","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e0629ed7df6e69b41a556db97e32c73f8e8f0ff8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  with a particular set of traits, and requesting a *different* allocation of"},{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_2f14ee9f","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":34},"in_reply_to":"5f4e5783_b624bfc7","updated":"2017-10-11 14:14:14.000000000","message":"Done","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f64592df69e9cb2cb4e37c9990a79baebc7c14b2","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"There is no change to the response payload syntax."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Alternatives"},{"line_number":324,"context_line":"------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"`Requirement 2`_ could also be expressed via aggregates by associating each RP"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_6cc2a436","line":323,"range":{"start_line":323,"start_character":0,"end_line":323,"end_character":12},"updated":"2017-10-08 19:35:09.000000000","message":"We also discussed an API with a JSON payload.","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e0629ed7df6e69b41a556db97e32c73f8e8f0ff8","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"There is no change to the response payload syntax."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Alternatives"},{"line_number":324,"context_line":"------------"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"`Requirement 2`_ could also be expressed via aggregates by associating each RP"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_ef0db690","line":323,"range":{"start_line":323,"start_character":0,"end_line":323,"end_character":12},"in_reply_to":"7f515b1d_6cc2a436","updated":"2017-10-11 14:14:14.000000000","message":"Done","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a41bcfc8aaeaf848b32052c58778c339269b5600","unresolved":false,"context_lines":[{"line_number":446,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":447,"context_line":"This work builds on the following specifications, and relies on their approval"},{"line_number":448,"context_line":"and implementation:"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"* `Traits in Flavors`_"},{"line_number":451,"context_line":"* `Traits in the GET /allocation_candidates API`_"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_9c090bdf","line":449,"updated":"2017-10-10 13:18:46.000000000","message":"Add NRP","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e0629ed7df6e69b41a556db97e32c73f8e8f0ff8","unresolved":false,"context_lines":[{"line_number":446,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":447,"context_line":"This work builds on the following specifications, and relies on their approval"},{"line_number":448,"context_line":"and implementation:"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"* `Traits in Flavors`_"},{"line_number":451,"context_line":"* `Traits in the GET /allocation_candidates API`_"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_0f67f24f","line":449,"in_reply_to":"5f4e5783_9c090bdf","updated":"2017-10-11 14:14:14.000000000","message":"Done","commit_id":"89914687956ccb801e5b7eb8adcb7d0d1d148f7e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/granular-resource-requests"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As generic and `Nested Resource Providers`_ begin to crystallize and be"},{"line_number":14,"context_line":"exercised, it becomes necessary to be able to express:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* _`Requirement 1`: Requesting an allocation of a particular resource class"},{"line_number":17,"context_line":"  with a particular set of traits, and requesting a *different* allocation of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_ac633eb1","line":14,"updated":"2017-10-11 21:32:29.000000000","message":"I feel obliged to say that what you really mean is \"we\u0027ve decided we\u0027re going to allow functionality that requires\"\n\nSame difference though.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"},{"line_number":49,"context_line":"these restrictions."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_cc055ac4","line":46,"updated":"2017-10-11 21:32:29.000000000","message":"This statement is a bit undefined. nested isn\u0027t \"done\" but in the model of nested prior to the ideas in this spec, it\u0027s \"from the same or its children\".","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"df8a2c9ab3b32a897a5f705f11eb58fa15d3038e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"},{"line_number":49,"context_line":"these restrictions."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_27af5be4","line":46,"in_reply_to":"5f4e5783_6f12d80b","updated":"2017-10-12 09:47:04.000000000","message":"No, you\u0027re right, I had misread that. My excuse is that I was reading from a printed version in a very hot bath.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"},{"line_number":49,"context_line":"these restrictions."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_6f12d80b","line":46,"in_reply_to":"5f4e5783_cc055ac4","updated":"2017-10-11 23:10:32.000000000","message":"Resources of the same *class*?  I don\u0027t think so.  This is what we discussed here: http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2017-10-06.log.html#t2017-10-06T12:21:26\n\nPlease correct me if I\u0027m misunderstanding.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":161,"context_line":"As an Operator, I need to be able to express a request for more than one VF and"},{"line_number":162,"context_line":"have the request succeed even if my PFs are nearly saturated.  For this"},{"line_number":163,"context_line":"use case, assume that **each PF resource provider has only two VFs"},{"line_number":164,"context_line":"unallocated**.  I need to be able to express a request **four VFs on NET1**."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Expect: ``[RP1(SRIOV_NET_VF:2), RP3(SRIOV_NET_VF:2)]``"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_4c228a54","line":164,"range":{"start_line":164,"start_character":53,"end_line":164,"end_character":56},"updated":"2017-10-11 21:32:29.000000000","message":"\"request of\" or \"request for\"","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":161,"context_line":"As an Operator, I need to be able to express a request for more than one VF and"},{"line_number":162,"context_line":"have the request succeed even if my PFs are nearly saturated.  For this"},{"line_number":163,"context_line":"use case, assume that **each PF resource provider has only two VFs"},{"line_number":164,"context_line":"unallocated**.  I need to be able to express a request **four VFs on NET1**."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Expect: ``[RP1(SRIOV_NET_VF:2), RP3(SRIOV_NET_VF:2)]``"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_cfd30c38","line":164,"range":{"start_line":164,"start_character":53,"end_line":164,"end_character":56},"in_reply_to":"5f4e5783_4c228a54","updated":"2017-10-11 23:10:32.000000000","message":"Done.\n\n/me awards cdent a typo-finding cookie.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"\"siblings\" - that is, share the same parent provider - even if it is impossible"},{"line_number":176,"context_line":"or impractical to express this with traits."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"This is out of the scope of this specification."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Use Case 6 (Out of Scope)"},{"line_number":181,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_6cb9c6e7","line":178,"updated":"2017-10-11 21:32:29.000000000","message":"Whenever the not out of scope version of this gets written I hope we\u0027ll go into some detail on why this use case is required rather than just desirable. Sure it\u0027s useful, but so would having my own private jet.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":175,"context_line":"\"siblings\" - that is, share the same parent provider - even if it is impossible"},{"line_number":176,"context_line":"or impractical to express this with traits."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"This is out of the scope of this specification."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Use Case 6 (Out of Scope)"},{"line_number":181,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_6fae5899","line":178,"in_reply_to":"5f4e5783_6cb9c6e7","updated":"2017-10-11 23:10:32.000000000","message":"Yeah, I could have expostulated for a while on the various scenarios that could benefit from this functionality (see e.g. the discussion at [1]).  But as explained a bit further in the 4th bullet of Alternatives, we really don\u0027t have a handle on all the possibilities.  What we\u0027ve got in this spec is pretty tightly defined and covers a substantial chunk of capability.  So it doesn\u0027t seem like The Right Thing to go off into the weeds discussing that other stuff in here.\n\nBasically I\u0027m agreeing with you: we need to go into detail, but in that future spec, not this one.\n\n[1] https://review.openstack.org/#/c/502306/4/specs/queens/approved/bandwidth-resource-provider.rst@69","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"able to request two VFs on different PFs, but it is impractical to express this"},{"line_number":185,"context_line":"via traits."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This is out of the scope of this specification."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Proposed change"},{"line_number":190,"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":3,"id":"5f4e5783_4cd04a20","line":187,"updated":"2017-10-11 21:32:29.000000000","message":"ditto","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"Semantics"},{"line_number":248,"context_line":"^^^^^^^^^"},{"line_number":249,"context_line":"The term \"results\" is used below to refer to resource allocations within a"},{"line_number":250,"context_line":"single allocation candidate."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"* The semantic for the (single) un-numbered grouping is unchanged.  That is, it"},{"line_number":253,"context_line":"  may still return results from different RPs in the same tree (or, when"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_4ca3aa9f","line":250,"range":{"start_line":250,"start_character":0,"end_line":250,"end_character":27},"updated":"2017-10-11 21:32:29.000000000","message":"terminology is messy here.\n\nDo you mean \"one item within the allocations_request list that is a member of the response at /allocation_candidates\n\nI think the term we\u0027ve tended to use most here is \"allocation request\"","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":247,"context_line":"Semantics"},{"line_number":248,"context_line":"^^^^^^^^^"},{"line_number":249,"context_line":"The term \"results\" is used below to refer to resource allocations within a"},{"line_number":250,"context_line":"single allocation candidate."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"* The semantic for the (single) un-numbered grouping is unchanged.  That is, it"},{"line_number":253,"context_line":"  may still return results from different RPs in the same tree (or, when"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_0fada487","line":250,"range":{"start_line":250,"start_character":0,"end_line":250,"end_character":27},"in_reply_to":"5f4e5783_4ca3aa9f","updated":"2017-10-11 23:10:32.000000000","message":"A \"result\" would actually be a single resource_class:count line, where \"results\" encompasses all such lines within and across all items in an \"allocations\" list within a single item in the \"allocation_requests\" list in the ``GET /allocation_candidates`` response.\n\nWhich is pretty freakin muddy.\n\nYour suggestion is a lot clearer than what I\u0027ve got, and expresses the spirit nicely.  Will update.  Thanks.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"* Specifying a ``resources`` (numbered or un-numbered) without a corresponding"},{"line_number":276,"context_line":"  ``traits`` returns results unfiltered by traits."},{"line_number":277,"context_line":"* It is meaningless (but permitted?) to specify a ``traits`` (numbered or"},{"line_number":278,"context_line":"  un-numbered) without a corresponding ``resources``."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"Syntax In Flavors"},{"line_number":281,"context_line":"^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_acbb3ec2","line":278,"updated":"2017-10-11 21:32:29.000000000","message":"No, better to do a 400 here. That\u0027s the trend we\u0027ve been maintaining with most things and is aligned api-wg^sig guidelines","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":275,"context_line":"* Specifying a ``resources`` (numbered or un-numbered) without a corresponding"},{"line_number":276,"context_line":"  ``traits`` returns results unfiltered by traits."},{"line_number":277,"context_line":"* It is meaningless (but permitted?) to specify a ``traits`` (numbered or"},{"line_number":278,"context_line":"  un-numbered) without a corresponding ``resources``."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"Syntax In Flavors"},{"line_number":281,"context_line":"^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_0a5fd20e","line":278,"in_reply_to":"5f4e5783_acbb3ec2","updated":"2017-10-11 23:10:32.000000000","message":"That\u0027s where I started, and I thought it through carefully and decided it had to be this way, but dangit, I can\u0027t remember why.\n\nWill change.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":340,"context_line":"There is no change to the response payload syntax."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"Alternatives"},{"line_number":343,"context_line":"------------"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"* `Requirement 2`_ could also be expressed via aggregates by associating each"},{"line_number":346,"context_line":"  RP with a unique aggregate, once shared resource providers are fully"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_ccdd5a15","line":343,"updated":"2017-10-11 21:32:29.000000000","message":"this section is very well done (the whole thing is very well done, but this one especially so)","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a6f2625736e13f7f68d043d28d68c1ba854766d","unresolved":false,"context_lines":[{"line_number":498,"context_line":""},{"line_number":499,"context_line":"Testing"},{"line_number":500,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":501,"context_line":"Functional tests, including gabbits, will be added to exercise the new syntax."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"Documentation Impact"},{"line_number":504,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_ac7c5eeb","line":501,"updated":"2017-10-11 21:32:29.000000000","message":"Might be nice to be explicit in this section about functional tests for complex placements and the fact that that\u0027s likely going to need some new fixtures to represent icky nested scenarios.\n\nAnd migrations.","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"df8a2c9ab3b32a897a5f705f11eb58fa15d3038e","unresolved":false,"context_lines":[{"line_number":498,"context_line":""},{"line_number":499,"context_line":"Testing"},{"line_number":500,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":501,"context_line":"Functional tests, including gabbits, will be added to exercise the new syntax."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"Documentation Impact"},{"line_number":504,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_e791439b","line":501,"in_reply_to":"5f4e5783_4a1dca0d","updated":"2017-10-12 09:47:04.000000000","message":"No, it\u0027s more like a note to self or affirmation \"gosh darn it, people do like full service tests\"","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0328f71247f6561181d89d40f6371bf9b954f372","unresolved":false,"context_lines":[{"line_number":498,"context_line":""},{"line_number":499,"context_line":"Testing"},{"line_number":500,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":501,"context_line":"Functional tests, including gabbits, will be added to exercise the new syntax."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"Documentation Impact"},{"line_number":504,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f4e5783_4a1dca0d","line":501,"in_reply_to":"5f4e5783_ac7c5eeb","updated":"2017-10-11 23:10:32.000000000","message":"Added some words.  Not sure how explicit is appropriate.  I don\u0027t want to be designing the test suite in the spec, do I?","commit_id":"514b729f84ff85dd094d6f2286eb8943f93bce5e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/granular-resource-requests"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As generic and `Nested Resource Providers`_ begin to crystallize and be"},{"line_number":14,"context_line":"exercised, it becomes necessary to be able to express:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* _`Requirement 1`: Requesting an allocation of a particular resource class"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_6ff73dd5","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":10},"updated":"2017-10-13 16:48:25.000000000","message":"link?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/granular-resource-requests"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As generic and `Nested Resource Providers`_ begin to crystallize and be"},{"line_number":14,"context_line":"exercised, it becomes necessary to be able to express:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* _`Requirement 1`: Requesting an allocation of a particular resource class"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_acde3ad7","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":10},"in_reply_to":"5f4e5783_6ff73dd5","updated":"2017-10-16 13:22:16.000000000","message":"Done","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_bb2324bd","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":34},"updated":"2017-10-15 16:04:00.000000000","message":"Do you mean the same top-level resource provider?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  the *same* resource class with a *different* set of traits."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* _`Requirement 2`: Ensuring that requests of certain resources are allocated"},{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_2cec8a8d","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":34},"in_reply_to":"5f4e5783_bb2324bd","updated":"2017-10-16 13:22:16.000000000","message":"No, that\u0027s what we have in the pipe today.  I mean the same *exact* resource provider.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Up to this point with generic and nested resource providers and traits, it is"},{"line_number":38,"context_line":"only possible to request a single blob of resources with a single blob of"},{"line_number":39,"context_line":"traits.  More specifically:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* The resources can only be expressed as an integer count of a single"},{"line_number":42,"context_line":"  resource class.  There is no way to express a second *resource_class*:*count*"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_ef31ed5b","line":39,"range":{"start_line":39,"start_character":7,"end_line":39,"end_character":9},"updated":"2017-10-13 16:48:25.000000000","message":"https://lifehacker.com/1656109447 :P","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd73337f44651c9958eb40fb4800604510603185","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Up to this point with generic and nested resource providers and traits, it is"},{"line_number":38,"context_line":"only possible to request a single blob of resources with a single blob of"},{"line_number":39,"context_line":"traits.  More specifically:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* The resources can only be expressed as an integer count of a single"},{"line_number":42,"context_line":"  resource class.  There is no way to express a second *resource_class*:*count*"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_f7be63b2","line":39,"range":{"start_line":39,"start_character":7,"end_line":39,"end_character":9},"in_reply_to":"5f4e5783_ef31ed5b","updated":"2017-10-13 19:47:23.000000000","message":"Indeed.  And why?  You\u0027ll notice the main argument [1] is that it\u0027s unnecessary in proportional fonts, and \"nobody\" uses fixed-width fonts.  But everything I write that you\u0027re going to read - code (docstrings), IRC, this spec (unless you read it rendered (which you\u0027re not - see below)) - is fixed width.\n\nIt\u0027s also worth noting that almost anything you\u0027re going to read in a rendered proportional-font form (usually HTML) will have spaces squashed.\n\nSo yeah, I haven\u0027t bothered to break this particular habit of 25+ years, but it\u0027s a conscious (non-)choice.\n\nAnd yeah, I\u0027m old.\n\nNow get off my lawn.\n\n[1] https://lifehacker.com/5735680/an-argument-against-using-two-spaces-between-sentences","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  resource class.  There is no way to express a second *resource_class*:*count*"},{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_a3a1c896","line":45,"updated":"2017-10-13 23:43:55.000000000","message":"This is actually interesting and makes me wonder if we couldn\u0027t do things we think we should be able to today. Like if compute has no storage, but you ask for traits of HAS_SSE3, which the shared storage provider ... won\u0027t have.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  resource class.  There is no way to express a second *resource_class*:*count*"},{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_6705fd10","line":45,"in_reply_to":"5f4e5783_a3a1c896","updated":"2017-10-16 13:22:16.000000000","message":"I think you\u0027re be right that there\u0027s some kind of funky trait crossover with shared RPs, insofar as that is being implemented in Queens [1].  But I still don\u0027t fully understand how it works, or whether it\u0027s going to be done/usable.\n\n[1] https://review.openstack.org/#/c/479766/10/nova/objects/resource_provider.py@2572","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":38,"context_line":"only possible to request a single blob of resources with a single blob of"},{"line_number":39,"context_line":"traits.  More specifically:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* The resources can only be expressed as an integer count of a single"},{"line_number":42,"context_line":"  resource class.  There is no way to express a second *resource_class*:*count*"},{"line_number":43,"context_line":"  with the same resource class."},{"line_number":44,"context_line":"* All specified traits apply to all requested resources.  There is no way to"},{"line_number":45,"context_line":"  apply certain traits to certain resources."},{"line_number":46,"context_line":"* All resources of a given resource class are allocated from the same RP."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The `Use Cases`_ below exemplify scenarios that cannot be expressed within"},{"line_number":49,"context_line":"these restrictions."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_cf8071c2","line":46,"range":{"start_line":41,"start_character":0,"end_line":46,"end_character":73},"updated":"2017-10-13 16:48:25.000000000","message":"An example request, before and after, would be helpful right after this to explain this block (basically a picture)\n\nEDIT: Wait, you have that below","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    +-+--------------+-+--------------+-+"},{"line_number":61,"context_line":"      |     NIC1     | |     NIC2     |"},{"line_number":62,"context_line":"      +-+---+--+---+-+ +-+---+--+---+-+"},{"line_number":63,"context_line":"        |PF1|  |PF2|     |PF3|  |PF4|"},{"line_number":64,"context_line":"        +-+-+  +-+-+     +-+-+  +-+-+"},{"line_number":65,"context_line":"           \\      \\__   __/      /"},{"line_number":66,"context_line":"            \\        \\ /        /"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_b6969b92","line":63,"range":{"start_line":63,"start_character":25,"end_line":63,"end_character":36},"updated":"2017-10-15 16:04:00.000000000","message":"Do we have NIC which includes two PFs in the world? I\u0027m not familiar those hardware.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    +-+--------------+-+--------------+-+"},{"line_number":61,"context_line":"      |     NIC1     | |     NIC2     |"},{"line_number":62,"context_line":"      +-+---+--+---+-+ +-+---+--+---+-+"},{"line_number":63,"context_line":"        |PF1|  |PF2|     |PF3|  |PF4|"},{"line_number":64,"context_line":"        +-+-+  +-+-+     +-+-+  +-+-+"},{"line_number":65,"context_line":"           \\      \\__   __/      /"},{"line_number":66,"context_line":"            \\        \\ /        /"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_c76031d2","line":63,"range":{"start_line":63,"start_character":25,"end_line":63,"end_character":36},"in_reply_to":"5f4e5783_b6969b92","updated":"2017-10-16 13:22:16.000000000","message":"Oh, absolutely.  Here\u0027s one with four on my test system right now:\n\n | U78CB.001.WZS00A8-P1-C5  |          | PCIe2 4-port (10Gb FCoE \u0026 1GbE) SR\u0026RJ45 Adapter       |\n\n\n |   2   | Running | Sriov | U78CB.001.WZS00A8-P1-C5-T1 |     Up    |   None   | 98.0%  |   19   |\n |       |         |       | U78CB.001.WZS00A8-P1-C5-T2 |     Up    |   None   | 100.0% |   20   |\n |       |         |       | U78CB.001.WZS00A8-P1-C5-T3 |     Up    |   None   | 100.0% |   4    |\n |       |         |       | U78CB.001.WZS00A8-P1-C5-T4 |     Up    |   None   | 100.0% |   4    |","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            |   /           \\   |"},{"line_number":70,"context_line":"          +-+--+-+         +-+--+-+"},{"line_number":71,"context_line":"          | NET1 |         | NET2 |"},{"line_number":72,"context_line":"          +------+         +------+"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Assume this is modeled in Placement as:"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_03e53cdc","line":72,"updated":"2017-10-13 23:43:55.000000000","message":"So, um. NIC1 is cabled to something specific. I assume you\u0027re trying to say here that you want two PFs per physical network, spread across the available NICs for redundancy or something, right? Or am I missing that a PF might be a PHY on a multi-port card, which could potentially really be cabled like this?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            |   /           \\   |"},{"line_number":70,"context_line":"          +-+--+-+         +-+--+-+"},{"line_number":71,"context_line":"          | NET1 |         | NET2 |"},{"line_number":72,"context_line":"          +------+         +------+"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Assume this is modeled in Placement as:"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_a74e5535","line":72,"in_reply_to":"5f4e5783_03e53cdc","updated":"2017-10-16 13:22:16.000000000","message":"Yes, each NIC in this example has two physical ports (RJ-45 with real wires coming out) and they have been cabled to switch ports such that one port from each NIC is talking to each physical network.  For simplicity (you know, to reduce the size of this doc :) I omitted the switch from the diagram.\n\nAnd yes, presumably the cabling was done this way to eliminate a SPOF (like if a slot goes bad).\n\nBut I really didn\u0027t want the reader to get too hung up on *why* it looks like this, or whether it\u0027s a setup that would really exist exactly this way in real life.  It\u0027s a simplification to allow me to illustrate the use cases and how the proposed feature addresses them.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    RP1 (represents PF1):"},{"line_number":79,"context_line":"    {"},{"line_number":80,"context_line":"        SRIOV_NET_VF\u003d16,"},{"line_number":81,"context_line":"        NET_EGRESS_BYTES_SEC\u003d1250000000,  # 10Gbps"},{"line_number":82,"context_line":"        traits: [CUSTOM_NET1,"},{"line_number":83,"context_line":"                 NET_SPEED_1G_CAPABLE, NET_SPEED_10G_CAPABLE]"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":"    RP2 (represents PF2):"},{"line_number":86,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_71eb8ddb","line":83,"range":{"start_line":81,"start_character":8,"end_line":83,"end_character":61},"updated":"2017-10-15 16:04:00.000000000","message":"So for the RC NET_EGRESS_BYTES_SEC is for The VM owns the bandwidth exclusively. For the trait NET_SPEED_10G_CAPABLE is for the VM shared the bandwidth?\n\nWhat happened if VM wants the shared bandwidth but all the Bandwidth allocated already?\n\nSo I\u0027m thinking in the real world, people won\u0027t mix the shared and exclusive bandwidth on the same node? Some nodes just for the shared bandwidth, and some nodes just for exclusive bandwidth.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    RP1 (represents PF1):"},{"line_number":79,"context_line":"    {"},{"line_number":80,"context_line":"        SRIOV_NET_VF\u003d16,"},{"line_number":81,"context_line":"        NET_EGRESS_BYTES_SEC\u003d1250000000,  # 10Gbps"},{"line_number":82,"context_line":"        traits: [CUSTOM_NET1,"},{"line_number":83,"context_line":"                 NET_SPEED_1G_CAPABLE, NET_SPEED_10G_CAPABLE]"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":"    RP2 (represents PF2):"},{"line_number":86,"context_line":"    {"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_6795fd32","line":83,"range":{"start_line":81,"start_character":8,"end_line":83,"end_character":61},"in_reply_to":"5f4e5783_71eb8ddb","updated":"2017-10-16 13:22:16.000000000","message":"That was my thought too.  This actually came up in the Network Bandwidth resource provider spec [1] - though some folks seemed to think it wasn\u0027t really a problem to mix and match those.\n\nAs for the NET_SPEED_X_CAPABLE traits, this is again just an example to illustrate the use cases.  And because I don\u0027t know networking well enough to come up with a more realistic trait to use.\n\nLooking through the existing traits, perhaps HW_NIC_ACCEL_SSL would be a better example.  Will change.\n\n[1] https://review.openstack.org/#/c/502306/4/specs/queens/approved/bandwidth-resource-provider.rst@139","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Use Case 1"},{"line_number":109,"context_line":"^^^^^^^^^^"},{"line_number":110,"context_line":"As an Operator, I need to be able to express a boot request for an instance"},{"line_number":111,"context_line":"with **one SR-IOV VF on physical network NET1 and a second SR-IOV VF on"},{"line_number":112,"context_line":"physical network NET2**."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_0a2d57fd","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":10},"updated":"2017-10-13 16:48:25.000000000","message":"nit: Can you use ~~~ instead, as that\u0027s what\u0027s used elsewhere","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd73337f44651c9958eb40fb4800604510603185","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Use Case 1"},{"line_number":109,"context_line":"^^^^^^^^^^"},{"line_number":110,"context_line":"As an Operator, I need to be able to express a boot request for an instance"},{"line_number":111,"context_line":"with **one SR-IOV VF on physical network NET1 and a second SR-IOV VF on"},{"line_number":112,"context_line":"physical network NET2**."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_b7ba2b6b","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":10},"in_reply_to":"5f4e5783_0a2d57fd","updated":"2017-10-13 19:47:23.000000000","message":"Sure.  Interesting note, RST doesn\u0027t attach any significance to which underlines are used when deciding how to render them, size-wise.  It decides based on the order they show up in the document [1].  Took me a while to figure that one out.\n\n[1] http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#sections","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Use Case 1"},{"line_number":109,"context_line":"^^^^^^^^^^"},{"line_number":110,"context_line":"As an Operator, I need to be able to express a boot request for an instance"},{"line_number":111,"context_line":"with **one SR-IOV VF on physical network NET1 and a second SR-IOV VF on"},{"line_number":112,"context_line":"physical network NET2**."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_a749b5b7","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":10},"in_reply_to":"5f4e5783_b7ba2b6b","updated":"2017-10-16 13:22:16.000000000","message":"Done","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Expect:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``[RP1(SRIOV_NET_VF:1), RP1(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":134,"context_line":"* ``[RP2(SRIOV_NET_VF:1), RP2(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":135,"context_line":"* ``[RP3(SRIOV_NET_VF:1), RP3(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_0333fc63","line":133,"updated":"2017-10-13 23:43:55.000000000","message":"You said above you requested one VF, but this is two. Did you mean after this change, I expect to be able to say that one of the VFs returned should have that trait?\n\nI\u0027m also getting caught up over the notation here. Is the stuff in parens supposed to be the reason why it was chosen by placement?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Expect:"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* ``[RP1(SRIOV_NET_VF:1), RP1(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":134,"context_line":"* ``[RP2(SRIOV_NET_VF:1), RP2(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":135,"context_line":"* ``[RP3(SRIOV_NET_VF:1), RP3(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_e75d6d47","line":133,"in_reply_to":"5f4e5783_0333fc63","updated":"2017-10-16 13:22:16.000000000","message":"That\u0027s me trying to tighten things up again.  And make the document understandable to people who don\u0027t have the exact structure of the API requests/responses in their head at all times.  I guess it\u0027s counterproductive for those who do :(\n\nThe whole bullet list is supposed to represent the ``allocation_requests`` part of the response to ``GET /allocation_candidates``.\n\nEach bullet represents the ``allocations`` of one member of that ``allocation_requests`` list.\n\nAnd each \"term\" is just telling you which RP the inventory is coming from.\n\nSo this bullet list translates to:\n\n {\n    \"allocation_requests\": [\n        {\n            \"allocations\": [\n                {\n                    \"resource_provider\": {\n                        \"uuid\": \u003cRP1\u003e\n                    },\n                    \"resources\": {\n                        \"SRIOV_NET_VF\": 1,\n                        \"NET_EGRESS_BYTES_SEC\": 10000,\n                    }\n                }\n            ],\n        },\n        {\n            \"allocations\": [\n                {\n                    \"resource_provider\": {\n                        \"uuid\": \u003cRP2\u003e\n                    },\n                    \"resources\": {\n                        \"SRIOV_NET_VF\": 1,\n                        \"NET_EGRESS_BYTES_SEC\": 10000,\n                    }\n                }\n            ],\n        },\n        {\n            \"allocations\": [\n                {\n                    \"resource_provider\": {\n                        \"uuid\": \u003cRP3\u003e\n                    },\n                    \"resources\": {\n                        \"SRIOV_NET_VF\": 1,\n                        \"NET_EGRESS_BYTES_SEC\": 10000,\n                    }\n                }\n            ],\n        },\n        {\n            \"allocations\": [\n                {\n                    \"resource_provider\": {\n                        \"uuid\": \u003cRP4\u003e\n                    },\n                    \"resources\": {\n                        \"SRIOV_NET_VF\": 1,\n                        \"NET_EGRESS_BYTES_SEC\": 10000,\n                    }\n                }\n            ]\n        }\n    ]\n }\n\nYes, in this case I could have said it more like RP1(SRIOV_NET_VF:1, NET_EGRESS_BYTES_SEC:10000) - I probably did it this way to be consistent with the other examples.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":139,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":140,"context_line":"(`Requirement 2`_)."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Use Case 3"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_f6df7337","line":139,"updated":"2017-10-15 16:04:00.000000000","message":"So for the case, Node1 has CPU and Memory, and Node 2 has CPU and Memory also. We won\u0027t get CPU from Node1 and get the Memory from Node2 currently.\n\nSo I\u0027m think the rquest of \u0027GET /allocation_candidates?resources\u003dCPU:8,MEMORY_MB:8096,SRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000\" will works as your expect.\n\nSo i\u0027m confusing on how to filtering the allocation candidates for the nested resource provider? Is this spec for that? The current syntax of \u0027GET /allocation_candidates\" doesn\u0027t works for the nested resource provider, and I didn\u0027t see those patch add support for that also https://review.openstack.org/#/q/topic:bp/nested-resource-providers+(status:open+OR+status:merged)","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9a9234a0b6d51bff599af465a5934ee2bede0487","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":139,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":140,"context_line":"(`Requirement 2`_)."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Use Case 3"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_8eb47181","line":139,"in_reply_to":"5f4e5783_8b622309","updated":"2017-10-17 14:00:07.000000000","message":"Sounds like we don\u0027t have any spec about the nested RP for non-numbered request.\n\nAt least I didn\u0027t see any implement for the nested RP for non-numbered request, so I don\u0027t know why we can\u0027t try to allocate SRIOV_NET_VF and NET_EGRESS_BYTES_SEC from the same RP (can we have some code which try to allocate resources from the same RP first).\n\nfor the non-numbered request, two use-cases are not sure whether works:\n1. whether the request with CPU, MEMORY, VF\n2. whether the request with CPU, MEMORY, VF, SRIOV \n\nwe need to clear at somewhere~, yea, maybe in another spec","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"17fa626c0ce6d429bc7fbc68789c6e3b156df383","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":139,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":140,"context_line":"(`Requirement 2`_)."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Use Case 3"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_8b622309","line":139,"in_reply_to":"5f4e5783_8b8b4466","updated":"2017-10-17 13:25:03.000000000","message":"If you used non-numbered for this scenario, you would get candidates where the SRIOV_NET_VF and the NET_EGRESS_BYTES_SEC came from *different* RPs, because they\u0027re all part of the same tree.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9c69787ccc6861f92ca29ffbaa1ad9b72443bb01","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":139,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":140,"context_line":"(`Requirement 2`_)."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Use Case 3"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_8b8b4466","line":139,"in_reply_to":"5f4e5783_e7856c5b","updated":"2017-10-17 12:19:03.000000000","message":"ok, I thought the non-numbered request will work for this use-case.\n\nThe non-numbered request will try to allocate the resources in the same  RP.\n\nWhat is the reason that we didn\u0027t support this usecase for non-numbered request?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":139,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":140,"context_line":"(`Requirement 2`_)."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Use Case 3"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_e7856c5b","line":139,"in_reply_to":"5f4e5783_f6df7337","updated":"2017-10-16 13:22:16.000000000","message":"Yes, this is precisely what this spec is intended to address.  Without nested resource providers, we don\u0027t really have a way to represent different NUMA nodes.  But with nested resource providers, presumably each NUMA node will be a child RP under the compute host (which is the root RP).  And in that case, under the current design, there\u0027s no way to tell placement to make sure my CPU and memory get allocated out of the same RP vs. just the same tree.\n\nI also believe you are correct that the code to request resources across a nested RP tree isn\u0027t yet proposed.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"able to request two VFs on different PFs, but it is impractical to express this"},{"line_number":185,"context_line":"via traits."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This is out of the scope of this specification."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Proposed change"},{"line_number":190,"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":"5f4e5783_c32964e6","line":187,"updated":"2017-10-13 23:43:55.000000000","message":"I would tend to put these in a different spec and just somewhere say that none of this provided distance or affinity yet.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cd6a1d67ce76b6b0929f60101b4268d81ee7090a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"able to request two VFs on different PFs, but it is impractical to express this"},{"line_number":185,"context_line":"via traits."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This is out of the scope of this specification."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Proposed change"},{"line_number":190,"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":"5f4e5783_70d13423","line":187,"in_reply_to":"5f4e5783_67de1c6e","updated":"2017-10-16 14:15:00.000000000","message":"What I meant was, put cases 5 and 6 in another document. Listing two cases that don\u0027t apply here make an already epic spec longer.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":184,"context_line":"able to request two VFs on different PFs, but it is impractical to express this"},{"line_number":185,"context_line":"via traits."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This is out of the scope of this specification."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Proposed change"},{"line_number":190,"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":"5f4e5783_67de1c6e","line":187,"in_reply_to":"5f4e5783_c32964e6","updated":"2017-10-16 13:22:16.000000000","message":"I put these (and the fourth bullet in Alternatives) here in response to gibi\u0027s comments on PS2 [1].\n\n[1] https://review.openstack.org/#/c/510244/2/specs/queens/approved/granular-resource-requests.rst@21","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":".. code-block:: python"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":200,"context_line":"                  resource_classB: rcB_count,"},{"line_number":201,"context_line":"                  ... ],"},{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_631cf0c0","line":199,"range":{"start_line":199,"start_character":16,"end_line":199,"end_character":17},"updated":"2017-10-13 23:43:55.000000000","message":"This should be { no?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":".. code-block:: python"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":200,"context_line":"                  resource_classB: rcB_count,"},{"line_number":201,"context_line":"                  ... ],"},{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_47c44091","line":199,"range":{"start_line":199,"start_character":16,"end_line":199,"end_character":17},"in_reply_to":"5f4e5783_631cf0c0","updated":"2017-10-16 13:22:16.000000000","message":"Done","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":200,"context_line":"                  resource_classB: rcB_count,"},{"line_number":201,"context_line":"                  ... ],"},{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Semantically, each resulting allocation candidate will consist of"},{"line_number":205,"context_line":"``resource_class``\\ *N*: ``rc``\\ *N*\\ ``_count`` resources spread arbitrarily"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_561647aa","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":10},"updated":"2017-10-15 16:04:00.000000000","message":"required?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":200,"context_line":"                  resource_classB: rcB_count,"},{"line_number":201,"context_line":"                  ... ],"},{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Semantically, each resulting allocation candidate will consist of"},{"line_number":205,"context_line":"``resource_class``\\ *N*: ``rc``\\ *N*\\ ``_count`` resources spread arbitrarily"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_27bdc401","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":10},"in_reply_to":"5f4e5783_561647aa","updated":"2017-10-16 13:22:16.000000000","message":"Done","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Semantically, each resulting allocation candidate will consist of"},{"line_number":205,"context_line":"``resource_class``\\ *N*: ``rc``\\ *N*\\ ``_count`` resources spread arbitrarily"},{"line_number":206,"context_line":"across resource providers within the same tree (i.e. all resource providers in"},{"line_number":207,"context_line":"a single allocation candidate will have the same ``root_provider_uuid``)."},{"line_number":208,"context_line":"*Each* resource provider in *each* resulting allocation candidate will possess"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_ca0bbf7a","line":205,"range":{"start_line":205,"start_character":0,"end_line":205,"end_character":24},"updated":"2017-10-13 16:48:25.000000000","message":"side note: what\u0027s going on here?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd73337f44651c9958eb40fb4800604510603185","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Semantically, each resulting allocation candidate will consist of"},{"line_number":205,"context_line":"``resource_class``\\ *N*: ``rc``\\ *N*\\ ``_count`` resources spread arbitrarily"},{"line_number":206,"context_line":"across resource providers within the same tree (i.e. all resource providers in"},{"line_number":207,"context_line":"a single allocation candidate will have the same ``root_provider_uuid``)."},{"line_number":208,"context_line":"*Each* resource provider in *each* resulting allocation candidate will possess"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_57fbf745","line":205,"range":{"start_line":205,"start_character":0,"end_line":205,"end_character":24},"in_reply_to":"5f4e5783_ca0bbf7a","updated":"2017-10-13 19:47:23.000000000","message":"Making the tradeoff to have the rendered version [1] be prettier than the source.  In this case, I want \"resource_classN\" to show up with \"resource_class\" fixed-width (because it\u0027s a literal) and \"N\" italicized (because it\u0027s a \"variable\").  The asterisk needs to be surrounded by \\b-ish characters to do italics (rather than just showing up as an asterisk), but I don\u0027t want the space to render, so I have to escape it [2].\n\nAren\u0027t you glad you asked?\n\n[1] http://docs-draft.openstack.org/44/510244/4/check/gate-nova-specs-docs-ubuntu-xenial/ee039c7//doc/build/html/specs/queens/approved/granular-resource-requests.html#numbered-request-groups\n[2] http://www.sphinx-doc.org/en/stable/rest.html#inline-markup","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":226,"context_line":"                  resource_classB: rcB_count,"},{"line_number":227,"context_line":"                  ... ],"},{"line_number":228,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ],"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    resources1 \u003d [ resource_class1A: rc1A_count,"},{"line_number":231,"context_line":"                   resource_class1B: rc1B_count,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_567be7f3","line":228,"range":{"start_line":228,"start_character":3,"end_line":228,"end_character":10},"updated":"2017-10-15 16:04:00.000000000","message":"required","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    resources \u003d [ resource_classA: rcA_count,"},{"line_number":226,"context_line":"                  resource_classB: rcB_count,"},{"line_number":227,"context_line":"                  ... ],"},{"line_number":228,"context_line":"    traits \u003d [ TRAIT_C, TRAIT_D, ... ],"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    resources1 \u003d [ resource_class1A: rc1A_count,"},{"line_number":231,"context_line":"                   resource_class1B: rc1B_count,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_270024ab","line":228,"range":{"start_line":228,"start_character":3,"end_line":228,"end_character":10},"in_reply_to":"5f4e5783_567be7f3","updated":"2017-10-16 13:22:16.000000000","message":"Done","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    resourcesX \u003d [ resource_classXA: rcXA_count,"},{"line_number":243,"context_line":"                   resource_classXB: rcXB_count,"},{"line_number":244,"context_line":"                   ... ],"},{"line_number":245,"context_line":"    traitsX \u003d [ TRAIT_XC, TRAIT_XD, ... ],"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Semantics"},{"line_number":248,"context_line":"^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_035adc81","line":245,"updated":"2017-10-13 23:43:55.000000000","message":"Should there be some groupings here other than the character at the end of these names? Logically these don\u0027t seem separate/related in the rendered or source form to my eyes.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    resourcesX \u003d [ resource_classXA: rcXA_count,"},{"line_number":243,"context_line":"                   resource_classXB: rcXB_count,"},{"line_number":244,"context_line":"                   ... ],"},{"line_number":245,"context_line":"    traitsX \u003d [ TRAIT_XC, TRAIT_XD, ... ],"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Semantics"},{"line_number":248,"context_line":"^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_47cfa055","line":245,"in_reply_to":"5f4e5783_035adc81","updated":"2017-10-16 13:22:16.000000000","message":"I could make it look more groupy e.g. by surrounding the groups with some kind of bracing.  (This section is just supposed to be a logical representation, not real source of any kind.)","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66f64554ef7b80d9dc6e7414f0592d9d66b77c31","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                   resource_classXB: rcXB_count,"},{"line_number":244,"context_line":"                   ... ],"},{"line_number":245,"context_line":"    traitsX \u003d [ TRAIT_XC, TRAIT_XD, ... ],"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"Semantics"},{"line_number":248,"context_line":"^^^^^^^^^"},{"line_number":249,"context_line":"The term \"results\" is used below to refer to the contents of one item in the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_4a746ffe","line":246,"updated":"2017-10-13 16:48:25.000000000","message":"I got this far, but it\u0027s 6pm on Friday and I\u0027m going home. Will pick up again next week :)","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":254,"context_line":"  may still return results from different RPs in the same tree (or, when"},{"line_number":255,"context_line":"  \"shared\" is fully implemented, the same aggregate)."},{"line_number":256,"context_line":"* However, a numbered group will always return results from the *same* RP."},{"line_number":257,"context_line":"  This is to satisfy `Requirement 2`_."},{"line_number":258,"context_line":"* Separate groups (numbered or un-numbered) may return results from the same"},{"line_number":259,"context_line":"  RP.  That is, you are not guaranteeing RP exclusivity by separating groups."},{"line_number":260,"context_line":"  (If you want to guarantee such exclusivity, you need to do it with traits.)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_36698b20","line":257,"updated":"2017-10-15 16:04:00.000000000","message":"And the same tree with other groups.\n\nA numbered group for 2 VFs, those two VFs must be on the same node.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":254,"context_line":"  may still return results from different RPs in the same tree (or, when"},{"line_number":255,"context_line":"  \"shared\" is fully implemented, the same aggregate)."},{"line_number":256,"context_line":"* However, a numbered group will always return results from the *same* RP."},{"line_number":257,"context_line":"  This is to satisfy `Requirement 2`_."},{"line_number":258,"context_line":"* Separate groups (numbered or un-numbered) may return results from the same"},{"line_number":259,"context_line":"  RP.  That is, you are not guaranteeing RP exclusivity by separating groups."},{"line_number":260,"context_line":"  (If you want to guarantee such exclusivity, you need to do it with traits.)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_c79b9015","line":257,"in_reply_to":"5f4e5783_36698b20","updated":"2017-10-16 13:22:16.000000000","message":"No, again, this is crucial: a numbered group will always return results from the *exact* same RP.  That\u0027s the whole point of this spec.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7a1b3d3f68a291c82fa936c305e70537ef378fe","unresolved":false,"context_lines":[{"line_number":264,"context_line":"  to traits.  This is to satisfy `Requirement 1`_."},{"line_number":265,"context_line":"* A given ``traits``\\ *N* list applies *only* to its matching ``resources``\\"},{"line_number":266,"context_line":"  *N* list.  This goes for the un-numbered ``traits``/``resources`` as well."},{"line_number":267,"context_line":"* The numeric suffixes are arbitrary.  Other than binding ``resources``\\ *N* to"},{"line_number":268,"context_line":"  ``traits``\\ *N*, they have no implied meaning.  In particular, they are not"},{"line_number":269,"context_line":"  required to be sequential; and there is no semantic significance to their"},{"line_number":270,"context_line":"  order."},{"line_number":271,"context_line":"* For both numbered and un-numbered ``resources``, a single"},{"line_number":272,"context_line":"  *resource_class*:*count* will never be split across multiple RPs."},{"line_number":273,"context_line":"  While such a split could be seen to be sane for e.g. VFs, it is clearly not"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_9605df16","line":270,"range":{"start_line":267,"start_character":2,"end_line":270,"end_character":8},"updated":"2017-10-15 16:04:00.000000000","message":"so I also can request like \"?resources7438734781\u003d...\u0026traits7438734781\u003d....\" :)\n\nI\u0027m thinking whether is it worth to support like this: \"?resources_VF\u003d...\u0026traits_VF\u003d....\". Just not limited to the number. more readable for the admin when creating the flavor debuging? but I guess the \"_VF\" is duplicated info, since the resource class has the info about the resource.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":264,"context_line":"  to traits.  This is to satisfy `Requirement 1`_."},{"line_number":265,"context_line":"* A given ``traits``\\ *N* list applies *only* to its matching ``resources``\\"},{"line_number":266,"context_line":"  *N* list.  This goes for the un-numbered ``traits``/``resources`` as well."},{"line_number":267,"context_line":"* The numeric suffixes are arbitrary.  Other than binding ``resources``\\ *N* to"},{"line_number":268,"context_line":"  ``traits``\\ *N*, they have no implied meaning.  In particular, they are not"},{"line_number":269,"context_line":"  required to be sequential; and there is no semantic significance to their"},{"line_number":270,"context_line":"  order."},{"line_number":271,"context_line":"* For both numbered and un-numbered ``resources``, a single"},{"line_number":272,"context_line":"  *resource_class*:*count* will never be split across multiple RPs."},{"line_number":273,"context_line":"  While such a split could be seen to be sane for e.g. VFs, it is clearly not"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_ea77719f","line":270,"range":{"start_line":267,"start_character":2,"end_line":270,"end_character":8},"in_reply_to":"5f4e5783_9605df16","updated":"2017-10-16 13:22:16.000000000","message":"I did discuss this a little bit in Alternatives (second bullet).  I\u0027m open to supporting different suffix things if you think it adds value.  Numbers seemed simple.\n\nAs for huge hard-to-read numbers, yes, it\u0027s possible.  But keep in mind that these suffixes are going to be created by operators in their flavors.  So they\u0027ll have a vested interest in making the groupings easily readable.\n\nFor that same reason, I can see the benefit to allowing any suffix string (as you say, \u0027_VF\u0027 could be more readable than \u00275\u0027).\n\nWhat do others think?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"* Specifying a ``resources`` (numbered or un-numbered) without a corresponding"},{"line_number":277,"context_line":"  ``traits`` returns results unfiltered by traits."},{"line_number":278,"context_line":"* It is an error to specify a ``traits`` (numbered or un-numbered) without a"},{"line_number":279,"context_line":"  corresponding ``resources``."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Syntax In Flavors"},{"line_number":282,"context_line":"^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_236a78ed","line":279,"updated":"2017-10-13 23:43:55.000000000","message":"This whole section is good I guess, and I\u0027m sure when we get sued the lawyers will have a field day nitpicking over the meaning of \"is\" and \"shall\". However, to me it\u0027s a little thick.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":276,"context_line":"* Specifying a ``resources`` (numbered or un-numbered) without a corresponding"},{"line_number":277,"context_line":"  ``traits`` returns results unfiltered by traits."},{"line_number":278,"context_line":"* It is an error to specify a ``traits`` (numbered or un-numbered) without a"},{"line_number":279,"context_line":"  corresponding ``resources``."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Syntax In Flavors"},{"line_number":282,"context_line":"^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_aac979ac","line":279,"in_reply_to":"5f4e5783_236a78ed","updated":"2017-10-16 13:22:16.000000000","message":"I agree it\u0027s \"thick\", but to me it\u0027s the most important part of the document.  The lawyer analogy is spot on: this is the contract describing the duties and obligations of the proposed syntax.  IMO, getting this stuff thought through and nailed down in the spec is preferable to deferring these details to the implementation, where a) the time spent discussing is less expected and more impactful to the schedule; and b) the results are buried in IRC or review comments and much more difficult for our posterity to find \u0026 understand.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"A given numbered ``resources`` or ``traits`` key may be repeated to specify"},{"line_number":310,"context_line":"multiple resources/traits in the same grouping, just as with the un-numbered"},{"line_number":311,"context_line":"syntax."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Syntax In the Placement API"},{"line_number":314,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_e3d340d4","line":311,"updated":"2017-10-13 23:43:55.000000000","message":"I think you need an actual example with real RCs in it for flavors, like you have below. I think you mean this (although it\u0027s not very clear to me):\n\n resources1:VCPU\u003d1\n trait1:HAS_SSE3\u003drequired\n resources2:VCPU\u003d1\n trait1:HAS_SSE3\u003dpreferred\n\nOf course that\u0027s not a good example with CPUs, so pick something better.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"A given numbered ``resources`` or ``traits`` key may be repeated to specify"},{"line_number":310,"context_line":"multiple resources/traits in the same grouping, just as with the un-numbered"},{"line_number":311,"context_line":"syntax."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Syntax In the Placement API"},{"line_number":314,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_aa25f95d","line":311,"in_reply_to":"5f4e5783_e3d340d4","updated":"2017-10-16 13:22:16.000000000","message":"Thank you, good call, done.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        \u0026resources1\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000"},{"line_number":337,"context_line":"        \u0026required1\u003dCUSTOM_PHYSNET_NET1"},{"line_number":338,"context_line":"        \u0026resources2\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:20000"},{"line_number":339,"context_line":"        \u0026required2\u003dCUSTOM_PHYSNET_NET2,NET_SPEED_10G_CAPABLE"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"There is no change to the response payload syntax."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_c305e447","line":339,"updated":"2017-10-13 23:43:55.000000000","message":"So in our handling of this query string, we\u0027ll need to just go do a prefix match on each key to decide what it means, and group by everything after the prefix I guess? Are the group identifiers always non-zero-padded numbers? Presumably no requirement that they\u0027re sequential?\n\nThis is ugly (although it is what we discussed) to me, and seemingly fragile where we might need something that matches a pattern in the future (i.e. resourcesFoo\u003dsomethingelse which would prefix match as a grouping). Iw was on the side of using a body document for this instead of trying to jam it all into a query string, I\u0027d like to point out :)","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cd6a1d67ce76b6b0929f60101b4268d81ee7090a","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        \u0026resources1\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000"},{"line_number":337,"context_line":"        \u0026required1\u003dCUSTOM_PHYSNET_NET1"},{"line_number":338,"context_line":"        \u0026resources2\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:20000"},{"line_number":339,"context_line":"        \u0026required2\u003dCUSTOM_PHYSNET_NET2,NET_SPEED_10G_CAPABLE"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"There is no change to the response payload syntax."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_d090e84c","line":339,"in_reply_to":"5f4e5783_aa32995c","updated":"2017-10-16 14:15:00.000000000","message":"My point about the pattern match is that this will eliminate our ability to ever have another query parameter that starts with \"resource\" or \"required\" because anything that starts with those prefixes would be considered a resource group.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        \u0026resources1\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000"},{"line_number":337,"context_line":"        \u0026required1\u003dCUSTOM_PHYSNET_NET1"},{"line_number":338,"context_line":"        \u0026resources2\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:20000"},{"line_number":339,"context_line":"        \u0026required2\u003dCUSTOM_PHYSNET_NET2,NET_SPEED_10G_CAPABLE"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"There is no change to the response payload syntax."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_aa32995c","line":339,"in_reply_to":"5f4e5783_c305e447","updated":"2017-10-16 13:22:16.000000000","message":"Right.  As pointed out in The Contract^W^WSemantics on L267, the suffixes are arbitrary and non-sequential.  There\u0027s no reason for them to be numbers, other than simplicity (see L351).  We could even apply a Postel-esque philosophy and document that the suffixes should be numeric, but actually write the code to accept any arbitrary string.  The processing would be the same, just without the validation, which would be arbitrary in any case.\n\nI\u0027m not sure I understand your statement about matching a pattern.  Even if we did enforce numeric-ness today, it would be trivial to loosen it to arbitrary strings (or some specific pattern) in the future.\n\nAnd yes, I made sure to note the JSON payload idea in Alternatives (L355).  The discussion at the PTG went something like, \"Yes, we\u0027ll ultimately need JSON payloads.  But this syntax will work for this set of use cases, and it\u0027s not *so* horrible that it warrants the extra architectural baggage.\"","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8c3e6e8486b48f7693cfed627b84c096a3bc4d18","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        \u0026resources1\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000"},{"line_number":337,"context_line":"        \u0026required1\u003dCUSTOM_PHYSNET_NET1"},{"line_number":338,"context_line":"        \u0026resources2\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:20000"},{"line_number":339,"context_line":"        \u0026required2\u003dCUSTOM_PHYSNET_NET2,NET_SPEED_10G_CAPABLE"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"There is no change to the response payload syntax."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_5b7f7914","line":339,"in_reply_to":"5f4e5783_d090e84c","updated":"2017-10-16 14:47:30.000000000","message":"Ah, gotcha.\n\nI think I\u0027m okay with limiting those prefixes.  In the event we need to extend the namespace and can\u0027t come up with a distinct word, we could move the new bit in front (\"foo_resources\u003dsomethingelse).  That would be preferable to namespacing resources\u003csomething-not-numeric\u003e separately, IMO.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":387,"context_line":"* No new database objects."},{"line_number":388,"context_line":"* No database schema changes."},{"line_number":389,"context_line":"* No database migration issues."},{"line_number":390,"context_line":"* No new or modified remotable objects."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"REST API impact"},{"line_number":393,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_a302e83b","line":390,"updated":"2017-10-13 23:43:55.000000000","message":"Usually we just say None like L385, but I appreciate the bragging.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":387,"context_line":"* No new database objects."},{"line_number":388,"context_line":"* No database schema changes."},{"line_number":389,"context_line":"* No database migration issues."},{"line_number":390,"context_line":"* No new or modified remotable objects."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"REST API impact"},{"line_number":393,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_0a1c0dbf","line":390,"in_reply_to":"5f4e5783_a302e83b","updated":"2017-10-16 13:22:16.000000000","message":"Totally bragging.  I wanted it to be clear that I thought it through.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":398,"context_line":"  arbitrary query parameter keys of the format ``resources``\\ *N* and"},{"line_number":399,"context_line":"  ``required``\\ *N*, where *N* can be any integer.  The format of the values to"},{"line_number":400,"context_line":"  these query parameters is identical to that of ``resources`` and"},{"line_number":401,"context_line":"  ``required``, respectively."},{"line_number":402,"context_line":"* There are no new APIs."},{"line_number":403,"context_line":"* There are no new response codes or semantics thereof."},{"line_number":404,"context_line":"* There are no changes to the response payload schema or structure.  The"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_e3a10048","line":401,"updated":"2017-10-13 23:43:55.000000000","message":"Okay this was my question from above. So prefix match and validate the group identifier as a base-10 integer I guess.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cd6a1d67ce76b6b0929f60101b4268d81ee7090a","unresolved":false,"context_lines":[{"line_number":398,"context_line":"  arbitrary query parameter keys of the format ``resources``\\ *N* and"},{"line_number":399,"context_line":"  ``required``\\ *N*, where *N* can be any integer.  The format of the values to"},{"line_number":400,"context_line":"  these query parameters is identical to that of ``resources`` and"},{"line_number":401,"context_line":"  ``required``, respectively."},{"line_number":402,"context_line":"* There are no new APIs."},{"line_number":403,"context_line":"* There are no new response codes or semantics thereof."},{"line_number":404,"context_line":"* There are no changes to the response payload schema or structure.  The"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_90b4b0d2","line":401,"in_reply_to":"5f4e5783_8ad35dd5","updated":"2017-10-16 14:15:00.000000000","message":"Okay, so we\u0027re clamping to digits to address my concern above about namespacing I guess.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":398,"context_line":"  arbitrary query parameter keys of the format ``resources``\\ *N* and"},{"line_number":399,"context_line":"  ``required``\\ *N*, where *N* can be any integer.  The format of the values to"},{"line_number":400,"context_line":"  these query parameters is identical to that of ``resources`` and"},{"line_number":401,"context_line":"  ``required``, respectively."},{"line_number":402,"context_line":"* There are no new APIs."},{"line_number":403,"context_line":"* There are no new response codes or semantics thereof."},{"line_number":404,"context_line":"* There are no changes to the response payload schema or structure.  The"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_8ad35dd5","line":401,"in_reply_to":"5f4e5783_e3a10048","updated":"2017-10-16 13:22:16.000000000","message":"Yup.  Again, that\u0027s an arbitrary decision, made because it\u0027s simple to document and validate.  I\u0027m open to other suggestions if they make sense and add value.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5ef75e0f13d4e3893a2456cd4890fc25a685d1b","unresolved":false,"context_lines":[{"line_number":443,"context_line":"* Deployers should be aware that the new function relies on new code in both"},{"line_number":444,"context_line":"  the scheduler and the `Placement API`_.  Upgrading either one without the"},{"line_number":445,"context_line":"  other will be harmless, but will result in the new function being"},{"line_number":446,"context_line":"  unavailable."},{"line_number":447,"context_line":"* There are no new config options."},{"line_number":448,"context_line":"* The changes take effect immediately upon availability of the code in the"},{"line_number":449,"context_line":"  scheduler and `Placement API`_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_03b65c8b","line":446,"updated":"2017-10-13 23:43:55.000000000","message":"We don\u0027t really allow this anyway, so not sure it needs to be said, TBH.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cfe1d5d5445a59bb6aef27d697aebf78ce3e7f74","unresolved":false,"context_lines":[{"line_number":443,"context_line":"* Deployers should be aware that the new function relies on new code in both"},{"line_number":444,"context_line":"  the scheduler and the `Placement API`_.  Upgrading either one without the"},{"line_number":445,"context_line":"  other will be harmless, but will result in the new function being"},{"line_number":446,"context_line":"  unavailable."},{"line_number":447,"context_line":"* There are no new config options."},{"line_number":448,"context_line":"* The changes take effect immediately upon availability of the code in the"},{"line_number":449,"context_line":"  scheduler and `Placement API`_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_aa9cd90d","line":446,"in_reply_to":"5f4e5783_03b65c8b","updated":"2017-10-16 13:22:16.000000000","message":"Okay, I didn\u0027t know that.  Though hypothetically some day when the placement API is separated out...?","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8c3e6e8486b48f7693cfed627b84c096a3bc4d18","unresolved":false,"context_lines":[{"line_number":443,"context_line":"* Deployers should be aware that the new function relies on new code in both"},{"line_number":444,"context_line":"  the scheduler and the `Placement API`_.  Upgrading either one without the"},{"line_number":445,"context_line":"  other will be harmless, but will result in the new function being"},{"line_number":446,"context_line":"  unavailable."},{"line_number":447,"context_line":"* There are no new config options."},{"line_number":448,"context_line":"* The changes take effect immediately upon availability of the code in the"},{"line_number":449,"context_line":"  scheduler and `Placement API`_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_9bfdf16f","line":446,"in_reply_to":"5f4e5783_50cf5855","updated":"2017-10-16 14:47:30.000000000","message":"Duly noted.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cd6a1d67ce76b6b0929f60101b4268d81ee7090a","unresolved":false,"context_lines":[{"line_number":443,"context_line":"* Deployers should be aware that the new function relies on new code in both"},{"line_number":444,"context_line":"  the scheduler and the `Placement API`_.  Upgrading either one without the"},{"line_number":445,"context_line":"  other will be harmless, but will result in the new function being"},{"line_number":446,"context_line":"  unavailable."},{"line_number":447,"context_line":"* There are no new config options."},{"line_number":448,"context_line":"* The changes take effect immediately upon availability of the code in the"},{"line_number":449,"context_line":"  scheduler and `Placement API`_."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f4e5783_50cf5855","line":446,"in_reply_to":"5f4e5783_aa9cd90d","updated":"2017-10-16 14:15:00.000000000","message":"Once it is, we\u0027ll require placement to be upgraded first.\n\nAll of these places where I\u0027m calling out stuff that probably doesn\u0027t need to be said is me trying to help you cut down the word count in this. I surely appreciate the detail, but it makes review rather onerous and the easier you can make it for the reviewers, the more likely it is that you\u0027ll get it landed. Just a tip.","commit_id":"7bd2565371fbf3bc338458ee59a9324045fea478"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"},{"line_number":25,"context_line":"  saturation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This specification attempts to address these requirements by way of a numbered"},{"line_number":28,"context_line":"syntax on resource and trait keys in flavor extra_specs and the ``GET"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_f76bb5ed","line":25,"range":{"start_line":24,"start_character":64,"end_line":25,"end_character":13},"updated":"2017-10-17 17:57:42.000000000","message":"or high availability? e.g. we may want to implicitly do it if we have no other choice or we may want to explicitly  spread for ha or performance reasons.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5208eb4feba2c2367d3600d66ec9bc6b7fcc7766","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  from the same resource provider."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* _`Requirement 3`: The ability to spread allocations of effectively-identical"},{"line_number":24,"context_line":"  resources across multiple resource providers in situations of high"},{"line_number":25,"context_line":"  saturation."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This specification attempts to address these requirements by way of a numbered"},{"line_number":28,"context_line":"syntax on resource and trait keys in flavor extra_specs and the ``GET"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_88869cb8","line":25,"range":{"start_line":24,"start_character":64,"end_line":25,"end_character":13},"in_reply_to":"5f4e5783_f76bb5ed","updated":"2017-10-17 19:03:46.000000000","message":"HA is more appropriately dealt with by making sure the RPs are *not* identical - that is, by giving them different traits that we would then key off of in different numbered groups to guarantee the spread.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"637a36e3fc99dbaa2efc5b70c58471a66a16bf4f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"* ``[RP3(SRIOV_NET_VF:1), RP3(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":132,"context_line":"* ``[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]``"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"This demonstrates the ability to ensure that allocations of *different*"},{"line_number":135,"context_line":"resource classes can be made to come from the *same* resource provider"},{"line_number":136,"context_line":"(`Requirement 2`_)."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_d603e20e","line":134,"updated":"2017-10-18 16:15:40.000000000","message":"Yeah, and this is basically what we only support today. If you need VCPU/MEMORY_MB/DISK_GB, placement is making the allocation against a single compute node RP.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    resources1 \u003d { resource_class1A: rc1A_count,"},{"line_number":208,"context_line":"                   resource_class1B: rc1B_count,"},{"line_number":209,"context_line":"                   ... },"},{"line_number":210,"context_line":"    required1 \u003d [ TRAIT_1C, TRAIT_1D, ... ],"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    resources2 \u003d { resource_class2A: rc2A_count,"},{"line_number":213,"context_line":"                   resource_class2B: rc2B_count,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_0aa184f8","line":210,"range":{"start_line":210,"start_character":3,"end_line":210,"end_character":44},"updated":"2017-10-17 17:57:42.000000000","message":"you are not suggesting we modify the trait itelf here corect.\ni think this shoudl still be jsut TRAIT_C as the relationhip to the resouce class request is captured by requires1","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5208eb4feba2c2367d3600d66ec9bc6b7fcc7766","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    resources1 \u003d { resource_class1A: rc1A_count,"},{"line_number":208,"context_line":"                   resource_class1B: rc1B_count,"},{"line_number":209,"context_line":"                   ... },"},{"line_number":210,"context_line":"    required1 \u003d [ TRAIT_1C, TRAIT_1D, ... ],"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    resources2 \u003d { resource_class2A: rc2A_count,"},{"line_number":213,"context_line":"                   resource_class2B: rc2B_count,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_284fa893","line":210,"range":{"start_line":210,"start_character":3,"end_line":210,"end_character":44},"in_reply_to":"5f4e5783_0aa184f8","updated":"2017-10-17 19:03:46.000000000","message":"I\u0027m deliberately highlighting that the traits in this grouping are not (necessarily) related to the traits in the other groupings.  I\u0027m sure I went overboard with the syntax, but read this as if it were a mathematical proof.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"637a36e3fc99dbaa2efc5b70c58471a66a16bf4f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"``allocation_requests`` list within the ``GET /allocation_candidates``"},{"line_number":228,"context_line":"response."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"* The semantic for the (single) un-numbered grouping is unchanged.  That is, it"},{"line_number":231,"context_line":"  may still return results from different RPs in the same tree (or, when"},{"line_number":232,"context_line":"  \"shared\" is fully implemented, the same aggregate)."},{"line_number":233,"context_line":"* However, a numbered group will always return results from the *same* RP."},{"line_number":234,"context_line":"  This is to satisfy `Requirement 2`_."},{"line_number":235,"context_line":"* Separate groups (numbered or un-numbered) may return results from the same"},{"line_number":236,"context_line":"  RP.  That is, you are not guaranteeing RP exclusivity by separating groups."},{"line_number":237,"context_line":"  (If you want to guarantee such exclusivity, you need to do it with traits.)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_99323da7","line":234,"range":{"start_line":230,"start_character":0,"end_line":234,"end_character":38},"updated":"2017-10-18 16:15:40.000000000","message":"If the semantics for numbering is just same or different RPs, why not use a flag to specify that rather than the arbitrary numbering scheme? Is that just to make flavor extra spec parsing easier?\n\nThe thing I wonder about with the numbering scheme is you can only specify one unnumbered set of resource classes with the flavors. You can specify N numbered sets of resource class requirements which will result in allocations against the same RP for those resources, but do we have cases where we want different sets of RPs with different resource classes?\n\nMaybe the 7th bullet in this list is asserting you can\u0027t do that for good reason.\n\nWas just trying to think if this would be more flexible doing like:\n\n    resources:VCPU\u003d2:same_provider\n    resources:MEMORY_MB\u003d2048:same_provider\n    trait:HW_CPU_X86_AVX\u003drequired:same_provider\n    trait:CUSTOM_MAGIC\u003drequired:same_provider\n    resources:SRIOV_NET_VF\u003d1:different_provider\n    resources:NET_EGRESS_BYTES_SEC\u003d10000:different_provider\n    trait:CUSTOM_PHYSNET_NET1\u003drequired:different_provider\n\nBut I quickly see with that you lose any ability to group things, so that falls apart.\n\n\u003clater\u003e\n\nSee this called out in the alternatives section.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    trait:HW_CPU_X86_AVX\u003drequired"},{"line_number":283,"context_line":"    trait:CUSTOM_MAGIC\u003drequired"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"**Proposed:** Allow the same syntax for numbered resource and trait groupings"},{"line_number":286,"context_line":"via the number being appended to the ``resources`` and ``trait`` keyword:"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":".. parsed-literal::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_eaa9888f","line":285,"range":{"start_line":285,"start_character":40,"end_line":285,"end_character":57},"updated":"2017-10-17 17:57:42.000000000","message":"perhaps for ease of use instead of number you could any opaque set of characters instead of a number\n\nso effectively this reserves all resource* and trait* namespaces for grouping traits and resources.\n\ne.g. resouce_nic1:SRIOV_NET_VF\u003d1\n     trait_nic1:HW_NIC_ACCEL_SSL\u003drequired\n\nyou coudl still jsut use number but it would be simpler to reason about if you could have names also.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    resources1:SRIOV_NET_VF\u003d1"},{"line_number":304,"context_line":"    resources1:NET_EGRESS_BYTES_SEC\u003d10000"},{"line_number":305,"context_line":"    trait1:CUSTOM_PHYSNET_NET1\u003drequired"},{"line_number":306,"context_line":"    resources2:SRIOV_NET_VF\u003d1"},{"line_number":307,"context_line":"    resources2:NET_EGRESS_BYTES_SEC:20000"},{"line_number":308,"context_line":"    trait2:CUSTOM_PHYSNET_NET2\u003drequired"},{"line_number":309,"context_line":"    trait2:HW_NIC_ACCEL_SSL\u003drequired"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"Syntax In the Placement API"},{"line_number":312,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_2a3a0098","line":309,"range":{"start_line":306,"start_character":4,"end_line":309,"end_character":36},"updated":"2017-10-17 17:57:42.000000000","message":"i think this answers my previous question in that the trait\nHW_NIC_ACCEL_SSL is not modified and grouping is done via the namespace.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"637a36e3fc99dbaa2efc5b70c58471a66a16bf4f","unresolved":false,"context_lines":[{"line_number":312,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":313,"context_line":"In reference to the `Logical Representation`_, the existing (once"},{"line_number":314,"context_line":"`Dependencies`_ have landed) `Placement API`_ implementation is via the ``GET"},{"line_number":315,"context_line":"/allocation_candidates`` querystring as follows:"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"* The ``resources`` are grouped together under a single key called"},{"line_number":318,"context_line":"  ``resources`` whose value is a comma-separated list of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_5904c57b","line":315,"range":{"start_line":315,"start_character":25,"end_line":315,"end_character":36},"updated":"2017-10-18 16:15:40.000000000","message":"I guess the ship has sailed on using POST with a request body...but seems it would have come in handy here to avoid the complicated query string syntax with GET.\n\n\u003clater\u003e\n\nOK I see this called out in the alternatives section.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":329,"context_line":"via the number being appended to the ``resources`` and ``required`` keywords."},{"line_number":330,"context_line":"In the following example, groups 1 and 2 represent `Use Case 3`_::"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    GET /allocation_candidates?resources\u003dVCPU:2,MEMORY_MB:2048"},{"line_number":333,"context_line":"        \u0026required\u003dHW_CPU_X86_AVX,CUSTOM_MAGIC"},{"line_number":334,"context_line":"        \u0026resources1\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000"},{"line_number":335,"context_line":"        \u0026required1\u003dCUSTOM_PHYSNET_NET1"},{"line_number":336,"context_line":"        \u0026resources2\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:20000"},{"line_number":337,"context_line":"        \u0026required2\u003dCUSTOM_PHYSNET_NET2,HW_NIC_ACCEL_SSL"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"There is no change to the response payload syntax."},{"line_number":340,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_6ad91820","line":337,"range":{"start_line":332,"start_character":3,"end_line":337,"end_character":55},"updated":"2017-10-17 17:57:42.000000000","message":"as i said above it might be nice to allow any string of characters instead of just a number for grouping but i think this is easy to understand and flexible.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"853cef8bf955894544cf3ef2ab86d837e1156f24","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  implemented.  However, completion of the shared resource providers effort is"},{"line_number":347,"context_line":"  not in scope for Queens."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"* We could allow the \"number\" suffixes to be any arbitrary string.  However,"},{"line_number":350,"context_line":"  using integers is easy to understand and validate, and obviates worries about"},{"line_number":351,"context_line":"  escaping/encoding special characters, etc."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"* There has been discussion over time about the need for a JSON payload-based"},{"line_number":354,"context_line":"  API to enable richer expression to request allocation candidates.  While this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_aa4150ab","line":351,"range":{"start_line":349,"start_character":2,"end_line":351,"end_character":44},"updated":"2017-10-17 17:57:42.000000000","message":"ah i see this was already adressed. im not sure number are easier to understand but i would agree that the cost of having to deal with escapes and encoding out ways and usiblity benifit","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8a3774218fdaaabe459007fab07ea9d90635d14b","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  implemented.  However, completion of the shared resource providers effort is"},{"line_number":347,"context_line":"  not in scope for Queens."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"* We could allow the \"number\" suffixes to be any arbitrary string.  However,"},{"line_number":350,"context_line":"  using integers is easy to understand and validate, and obviates worries about"},{"line_number":351,"context_line":"  escaping/encoding special characters, etc."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"* There has been discussion over time about the need for a JSON payload-based"},{"line_number":354,"context_line":"  API to enable richer expression to request allocation candidates.  While this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_43e08726","line":351,"range":{"start_line":349,"start_character":2,"end_line":351,"end_character":44},"in_reply_to":"5f4e5783_0305ef10","updated":"2017-10-17 19:08:48.000000000","message":"Please do not use anything other than simple integers.\n\nAnything else and people will start trying to somehow put meaning in the suffix for some reason that we can\u0027t perceive now, and then they\u0027ll start relying on it and unintended consequences will abound and goodness we\u0027ve got enough of those.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3436eee4b147371f0c5fbc872cd8752fe9acc3a7","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  implemented.  However, completion of the shared resource providers effort is"},{"line_number":347,"context_line":"  not in scope for Queens."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"* We could allow the \"number\" suffixes to be any arbitrary string.  However,"},{"line_number":350,"context_line":"  using integers is easy to understand and validate, and obviates worries about"},{"line_number":351,"context_line":"  escaping/encoding special characters, etc."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"* There has been discussion over time about the need for a JSON payload-based"},{"line_number":354,"context_line":"  API to enable richer expression to request allocation candidates.  While this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_becd12b8","line":351,"range":{"start_line":349,"start_character":2,"end_line":351,"end_character":44},"in_reply_to":"5f4e5783_43e08726","updated":"2017-10-17 19:41:22.000000000","message":"That counts as feeling strongly :)\n\nWill leave it as is.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5208eb4feba2c2367d3600d66ec9bc6b7fcc7766","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  implemented.  However, completion of the shared resource providers effort is"},{"line_number":347,"context_line":"  not in scope for Queens."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"* We could allow the \"number\" suffixes to be any arbitrary string.  However,"},{"line_number":350,"context_line":"  using integers is easy to understand and validate, and obviates worries about"},{"line_number":351,"context_line":"  escaping/encoding special characters, etc."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"* There has been discussion over time about the need for a JSON payload-based"},{"line_number":354,"context_line":"  API to enable richer expression to request allocation candidates.  While this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f4e5783_0305ef10","line":351,"range":{"start_line":349,"start_character":2,"end_line":351,"end_character":44},"in_reply_to":"5f4e5783_aa4150ab","updated":"2017-10-17 19:03:46.000000000","message":"Yeah, this has been brought up multiple times by multiple people, and I agree it would provide some benefit.  If we settled on a simple-but-sufficiently-restrictive pattern - like \\w+ - I could be convinced to make it so.  Wondering if other reviewers feel strongly one way or the other.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9bfb0c7ce4037f50d8de19d5393113cfdb47c698","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  implemented.  However, completion of the shared resource providers effort is"},{"line_number":347,"context_line":"  not in scope for Queens."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"* We could allow the \"number\" suffixes to be any arbitrary string.  However,"},{"line_number":350,"context_line":"  using integers is easy to understand and validate, and obviates worries about"},{"line_number":351,"context_line":"  escaping/encoding special characters, etc."},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"* There has been discussion over time about the need for a JSON payload-based"},{"line_number":354,"context_line":"  API to enable richer expression to request allocation candidates.  While this"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_6727ecb8","line":351,"range":{"start_line":349,"start_character":2,"end_line":351,"end_character":44},"in_reply_to":"5f4e5783_becd12b8","updated":"2017-10-18 05:47:52.000000000","message":"I also raise that. but yea, after thinking about some example, I feel If that is for the admin can put some hint in the prefix, but that sounds like the resource class name and traits already have the detailed info.  for example:\n\nresources_vf_net1_ssl\u003dSRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC:10000\u0026trais_vf_net1_ssl\u003dCUSTOM_PHYSIC_NET1,HW_NIC_ACCEL_SSL\n\nI didn\u0027t feel anything better","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"637a36e3fc99dbaa2efc5b70c58471a66a16bf4f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"  simple) enhancements to the querystring syntax of the existing ``GET"},{"line_number":358,"context_line":"  /allocation_candidates`` API."},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"* It has been suggested to include (or at least keep the way open for) syntax"},{"line_number":361,"context_line":"  that would allow the user to express (anti-)affinity of resources.  The"},{"line_number":362,"context_line":"  change proposed by this spec leaves a small niche of affinity-related use"},{"line_number":363,"context_line":"  cases unsatisfied.  The scope and exact form of, and real-world need for,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f4b6375_99cb5d1d","line":360,"updated":"2017-10-18 16:15:40.000000000","message":"Good point. I think when we get to the point of needing to describe affinity rules for providers of resources, we\u0027re going to seriously consider using POST with a detailed request body rather than GET with a complicated query string syntax.","commit_id":"5bdab45dd3d3543cafaf645f7e9dc5515d490a1f"}]}
