)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fe75c05b5b17fb7b6e83e79a761490877fd128b7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tests for alloc candidates with nested and traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds functional tests for the AllocationCandidates.get_by_filters() function that"},{"line_number":10,"context_line":"includes a required trait in addition to resource amounts and the"},{"line_number":11,"context_line":"deployment has nested resource providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7f96bb07_e1f7758a","line":9,"range":{"start_line":9,"start_character":68,"end_line":9,"end_character":81},"updated":"2018-01-17 23:14:10.000000000","message":"gasp!","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e8456989838373dd63e90de64f7ea905e2139eec","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tests for alloc candidates with nested and traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds functional tests for the AllocationCandidates.get_by_filters() function that"},{"line_number":10,"context_line":"includes a required trait in addition to resource amounts and the"},{"line_number":11,"context_line":"deployment has nested resource providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7f96bb07_4bc298eb","line":9,"range":{"start_line":9,"start_character":68,"end_line":9,"end_character":81},"in_reply_to":"7f96bb07_e1f7758a","updated":"2018-01-22 16:54:51.000000000","message":"Done","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b89e39c58e9723deca264c02cff9e744811fb53c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tests for alloc candidates with nested and traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds functional tests for the AllocationCandidates.get_by_filters() function that"},{"line_number":10,"context_line":"includes a required trait in addition to resource amounts and the"},{"line_number":11,"context_line":"deployment has nested resource providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7f96bb07_219acbc4","line":9,"range":{"start_line":9,"start_character":68,"end_line":9,"end_character":81},"in_reply_to":"7f96bb07_e1f7758a","updated":"2018-01-22 16:51:40.000000000","message":"double gasp","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"6f8e6d89904cf9bbaa69ec68f463b3a5f0b6edab","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tests for alloc candidates with nested and traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds functional tests for the AllocationCandidates.get_by_filters() function that"},{"line_number":10,"context_line":"includes a required trait in addition to resource amounts and the"},{"line_number":11,"context_line":"deployment has nested resource providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7f96bb07_917d2370","line":9,"range":{"start_line":9,"start_character":68,"end_line":9,"end_character":81},"updated":"2018-01-23 01:14:42.000000000","message":"Triple gasp! Though this is nit, -1ed since we can\u0027t fix this later in the series...","commit_id":"b2a12862d28e843e6fff07484f1142d9aa12a8b5"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"1ac9404bb8b4eadcb925d4966f1eb102fc76e95f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tests for alloc candidates with nested and traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds functional tests for the AllocationCandidates.get_by_filters() function that"},{"line_number":10,"context_line":"includes a required trait in addition to resource amounts and the"},{"line_number":11,"context_line":"deployment has nested resource providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7f96bb07_9e53e7e2","line":9,"range":{"start_line":9,"start_character":68,"end_line":9,"end_character":81},"in_reply_to":"7f96bb07_917d2370","updated":"2018-01-23 08:35:15.000000000","message":"Done","commit_id":"b2a12862d28e843e6fff07484f1142d9aa12a8b5"}],"nova/tests/functional/api/openstack/placement/db/test_allocation_candidates.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5580f16296307fdf083d2bdbaadbe1ab9ae4ed0d","unresolved":false,"context_lines":[{"line_number":1418,"context_line":"        # are handled by allocation candidates:"},{"line_number":1419,"context_line":"        # expected \u003d ["},{"line_number":1420,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1421,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1422,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1423,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1424,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_c9db6c4c","line":1421,"range":{"start_line":1421,"start_character":53,"end_line":1421,"end_character":57},"updated":"2018-04-03 08:04:55.000000000","message":"256","commit_id":"0433de51d77fb45cf8eb0e4bf2327614558bfca2"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5580f16296307fdf083d2bdbaadbe1ab9ae4ed0d","unresolved":false,"context_lines":[{"line_number":1421,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1422,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1423,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1424,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1425,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1426,"context_line":"        # ]"},{"line_number":1427,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_89e9f4e6","line":1424,"range":{"start_line":1424,"start_character":53,"end_line":1424,"end_character":57},"updated":"2018-04-03 08:04:55.000000000","message":"256","commit_id":"0433de51d77fb45cf8eb0e4bf2327614558bfca2"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5580f16296307fdf083d2bdbaadbe1ab9ae4ed0d","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"        # are handled by allocation candidates:"},{"line_number":1478,"context_line":"        # expected \u003d ["},{"line_number":1479,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1480,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1481,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1482,"context_line":"        # ]"},{"line_number":1483,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_69c34058","line":1480,"range":{"start_line":1480,"start_character":53,"end_line":1480,"end_character":57},"updated":"2018-04-03 08:04:55.000000000","message":"256","commit_id":"0433de51d77fb45cf8eb0e4bf2327614558bfca2"}],"nova/tests/functional/db/test_allocation_candidates.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47d5ce3a720010e7287e8c59e91524c34efd97db","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1501,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1502,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1503,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"},{"line_number":1504,"context_line":"        pf1 \u003d rp_obj.ResourceProvider.get_by_uuid(self.ctx, uuids.cn_numa1_pf1)"},{"line_number":1505,"context_line":"        alloc \u003d rp_obj.Allocation("},{"line_number":1506,"context_line":"            resource_provider\u003dpf1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_1ff77fd5","line":1503,"updated":"2018-01-08 22:29:38.000000000","message":"Wouldn\u0027t hurt to repeat the traits\u003d[] request to ensure we still get the tree.","commit_id":"8f42330f36c48942e118eba468639b6b5134ed0a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47d5ce3a720010e7287e8c59e91524c34efd97db","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"        alloc_list.create_all()"},{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"        trees \u003d rp_obj._get_trees_matching_all(self.ctx, resources, traits)"},{"line_number":1514,"context_line":"        self.assertEqual(1, len(trees))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"        # TODO(jaypipes): The following should assert properly when traits are"},{"line_number":1517,"context_line":"        # handled by _get_trees_matching_all()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_df67d7b6","line":1514,"range":{"start_line":1514,"start_character":8,"end_line":1514,"end_character":39},"updated":"2018-01-08 22:29:38.000000000","message":"This is included in the following comment, right?","commit_id":"8f42330f36c48942e118eba468639b6b5134ed0a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f4037b525a8615b41fb60ed2676e833f6e602091","unresolved":false,"context_lines":[{"line_number":1511,"context_line":"        alloc_list.create_all()"},{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"        trees \u003d rp_obj._get_trees_matching_all(self.ctx, resources, traits)"},{"line_number":1514,"context_line":"        self.assertEqual(1, len(trees))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"        # TODO(jaypipes): The following should assert properly when traits are"},{"line_number":1517,"context_line":"        # handled by _get_trees_matching_all()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_08a18294","line":1514,"range":{"start_line":1514,"start_character":8,"end_line":1514,"end_character":39},"in_reply_to":"9f91af0f_df67d7b6","updated":"2018-01-09 06:33:07.000000000","message":"yea...","commit_id":"8f42330f36c48942e118eba468639b6b5134ed0a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"47d5ce3a720010e7287e8c59e91524c34efd97db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9f91af0f_bf18d31d","line":1521,"updated":"2018-01-08 22:29:38.000000000","message":"We should add test cases with multiple traits and/or multiple trees in play.","commit_id":"8f42330f36c48942e118eba468639b6b5134ed0a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"aaf4175533d81c4f8b74a7176aae1248b86e6d83","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"                }"},{"line_number":1504,"context_line":"            )]"},{"line_number":1505,"context_line":"        )"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1508,"context_line":"        # are handled by allocation candidates:"},{"line_number":1509,"context_line":"        # expected \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_3ec4903f","line":1506,"updated":"2018-01-18 07:25:28.000000000","message":"In this scenario, we have no way to get numa node information from allocation_candidates API, so if we want to get numa rp info to which the pfX belongs, we should try another placement API again.\n\n...And I agree that this is better than forcing alloc_cands API to put numa rp into alloc requests and/or provider summaries, since it doesn\u0027t actually supply any resource classes.\n\n\nIf I understand correctly, we still need to discuss these items?\n\n1. Then, is it really better to design numa to be a resource provider in placement?\n\n2. I\u0027m raising a similar discussion point in [1], \"in shared-provider case, should we put, into the response of alloc_cands API, rps that provide no resource class actually?\" - The answer is no in analogy with this scenario, right?\n\nhttps://review.openstack.org/#/c/519601/9/nova/tests/functional/db/test_allocation_candidates.py","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"79c99fae48431319baa77a8a34c619593a4357c3","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"                }"},{"line_number":1504,"context_line":"            )]"},{"line_number":1505,"context_line":"        )"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1508,"context_line":"        # are handled by allocation candidates:"},{"line_number":1509,"context_line":"        # expected \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_9ca1c898","line":1506,"in_reply_to":"7f96bb07_0abe2ab3","updated":"2018-01-22 17:16:50.000000000","message":"I\u0027ve corrected this test methods assertions for provider summary resources and traits to include the NUMA cell \"intermediate providers\" that were missing from the commented-out correct assertions.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93974c2d36c5ff44e2fc054b811c870dc7ade39","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"                }"},{"line_number":1504,"context_line":"            )]"},{"line_number":1505,"context_line":"        )"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1508,"context_line":"        # are handled by allocation candidates:"},{"line_number":1509,"context_line":"        # expected \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_0abe2ab3","line":1506,"in_reply_to":"7f96bb07_3ec4903f","updated":"2018-01-18 13:27:31.000000000","message":"I agree that modeling numa in placement needs discussion.\n\nI would model numa as a nested RP as this nesting seems natural to me even if it needs a a separate placement query after allocation_candidate response to know about the numaness. However I feel that the scheduler will not need this extra information. If the user asked for a special numa setup then the select_destination request will anyhow need to refer to the numa nodes. Then the scheduler will pass that information to the placement.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"6f8e6d89904cf9bbaa69ec68f463b3a5f0b6edab","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"                }"},{"line_number":1504,"context_line":"            )]"},{"line_number":1505,"context_line":"        )"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1508,"context_line":"        # are handled by allocation candidates:"},{"line_number":1509,"context_line":"        # expected \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_d1a08ba8","line":1506,"in_reply_to":"7f96bb07_9ca1c898","updated":"2018-01-23 01:14:42.000000000","message":"Ack. Thank you for making this clear.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93974c2d36c5ff44e2fc054b811c870dc7ade39","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1563,"context_line":"        # are handled by allocation candidates:"},{"line_number":1564,"context_line":"        # expected \u003d ["},{"line_number":1565,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1566,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1567,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1568,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1569,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1570,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_de0a41d0","line":1567,"range":{"start_line":1565,"start_character":14,"end_line":1567,"end_character":59},"updated":"2018-01-18 13:27:31.000000000","message":"Is this returned even if pf0 does not have HW_NIC_OFFLOAD_GENEVE trait?","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e8456989838373dd63e90de64f7ea905e2139eec","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1563,"context_line":"        # are handled by allocation candidates:"},{"line_number":1564,"context_line":"        # expected \u003d ["},{"line_number":1565,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1566,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1567,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1568,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1569,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1570,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_019d4f58","line":1567,"range":{"start_line":1565,"start_character":14,"end_line":1567,"end_character":59},"in_reply_to":"7f96bb07_21d16b58","updated":"2018-01-22 16:54:51.000000000","message":"ack. will fix up.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6ae09e693843e1de23d2ce5f2eaa3bc548f8127","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1563,"context_line":"        # are handled by allocation candidates:"},{"line_number":1564,"context_line":"        # expected \u003d ["},{"line_number":1565,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1566,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1567,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1568,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1569,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1570,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_dfa0fbf6","line":1567,"range":{"start_line":1565,"start_character":14,"end_line":1567,"end_character":59},"in_reply_to":"7f96bb07_de0a41d0","updated":"2018-01-18 14:33:04.000000000","message":"Good catch gibi, I believe it won\u0027t be.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b89e39c58e9723deca264c02cff9e744811fb53c","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1563,"context_line":"        # are handled by allocation candidates:"},{"line_number":1564,"context_line":"        # expected \u003d ["},{"line_number":1565,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1566,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1567,"context_line":"        #     (\u0027pf0\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1568,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1569,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1570,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_21d16b58","line":1567,"range":{"start_line":1565,"start_character":14,"end_line":1567,"end_character":59},"in_reply_to":"7f96bb07_dfa0fbf6","updated":"2018-01-22 16:51:40.000000000","message":"agree, these expected results are not right","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b89e39c58e9723deca264c02cff9e744811fb53c","unresolved":false,"context_lines":[{"line_number":1580,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1581,"context_line":"        #      ]),"},{"line_number":1582,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1583,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1584,"context_line":"        #      ]),"},{"line_number":1585,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1586,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_21364bb6","line":1583,"updated":"2018-01-22 16:51:40.000000000","message":"and if it is not upstairs, it shoudn\u0027t be here","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e8456989838373dd63e90de64f7ea905e2139eec","unresolved":false,"context_lines":[{"line_number":1580,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1581,"context_line":"        #      ]),"},{"line_number":1582,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1583,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1584,"context_line":"        #      ]),"},{"line_number":1585,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1586,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_41935750","line":1583,"in_reply_to":"7f96bb07_21364bb6","updated":"2018-01-22 16:54:51.000000000","message":"No, I believe we said that all providers in any tree showing up in allocation_requests should be included in provider_summaries. This was specifically needed for \"special\" filters and weighers that wanted to sort things based on information about other child providers in the trees.\n\nThis still isn\u0027t correct, however. provider_summaries should include the NUMA cell \"intermediate\" nodes in the tree...","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b89e39c58e9723deca264c02cff9e744811fb53c","unresolved":false,"context_lines":[{"line_number":1621,"context_line":""},{"line_number":1622,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1623,"context_line":"        # are handled by allocation candidates:"},{"line_number":1624,"context_line":"        # expected \u003d ["},{"line_number":1625,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1626,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1627,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_6153f3e3","line":1624,"updated":"2018-01-22 16:51:40.000000000","message":"this should be [] according to the comment above and based on the allocations made","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93974c2d36c5ff44e2fc054b811c870dc7ade39","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"},{"line_number":1637,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1638,"context_line":"        #      ]),"},{"line_number":1639,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1640,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1641,"context_line":"        #      ]),"},{"line_number":1642,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1643,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1644,"context_line":"        #      ]),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_5ee4f10c","line":1641,"range":{"start_line":1639,"start_character":1,"end_line":1641,"end_character":18},"updated":"2018-01-18 13:27:31.000000000","message":"Do we expect pf0 in the summaries even if there is no allocation candidate that referst to pf0 above?","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"536b95330006615f0443912723313bed9e86a451","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"},{"line_number":1637,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1638,"context_line":"        #      ]),"},{"line_number":1639,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1640,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1641,"context_line":"        #      ]),"},{"line_number":1642,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1643,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1644,"context_line":"        #      ]),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_c7d82d1f","line":1641,"range":{"start_line":1639,"start_character":1,"end_line":1641,"end_character":18},"in_reply_to":"7f96bb07_442adeda","updated":"2018-01-18 16:03:53.000000000","message":"OK, thanks for the info.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6ae09e693843e1de23d2ce5f2eaa3bc548f8127","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"},{"line_number":1637,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1638,"context_line":"        #      ]),"},{"line_number":1639,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1640,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1641,"context_line":"        #      ]),"},{"line_number":1642,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1643,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1644,"context_line":"        #      ]),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_442adeda","line":1641,"range":{"start_line":1639,"start_character":1,"end_line":1641,"end_character":18},"in_reply_to":"7f96bb07_5ee4f10c","updated":"2018-01-18 14:33:04.000000000","message":"We agreed that provider summaries will contain *all* providers in the non-sharing tree - even those that do not contribute resources to the request.","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b89e39c58e9723deca264c02cff9e744811fb53c","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"},{"line_number":1637,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1638,"context_line":"        #      ]),"},{"line_number":1639,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1640,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1641,"context_line":"        #      ]),"},{"line_number":1642,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1643,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1644,"context_line":"        #      ]),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_81fe3fac","line":1641,"range":{"start_line":1639,"start_character":1,"end_line":1641,"end_character":18},"in_reply_to":"7f96bb07_c7d82d1f","updated":"2018-01-22 16:51:40.000000000","message":"Oh, hmmm. I guess this means my comments above about pf0 are not right. It seems weird to me. Shouldn\u0027t we return only those rps which are in an active branch of the tree?","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a93974c2d36c5ff44e2fc054b811c870dc7ade39","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"        # handle traits processing"},{"line_number":1651,"context_line":"        # expected \u003d {"},{"line_number":1652,"context_line":"        #     \u0027cn\u0027: set([]),"},{"line_number":1653,"context_line":"        #      \u0027pf0\u0027: set([]),"},{"line_number":1654,"context_line":"        #      \u0027pf1\u0027: set([os_traits.HW_NIC_OFFLOAD_GENEVE]),"},{"line_number":1655,"context_line":"        # }"},{"line_number":1656,"context_line":"        # self._validate_provider_summary_traits(expected, alloc_cands)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_bebe55d2","line":1653,"range":{"start_line":1653,"start_character":9,"end_line":1653,"end_character":30},"updated":"2018-01-18 13:27:31.000000000","message":"ditto","commit_id":"08a21da99b360de1e6be2367b4cca61e75b07ded"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5ac4e6d87cc74bc57f3bc81acd316263f155e482","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_8ebf27fa","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":63},"updated":"2018-01-23 15:27:10.000000000","message":"Now this contradicts with the expected results (after the impl) below.","commit_id":"8315926ca7206f56fee80e696c4987f17d4322e6"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6b2ea05edcd1acb41cf56209c99a266e01ae4eb0","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_57768f08","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":63},"in_reply_to":"7f96bb07_8ebf27fa","updated":"2018-01-23 18:29:40.000000000","message":"Yeah, this looks like a copy/paste fail.","commit_id":"8315926ca7206f56fee80e696c4987f17d4322e6"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"46c79af837e739f7a8f48dc3b7b82e34e94ab190","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"        # The second physical function will be associated with the"},{"line_number":1458,"context_line":"        # HW_NIC_OFFLOAD_GENEVE trait, but not the first physical function."},{"line_number":1459,"context_line":"        #"},{"line_number":1460,"context_line":"        # We will issue a request to _get_trees_matching_all() for VCPU,"},{"line_number":1461,"context_line":"        # MEMORY_MB and SRIOV_NET_VF **without** required traits, then include"},{"line_number":1462,"context_line":"        # a request that includes HW_NIC_OFFLOAD_GENEVE. In both cases, the"},{"line_number":1463,"context_line":"        # compute node tree should be returned."}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_4b9c6d0d","line":1460,"range":{"start_line":1460,"start_character":37,"end_line":1460,"end_character":60},"updated":"2018-01-31 10:37:03.000000000","message":"Is this a different function from _get_trees_matching_all_resources()?","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8e27bf2a978993a2cb42d2cc27113a0255212ae8","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"        # The second physical function will be associated with the"},{"line_number":1458,"context_line":"        # HW_NIC_OFFLOAD_GENEVE trait, but not the first physical function."},{"line_number":1459,"context_line":"        #"},{"line_number":1460,"context_line":"        # We will issue a request to _get_trees_matching_all() for VCPU,"},{"line_number":1461,"context_line":"        # MEMORY_MB and SRIOV_NET_VF **without** required traits, then include"},{"line_number":1462,"context_line":"        # a request that includes HW_NIC_OFFLOAD_GENEVE. In both cases, the"},{"line_number":1463,"context_line":"        # compute node tree should be returned."}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_153b709c","line":1460,"range":{"start_line":1460,"start_character":37,"end_line":1460,"end_character":60},"in_reply_to":"5f93b717_4b9c6d0d","updated":"2018-03-19 13:49:36.000000000","message":"no, it\u0027s the same... I will correct.","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"46c79af837e739f7a8f48dc3b7b82e34e94ab190","unresolved":false,"context_lines":[{"line_number":1467,"context_line":"        # HW_NIC_OFFLOAD_GENEVE. We should get 0 trees returned because now the"},{"line_number":1468,"context_line":"        # only provider of SRIOV_NET_VF (the first physical function) does not"},{"line_number":1469,"context_line":"        # have the required HW_NIC_OFFLOAD_GENEVE trait."},{"line_number":1470,"context_line":"        cn \u003d rp_obj.ResourceProvider(self.ctx, uuid\u003duuids.cn, name\u003d\u0027cn\u0027)"},{"line_number":1471,"context_line":"        cn.create()"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        _add_inventory(cn, fields.ResourceClass.VCPU, 16)"},{"line_number":1474,"context_line":"        _add_inventory(cn, fields.ResourceClass.MEMORY_MB, 32768)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_cb2b9d92","line":1471,"range":{"start_line":1470,"start_character":0,"end_line":1471,"end_character":19},"updated":"2018-01-31 10:37:03.000000000","message":"Why not using _create_provider? If I\u0027m reading this correctly, without this helper, _validate_*** functions don\u0027t work since rp_uuid_to_name() in the functions doesn\u0027t work, do they?","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8e27bf2a978993a2cb42d2cc27113a0255212ae8","unresolved":false,"context_lines":[{"line_number":1467,"context_line":"        # HW_NIC_OFFLOAD_GENEVE. We should get 0 trees returned because now the"},{"line_number":1468,"context_line":"        # only provider of SRIOV_NET_VF (the first physical function) does not"},{"line_number":1469,"context_line":"        # have the required HW_NIC_OFFLOAD_GENEVE trait."},{"line_number":1470,"context_line":"        cn \u003d rp_obj.ResourceProvider(self.ctx, uuid\u003duuids.cn, name\u003d\u0027cn\u0027)"},{"line_number":1471,"context_line":"        cn.create()"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        _add_inventory(cn, fields.ResourceClass.VCPU, 16)"},{"line_number":1474,"context_line":"        _add_inventory(cn, fields.ResourceClass.MEMORY_MB, 32768)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_9546a021","line":1471,"range":{"start_line":1470,"start_character":0,"end_line":1471,"end_character":19},"in_reply_to":"5f93b717_cb2b9d92","updated":"2018-03-19 13:49:36.000000000","message":"Done","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f90d4580c837976e2b9404e9f33991cceaa635cb","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f93b717_f071a577","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":64},"updated":"2018-01-31 09:29:48.000000000","message":"This is still wrong.","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":27336,"name":"XiaojueGuan","email":"xiaojueguan@gmail.com","username":"XiaojueGuan"},"change_message_id":"b66f5bd6950bc7f5139d610d19f203664d1fa5d7","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa0c359_78897373","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":64},"in_reply_to":"5f93b717_f071a577","updated":"2018-02-06 13:28:37.000000000","message":"\u003e This is still wrong.","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8e27bf2a978993a2cb42d2cc27113a0255212ae8","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_3501d4b0","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":64},"in_reply_to":"5f93b717_f071a577","updated":"2018-03-19 13:49:36.000000000","message":"This is the wrong assertion because we\u0027re not using the granular request group, right? Therefore, even though the resource provider that is providing SRIOV_NET_VF doesn\u0027t have the HW_NIC_OFFLOAD_GENEVE trait, the provider *tree* has the trait and therefore the tree should be returned.\n\nCorrect?","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c805784d0c38ae7f752e6a0f144fe8116ad41429","unresolved":false,"context_lines":[{"line_number":1594,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1597,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1598,"context_line":"        # verify that the same request results in 0 found trees, since the"},{"line_number":1599,"context_line":"        # provider that would be providing the inventory of SRIOV_NET_VF (the"},{"line_number":1600,"context_line":"        # first physical function which is the only one with inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF) doesn\u0027t have the required trait"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_7872e17e","line":1598,"range":{"start_line":1597,"start_character":74,"end_line":1598,"end_character":64},"in_reply_to":"df7087c5_3501d4b0","updated":"2018-03-19 14:21:25.000000000","message":"Corrected the code comment (the commented-out assertions below were correct already) (I think!)","commit_id":"f58f5b3e5f95d4f45d841de2eaa1293057dd1030"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"5afef02fca98eb3b3611be0c298adceaa7cb5bb8","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_d7ff2a32","line":1602,"updated":"2018-03-20 06:02:19.000000000","message":"Still, my preference is to return 0 request here.\nI\u0027d like to hear what others think about this...\n\nMy understanding is that granular request should be issued only when the user want to request the same resource classes with *multiple* different traits from *multiple* RPs. This case is rather simple just requesting VF resource class with *one* trait from *one*. RP. In such simple case we don\u0027t want to force users to use granular request, do we?","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8017aa1cd004c387abe13050327513403b4c21a3","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_6ea64956","line":1602,"in_reply_to":"df7087c5_2ee051cc","updated":"2018-03-21 23:58:04.000000000","message":"OK, Eric, makes sense.","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"80e811b68ed977c6fc706feb7d3c34f2c2fdaf24","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_2ee051cc","line":1602,"in_reply_to":"df7087c5_8ee63d16","updated":"2018-03-21 23:38:49.000000000","message":"NO, not subtree!\n\nI strongly believe we need to do \"subtree\" logic via some other syntax that\u0027s yet to be designed.\n\nThe existing interface needs to use all and only RPs that are providing actual resource for the request.\n\nAnd that should make the code a *little* more complicated, not a lot.","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f26befaa5faaa418c1c06be2dd06959c03d60385","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_d0fe1937","line":1602,"in_reply_to":"df7087c5_9bcf9456","updated":"2018-03-21 21:20:58.000000000","message":"I don\u0027t think that \"the tree as a whole\" is what we should be aiming for. Instead, it should be the \"subtree\" (branch?) that contains the inventory.","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"13728daf22117bd60011667bb8bd7a6cd4e84e73","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_8ee63d16","line":1602,"in_reply_to":"df7087c5_d0fe1937","updated":"2018-03-21 23:25:40.000000000","message":"I agree with all of you that that makes more logical sense to limit the returned results to \"the subtree\" that corresponds to the requested resource and trait. It\u0027s going to make the code a lot more complicated but I think it\u0027s necessary. I will rework it (again).","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"342a0e4d6bd6dcd6bbe76f28b235ffda12439414","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1600,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1601,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1602,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1603,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_9bcf9456","line":1602,"in_reply_to":"df7087c5_d7ff2a32","updated":"2018-03-20 11:41:35.000000000","message":"I agree that it is weird and not particularly friendly. We\u0027re returning a result set that can\u0027t actually be used. When the destinations get filtered, or  workload gets to \u0027cn\u0027, the result is going to be no good because we cannot accomplish the requirement of \"a pf1 with a trait\": There\u0027s nothing available with that trait and we \"required\" it.\n\nWhile it is accurate to say the tree as a whole has the trait associated with it, there is no inventory with it. That to me means the tree doesn\u0027t have it (right now).\n\nWhat\u0027s the motivation behind returning it?","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"342a0e4d6bd6dcd6bbe76f28b235ffda12439414","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"        # expected \u003d ["},{"line_number":1620,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1621,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1622,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1623,"context_line":"        # ]"},{"line_number":1624,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"},{"line_number":1625,"context_line":"        self._validate_allocation_requests([], alloc_cands)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_db33cc61","line":1622,"updated":"2018-03-20 11:41:35.000000000","message":"This seems logically wrong, we can\u0027t make an allocation on pf1, above we \"consume all the inventory\" on it.","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"342a0e4d6bd6dcd6bbe76f28b235ffda12439414","unresolved":false,"context_lines":[{"line_number":1637,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1638,"context_line":"        #      ]),"},{"line_number":1639,"context_line":"        #      \u0027pf1\u0027: set(["},{"line_number":1640,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1641,"context_line":"        #      ]),"},{"line_number":1642,"context_line":"        # }"},{"line_number":1643,"context_line":"        # self._validate_provider_summary_resources(expected, alloc_cands)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_3b18c8d1","line":1640,"updated":"2018-03-20 11:41:35.000000000","message":"showing up here is great, though, because we want to see the structure.","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"342a0e4d6bd6dcd6bbe76f28b235ffda12439414","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"        #      \u0027cn_numa0\u0027: set([]),"},{"line_number":1651,"context_line":"        #      \u0027cn_numa1\u0027: set([]),"},{"line_number":1652,"context_line":"        #      \u0027pf0\u0027: set([]),"},{"line_number":1653,"context_line":"        #      \u0027pf1\u0027: set([os_traits.HW_NIC_OFFLOAD_GENEVE]),"},{"line_number":1654,"context_line":"        # }"},{"line_number":1655,"context_line":"        # self._validate_provider_summary_traits(expected, alloc_cands)"},{"line_number":1656,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_db0c2c96","line":1653,"updated":"2018-03-20 11:41:35.000000000","message":"and here","commit_id":"470bb50dace48be5fd4125f8f6e7871bb51198e6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1459,"context_line":"        #"},{"line_number":1460,"context_line":"        # We will issue a request to _get_allocation_candidates() for VCPU,"},{"line_number":1461,"context_line":"        # MEMORY_MB and SRIOV_NET_VF **without** required traits, then include"},{"line_number":1462,"context_line":"        # a request that includes HW_NIC_OFFLOAD_GENEVE. In both cases, the"},{"line_number":1463,"context_line":"        # compute node tree should be returned."},{"line_number":1464,"context_line":"        #"},{"line_number":1465,"context_line":"        # Subsequently, we will consume all the SRIOV_NET_VF resources from the"},{"line_number":1466,"context_line":"        # second PF\u0027s inventory and attempt the same request of resources and"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_63c0c97d","line":1463,"range":{"start_line":1462,"start_character":72,"end_line":1463,"end_character":46},"updated":"2018-03-20 21:22:59.000000000","message":"This is kinda vague.\n\nThe request that doesn\u0027t include the trait should yield candidates for both PFs.  The request that includes the trait should yield candidates for just PF1.\n\nIt also wouldn\u0027t hurt to describe where the proc/mem resources live in the tree.\n\n[Later] Given that the NUMA cells don\u0027t have any inventory or traits, they could probably be omitted from the test scenario.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1464,"context_line":"        #"},{"line_number":1465,"context_line":"        # Subsequently, we will consume all the SRIOV_NET_VF resources from the"},{"line_number":1466,"context_line":"        # second PF\u0027s inventory and attempt the same request of resources and"},{"line_number":1467,"context_line":"        # HW_NIC_OFFLOAD_GENEVE. We should continue to get 1 tree returned"},{"line_number":1468,"context_line":"        # because we are NOT using granular request groups and the tree"},{"line_number":1469,"context_line":"        # collectively meets the constraints (it collectively has the needed"},{"line_number":1470,"context_line":"        # trait and inventory, even though the needed trait isn\u0027t on the"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_63452915","line":1467,"range":{"start_line":1467,"start_character":33,"end_line":1467,"end_character":74},"updated":"2018-03-20 21:22:59.000000000","message":"No - if PF1\u0027s inventory is used up, and PF1 is the one with the trait, and we require the trait, we should get no candidates.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"        # because we are NOT using granular request groups and the tree"},{"line_number":1469,"context_line":"        # collectively meets the constraints (it collectively has the needed"},{"line_number":1470,"context_line":"        # trait and inventory, even though the needed trait isn\u0027t on the"},{"line_number":1471,"context_line":"        # provider that the inventory is going to come from"},{"line_number":1472,"context_line":"        cn \u003d self._create_provider(\u0027cn\u0027)"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"        _add_inventory(cn, fields.ResourceClass.VCPU, 16)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_e3861966","line":1471,"updated":"2018-03-20 21:22:59.000000000","message":"Okay, I haven\u0027t read the code yet, but I don\u0027t agree with what the comment describes.\n\nIn that last case, we should get *no* candidates.  The rule needs to be that the traits are collectively satisfied by the providers that are actually providing resources.  (As we discussed this morning in IRC.)","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1508,"context_line":"        self._validate_allocation_requests([], alloc_cands)"},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1511,"context_line":"        # are handled by allocation candidates:"},{"line_number":1512,"context_line":"        # expected \u003d {"},{"line_number":1513,"context_line":"        #     \u0027cn\u0027: set(["},{"line_number":1514,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_63e1a9fc","line":1511,"updated":"2018-03-20 21:22:59.000000000","message":"So we decided the provider summary returns the *whole* tree?  (That seems reasonable to me - just checking.  Either way, it\u0027s a thing to put in the spec.)","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1538,"context_line":"        # self._validate_provider_summary_traits(expected, alloc_cands)"},{"line_number":1539,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        # Now add required traits to the mix and verify we still get the same"},{"line_number":1542,"context_line":"        # result (since we haven\u0027t yet consumed the second physical function\u0027s"},{"line_number":1543,"context_line":"        # inventory of SRIOV_NET_VF."},{"line_number":1544,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["},{"line_number":1545,"context_line":"            placement_lib.RequestGroup("}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_592496c6","line":1542,"range":{"start_line":1541,"start_character":73,"end_line":1542,"end_character":16},"updated":"2018-03-20 21:22:59.000000000","message":"No, not the same result; pf0 shouldn\u0027t appear.  (It\u0027s correct in the comment below.)","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1558,"context_line":"        # expected \u003d ["},{"line_number":1559,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1560,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1561,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1562,"context_line":"        # ]"},{"line_number":1563,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"},{"line_number":1564,"context_line":"        self._validate_allocation_requests([], alloc_cands)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_791f1a70","line":1561,"range":{"start_line":1561,"start_character":15,"end_line":1561,"end_character":20},"updated":"2018-03-20 21:22:59.000000000","message":"yeah, this is right - just pf1.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1598,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1599,"context_line":"        # verify that the same request still results in 1 found tree. Even"},{"line_number":1600,"context_line":"        # though the provider that would be providing the inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1602,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_99130e67","line":1599,"range":{"start_line":1599,"start_character":64,"end_line":1599,"end_character":68},"updated":"2018-03-20 21:22:59.000000000","message":"candidate?","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"        # Now consume all the inventory of SRIOV_NET_VF on the second physical"},{"line_number":1598,"context_line":"        # function (the one with HW_NIC_OFFLOAD_GENEVE associated with it) and"},{"line_number":1599,"context_line":"        # verify that the same request still results in 1 found tree. Even"},{"line_number":1600,"context_line":"        # though the provider that would be providing the inventory of"},{"line_number":1601,"context_line":"        # SRIOV_NET_VF (the first physical function which is the only one with"},{"line_number":1602,"context_line":"        # inventory of SRIOV_NET_VF) doesn\u0027t have the required trait, the tree"},{"line_number":1603,"context_line":"        # as a whole *does* have the required trait and since we are not using"},{"line_number":1604,"context_line":"        # granular request groups, the tree should match the constraints"},{"line_number":1605,"context_line":"        _allocate_from_provider(pf1, fields.ResourceClass.SRIOV_NET_VF, 8)"},{"line_number":1606,"context_line":""},{"line_number":1607,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_9408b528","line":1604,"range":{"start_line":1599,"start_character":56,"end_line":1604,"end_character":72},"updated":"2018-03-20 21:22:59.000000000","message":"Yeah, so this comment is incorrect.  Since we\u0027re requesting with the required trait, and all the inventory is consumed on pf1, we should get no results back.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1621,"context_line":"        # expected \u003d ["},{"line_number":1622,"context_line":"        #    [(\u0027cn\u0027, fields.ResourceClass.VCPU, 2),"},{"line_number":1623,"context_line":"        #     (\u0027cn\u0027, fields.ResourceClass.MEMORY_MB, 1024),"},{"line_number":1624,"context_line":"        #     (\u0027pf1\u0027, fields.ResourceClass.SRIOV_NET_VF, 1)],"},{"line_number":1625,"context_line":"        # ]"},{"line_number":1626,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"},{"line_number":1627,"context_line":"        self._validate_allocation_requests([], alloc_cands)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_54121d5a","line":1624,"range":{"start_line":1624,"start_character":16,"end_line":1624,"end_character":19},"updated":"2018-03-20 21:22:59.000000000","message":"...and we *especially* shouldn\u0027t get back a result containing pf1, since that guy\u0027s inventory is all consumed.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"79997d261789ddd90a5fde1ebc4e63c7b4d85036","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        # ]"},{"line_number":1626,"context_line":"        # self._validate_allocation_requests(expected, alloc_cands)"},{"line_number":1627,"context_line":"        self._validate_allocation_requests([], alloc_cands)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        # TODO(jaypipes): This should be the following once nested providers"},{"line_number":1630,"context_line":"        # are handled by allocation candidates:"},{"line_number":1631,"context_line":"        # expected \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"df7087c5_f42a517c","line":1628,"updated":"2018-03-20 21:22:59.000000000","message":"...and I assume the provider summary will be empty accordingly.","commit_id":"ba45cf101512ea746ecbf3db7d443b53d2da8473"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dfe7163d486f65fc9c4de6995173a539439facc4","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"        #         (fields.ResourceClass.VCPU, 16, 0),"},{"line_number":1435,"context_line":"        #         (fields.ResourceClass.MEMORY_MB, 32768, 0),"},{"line_number":1436,"context_line":"        #      ]),"},{"line_number":1437,"context_line":"        #      \u0027cn_numa0\u0027: set([]),"},{"line_number":1438,"context_line":"        #      \u0027cn_numa1\u0027: set([]),"},{"line_number":1439,"context_line":"        #      \u0027pf0\u0027: set(["},{"line_number":1440,"context_line":"        #         (fields.ResourceClass.SRIOV_NET_VF, 8, 0),"},{"line_number":1441,"context_line":"        #      ]),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf659307_5f87dcd8","line":1438,"range":{"start_line":1437,"start_character":0,"end_line":1438,"end_character":35},"updated":"2018-03-23 21:37:15.000000000","message":"Yeah, good; this is going to make Tetsuro\u0027s scenario with the \"anchor RP\" make a lot more sense.","commit_id":"07beb196d070665f0da4dc2743d1f24f2876b66a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"2bacaf85ab72efe9ebd48eceadbd2b0833492004","unresolved":false,"context_lines":[{"line_number":1458,"context_line":"        # self._validate_provider_summary_traits(expected, alloc_cands)"},{"line_number":1459,"context_line":"        self._validate_provider_summary_traits({}, alloc_cands)"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"        # Now add required traits to the mix and verify we still get the same"},{"line_number":1462,"context_line":"        # result (since we haven\u0027t yet consumed the second physical function\u0027s"},{"line_number":1463,"context_line":"        # inventory of SRIOV_NET_VF."},{"line_number":1464,"context_line":"        alloc_cands \u003d self._get_allocation_candidates(["},{"line_number":1465,"context_line":"            placement_lib.RequestGroup("}],"source_content_type":"text/x-python","patch_set":13,"id":"bf659307_8703f00d","line":1462,"range":{"start_line":1461,"start_character":59,"end_line":1462,"end_character":16},"updated":"2018-03-23 18:44:53.000000000","message":"As Eric mentioned in the last PS, this is not correct, although the commented code below is correct.","commit_id":"07beb196d070665f0da4dc2743d1f24f2876b66a"}]}
