)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"481575470f3a9237f87d285fe57d7ba83315f10d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Neutron needs to know which resource provider provides the bandwidth"},{"line_number":11,"context_line":"resource for each port in the server create request."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Story: 2005575"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Iafdb0eab9b41f4c34c93cada08a4da27cf4b1499"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_6099b46c","line":13,"updated":"2019-05-07 17:10:03.000000000","message":"I\u0027ve added a task 30804 under that story for this spec, just so we hae something to hang this on.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Neutron needs to know which resource provider provides the bandwidth"},{"line_number":11,"context_line":"resource for each port in the server create request."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Story: 2005575"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Iafdb0eab9b41f4c34c93cada08a4da27cf4b1499"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bfb3d3c7_dec6de9a","line":13,"in_reply_to":"dfbec78f_6099b46c","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"}],"doc/source/specs/train/approved/placement-resource-provider-request-group-mapping-in-allocation-candidates.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To support QoS minimum bandwidth policy during server scheduling Neutron needs"},{"line_number":14,"context_line":"to know which resource provider provides the bandwidth resource for each port"},{"line_number":15,"context_line":"in the server create request. Similar need aries in case of handling VGPUs"},{"line_number":16,"context_line":"and accelerator devices."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_5b80c746","line":15,"range":{"start_line":15,"start_character":38,"end_line":15,"end_character":49},"updated":"2019-05-13 16:12:20.000000000","message":"needs arise","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To support QoS minimum bandwidth policy during server scheduling Neutron needs"},{"line_number":14,"context_line":"to know which resource provider provides the bandwidth resource for each port"},{"line_number":15,"context_line":"in the server create request. Similar need aries in case of handling VGPUs"},{"line_number":16,"context_line":"and accelerator devices."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_db2830e3","line":15,"range":{"start_line":15,"start_character":38,"end_line":15,"end_character":49},"in_reply_to":"dfbec78f_5b80c746","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"information about which granular request group is fulfilled by which RP in the"},{"line_number":24,"context_line":"candidate. For example the resource request of a Neutron port is mapped to a"},{"line_number":25,"context_line":"granular request group by Nova towards Placement during scheduling. After"},{"line_number":26,"context_line":"scheduling Neutron needs the information which port got allocation from which"},{"line_number":27,"context_line":"RP to set up the proper port binding towards those network device RPs."},{"line_number":28,"context_line":"Similar examples can be created with VGPU and accelerator devices."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_5811ad03","line":26,"range":{"start_line":26,"start_character":29,"end_line":26,"end_character":41},"updated":"2019-05-13 16:12:20.000000000","message":"information about","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"information about which granular request group is fulfilled by which RP in the"},{"line_number":24,"context_line":"candidate. For example the resource request of a Neutron port is mapped to a"},{"line_number":25,"context_line":"granular request group by Nova towards Placement during scheduling. After"},{"line_number":26,"context_line":"scheduling Neutron needs the information which port got allocation from which"},{"line_number":27,"context_line":"RP to set up the proper port binding towards those network device RPs."},{"line_number":28,"context_line":"Similar examples can be created with VGPU and accelerator devices."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_9b1e38b9","line":26,"range":{"start_line":26,"start_character":29,"end_line":26,"end_character":41},"in_reply_to":"dfbec78f_5811ad03","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"could include the necessary mapping information in the response with"},{"line_number":38,"context_line":"significantly less effort."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"So doing the mapping in Nova also duplicates logic that already implemented in"},{"line_number":41,"context_line":"Placement."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_d8fcbdb6","line":40,"range":{"start_line":40,"start_character":51,"end_line":40,"end_character":63},"updated":"2019-05-13 16:12:20.000000000","message":"that is already","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"could include the necessary mapping information in the response with"},{"line_number":38,"context_line":"significantly less effort."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"So doing the mapping in Nova also duplicates logic that already implemented in"},{"line_number":41,"context_line":"Placement."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_5b7a00f1","line":40,"range":{"start_line":40,"start_character":51,"end_line":40,"end_character":63},"in_reply_to":"dfbec78f_d8fcbdb6","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Non-scalable Nova based solution"},{"line_number":65,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":66,"context_line":"Have a single compute with the following inventories::"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  Compute RP (name\u003dcompute1, uuid\u003dcompute_uuid)"},{"line_number":69,"context_line":"   +    CPU \u003d 1"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_f8e74111","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":4},"updated":"2019-05-13 16:12:20.000000000","message":"Given","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Non-scalable Nova based solution"},{"line_number":65,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":66,"context_line":"Have a single compute with the following inventories::"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  Compute RP (name\u003dcompute1, uuid\u003dcompute_uuid)"},{"line_number":69,"context_line":"   +    CPU \u003d 1"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_db6d9032","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":4},"in_reply_to":"dfbec78f_f8e74111","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"481575470f3a9237f87d285fe57d7ba83315f10d","unresolved":false,"context_lines":[{"line_number":311,"context_line":"REST API impact"},{"line_number":312,"context_line":"---------------"},{"line_number":313,"context_line":"Extend the response of the ``GET /allocation_candidates`` API with"},{"line_number":314,"context_line":"an extra field ``mappigns`` for each candidate in a new microversion. This"},{"line_number":315,"context_line":"field contains a mapping between resource request group names and RP UUIDs for"},{"line_number":316,"context_line":"each candidate to express which RP provides the resource for which request"},{"line_number":317,"context_line":"groups."}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_20565c5e","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":25},"updated":"2019-05-07 17:10:03.000000000","message":"mappings","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":311,"context_line":"REST API impact"},{"line_number":312,"context_line":"---------------"},{"line_number":313,"context_line":"Extend the response of the ``GET /allocation_candidates`` API with"},{"line_number":314,"context_line":"an extra field ``mappigns`` for each candidate in a new microversion. This"},{"line_number":315,"context_line":"field contains a mapping between resource request group names and RP UUIDs for"},{"line_number":316,"context_line":"each candidate to express which RP provides the resource for which request"},{"line_number":317,"context_line":"groups."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_bb70dc09","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":25},"in_reply_to":"dfbec78f_20565c5e","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_38ce392d","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"updated":"2019-05-13 16:12:20.000000000","message":"I think we\u0027ve had this discussion before, but \u0027resourceless request groups\u0027 [1] and \u0027same_subtree\u0027 [2] make it worth bringing up again.\n\nWe should consider making the key *just* the suffix, instead of including \u0027resources\u0027. I know that makes the unnumbered (\"unspecified\") request group\u0027s key \"\" (the empty string) which is kind of gross. But it makes some aspects of resourceless request groups easier. And it aligns better with how we\u0027re planning on expressing the suffixes in same_subtree.\n\n(What\u0027s that you say? Why would the resourceless request group show up in the mappings dict if there are no allocations associated with it? Because I want to know which provider was matched as the subtree root (NUMA node etc.).)\n\n[1] https://review.opendev.org/#/c/658510/2/doc/source/specs/train/approved/2005575-nested-magic.rst@216\n[2] https://review.opendev.org/#/c/658510/2/doc/source/specs/train/approved/2005575-nested-magic.rst@155","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"481c28ff31c9679bb8f721a1d40a401c1a45e4cb","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_f6aa6283","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"in_reply_to":"bfb3d3c7_7e5f3541","updated":"2019-05-20 18:48:28.000000000","message":"\u003e I think empty string as key is fine given that it\u0027s legit for the\n \u003e data structure involved.\n \u003e \n \u003e If we special case it, it causes trouble and noise for lots of\n \u003e code, that will already be somewhat troublesome, let\u0027s try to avoid\n \u003e special cases.\n\nWhew, ++, let\u0027s do this.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_bb49bcb7","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"in_reply_to":"bfb3d3c7_f6aa6283","updated":"2019-05-28 09:00:14.000000000","message":"Empty string it is.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec4dd7c25e77e76eb6801393deb5feff40b6a9b0","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_43de906d","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"in_reply_to":"dfbec78f_38ce392d","updated":"2019-05-14 10:00:17.000000000","message":"yeah, \"\" as an ID is pretty gross. But your point about the resourceless group turns me over to your side. There it is meaningless to talk about \"resources\u003cID\u003e\" as there was no resources involved in the calculation of the mapping. \n\nCan we give a better / default ID than \"\" to the unnumbered group?","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8752dcb9946bb8c0f06a35de2ef0395cdaeb1090","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_65c94faa","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"in_reply_to":"dfbec78f_43de906d","updated":"2019-05-14 19:58:01.000000000","message":"\u003e Can we give a better / default ID than \"\" to the unnumbered group?\n\nNothing obviously lovely comes to mind, but I\u0027m open to suggestions. Some brainstorming:\n\n- If we were to go the route of literally replacing \"\" with $something, we would have to avoid collisions somehow, like by using at least one character that\u0027s illegal on input, e.g. \"\u003cNone\u003e\".\n\n- A more drastic option, since we\u0027re spinning a new microversion anyway, is to eliminate the unspecified group entirely. We can probably only get away with this if we have a way to get the unspecified group\u0027s behavior out of a granular group. Which just might be closer than you think [1].\n\n- All that said, for the record, I don\u0027t hate \"\" enough to spend a lot of time and energy trying to avoid it, unless there are additional benefits. (But eliminating the unspecified group has muchos additional benefits IMO.)\n\n[1] https://review.opendev.org/#/c/658510/2/doc/source/specs/train/approved/2005575-nested-magic.rst@134","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6e54d5a257bfa51c106076fd948166acd8fa236e","unresolved":false,"context_lines":[{"line_number":354,"context_line":"              }"},{"line_number":355,"context_line":"           },"},{"line_number":356,"context_line":"           \"mappings\": {"},{"line_number":357,"context_line":"               \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":358,"context_line":"               \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_7e5f3541","line":357,"range":{"start_line":357,"start_character":16,"end_line":357,"end_character":26},"in_reply_to":"dfbec78f_65c94faa","updated":"2019-05-20 11:22:47.000000000","message":"I think empty string as key is fine given that it\u0027s legit for the data structure involved.\n\nIf we special case it, it causes trouble and noise for lots of code, that will already be somewhat troublesome, let\u0027s try to avoid special cases.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"},{"line_number":361,"context_line":"        },"},{"line_number":362,"context_line":"     ],"},{"line_number":363,"context_line":"     \"provider_summaries\":{"},{"line_number":364,"context_line":"         // unchanged"},{"line_number":365,"context_line":"     }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_98be45b2","line":362,"updated":"2019-05-13 16:12:20.000000000","message":"and similar for the other candidate where the bw amounts are reversed.\n\nI wonder if it might be worth including both candidates in their entirety for clarity.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":359,"context_line":"               \"resources\": [compute_uuid],"},{"line_number":360,"context_line":"           },"},{"line_number":361,"context_line":"        },"},{"line_number":362,"context_line":"     ],"},{"line_number":363,"context_line":"     \"provider_summaries\":{"},{"line_number":364,"context_line":"         // unchanged"},{"line_number":365,"context_line":"     }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_1be7a8ae","line":362,"in_reply_to":"dfbec78f_98be45b2","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_58ec4d8e","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"updated":"2019-05-13 16:12:20.000000000","message":"...until can_split [1].\n\n\u003d\u003d\u003d\u003d\u003dIGNORE\u003d\u003d\u003d\u003d\u003d\u003e\n[I indulged stream-of-consciousness here. It would lead to rewriting the world, which is impractical and almost certainly unnecessary.]\n\nWhich also makes me wonder if we should go so far as to specify resource *classes* in the mapping value:\n\n mappings: {\n   \"1\": [\n     uuid5(compute1:eth0): [\n       \u0027NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\u0027,\n       \u0027NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\u0027,\n     ]\n   ],\n   ...\n }\n\nBecause when group_policy\u003dnone we can have candidates with inventory amounts accumulated from multiple request groups. So in fact, just the resource class isn\u0027t enough; we need the resource amounts as well:\n\n mappings: {\n   \"1\": [\n     uuid5(compute1:eth0): {\n       \u0027NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\u0027: 1000,\n       \u0027NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\u0027: 1000,\n     }\n   ],\n   ...\n }\n\n...which, um, makes the \"allocations\" dict almost obsolete, except that it\u0027s still the format PUT /allocations expects. But we could fix that...\n\u003c\u003d\u003d\u003d\u003d\u003dIGNORE\u003d\u003d\u003d\u003d\u003d\n\n[1] https://review.opendev.org/#/c/658510/2/doc/source/specs/train/approved/2005575-nested-magic.rst@74","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_bbf77c59","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"in_reply_to":"bfb3d3c7_560b2e8d","updated":"2019-05-28 09:00:14.000000000","message":"Disregarding original comment from Eric.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"481c28ff31c9679bb8f721a1d40a401c1a45e4cb","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_560b2e8d","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"in_reply_to":"bfb3d3c7_990fa32d","updated":"2019-05-20 18:48:28.000000000","message":"\u003e As I\u0027ve said in my comments on https://review.opendev.org/#/c/658510/\n \u003e I think can_split should be constrained\n\nAck. I\u0027ll need to go meditate on that for a while. For now, disregard my comments above, including the one about adding \"a couple of extra words\". If we decide in nested-magic that we can\u0027t constrain can_split, we can always come back and add those words later.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec4dd7c25e77e76eb6801393deb5feff40b6a9b0","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_a3faed3f","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"in_reply_to":"dfbec78f_58ec4d8e","updated":"2019-05-14 10:00:17.000000000","message":"Ohh, now I feel bad about the current proposal. The can_split does make the currently proposed mappings pretty useless in the split cases. Even if neutron ports won\u0027t ever ask for a split. So while what is proposed here is good for bandwidth (and maybe for accelerators) it does not make sense in general.\n\nHow does others feel about it? Would it be a acceptable compromise to add\n  mappings: {\n    \u003cgroup-name\u003e: [\u003crp-uuid-1\u003e, \u003crp-uuid-2\u003e]\n  }\n\nnow. And extend it later to a more granular (sic!) description:\n  mappings: {\n    \u003cgroup-name\u003e: [\n      \u003crp-uuid-1\u003e: { //describing _what_ is provided by \u003crp-uuid-1 for _this group_}\n      \u003crp-uuid-2\u003e: { //... }\n    ]\n  }\n\nDoes it feel like a good API evolution plan?","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6e54d5a257bfa51c106076fd948166acd8fa236e","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_990fa32d","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"in_reply_to":"dfbec78f_65daaf4b","updated":"2019-05-20 11:22:47.000000000","message":"If we can at all avoid it, I\u0027d prefer that we avoid consider mappings a place where we can start dropping more information on an as needed basis because it is convenient. We need to remember that the number of bytes sent in an /allocation_candidates response does matter, at least some.\n\nAs I\u0027ve said in my comments on https://review.opendev.org/#/c/658510/ I think can_split should be constrained (again if at all possible) to the original use case we discussed: enabling simple queries to land on complex topologies (spread VCPU on NUMA nodes that are hosting VCPU). It should not be (if at all possible) yet another way to express complex modeling. request groups are for that (and the addition of subtree handling).\n\nAnd to say it again: if at all possible. If we have to, then we do, but we should think really hard about it.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8752dcb9946bb8c0f06a35de2ef0395cdaeb1090","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"The numbered groups are always satisfied by a single RP so the length of the"},{"line_number":371,"context_line":"mapping value will be always 1. However the unnumbered group might be satisfied"},{"line_number":372,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_65daaf4b","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":30},"in_reply_to":"dfbec78f_a3faed3f","updated":"2019-05-14 19:58:01.000000000","message":"\u003e Does it feel like a good API evolution plan?\n\nYes, that\u0027s perfectly fine. Just add a couple of extra words noting that:\n\n\"...numbered groups are always satisfied by a single RP (so the length of the mapping value will be 1) *unless* the group has a `can_split$S queryparameter`_.\"\n\nOr you could just delete the sentence :)","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_db2fd785","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"updated":"2019-05-13 16:12:20.000000000","message":"Is that what we decided? As opposed to having the server ignore it?","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"481c28ff31c9679bb8f721a1d40a401c1a45e4cb","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_b6a2aa99","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"in_reply_to":"bfb3d3c7_192df394","updated":"2019-05-20 18:48:28.000000000","message":"I\u0027m fine either way. Just want whichever we don\u0027t choose to be mentioned in Alternatives.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_3b6f0cfd","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"in_reply_to":"bfb3d3c7_b6a2aa99","updated":"2019-05-28 09:00:14.000000000","message":"Following Chris suggestion about the POST /allocations","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8752dcb9946bb8c0f06a35de2ef0395cdaeb1090","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_e5ed3ff0","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"in_reply_to":"dfbec78f_8306c81b","updated":"2019-05-14 19:58:01.000000000","message":"Works for me. May just want to mention that briefly in Alternatives.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec4dd7c25e77e76eb6801393deb5feff40b6a9b0","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_8306c81b","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"in_reply_to":"dfbec78f_db2fd785","updated":"2019-05-14 10:00:17.000000000","message":"I quickly re-read the mail thread [1] and it seems it wasn\u0027t decided. You noted in [1]:\n\"\n- Violate the \"black box\" principle and require one side or the other to\nwork around it (either client removes or placement ignores the new key\non PUT /allocations). As I said further down in [4], I don\u0027t care about\nthat. (Ed?)\n\"\n\n[1] http://lists.openstack.org/pipermail/openstack-discuss/2019-April/004894.html\n\nI\u0027m fine with the nova impact to strip the mappings key as nova anyhow needs to access this information to send it to neutron in the port binding. In the other hand extending the PUT /allocation schema in placement seem to me more expensive.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6e54d5a257bfa51c106076fd948166acd8fa236e","unresolved":false,"context_lines":[{"line_number":373,"context_line":"than 1."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"Note that this new field is not part of the ``POST /allocations`` schema so the"},{"line_number":376,"context_line":"client needs to strip it from the candidate before posting that back to"},{"line_number":377,"context_line":"Placement to make the allocation."},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"*Alternatively* the mapping can be added as a separate top level key to the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_192df394","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":25},"in_reply_to":"dfbec78f_e5ed3ff0","updated":"2019-05-20 11:22:47.000000000","message":"My feeling (today) is that if placement is sending it to a client, then it is appropriate for placement to ignore it when a client happens to send it back.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":438,"context_line":"         {"},{"line_number":439,"context_line":"             \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":440,"context_line":"             \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":441,"context_line":"             \"resoruces\": [compute_uuid],"},{"line_number":442,"context_line":"         },"},{"line_number":443,"context_line":"         {"},{"line_number":444,"context_line":"             \"resources1\": [uuid5(compute1:eth1)],"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_9bef1f1d","line":441,"range":{"start_line":441,"start_character":14,"end_line":441,"end_character":23},"updated":"2019-05-13 16:12:20.000000000","message":"resources","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":438,"context_line":"         {"},{"line_number":439,"context_line":"             \"resources1\": [uuid5(compute1:eth0)],"},{"line_number":440,"context_line":"             \"resources2\": [uuid5(compute1:eth1)],"},{"line_number":441,"context_line":"             \"resoruces\": [compute_uuid],"},{"line_number":442,"context_line":"         },"},{"line_number":443,"context_line":"         {"},{"line_number":444,"context_line":"             \"resources1\": [uuid5(compute1:eth1)],"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_db77d0d3","line":441,"range":{"start_line":441,"start_character":14,"end_line":441,"end_character":23},"in_reply_to":"dfbec78f_9bef1f1d","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":443,"context_line":"         {"},{"line_number":444,"context_line":"             \"resources1\": [uuid5(compute1:eth1)],"},{"line_number":445,"context_line":"             \"resources2\": [uuid5(compute1:eth0)],"},{"line_number":446,"context_line":"             \"resoruces\": [compute_uuid],"},{"line_number":447,"context_line":"         }"},{"line_number":448,"context_line":"     ]"},{"line_number":449,"context_line":"  }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_3bf073fd","line":446,"range":{"start_line":446,"start_character":14,"end_line":446,"end_character":23},"updated":"2019-05-13 16:12:20.000000000","message":"resources","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":443,"context_line":"         {"},{"line_number":444,"context_line":"             \"resources1\": [uuid5(compute1:eth1)],"},{"line_number":445,"context_line":"             \"resources2\": [uuid5(compute1:eth0)],"},{"line_number":446,"context_line":"             \"resoruces\": [compute_uuid],"},{"line_number":447,"context_line":"         }"},{"line_number":448,"context_line":"     ]"},{"line_number":449,"context_line":"  }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_9b7dd8b3","line":446,"range":{"start_line":446,"start_character":14,"end_line":446,"end_character":23},"in_reply_to":"dfbec78f_3bf073fd","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"481575470f3a9237f87d285fe57d7ba83315f10d","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"This has the disadvantage that one mapping in the"},{"line_number":457,"context_line":"``resource_provider-request_group-mappings`` connected to one candidate"},{"line_number":458,"context_line":"in the allocation_requests list by the list index only."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Security impact"},{"line_number":461,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_e0e4c4ae","line":458,"updated":"2019-05-07 17:10:03.000000000","message":"Thanks for including this alternative for completeness.\n\nHowever, we\u0027ve pretty much decided that finding by index is ... annoying.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"This has the disadvantage that one mapping in the"},{"line_number":457,"context_line":"``resource_provider-request_group-mappings`` connected to one candidate"},{"line_number":458,"context_line":"in the allocation_requests list by the list index only."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Security impact"},{"line_number":461,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_fe95e287","line":458,"in_reply_to":"dfbec78f_3b6dd3cb","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"This has the disadvantage that one mapping in the"},{"line_number":457,"context_line":"``resource_provider-request_group-mappings`` connected to one candidate"},{"line_number":458,"context_line":"in the allocation_requests list by the list index only."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Security impact"},{"line_number":461,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_3b6dd3cb","line":458,"in_reply_to":"dfbec78f_e0e4c4ae","updated":"2019-05-13 16:12:20.000000000","message":"Yeah, good to have this info in here, but the wording should more strongly indicate that this is *not* how we\u0027re going to do it.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"481575470f3a9237f87d285fe57d7ba83315f10d","unresolved":false,"context_lines":[{"line_number":499,"context_line":"----------"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"* Extend the `placement allocation candidate generation algorithm`_ to return"},{"line_number":502,"context_line":"  the mapping that is internally calculated."},{"line_number":503,"context_line":"* Extend the API with a new microversion to return the mapping to the API"},{"line_number":504,"context_line":"  client as well"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_4084b0b1","line":502,"updated":"2019-05-07 17:10:03.000000000","message":"Do we carry the group identifiers throughout the stack of the algorithm to make this easy enough?\n\n/me hopes so","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"----------"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"* Extend the `placement allocation candidate generation algorithm`_ to return"},{"line_number":502,"context_line":"  the mapping that is internally calculated."},{"line_number":503,"context_line":"* Extend the API with a new microversion to return the mapping to the API"},{"line_number":504,"context_line":"  client as well"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_98a165fb","line":502,"in_reply_to":"dfbec78f_4084b0b1","updated":"2019-05-13 16:12:20.000000000","message":"Yeah, we still have them in _merge_candidates, which is probably where this logic will live (or be called from). \\o/","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cbc6bb3230e63c9cdf45a84e4c0ea773a95e91f5","unresolved":false,"context_lines":[{"line_number":535,"context_line":"   * - Release Name"},{"line_number":536,"context_line":"     - Description"},{"line_number":537,"context_line":"   * - Train"},{"line_number":538,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dfbec78f_bbb54334","line":538,"updated":"2019-05-13 16:12:20.000000000","message":"I think this should make reference to the stein spec in nova.","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e4e75fffa84aa7dab3e189d47564e6c67085a89c","unresolved":false,"context_lines":[{"line_number":535,"context_line":"   * - Release Name"},{"line_number":536,"context_line":"     - Description"},{"line_number":537,"context_line":"   * - Train"},{"line_number":538,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bfb3d3c7_1ec9d6aa","line":538,"in_reply_to":"dfbec78f_bbb54334","updated":"2019-05-28 09:00:14.000000000","message":"Done","commit_id":"2f4cf88194a9e25c6ff94433f4163b40f9488cb0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"97c9b46f4cdf7036f62271d85025382348588fbf","unresolved":false,"context_lines":[{"line_number":531,"context_line":"* Extend the `placement allocation candidate generation algorithm`_ to return"},{"line_number":532,"context_line":"  the mapping that is internally calculated."},{"line_number":533,"context_line":"* Extend the API with a new microversion to return the mapping to the API"},{"line_number":534,"context_line":"  client as well"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"Dependencies"},{"line_number":537,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bfb3d3c7_54de4d11","line":534,"updated":"2019-05-28 11:08:20.000000000","message":"nit: If you want to be explicit, note the need to extend the JSON schema for POST /allocations and PUT /allocations/{uuid} to accept (and ignore) the mappings key.","commit_id":"7ee5431bd0e4733baa3e7c7081e3404fd4a6aaee"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4ccab746fe769d14b5cff3d2057885ac9dfff8e4","unresolved":false,"context_lines":[{"line_number":531,"context_line":"* Extend the `placement allocation candidate generation algorithm`_ to return"},{"line_number":532,"context_line":"  the mapping that is internally calculated."},{"line_number":533,"context_line":"* Extend the API with a new microversion to return the mapping to the API"},{"line_number":534,"context_line":"  client as well"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"Dependencies"},{"line_number":537,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9fb8cfa7_1f03a944","line":534,"in_reply_to":"bfb3d3c7_54de4d11","updated":"2019-06-03 09:35:37.000000000","message":"Done","commit_id":"7ee5431bd0e4733baa3e7c7081e3404fd4a6aaee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ae80c333272ebded4cbe38a0d6647c8396e9b446","unresolved":false,"context_lines":[{"line_number":400,"context_line":"by more than one RPs so the length of the mapping value there can be bigger"},{"line_number":401,"context_line":"than 1."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"This new field will be added to the ``POST /allocations`` schema so the"},{"line_number":404,"context_line":"client does not need to strip it from the candidate before posting that back"},{"line_number":405,"context_line":"to Placement to make the allocation."},{"line_number":406,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_31949944","line":403,"range":{"start_line":403,"start_character":36,"end_line":403,"end_character":57},"updated":"2019-06-03 18:45:46.000000000","message":"and PUT /allocations, and reshaper","commit_id":"138e0f685b419be13f4e3d7cc95cff93c24e6666"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ae80c333272ebded4cbe38a0d6647c8396e9b446","unresolved":false,"context_lines":[{"line_number":533,"context_line":"* Extend the API with a new microversion to return the mapping to the API"},{"line_number":534,"context_line":"  client as well"},{"line_number":535,"context_line":"* Within the same microverison extend the JSON schema for ``POST /allocations``"},{"line_number":536,"context_line":"  and ``PUT /allocations/{uuid}`` to accept (and ignore) the mappings key."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9fb8cfa7_f19da166","line":536,"updated":"2019-06-03 18:45:46.000000000","message":"and reshaper","commit_id":"138e0f685b419be13f4e3d7cc95cff93c24e6666"}]}
