)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24f0463118d1fcfe8bc3a922fe8dd938cd9c24e6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"   in the response of ``GET /allocation_candidates`` can include"},{"line_number":18,"context_line":"   allocations on combinations of multiple resource providers"},{"line_number":19,"context_line":"   in the same tree."},{"line_number":20,"context_line":"2) ``root_provider_uuid`` and ``parent_provider_uuid`` filds are"},{"line_number":21,"context_line":"    added to ``provider_summaries`` in the response of"},{"line_number":22,"context_line":"   ``GET /allocation_candidates``."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_d22fce85","line":20,"range":{"start_line":20,"start_character":55,"end_line":20,"end_character":60},"updated":"2018-05-11 15:16:42.000000000","message":"fields","commit_id":"58b83d966bd57d149fab9df3ce145fe07f59dc1c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   ``GET /allocation_candidates``."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I6cecb25c6c16cecc23d4008474d150b1f15f7d8a"},{"line_number":25,"context_line":"Blueprint: placement-return-all-resources"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5f7c97a3_2e4b56b1","line":25,"range":{"start_line":25,"start_character":11,"end_line":25,"end_character":41},"updated":"2018-06-15 23:25:06.000000000","message":"nested-resource-providers-allocation-candidates","commit_id":"907b6390905156eeae96172a47f76b6fc0755d19"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   ``GET /allocation_candidates``."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I6cecb25c6c16cecc23d4008474d150b1f15f7d8a"},{"line_number":25,"context_line":"Blueprint: placement-return-all-resources"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f7c97a3_fcacc635","line":25,"range":{"start_line":25,"start_character":11,"end_line":25,"end_character":41},"updated":"2018-06-15 23:25:06.000000000","message":"nested-alloc-cands....","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"}],"nova/api/openstack/placement/handlers/allocation_candidate.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24f0463118d1fcfe8bc3a922fe8dd938cd9c24e6","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"def _transform_provider_summaries(p_sums, requests, include_traits\u003dFalse,"},{"line_number":118,"context_line":"                                  include_all_resources\u003dFalse,"},{"line_number":119,"context_line":"                                  include_nested_providers\u003dFalse):"},{"line_number":120,"context_line":"    \"\"\"Turn supplied list of ProviderSummary objects into a dict, keyed by"},{"line_number":121,"context_line":"    resource provider UUID, of dicts of provider and inventory information."},{"line_number":122,"context_line":"    The traits only show up when `include_traits` is `True`."}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_12ad46e8","line":119,"updated":"2018-05-11 15:16:42.000000000","message":"This flag makes it sound like providers which are children will not be included when the flag is False, but what it really means is \"parent and root information is included when it is True\".\n\nSo there might be a better name.","commit_id":"58b83d966bd57d149fab9df3ce145fe07f59dc1c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24f0463118d1fcfe8bc3a922fe8dd938cd9c24e6","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    # exclude nested providers with old microversions"},{"line_number":270,"context_line":"    if not include_nested_providers:"},{"line_number":271,"context_line":"        a_reqs, p_sums \u003d _exclude_nested_providers("},{"line_number":272,"context_line":"            a_reqs, p_sums, alloc_cands.provider_summaries, want_version)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return {"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_325722cd","line":271,"updated":"2018-05-11 15:16:42.000000000","message":"It seems a bit tragic to gather up all that info and then throw it away, but I agree this is likely the cleanest way to accomplish the result we want.","commit_id":"58b83d966bd57d149fab9df3ce145fe07f59dc1c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1c5c0802251a520a3f1eeb88e04fb5f8e0081f36","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    # exclude nested providers with old microversions"},{"line_number":270,"context_line":"    if not enable_nested_providers:"},{"line_number":271,"context_line":"        a_reqs, p_sums \u003d _exclude_nested_providers("},{"line_number":272,"context_line":"            a_reqs, p_sums, alloc_cands.provider_summaries, want_version)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_6e07a1cb","line":271,"updated":"2018-05-16 09:47:29.000000000","message":"This handling is getting complicated enough that it might be nice to move some of these transformation methods to a different file, perhaps in a followup. Ideally we want to keep the handler files as simple and readable as possible.","commit_id":"f45d08a895fe2ed6a0b4b555d621251a57914474"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"9c334efcc1a5a197d5e22d9af393b8e501a7bc85","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    # exclude nested providers with old microversions"},{"line_number":270,"context_line":"    if not enable_nested_providers:"},{"line_number":271,"context_line":"        a_reqs, p_sums \u003d _exclude_nested_providers("},{"line_number":272,"context_line":"            a_reqs, p_sums, alloc_cands.provider_summaries, want_version)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_7cf7bf5a","line":271,"in_reply_to":"5f7c97a3_6e07a1cb","updated":"2018-05-27 07:21:14.000000000","message":"Fair. Then passing \"enable_nested_providers\" to AllocationCandidates.get_by_requests would be reasonable. \n\nI will look into that.","commit_id":"f45d08a895fe2ed6a0b4b555d621251a57914474"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a5f455c40b489f82614cea3176a0ba9d52856f5f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                \u0027HW_CPU_X86_AVX512F\u0027,"},{"line_number":143,"context_line":"                \u0027HW_CPU_X86_AVX512CD\u0027"},{"line_number":144,"context_line":"           ]"},{"line_number":145,"context_line":"           parent_provider_uuid: \u0027\u0027,"},{"line_number":146,"context_line":"           root_provider_uuid: RP_UUID_1"},{"line_number":147,"context_line":"       },"},{"line_number":148,"context_line":"       RP_UUID_2: {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_d72c929a","line":145,"updated":"2018-06-11 20:34:29.000000000","message":"Is empty string what we want here? Why not null/None? I suppose this has probably already been specified somewhere?\n\nIt\u0027s null when listing /resource_providers so seems like we should be consistent with that?","commit_id":"b2acaa6dc02958215604bfa3322274b8a5b3122c"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"e3e5ffef0726ead8600689c9c1e243257ac8bc38","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                \u0027HW_CPU_X86_AVX512F\u0027,"},{"line_number":143,"context_line":"                \u0027HW_CPU_X86_AVX512CD\u0027"},{"line_number":144,"context_line":"           ]"},{"line_number":145,"context_line":"           parent_provider_uuid: \u0027\u0027,"},{"line_number":146,"context_line":"           root_provider_uuid: RP_UUID_1"},{"line_number":147,"context_line":"       },"},{"line_number":148,"context_line":"       RP_UUID_2: {"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_6104b84a","line":145,"in_reply_to":"5f7c97a3_d72c929a","updated":"2018-06-13 01:13:44.000000000","message":"Good catch. Thanks a lot. Fixed this according to GET /resource_providers. Done.","commit_id":"b2acaa6dc02958215604bfa3322274b8a5b3122c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a5f455c40b489f82614cea3176a0ba9d52856f5f","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        if enable_nested_providers:"},{"line_number":194,"context_line":"            ret[ps.resource_provider.uuid][\u0027parent_provider_uuid\u0027] \u003d ("},{"line_number":195,"context_line":"                ps.resource_provider.parent_provider_uuid or \"\")"},{"line_number":196,"context_line":"            ret[ps.resource_provider.uuid][\u0027root_provider_uuid\u0027] \u003d ("},{"line_number":197,"context_line":"                ps.resource_provider.root_provider_uuid)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_97229aa2","line":195,"updated":"2018-06-11 20:34:29.000000000","message":"see comment about null above","commit_id":"b2acaa6dc02958215604bfa3322274b8a5b3122c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    return ret"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _exclude_nested_providers(ret_a_reqs, ret_p_sums, p_sums, want_version):"},{"line_number":203,"context_line":"    \"\"\"Exclude nested providers from both allocation requests and"},{"line_number":204,"context_line":"    provider summaries for old microversions"},{"line_number":205,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_d26c5337","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":29},"updated":"2018-06-15 23:25:06.000000000","message":"I\u0027m afraid this isn\u0027t quite right.  This will remove a single-provider allocation_request if that provider happens to be a child.  It would also remove an allocation_request where some resources were provided by sharing providers and the rest were provided by a (single) child provider.  Those would have been included previously.\n\nIf the goal is to achieve the previous behavior, what we would need to do is remove an allocation_request if it contains *more than one provider from a tree* (i.e. with the same root_provider_uuid).","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"abe3af6c463eac23e8995735d0a84d9179848363","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    return ret"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _exclude_nested_providers(ret_a_reqs, ret_p_sums, p_sums, want_version):"},{"line_number":203,"context_line":"    \"\"\"Exclude nested providers from both allocation requests and"},{"line_number":204,"context_line":"    provider summaries for old microversions"},{"line_number":205,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_13b5c8d0","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":29},"in_reply_to":"5f7c97a3_d26c5337","updated":"2018-06-16 08:18:29.000000000","message":"Totally fair. I will look into that. -W\u0027ed this.","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b582b6e8058e3b3a5dcd31a5a8f055a0626098f4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    # exclude combinations where nested providers involved, and shouldn\u0027t"},{"line_number":212,"context_line":"    # exclude candidates of only one nested provider."},{"line_number":213,"context_line":"    for nested_provider_uuid in nested_provider_uuids:"},{"line_number":214,"context_line":"        if want_version.matches((1, 12)):"},{"line_number":215,"context_line":"            # The allocation request is dict format"},{"line_number":216,"context_line":"            for a_req in ret_a_reqs[:]:"},{"line_number":217,"context_line":"                alloc_rp_uuids \u003d set([uuid for uuid in a_req[\u0027allocations\u0027]])"},{"line_number":218,"context_line":"                if len(alloc_rp_uuids) \u003e 1 and ("},{"line_number":219,"context_line":"                            alloc_rp_uuids \u0026 nested_provider_uuids):"},{"line_number":220,"context_line":"                    ret_a_reqs.remove(a_req)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            # The allocation request is list format"},{"line_number":223,"context_line":"            for a_req in ret_a_reqs[:]:"},{"line_number":224,"context_line":"                if len(a_req[\u0027allocations\u0027]) \u003c\u003d 1:"},{"line_number":225,"context_line":"                    # This doesn\u0027t include multiple providers."},{"line_number":226,"context_line":"                    continue"},{"line_number":227,"context_line":"                for alloc_dict in a_req[\u0027allocations\u0027]:"},{"line_number":228,"context_line":"                    alloc_rp_uuid \u003d alloc_dict[\u0027resource_provider\u0027][\u0027uuid\u0027]"},{"line_number":229,"context_line":"                    if alloc_rp_uuid \u003d\u003d nested_provider_uuid:"},{"line_number":230,"context_line":"                        ret_a_reqs.remove(a_req)"},{"line_number":231,"context_line":"                        break"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    # Exclude eliminated providers from the provider summaries."},{"line_number":234,"context_line":"    all_rp_uuids \u003d set()"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_01445673","line":231,"range":{"start_line":214,"start_character":1,"end_line":231,"end_character":29},"updated":"2018-06-19 18:55:01.000000000","message":"Hm, still not quite right.  This will exclude candidates with allocations from a sharing provider and a child provider in the tree, even if the child is the only provider from the tree.  I added this gabbi test and it passes:\n\n - name: get allocation candidates shared and nested list microversion\n   GET: /allocation_candidates?resources\u003dDISK_GB:10,SRIOV_NET_VF:4\n   status: 200\n   request_headers:\n       # Same result for 1.11 and 1.27\n       openstack-api-version: placement 1.11\n   response_json_paths:\n       # This should be 4\n       $.allocation_requests.`len`: 0\n       # This should be 5\n       $.provider_summaries.`len`: 0\n\nWhat we really want to do is exclude any result that involves more than one provider from the same tree.  Thinking of it in terms of children vs. roots isn\u0027t constructive.","commit_id":"5a48b593399c66e81c2803f139ef0a1c31998bd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72d5614e4de15b76d4c0cd0b9ce545979b355239","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    return ret"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _exclude_nested_providers(ret_a_reqs, ret_p_sums, p_sums, want_version):"},{"line_number":203,"context_line":"    \"\"\"Exclude nested providers from both allocation requests and"},{"line_number":204,"context_line":"    provider summaries for old microversions"},{"line_number":205,"context_line":"    \"\"\""},{"line_number":206,"context_line":"    # Get a list of nested provider uuids"},{"line_number":207,"context_line":"    nested_provider_uuids \u003d set([ps.resource_provider.uuid for ps in p_sums"},{"line_number":208,"context_line":"                                 if ps.resource_provider.parent_provider_uuid])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    # Exclude allocation requests that uses nested providers. We should"},{"line_number":211,"context_line":"    # exclude combinations where nested providers involved, and shouldn\u0027t"},{"line_number":212,"context_line":"    # exclude candidates of only one nested provider."},{"line_number":213,"context_line":"    for nested_provider_uuid in nested_provider_uuids:"},{"line_number":214,"context_line":"        if want_version.matches((1, 12)):"},{"line_number":215,"context_line":"            # The allocation request is dict format"},{"line_number":216,"context_line":"            for a_req in ret_a_reqs[:]:"},{"line_number":217,"context_line":"                alloc_rp_uuids \u003d set([uuid for uuid in a_req[\u0027allocations\u0027]])"},{"line_number":218,"context_line":"                if len(alloc_rp_uuids) \u003e 1 and ("},{"line_number":219,"context_line":"                            alloc_rp_uuids \u0026 nested_provider_uuids):"},{"line_number":220,"context_line":"                    ret_a_reqs.remove(a_req)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            # The allocation request is list format"},{"line_number":223,"context_line":"            for a_req in ret_a_reqs[:]:"},{"line_number":224,"context_line":"                if len(a_req[\u0027allocations\u0027]) \u003c\u003d 1:"},{"line_number":225,"context_line":"                    # This doesn\u0027t include multiple providers."},{"line_number":226,"context_line":"                    continue"},{"line_number":227,"context_line":"                for alloc_dict in a_req[\u0027allocations\u0027]:"},{"line_number":228,"context_line":"                    alloc_rp_uuid \u003d alloc_dict[\u0027resource_provider\u0027][\u0027uuid\u0027]"},{"line_number":229,"context_line":"                    if alloc_rp_uuid \u003d\u003d nested_provider_uuid:"},{"line_number":230,"context_line":"                        ret_a_reqs.remove(a_req)"},{"line_number":231,"context_line":"                        break"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    # Exclude eliminated providers from the provider summaries."},{"line_number":234,"context_line":"    all_rp_uuids \u003d set()"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_19757d98","line":231,"range":{"start_line":202,"start_character":0,"end_line":231,"end_character":29},"updated":"2018-06-21 15:13:12.000000000","message":"oops, lost this delta from PS28","commit_id":"06cafa144df8bb0568714d543f535ec15ab7f2cd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6308ae485fcc2d1251eb056a9eb544c969aedd75","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                \u0027HW_CPU_X86_AVX512CD\u0027"},{"line_number":144,"context_line":"           ]"},{"line_number":145,"context_line":"           parent_provider_uuid: null,"},{"line_number":146,"context_line":"           root_provider_uuid: RP_UUID_1"},{"line_number":147,"context_line":"       },"},{"line_number":148,"context_line":"       RP_UUID_2: {"},{"line_number":149,"context_line":"           \u0027resources\u0027: {"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_3bf54485","line":146,"updated":"2018-06-28 14:42:49.000000000","message":"would be good to add a comment after the above lines explaining they are only in the output after this microversion. You can do that in a followup patch, though.","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6308ae485fcc2d1251eb056a9eb544c969aedd75","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        include_all_resources\u003dinclude_all_resources,"},{"line_number":270,"context_line":"        enable_nested_providers\u003denable_nested_providers)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    # exclude nested providers with old microversions"},{"line_number":273,"context_line":"    if not enable_nested_providers:"},{"line_number":274,"context_line":"        a_reqs, p_sums \u003d _exclude_nested_providers("},{"line_number":275,"context_line":"            a_reqs, p_sums, alloc_cands.provider_summaries, want_version)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    return {"},{"line_number":278,"context_line":"        \u0027allocation_requests\u0027: a_reqs,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_1b52c836","line":275,"range":{"start_line":272,"start_character":0,"end_line":275,"end_character":73},"updated":"2018-06-28 14:42:49.000000000","message":"instead of having _exclude_nested_providers() operate on a dict, keyed by rp UUID, or a list of dicts (\u003c1.12), why not pass _exclude_nested_providers() the actual AllocationCandidates object, operate on that object before passing it to either of the transform functions on lines 257 and 260.\n\nThat way, there would be no need to pass want_version into _exclude_nested_providers() and you could eliminate all the conditional blocks in _exclude_nested_providers()","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d5fbdf72647a6588a92c2972761aa0e870bf482","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                \u0027HW_CPU_X86_AVX512F\u0027,"},{"line_number":143,"context_line":"                \u0027HW_CPU_X86_AVX512CD\u0027"},{"line_number":144,"context_line":"           ]"},{"line_number":145,"context_line":"           parent_provider_uuid: null,"},{"line_number":146,"context_line":"           root_provider_uuid: RP_UUID_1"},{"line_number":147,"context_line":"       },"},{"line_number":148,"context_line":"       RP_UUID_2: {"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_70173ff0","line":145,"updated":"2018-06-29 12:18:36.000000000","message":"followup patch you can add a comment saying these fields only appear \u003e\u003d1.29","commit_id":"5b4aa7845901a6127ad7266596d9aca4442f7d48"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d5fbdf72647a6588a92c2972761aa0e870bf482","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        if ps.resource_provider.uuid not in all_rp_uuids:"},{"line_number":231,"context_line":"            alloc_cands.provider_summaries.remove(ps)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    return alloc_cands"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"def _transform_allocation_candidates(alloc_cands, requests, want_version):"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_d01ad316","line":233,"updated":"2018-06-29 12:18:36.000000000","message":"\\o/ much cleaner and smaller :) ++","commit_id":"5b4aa7845901a6127ad7266596d9aca4442f7d48"}],"nova/api/openstack/placement/rest_api_version_history.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":341,"context_line":"-----------------------------------------------------------------"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Add support for nested resource providers with the following two features."},{"line_number":344,"context_line":"1) `GET /allocation_candidates` is aware of nested providers. Namely, when"},{"line_number":345,"context_line":"provider trees are present, ``allocation_requests`` in the response of"},{"line_number":346,"context_line":"`GET /allocation_candidates` can include allocations on combinations of"},{"line_number":347,"context_line":"multiple resource providers in the same tree."}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_52c7e312","line":344,"range":{"start_line":344,"start_character":3,"end_line":344,"end_character":31},"updated":"2018-06-15 23:25:06.000000000","message":"double backticks (throughout)","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72d5614e4de15b76d4c0cd0b9ce545979b355239","unresolved":false,"context_lines":[{"line_number":337,"context_line":"response of the ``GET /allocation_candidates`` API even if the resource class"},{"line_number":338,"context_line":"is not in the requested resources."},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":341,"context_line":"1.28 Consumer generation support"},{"line_number":342,"context_line":"--------------------------------"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"5f7c97a3_595e9513","line":340,"updated":"2018-06-21 15:13:12.000000000","message":"oops","commit_id":"06cafa144df8bb0568714d543f535ec15ab7f2cd"}],"nova/tests/functional/api/openstack/placement/fixtures.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"903418070cc5d07e23f29e2d433bed0cc261f6d6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def setup_app():"},{"line_number":31,"context_line":"    return deploy.loadapp(CONF)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def _create_provider(ctx, name, uuid, *aggs, **kwargs):"},{"line_number":34,"context_line":"    parent \u003d kwargs.get(\u0027parent\u0027)"},{"line_number":35,"context_line":"    rp \u003d rp_obj.ResourceProvider(ctx, name\u003dname, uuid\u003duuid)"},{"line_number":36,"context_line":"    if parent:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d523dcbd","line":33,"updated":"2018-05-02 22:42:00.000000000","message":"\\n","commit_id":"0cc92b904d606575d2eb9391dc25cbe885bd0cfb"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"7d3839a0d58e2b98cd8b06f1fb85b17e5ab9199e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def setup_app():"},{"line_number":31,"context_line":"    return deploy.loadapp(CONF)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def _create_provider(ctx, name, uuid, *aggs, **kwargs):"},{"line_number":34,"context_line":"    parent \u003d kwargs.get(\u0027parent\u0027)"},{"line_number":35,"context_line":"    rp \u003d rp_obj.ResourceProvider(ctx, name\u003dname, uuid\u003duuid)"},{"line_number":36,"context_line":"    if parent:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2f9e7507","line":33,"in_reply_to":"5f7c97a3_d523dcbd","updated":"2018-05-03 08:14:08.000000000","message":"Oops, thanks!","commit_id":"0cc92b904d606575d2eb9391dc25cbe885bd0cfb"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a5f455c40b489f82614cea3176a0ba9d52856f5f","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        agg_uuid \u003d uuidutils.generate_uuid()"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        cn1 \u003d self._create_provider(\u0027cn1\u0027, agg_uuid)"},{"line_number":248,"context_line":"        cn2 \u003d self._create_provider(\u0027cn2\u0027, agg_uuid)"},{"line_number":249,"context_line":"        ss \u003d self._create_provider(\u0027ss\u0027, agg_uuid)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_9757fa01","line":247,"updated":"2018-06-11 20:34:29.000000000","message":"Aside: I\u0027m starting to think we need a declarative language for creating providers, inventories etc.","commit_id":"b2acaa6dc02958215604bfa3322274b8a5b3122c"}],"nova/tests/functional/api/openstack/placement/fixtures/gabbits.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":222,"context_line":"    \"\"\"An APIFixture that has some two compute nodes without local storage"},{"line_number":223,"context_line":"    associated by aggregate to a provider of shared storage. Both compute"},{"line_number":224,"context_line":"    nodes have respectively two numa node resource providers, each of"},{"line_number":225,"context_line":"    which has a pf resource provider."},{"line_number":226,"context_line":"    \"\"\""},{"line_number":227,"context_line":"    def _create_provider(self, name, *aggs, **kwargs):"},{"line_number":228,"context_line":"        parent \u003d kwargs.get(\u0027parent\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_32b7c787","line":225,"updated":"2018-06-15 23:25:06.000000000","message":"an ascii diagram would be lovely","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b8547bbfdfceba47e927a23cd1a9c7d4d4613d7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    nodes have respectively two numa node resource providers, each of"},{"line_number":225,"context_line":"    which has a pf resource provider."},{"line_number":226,"context_line":"    \"\"\""},{"line_number":227,"context_line":"    def _create_provider(self, name, *aggs, **kwargs):"},{"line_number":228,"context_line":"        parent \u003d kwargs.get(\u0027parent\u0027)"},{"line_number":229,"context_line":"        root \u003d kwargs.get(\u0027root\u0027)"},{"line_number":230,"context_line":"        uuid \u003d kwargs.get(\u0027uuid\u0027, getattr(uuids, name))"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_6d50fe0a","line":227,"range":{"start_line":227,"start_character":0,"end_line":227,"end_character":54},"updated":"2018-06-15 23:25:06.000000000","message":"Since this is mostly duplicated from test_base, let\u0027s factor it out.  In test_base, outside of the PlacementDbBaseTestCase, it would be:\n\n def create_provider(context, name, *aggs, **kwargs):\n\nand contain everything except the rp_uuid_to_name thing; then in PlacementDbBaseTestCase, change _create_provider to:\n\n def _create_provider(self, name, *aggs, **kwargs):\n     rp \u003d create_provider(self.ctx, name, *aggs, **kwargs)\n     self.rp_uuid_to_name[rp.uuid] \u003d name","commit_id":"b6e16fa04037281380eb548ca80ca7fa7b02a395"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b582b6e8058e3b3a5dcd31a5a8f055a0626098f4","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        +--------------------------+       +------------------------+"},{"line_number":266,"context_line":"             |               |                 |                 |"},{"line_number":267,"context_line":"        +---------+      +---------+      +---------+       +---------+"},{"line_number":268,"context_line":"        | numa1_1 |      | numa1_1 |      | numa2_1 |       | numa2_2 |"},{"line_number":269,"context_line":"        +---------+      +---------+      +---------+       +---------+"},{"line_number":270,"context_line":"             |                |                |                 |"},{"line_number":271,"context_line":"     +---------------++---------------++---------------++----------------+"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_c122deba","line":268,"range":{"start_line":268,"start_character":33,"end_line":268,"end_character":34},"updated":"2018-06-19 18:55:01.000000000","message":"2","commit_id":"5a48b593399c66e81c2803f139ef0a1c31998bd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b582b6e8058e3b3a5dcd31a5a8f055a0626098f4","unresolved":false,"context_lines":[{"line_number":271,"context_line":"     +---------------++---------------++---------------++----------------+"},{"line_number":272,"context_line":"     | pf1_1         || pf1_2         || pf2_1         || pf2_2          |"},{"line_number":273,"context_line":"     | SRIOV_NET_VF:8|| SRIOV_NET_VF:8|| SRIOV_NET_VF:8|| SRIOV_NET_VF:8 |"},{"line_number":274,"context_line":"     +---------------++---------------++---------------++----------------+"},{"line_number":275,"context_line":"    \"\"\""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def start_fixture(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_6132ea11","line":274,"updated":"2018-06-19 18:55:01.000000000","message":"Sehr schöne","commit_id":"5a48b593399c66e81c2803f139ef0a1c31998bd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72d5614e4de15b76d4c0cd0b9ce545979b355239","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        +--------------------------+       +------------------------+"},{"line_number":269,"context_line":"             |               |                 |                 |"},{"line_number":270,"context_line":"        +---------+      +---------+      +---------+       +---------+"},{"line_number":271,"context_line":"        | numa1_1 |      | numa1_1 |      | numa2_1 |       | numa2_2 |"},{"line_number":272,"context_line":"        +---------+      +---------+      +---------+       +---------+"},{"line_number":273,"context_line":"             |                |                |                 |"},{"line_number":274,"context_line":"     +---------------++---------------++---------------++----------------+"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_59b3f54e","line":271,"range":{"start_line":271,"start_character":33,"end_line":271,"end_character":34},"updated":"2018-06-21 15:13:12.000000000","message":"lost this from PS28 also","commit_id":"06cafa144df8bb0568714d543f535ec15ab7f2cd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6308ae485fcc2d1251eb056a9eb544c969aedd75","unresolved":false,"context_lines":[{"line_number":274,"context_line":"     +---------------++---------------++---------------++----------------+"},{"line_number":275,"context_line":"     | pf1_1         || pf1_2         || pf2_1         || pf2_2          |"},{"line_number":276,"context_line":"     | SRIOV_NET_VF:8|| SRIOV_NET_VF:8|| SRIOV_NET_VF:8|| SRIOV_NET_VF:8 |"},{"line_number":277,"context_line":"     +---------------++---------------++---------------++----------------+"},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def start_fixture(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_11b14945","line":277,"updated":"2018-06-28 14:42:49.000000000","message":"++ great diagram :)","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6308ae485fcc2d1251eb056a9eb544c969aedd75","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        # Populate PF inventory for VF"},{"line_number":331,"context_line":"        for pf in (pf1_1, pf1_2, pf2_1, pf2_2):"},{"line_number":332,"context_line":"            tb.add_inventory(pf, fields.ResourceClass.SRIOV_NET_VF,"},{"line_number":333,"context_line":"                             8, allocation_ratio\u003d1.0)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"class NonSharedStorageFixture(APIFixture):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_d1e99119","line":333,"updated":"2018-06-28 14:42:49.000000000","message":"excellent cleanup of this fixture\u0027s setup. ++","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"}],"nova/tests/functional/api/openstack/placement/gabbits/allocation-candidates.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24f0463118d1fcfe8bc3a922fe8dd938cd9c24e6","unresolved":false,"context_lines":[{"line_number":376,"context_line":"  response_json_paths:"},{"line_number":377,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":378,"context_line":"      $.provider_summaries.`len`: 10"},{"line_number":379,"context_line":"      $.allocation_requests[0].allocations[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].resources.VCPU: 1"},{"line_number":380,"context_line":"      $.allocation_requests[0].allocations[\"$ENVIRON[\u0027PF1_1_UUID\u0027]\"].resources.SRIOV_NET_VF: 4"},{"line_number":381,"context_line":"      $.allocation_requests[1].allocations[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].resources.VCPU: 1"},{"line_number":382,"context_line":"      $.allocation_requests[1].allocations[\"$ENVIRON[\u0027PF1_2_UUID\u0027]\"].resources.SRIOV_NET_VF: 4"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_d2ea6ed6","line":379,"updated":"2018-05-11 15:16:42.000000000","message":"Is this list ordering reliable?","commit_id":"58b83d966bd57d149fab9df3ce145fe07f59dc1c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a5f455c40b489f82614cea3176a0ba9d52856f5f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"      $.provider_summaries.`len`: 10"},{"line_number":349,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 4"},{"line_number":350,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027CN2_UUID\u0027]\"].`len`: 4"},{"line_number":351,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].parent_provider_uuid: \"\""},{"line_number":352,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].root_provider_uuid: \"$ENVIRON[\u0027CN1_UUID\u0027]\""},{"line_number":353,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027NUMA1_1_UUID\u0027]\"].parent_provider_uuid: \"$ENVIRON[\u0027CN1_UUID\u0027]\""},{"line_number":354,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027NUMA1_1_UUID\u0027]\"].root_provider_uuid: \"$ENVIRON[\u0027CN1_UUID\u0027]\""}],"source_content_type":"text/x-yaml","patch_set":20,"id":"5f7c97a3_b775569a","line":351,"updated":"2018-06-11 20:34:29.000000000","message":"pretty sure this should be null not the empty string","commit_id":"b2acaa6dc02958215604bfa3322274b8a5b3122c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72d5614e4de15b76d4c0cd0b9ce545979b355239","unresolved":false,"context_lines":[{"line_number":422,"context_line":"      $.allocation_requests..allocations[\"$ENVIRON[\u0027PF2_1_UUID\u0027]\"].resources.SRIOV_NET_VF: 4"},{"line_number":423,"context_line":"      $.allocation_requests..allocations[\"$ENVIRON[\u0027PF2_2_UUID\u0027]\"].resources.SRIOV_NET_VF: 4"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"# Make sure that old microversions can return combinations where"},{"line_number":426,"context_line":"# sharing providers are involved"},{"line_number":427,"context_line":"- name: get allocation candidates shared and nested old microversion"},{"line_number":428,"context_line":"  GET: /allocation_candidates?resources\u003dDISK_GB:10,SRIOV_NET_VF:4"},{"line_number":429,"context_line":"  status: 200"},{"line_number":430,"context_line":"  request_headers:"},{"line_number":431,"context_line":"      openstack-api-version: placement 1.27"},{"line_number":432,"context_line":"  response_json_paths:"},{"line_number":433,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":434,"context_line":"      $.provider_summaries.`len`: 5"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"- name: get allocation candidates shared and nested list microversion"},{"line_number":437,"context_line":"  GET: /allocation_candidates?resources\u003dDISK_GB:10,SRIOV_NET_VF:4"},{"line_number":438,"context_line":"  status: 200"},{"line_number":439,"context_line":"  request_headers:"},{"line_number":440,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":441,"context_line":"  response_json_paths:"},{"line_number":442,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":443,"context_line":"      $.provider_summaries.`len`: 5"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"5f7c97a3_598c557f","line":443,"range":{"start_line":425,"start_character":0,"end_line":443,"end_character":35},"updated":"2018-06-21 15:13:12.000000000","message":"Lost these in PS29","commit_id":"9267194373178664190083b6d0f894e35f2707f7"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"05bff509e873083b92ad09686e0c9ac4b340a18f","unresolved":false,"context_lines":[{"line_number":365,"context_line":"  GET: /allocation_candidates?resources\u003dSRIOV_NET_VF:4"},{"line_number":366,"context_line":"  status: 200"},{"line_number":367,"context_line":"  request_headers:"},{"line_number":368,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":369,"context_line":"  response_json_paths:"},{"line_number":370,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":371,"context_line":"      $.provider_summaries.`len`: 4"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"5f7c97a3_70dd766b","line":368,"range":{"start_line":368,"start_character":39,"end_line":368,"end_character":43},"updated":"2018-06-25 09:51:22.000000000","message":"Is there a reason 1.11 is used here instead of 1.28? If so, might make sense to mention why, as the value isn\u0027t well-aligned with the comment.\n\n[later] yeah, based on the tests below, it appears there is a reason for why 1.11, 1.28 and 1.29 are being used. It would be best to make that clear, but would be fine to do in a followup.","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e67d350090a54ebc7fb9e678c0da21a493af5a4d","unresolved":false,"context_lines":[{"line_number":365,"context_line":"  GET: /allocation_candidates?resources\u003dSRIOV_NET_VF:4"},{"line_number":366,"context_line":"  status: 200"},{"line_number":367,"context_line":"  request_headers:"},{"line_number":368,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":369,"context_line":"  response_json_paths:"},{"line_number":370,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":371,"context_line":"      $.provider_summaries.`len`: 4"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"5f7c97a3_a7f98e80","line":368,"range":{"start_line":368,"start_character":39,"end_line":368,"end_character":43},"in_reply_to":"5f7c97a3_70dd766b","updated":"2018-06-25 13:48:33.000000000","message":"The \"list microversion\" in the test name is the clue - the response payload format was changed at 1.12 from a list to a dict.  The code paths are obviously different, but both were changed in this patch, so we need gabbi tests for both.  But agree a comment would make all of that clearer.","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6308ae485fcc2d1251eb056a9eb544c969aedd75","unresolved":false,"context_lines":[{"line_number":365,"context_line":"  GET: /allocation_candidates?resources\u003dSRIOV_NET_VF:4"},{"line_number":366,"context_line":"  status: 200"},{"line_number":367,"context_line":"  request_headers:"},{"line_number":368,"context_line":"      openstack-api-version: placement 1.11"},{"line_number":369,"context_line":"  response_json_paths:"},{"line_number":370,"context_line":"      $.allocation_requests.`len`: 4"},{"line_number":371,"context_line":"      $.provider_summaries.`len`: 4"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"5f7c97a3_713c3d92","line":368,"range":{"start_line":368,"start_character":39,"end_line":368,"end_character":43},"in_reply_to":"5f7c97a3_a7f98e80","updated":"2018-06-28 14:42:49.000000000","message":"Yes, a comment would definitely be good to have here. Plus, see my comment about processing the AllocationCandidates object *before* passing to the _transform_xxx() functions in the handler file. Doing that would allow all the want_version stuff and the conditionals in _exclude_nested_providers() to go away.","commit_id":"a9637da44be3e5d625aa2abfc83783812162ff9c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"65effbd2e48319d78eb00d1b6c17bfebcd3266cd","unresolved":false,"context_lines":[{"line_number":360,"context_line":"      $.provider_summaries.[\"$ENVIRON[\u0027PF1_2_UUID\u0027]\"].root_provider_uuid: \"$ENVIRON[\u0027CN1_UUID\u0027]\""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"# Before microversion 1.29, it isn\u0027t aware of nested providers."},{"line_number":363,"context_line":"# Namely, it can return non-root providers for allocation candidates,"},{"line_number":364,"context_line":"- name: get allocation candidates only nested provider old microversion"},{"line_number":365,"context_line":"  GET: /allocation_candidates?resources\u003dSRIOV_NET_VF:4"},{"line_number":366,"context_line":"  status: 200"}],"source_content_type":"text/x-yaml","patch_set":32,"id":"5f7c97a3_f3ad9984","line":363,"updated":"2018-06-29 13:12:55.000000000","message":"I assume the 1.11 test cases were removed because they\u0027re now redundant, not because they no longer worked.","commit_id":"5b4aa7845901a6127ad7266596d9aca4442f7d48"}],"releasenotes/notes/nested-resource-providers-allocation-candidates-66c1c5b0a3e93513.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24f0463118d1fcfe8bc3a922fe8dd938cd9c24e6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    From microversion 1.26, we support for allocation candidates with nested"},{"line_number":5,"context_line":"    resource providers with the following features."},{"line_number":6,"context_line":"    1) ``GET /allocation_candidates`` is aware of nested providers. Namely,"},{"line_number":7,"context_line":"    when provider trees are present, ``allocation_requests`` in the response"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_b2c6d267","line":4,"range":{"start_line":4,"start_character":39,"end_line":4,"end_character":42},"updated":"2018-05-11 15:16:42.000000000","message":"remove \"for\" or otherwise adjust this to be a more grammatically correct sentence","commit_id":"58b83d966bd57d149fab9df3ce145fe07f59dc1c"}]}
