)]}'
{"nova/pci/request.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94048488acbfca20e7780c4ba76ccac8c62b6ff6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            \"maxLength\": 256,"},{"line_number":71,"context_line":"        },"},{"line_number":72,"context_line":"        # TODO(stephenfin): This isn\u0027t used anywhere outside of tests and"},{"line_number":73,"context_line":"        # should probably be removed."},{"line_number":74,"context_line":"        \"capability_type\": {"},{"line_number":75,"context_line":"            \"type\": \"string\","},{"line_number":76,"context_line":"            \"enum\": _ALIAS_CAP_TYPE,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_ef116d55","line":73,"updated":"2017-12-20 16:16:44.000000000","message":"and it\u0027s a libvirt-specific thing.","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94048488acbfca20e7780c4ba76ccac8c62b6ff6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        device specs, while ``numa_policy`` describes the required NUMA"},{"line_number":105,"context_line":"        affinity of the device(s)."},{"line_number":106,"context_line":"    :raises: exception.PciInvalidAlias if two aliases with the same name have"},{"line_number":107,"context_line":"        different device types or different NUMA policies."},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    jaliases \u003d CONF.pci.alias"},{"line_number":110,"context_line":"    aliases \u003d {}  # map alias name to alias spec list"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_8f2c619a","line":107,"updated":"2017-12-20 16:16:44.000000000","message":"thanks for updating the docstring.","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94048488acbfca20e7780c4ba76ccac8c62b6ff6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            if dev_type:"},{"line_number":123,"context_line":"                spec[\u0027dev_type\u0027] \u003d dev_type"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            if name not in aliases:"},{"line_number":126,"context_line":"                aliases[name] \u003d (numa_policy, [spec])"},{"line_number":127,"context_line":"                continue"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            if aliases[name][0] !\u003d numa_policy:"},{"line_number":130,"context_line":"                reason \u003d _(\"NUMA policy mismatch for alias \u0027%s\u0027\") % name"},{"line_number":131,"context_line":"                raise exception.PciInvalidAlias(reason\u003dreason)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            if aliases[name][1][0][\u0027dev_type\u0027] !\u003d spec[\u0027dev_type\u0027]:"},{"line_number":134,"context_line":"                reason \u003d _(\"Device type mismatch for alias \u0027%s\u0027\") % name"},{"line_number":135,"context_line":"                raise exception.PciInvalidAlias(reason\u003dreason)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"            aliases[name][1].append(spec)"},{"line_number":138,"context_line":"    except exception.PciInvalidAlias:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_efadedea","line":135,"range":{"start_line":125,"start_character":1,"end_line":135,"end_character":62},"updated":"2017-12-20 16:16:44.000000000","message":"nice cleanup.","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94048488acbfca20e7780c4ba76ccac8c62b6ff6","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            aliases[name][1].append(spec)"},{"line_number":138,"context_line":"    except exception.PciInvalidAlias:"},{"line_number":139,"context_line":"        raise"},{"line_number":140,"context_line":"    except jsonschema.exceptions.ValidationError as exc:"},{"line_number":141,"context_line":"        raise exception.PciInvalidAlias(reason\u003dexc.message)"},{"line_number":142,"context_line":"    except Exception as exc:"},{"line_number":143,"context_line":"        raise exception.PciInvalidAlias(reason\u003dsix.text_type(exc))"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_8f51c111","line":141,"range":{"start_line":140,"start_character":1,"end_line":141,"end_character":59},"updated":"2017-12-20 16:16:44.000000000","message":"++ for being specific about the exception class.","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9648547afa6764ab7707c1f704a4ed1230c1cc1e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            raise exception.PciRequestAliasNotDefined(alias\u003dname)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        count \u003d int(count)"},{"line_number":159,"context_line":"        numa_policy, spec \u003d pci_aliases[name]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        pci_requests.append(objects.InstancePCIRequest("},{"line_number":162,"context_line":"            count\u003dcount,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_54526069","line":159,"updated":"2017-12-29 10:06:41.000000000","message":"Previously the code passed forward a deepcopy of the spec list but now it does not do that any more. I don\u0027t see anything wrong with it right now but would be good to now the original reason of the copying.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            raise exception.PciRequestAliasNotDefined(alias\u003dname)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        count \u003d int(count)"},{"line_number":159,"context_line":"        numa_policy, spec \u003d pci_aliases[name]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        pci_requests.append(objects.InstancePCIRequest("},{"line_number":162,"context_line":"            count\u003dcount,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_37cf9e80","line":159,"in_reply_to":"9f91af0f_54526069","updated":"2017-12-29 11:56:02.000000000","message":"The copy was here because we didn\u0027t want later code that populates NUMA information to be modifying this. This is now unnecessary because we\u0027re using the \u0027a, b \u003d c\u0027 pattern. For example, compare:\n\n  \u003e\u003e\u003e x \u003d [(\u0027a\u0027, \u0027b\u0027), (\u0027c\u0027,)]\n  \u003e\u003e\u003e y \u003d x\n  \u003e\u003e\u003e y[0] \u003d (\u0027d\u0027,)\n  \u003e\u003e\u003e x\n  [(\u0027d\u0027,), (\u0027c\u0027,)]\n\nwith:\n\n  \u003e\u003e\u003e x \u003d [(\u0027a\u0027, \u0027b\u0027), (\u0027c\u0027,)]\n  \u003e\u003e\u003e y, z \u003d x\n  \u003e\u003e\u003e y \u003d (\u0027d\u0027,)\n  \u003e\u003e\u003e x\n  [(\u0027a\u0027, \u0027b\u0027), (\u0027c\u0027,)]\n\nNo to the original object, therefore the copy isn\u0027t necessary.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"}],"nova/pci/stats.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        (must-have)."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_c0a9d324","line":229,"range":{"start_line":229,"start_character":36,"end_line":229,"end_character":51},"updated":"2017-12-13 06:04:53.000000000","message":"If I\u0027m reading this correctly, this is InstanceNUMACells. That is a bit confusing so it maybe good to note here that we have host NUMACell id in InstanceNUMACell.","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        (must-have)."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_92879c10","line":229,"range":{"start_line":229,"start_character":36,"end_line":229,"end_character":51},"in_reply_to":"df87a7cf_c0a9d324","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_a01daf74","line":230,"updated":"2017-12-13 06:04:53.000000000","message":"good to add the explanation of :param requested_count:","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_3220104a","line":230,"in_reply_to":"df87a7cf_a01daf74","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_005edb44","line":231,"range":{"start_line":231,"start_character":15,"end_line":231,"end_character":30},"updated":"2017-12-13 06:04:53.000000000","message":"numa_policy","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":229,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":230,"context_line":"            to, or None."},{"line_number":231,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_12170cf0","line":231,"range":{"start_line":231,"start_character":15,"end_line":231,"end_character":30},"in_reply_to":"df87a7cf_005edb44","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                requested_count):"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return []"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @staticmethod"},{"line_number":255,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_0396e595","line":252,"range":{"start_line":252,"start_character":8,"end_line":252,"end_character":17},"updated":"2017-12-13 06:04:53.000000000","message":"Whichever policy we use and even if there is no pool that matches the request, this function of _filter_pools_for_numa_cells() finally returns something at L245-L246. So nothing reaches here?","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                requested_count):"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return []"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @staticmethod"},{"line_number":255,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_2f5e6745","line":252,"range":{"start_line":252,"start_character":8,"end_line":252,"end_character":17},"in_reply_to":"df87a7cf_0396e595","updated":"2017-12-13 10:05:54.000000000","message":"Oh, that\u0027s a very good point. I\u0027ll remove this","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        Apply a PCI request against a given set of PCI device pools, which are"},{"line_number":292,"context_line":"        collections of devices with similar traits."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        If ``numa_cells``, a list of host NUMA cells, is provided then"},{"line_number":295,"context_line":"        ``pci_numa_policy`` will be used to determine how strict any PCI"},{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_000c9b40","line":294,"range":{"start_line":294,"start_character":37,"end_line":294,"end_character":52},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        Apply a PCI request against a given set of PCI device pools, which are"},{"line_number":292,"context_line":"        collections of devices with similar traits."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        If ``numa_cells``, a list of host NUMA cells, is provided then"},{"line_number":295,"context_line":"        ``pci_numa_policy`` will be used to determine how strict any PCI"},{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_b2618014","line":294,"range":{"start_line":294,"start_character":37,"end_line":294,"end_character":52},"in_reply_to":"df87a7cf_000c9b40","updated":"2017-12-13 10:05:54.000000000","message":"I reworked this entire paragraph","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        ``pci_numa_policy`` will be used to determine how strict any PCI"},{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":299,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":300,"context_line":"            to, or None."},{"line_number":301,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_4012a364","line":298,"updated":"2017-12-13 06:04:53.000000000","message":":param request: ?","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        ``pci_numa_policy`` will be used to determine how strict any PCI"},{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":299,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":300,"context_line":"            to, or None."},{"line_number":301,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_52ad942f","line":298,"in_reply_to":"df87a7cf_4012a364","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":299,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":300,"context_line":"            to, or None."},{"line_number":301,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":302,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_6017a753","line":299,"range":{"start_line":299,"start_character":36,"end_line":299,"end_character":51},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        device(s) must be affinitized to the host cells in this list."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":299,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":300,"context_line":"            to, or None."},{"line_number":301,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":302,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_f2a94824","line":299,"range":{"start_line":299,"start_character":36,"end_line":299,"end_character":51},"in_reply_to":"df87a7cf_6017a753","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        determine how strict the PCI device should be affinitized to the host"},{"line_number":346,"context_line":"        cells in this list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_c300fdae","line":348,"range":{"start_line":348,"start_character":15,"end_line":348,"end_character":27},"updated":"2017-12-13 06:04:53.000000000","message":"requests","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        determine how strict the PCI device should be affinitized to the host"},{"line_number":346,"context_line":"        cells in this list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_b5fdea09","line":348,"range":{"start_line":348,"start_character":15,"end_line":348,"end_character":27},"in_reply_to":"df87a7cf_c300fdae","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        cells in this list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."},{"line_number":352,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_832c354b","line":349,"range":{"start_line":349,"start_character":14,"end_line":349,"end_character":26},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        cells in this list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."},{"line_number":352,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_12038c11","line":349,"range":{"start_line":349,"start_character":14,"end_line":349,"end_character":26},"in_reply_to":"df87a7cf_832c354b","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."},{"line_number":352,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":353,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_c319dd22","line":350,"range":{"start_line":350,"start_character":36,"end_line":350,"end_character":51},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":349,"context_line":"        :type pci_requests: List[nova.objects.InstancePCIRequests]"},{"line_number":350,"context_line":"        :param numa_cells: A list of host numacells to limit possible devices"},{"line_number":351,"context_line":"            to, or None."},{"line_number":352,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":353,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_f205c815","line":350,"range":{"start_line":350,"start_character":36,"end_line":350,"end_character":51},"in_reply_to":"df87a7cf_c319dd22","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        determine how strict the PCI device should be affinitized to the host"},{"line_number":369,"context_line":"        cells in this list."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_83d19532","line":371,"range":{"start_line":371,"start_character":15,"end_line":371,"end_character":27},"updated":"2017-12-13 06:04:53.000000000","message":"requests","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        determine how strict the PCI device should be affinitized to the host"},{"line_number":369,"context_line":"        cells in this list."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_d502ee09","line":371,"range":{"start_line":371,"start_character":15,"end_line":371,"end_character":27},"in_reply_to":"df87a7cf_83d19532","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        cells in this list."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."},{"line_number":375,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_43db8d4e","line":372,"range":{"start_line":372,"start_character":14,"end_line":372,"end_character":26},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        cells in this list."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."},{"line_number":375,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_7507621a","line":372,"range":{"start_line":372,"start_character":14,"end_line":372,"end_character":26},"in_reply_to":"df87a7cf_43db8d4e","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."},{"line_number":375,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":376,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_63e011fc","line":373,"range":{"start_line":373,"start_character":37,"end_line":373,"end_character":51},"updated":"2017-12-13 06:04:53.000000000","message":"ditto","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        :param pci_requests: A list of requested PCI devices."},{"line_number":372,"context_line":"        :type pci_requests: nova.objects.InstancePCIRequests"},{"line_number":373,"context_line":"        :param numa_cells: A list of host NUMACells to limit possible devices"},{"line_number":374,"context_line":"            to, or None."},{"line_number":375,"context_line":"        :param pci_numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":376,"context_line":"            filtering devices from ``numa_cells``."}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_950c663c","line":373,"range":{"start_line":373,"start_character":37,"end_line":373,"end_character":51},"in_reply_to":"df87a7cf_63e011fc","updated":"2017-12-13 10:05:54.000000000","message":"Done","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"ee5c0cb4801ef996e23c74dc34c0bdbf5bd6f262","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # a spec may be able to match multiple pools."},{"line_number":154,"context_line":"            pools \u003d self._filter_pools_for_spec(self.pools, spec)"},{"line_number":155,"context_line":"            if numa_topology:"},{"line_number":156,"context_line":"                numa_policy \u003d None"},{"line_number":157,"context_line":"                if \u0027pci_numa_policy\u0027 in numa_topology:"},{"line_number":158,"context_line":"                    numa_policy \u003d numa_topology.pci_numa_policy"},{"line_number":159,"context_line":"                pools \u003d self._filter_pools_for_numa_cells("}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_4293755d","line":156,"updated":"2017-12-13 21:39:04.000000000","message":"would it make sense to set this to \"legacy\" here and avoid the \"or\" down in _filter_pools_for_numa_cells()?  I guess the way you have it has the benefit of putting the legacy-is-default behaviour in with the guts of the code.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # a spec may be able to match multiple pools."},{"line_number":154,"context_line":"            pools \u003d self._filter_pools_for_spec(self.pools, spec)"},{"line_number":155,"context_line":"            if numa_topology:"},{"line_number":156,"context_line":"                numa_policy \u003d None"},{"line_number":157,"context_line":"                if \u0027pci_numa_policy\u0027 in numa_topology:"},{"line_number":158,"context_line":"                    numa_policy \u003d numa_topology.pci_numa_policy"},{"line_number":159,"context_line":"                pools \u003d self._filter_pools_for_numa_cells("}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_eb9ff462","line":156,"in_reply_to":"df87a7cf_4293755d","updated":"2017-12-14 09:57:41.000000000","message":"I tend to disagree with you, Chris, on that. Defaulting the NUMA policy here to be \"legacy\" would mean that we would need to modify that in case we change the default policy later in a next cycle, while saying \"mmm, no, we don\u0027t have yet a policy\" to the specific method helps the method to know which default policy is only within it.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # a spec may be able to match multiple pools."},{"line_number":154,"context_line":"            pools \u003d self._filter_pools_for_spec(self.pools, spec)"},{"line_number":155,"context_line":"            if numa_topology:"},{"line_number":156,"context_line":"                numa_policy \u003d None"},{"line_number":157,"context_line":"                if \u0027pci_numa_policy\u0027 in numa_topology:"},{"line_number":158,"context_line":"                    numa_policy \u003d numa_topology.pci_numa_policy"},{"line_number":159,"context_line":"                pools \u003d self._filter_pools_for_numa_cells("}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_f40ef430","line":156,"in_reply_to":"df87a7cf_eb9ff462","updated":"2017-12-14 14:11:05.000000000","message":"Aye, I\u0027d agree with Sylvain here. However, just as importantly, there are multiple callers of this \u0027_filter_pools_for_numa_cells\u0027. Keeping the None-handling in that function, rather than in the callers, means less duplication and less chance of bugs (the function expects \u0027numa_policy\u0027 to be set to something). Good idea nonetheless and one I did consider","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            ``requested_count`` PCI devices with the level of NUMA affinity"},{"line_number":235,"context_line":"            required by ``numa_policy``."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        # Iterate through the various policies in order of strictness. This"},{"line_number":240,"context_line":"        # means that even if we only *prefer* PCI-NUMA affinity, we will still"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_eb8db42a","line":237,"updated":"2017-12-14 09:57:41.000000000","message":"you could leave a NOTE saying we could change the default policy in a later cycle","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            ``requested_count`` PCI devices with the level of NUMA affinity"},{"line_number":235,"context_line":"            required by ``numa_policy``."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        requested_policy \u003d numa_policy or fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        # Iterate through the various policies in order of strictness. This"},{"line_number":240,"context_line":"        # means that even if we only *prefer* PCI-NUMA affinity, we will still"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_5119f285","line":237,"in_reply_to":"df87a7cf_eb8db42a","updated":"2017-12-14 14:11:05.000000000","message":"Good call. Done.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                pools, numa_cells, policy)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            if policy \u003d\u003d requested_policy:"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            if (sum(pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d"},{"line_number":253,"context_line":"                requested_count):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_8b23c805","line":250,"updated":"2017-12-14 09:57:41.000000000","message":"Also, here you could explain that we don\u0027t verify other policies if the requested policy is the one we verify *now*.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                pools, numa_cells, policy)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            if policy \u003d\u003d requested_policy:"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            if (sum(pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d"},{"line_number":253,"context_line":"                requested_count):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_b155de1f","line":250,"in_reply_to":"df87a7cf_8b23c805","updated":"2017-12-14 14:11:05.000000000","message":"Done","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"48cb2d4857c8cf519aaddb6247c012f49c61391f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        # Iterate through the various policies in order of strictness. This"},{"line_number":240,"context_line":"        # means that even if we only *prefer* PCI-NUMA affinity, we will still"},{"line_number":241,"context_line":"        # attempt to provide it if possible."},{"line_number":242,"context_line":"        for policy in (fields.PCINUMAAffinityPolicy.REQUIRED,"},{"line_number":243,"context_line":"                       fields.PCINUMAAffinityPolicy.LEGACY,"},{"line_number":244,"context_line":"                       fields.PCINUMAAffinityPolicy.PREFERRED):"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            filtered_pools \u003d cls._filter_pools_by_numa_policy("},{"line_number":247,"context_line":"                pools, numa_cells, policy)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            if policy \u003d\u003d requested_policy:"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            if (sum(pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d"},{"line_number":253,"context_line":"                requested_count):"},{"line_number":254,"context_line":"                return filtered_pools"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    @staticmethod"},{"line_number":257,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_47f707d6","line":254,"range":{"start_line":242,"start_character":0,"end_line":254,"end_character":37},"updated":"2017-12-13 16:57:49.000000000","message":"This, along with the the extracting of policy from the image or flavor and setting of \u0027InstanceNUMATopology.pci_numa_policy\u0027 in \u0027nova/virt/hardware.py\u0027, is the meat of the change of the bulk of the change. Everything else in this patch is modified/new tests or simply passing the policy parameter through to this point.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        # Iterate through the various policies in order of strictness. This"},{"line_number":240,"context_line":"        # means that even if we only *prefer* PCI-NUMA affinity, we will still"},{"line_number":241,"context_line":"        # attempt to provide it if possible."},{"line_number":242,"context_line":"        for policy in (fields.PCINUMAAffinityPolicy.REQUIRED,"},{"line_number":243,"context_line":"                       fields.PCINUMAAffinityPolicy.LEGACY,"},{"line_number":244,"context_line":"                       fields.PCINUMAAffinityPolicy.PREFERRED):"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            filtered_pools \u003d cls._filter_pools_by_numa_policy("},{"line_number":247,"context_line":"                pools, numa_cells, policy)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            if policy \u003d\u003d requested_policy:"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            if (sum(pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d"},{"line_number":253,"context_line":"                requested_count):"},{"line_number":254,"context_line":"                return filtered_pools"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    @staticmethod"},{"line_number":257,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_eb77f407","line":254,"range":{"start_line":242,"start_character":0,"end_line":254,"end_character":37},"in_reply_to":"df87a7cf_47f707d6","updated":"2017-12-14 09:57:41.000000000","message":"And here, you could explain that it\u0027s a best-effort","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        # Iterate through the various policies in order of strictness. This"},{"line_number":240,"context_line":"        # means that even if we only *prefer* PCI-NUMA affinity, we will still"},{"line_number":241,"context_line":"        # attempt to provide it if possible."},{"line_number":242,"context_line":"        for policy in (fields.PCINUMAAffinityPolicy.REQUIRED,"},{"line_number":243,"context_line":"                       fields.PCINUMAAffinityPolicy.LEGACY,"},{"line_number":244,"context_line":"                       fields.PCINUMAAffinityPolicy.PREFERRED):"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            filtered_pools \u003d cls._filter_pools_by_numa_policy("},{"line_number":247,"context_line":"                pools, numa_cells, policy)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            if policy \u003d\u003d requested_policy:"},{"line_number":250,"context_line":"                return filtered_pools"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            if (sum(pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d"},{"line_number":253,"context_line":"                requested_count):"},{"line_number":254,"context_line":"                return filtered_pools"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    @staticmethod"},{"line_number":257,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_9158da56","line":254,"range":{"start_line":242,"start_character":0,"end_line":254,"end_character":37},"in_reply_to":"df87a7cf_eb77f407","updated":"2017-12-14 14:11:05.000000000","message":"Done","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# TODO(stephenfin): PCI pools should be a real object, if nothing else but to"},{"line_number":35,"context_line":"# allow us to provide documentation on the concept which we can reference"},{"line_number":36,"context_line":"class PciDeviceStats(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\"PCI devices summary information."}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_7943af14","line":35,"updated":"2017-12-14 20:10:44.000000000","message":"or not. we should rip PCIDevicePools out entirely and use placement and traits.","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        :param request: An InstancePCIRequest object describing the type and"},{"line_number":309,"context_line":"            quantity of device(s) we want."},{"line_number":310,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":311,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":312,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":313,"context_line":"            filtering devices from ``numa_cells``."},{"line_number":314,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_b9d5b71d","line":311,"range":{"start_line":311,"start_character":38,"end_line":311,"end_character":55},"updated":"2017-12-14 20:10:44.000000000","message":"of a host NUMACell","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _apply_request(self, pools, request, numa_cells\u003dNone,"},{"line_number":298,"context_line":"            numa_policy\u003dNone):"},{"line_number":299,"context_line":"        \"\"\"Apply a PCI request."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        Apply a PCI request against a given set of PCI device pools, which are"},{"line_number":302,"context_line":"        collections of devices with similar traits."},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        If ``numa_cells`` is provided then NUMA locality may be taken into"},{"line_number":305,"context_line":"        account, depending on the value of ``numa_policy``."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        :param pools: A list of PCI device pool dicts"},{"line_number":308,"context_line":"        :param request: An InstancePCIRequest object describing the type and"},{"line_number":309,"context_line":"            quantity of device(s) we want."},{"line_number":310,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":311,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":312,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":313,"context_line":"            filtering devices from ``numa_cells``."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # NOTE(vladikr): This code maybe open to race conditions."},{"line_number":316,"context_line":"        # Two concurrent requests may succeed when called support_requests"},{"line_number":317,"context_line":"        # because this method does not remove related devices from the pools"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_f9fc9fb6","line":314,"range":{"start_line":299,"start_character":0,"end_line":314,"end_character":11},"updated":"2017-12-14 20:10:44.000000000","message":"thanks for docstring\u0027ing this.","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94048488acbfca20e7780c4ba76ccac8c62b6ff6","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @staticmethod"},{"line_number":263,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"},{"line_number":264,"context_line":"        if policy \u003d\u003d fields.PCINUMAAffinityPolicy.PREFERRED:"},{"line_number":265,"context_line":"            return pools"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        numa_cells \u003d [cell.id for cell in numa_cells]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_6f047dc7","line":265,"range":{"start_line":264,"start_character":0,"end_line":265,"end_character":24},"updated":"2017-12-20 16:16:44.000000000","message":"this requires that the REQUIRED numa_policy has already filtered the pools parameter... that\u0027s a bit too tricky for my tastes. It introduces coupling between the two functions that isn\u0027t obvious at first glance.\n\nIn short, I think this is trying to be just a bit too clever :)","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"24e375257b975deea2ce4ca1346bd672a3e0531d","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @staticmethod"},{"line_number":263,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"},{"line_number":264,"context_line":"        if policy \u003d\u003d fields.PCINUMAAffinityPolicy.PREFERRED:"},{"line_number":265,"context_line":"            return pools"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        numa_cells \u003d [cell.id for cell in numa_cells]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_afab6573","line":265,"range":{"start_line":264,"start_character":0,"end_line":265,"end_character":24},"in_reply_to":"bf8cb3f7_6f047dc7","updated":"2017-12-20 16:23:53.000000000","message":"\u003e this requires that the REQUIRED numa_policy has already filtered\n \u003e the pools parameter... that\u0027s a bit too tricky for my tastes. It\n \u003e introduces coupling between the two functions that isn\u0027t obvious at\n \u003e first glance.\n\nDoes it? This function is only called by \u0027_filter_pools_for_numa_cells\u0027 and we\u0027re passing in the original list of pools (\u0027pools\u0027 - not \u0027filtered_pools\u0027) each time we call this. The expectation here is that this will just return every pool without any filtering.","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c1442362d8b507bcb024d4f7156881b46394356e","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @staticmethod"},{"line_number":263,"context_line":"    def _filter_pools_by_numa_policy(pools, numa_cells, policy):"},{"line_number":264,"context_line":"        if policy \u003d\u003d fields.PCINUMAAffinityPolicy.PREFERRED:"},{"line_number":265,"context_line":"            return pools"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        numa_cells \u003d [cell.id for cell in numa_cells]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8cb3f7_91dc6275","line":265,"range":{"start_line":264,"start_character":0,"end_line":265,"end_character":24},"in_reply_to":"bf8cb3f7_afab6573","updated":"2017-12-21 20:19:24.000000000","message":"I think what Stephen has done is correct.  For the PREFERRED case it\u0027s valid to just return all the pools because they\u0027re all acceptable.\n\nThe fact that the caller will call this in order of REQUIRED/LEGACY/PREFERRED is somewhat irrelevant to this line (but is relevent in that it enforces the preferred-ness by trying the more strict matches first).","commit_id":"610f81415c2b74b49bbbb5e467094a1c820a5ce5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9648547afa6764ab7707c1f704a4ed1230c1cc1e","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":231,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        :param requested_count: The number of PCI devices requested."},{"line_number":233,"context_line":"        :returns: A list of pools that can, together, provide at least"},{"line_number":234,"context_line":"            ``requested_count`` PCI devices with the level of NUMA affinity"},{"line_number":235,"context_line":"            required by ``numa_policy``."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        # NOTE(stephenfin): We may wish to change the default policy at a later"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_74452470","line":234,"range":{"start_line":233,"start_character":44,"end_line":234,"end_character":43},"updated":"2017-12-29 10:06:41.000000000","message":"I don\u0027t see how this code ensures that there is at least the requested amount of devices in the pools returned. E.g. if the requested_policy \u003d\u003d fields.PCINUMAAffinityPolicy.REQUIRED then it simply returns the filtered_pools list without any count check.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":231,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply."},{"line_number":232,"context_line":"        :param requested_count: The number of PCI devices requested."},{"line_number":233,"context_line":"        :returns: A list of pools that can, together, provide at least"},{"line_number":234,"context_line":"            ``requested_count`` PCI devices with the level of NUMA affinity"},{"line_number":235,"context_line":"            required by ``numa_policy``."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        # NOTE(stephenfin): We may wish to change the default policy at a later"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_77aa0686","line":234,"range":{"start_line":233,"start_character":44,"end_line":234,"end_character":43},"in_reply_to":"9f91af0f_74452470","updated":"2017-12-29 11:56:02.000000000","message":"Good call. I\u0027ve addresses this in a follow-up patch.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3af6c73f7cee6207274ad61099e311c2643da63d","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        numa_cell_ids \u003d [cell.id for cell in numa_cells]"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        # filter out pools which numa_node is not included in numa_cell_ids"},{"line_number":243,"context_line":"        filtered_pools \u003d ["},{"line_number":244,"context_line":"            pool for pool in pools if any(utils.pci_device_prop_match("},{"line_number":245,"context_line":"                pool, [{\u0027numa_node\u0027: cell}]) for cell in numa_cell_ids)]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        # we can\u0027t apply a less strict policy than the one requested, so we"},{"line_number":248,"context_line":"        # need to return if we\u0027ve demanded a NUMA affinity of REQUIRED."}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_e8ab75d3","line":245,"range":{"start_line":243,"start_character":0,"end_line":245,"end_character":72},"updated":"2017-12-22 16:04:44.000000000","message":"Note that because we\u0027re using a list comprehension, this won\u0027t have any effect on the original \u0027pools\u0027. This creates a copy it.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1d9b85f92f36da90b1409b9b659eda5d430a00cd","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        # once again, we can\u0027t apply a less strict policy than the one"},{"line_number":267,"context_line":"        # requested, so we need to return if we\u0027ve demanded a NUMA affinity of"},{"line_number":268,"context_line":"        # LEGACY. Similarly, we will also reurn if we have enough devices to"},{"line_number":269,"context_line":"        # satisfy this somewhat strict policy."},{"line_number":270,"context_line":"        if requested_policy \u003d\u003d fields.PCINUMAAffinityPolicy.LEGACY or sum("},{"line_number":271,"context_line":"                pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d requested_count:"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_ccbf97ce","line":268,"range":{"start_line":268,"start_character":42,"end_line":268,"end_character":47},"updated":"2017-12-24 12:33:14.000000000","message":"return","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        # once again, we can\u0027t apply a less strict policy than the one"},{"line_number":267,"context_line":"        # requested, so we need to return if we\u0027ve demanded a NUMA affinity of"},{"line_number":268,"context_line":"        # LEGACY. Similarly, we will also reurn if we have enough devices to"},{"line_number":269,"context_line":"        # satisfy this somewhat strict policy."},{"line_number":270,"context_line":"        if requested_policy \u003d\u003d fields.PCINUMAAffinityPolicy.LEGACY or sum("},{"line_number":271,"context_line":"                pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d requested_count:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_97af8a93","line":268,"range":{"start_line":268,"start_character":42,"end_line":268,"end_character":47},"in_reply_to":"bf8cb3f7_ccbf97ce","updated":"2017-12-29 11:56:02.000000000","message":"Addressed in follow-up","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9648547afa6764ab7707c1f704a4ed1230c1cc1e","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d requested_count:"},{"line_number":272,"context_line":"            return filtered_pools"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # if we\u0027ve got here, we\u0027re using the PREFERRED policy and weren\u0027t able"},{"line_number":275,"context_line":"        # to provide anything with stricter affinity. Use whatever devices you"},{"line_number":276,"context_line":"        # can, folks."},{"line_number":277,"context_line":"        return pools"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _filter_non_requested_pfs(self, request, matching_pools):"},{"line_number":280,"context_line":"        # Remove SRIOV_PFs from pools, unless it has been explicitly requested"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_373b1ed2","line":277,"range":{"start_line":274,"start_character":1,"end_line":277,"end_character":20},"updated":"2017-12-29 10:06:41.000000000","message":"Should not we make sure that the returned pools ordered? I mean that even if there are not enough affine devices available, nova still picks the good devices first to maximize the number of good devices for the server?","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                pool[\u0027count\u0027] for pool in filtered_pools) \u003e\u003d requested_count:"},{"line_number":272,"context_line":"            return filtered_pools"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # if we\u0027ve got here, we\u0027re using the PREFERRED policy and weren\u0027t able"},{"line_number":275,"context_line":"        # to provide anything with stricter affinity. Use whatever devices you"},{"line_number":276,"context_line":"        # can, folks."},{"line_number":277,"context_line":"        return pools"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _filter_non_requested_pfs(self, request, matching_pools):"},{"line_number":280,"context_line":"        # Remove SRIOV_PFs from pools, unless it has been explicitly requested"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_57910252","line":277,"range":{"start_line":274,"start_character":1,"end_line":277,"end_character":20},"in_reply_to":"9f91af0f_373b1ed2","updated":"2017-12-29 11:56:02.000000000","message":"That\u0027s not a bad idea. I\u0027ve addressed that in the follow-up.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9648547afa6764ab7707c1f704a4ed1230c1cc1e","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        :param request: An InstancePCIRequest object describing the type,"},{"line_number":304,"context_line":"            quantity and required NUMA affinity of device(s) we want.."},{"line_number":305,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":306,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        # NOTE(vladikr): This code maybe open to race conditions."},{"line_number":309,"context_line":"        # Two concurrent requests may succeed when called support_requests"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_d41e706f","line":306,"updated":"2017-12-29 10:06:41.000000000","message":"You could document the return value as well.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        :param request: An InstancePCIRequest object describing the type,"},{"line_number":304,"context_line":"            quantity and required NUMA affinity of device(s) we want.."},{"line_number":305,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":306,"context_line":"            corresponds to the ``id`` of host NUMACells."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        # NOTE(vladikr): This code maybe open to race conditions."},{"line_number":309,"context_line":"        # Two concurrent requests may succeed when called support_requests"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_f79db666","line":306,"in_reply_to":"9f91af0f_d41e706f","updated":"2017-12-29 11:56:02.000000000","message":"Done","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9648547afa6764ab7707c1f704a4ed1230c1cc1e","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                                                        matching_pools)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # Do we still have any devices left?"},{"line_number":334,"context_line":"        if sum([pool[\u0027count\u0027] for pool in matching_pools]) \u003c count:"},{"line_number":335,"context_line":"            return False"},{"line_number":336,"context_line":"        else:"},{"line_number":337,"context_line":"            for pool in matching_pools:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_142b7894","line":334,"updated":"2017-12-29 10:06:41.000000000","message":"OK so here we check the number of available devices in the filtered pools. I think the doc at L234 needs to be updated.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"02b5e3bd3cb997ec7220f7c021a72a8d9d82ba7c","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        :type requests: nova.objects.InstancePCIRequests"},{"line_number":376,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":377,"context_line":"            corresponds to the ``id`` of host NUMACells, or None."},{"line_number":378,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":379,"context_line":"            filtering devices from ``numa_cells``, or None."},{"line_number":380,"context_line":"        :raises: exception.PciDeviceRequestFailed if this compute node cannot"},{"line_number":381,"context_line":"            satisfy the given request."},{"line_number":382,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_e5cf5255","line":379,"range":{"start_line":378,"start_character":0,"end_line":379,"end_character":59},"updated":"2017-12-28 06:46:43.000000000","message":"I don\u0027t see this parameter.","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        :type requests: nova.objects.InstancePCIRequests"},{"line_number":376,"context_line":"        :param numa_cells: A list of InstanceNUMACell objects whose ``id``"},{"line_number":377,"context_line":"            corresponds to the ``id`` of host NUMACells, or None."},{"line_number":378,"context_line":"        :param numa_policy: The PCI NUMA affinity policy to apply when"},{"line_number":379,"context_line":"            filtering devices from ``numa_cells``, or None."},{"line_number":380,"context_line":"        :raises: exception.PciDeviceRequestFailed if this compute node cannot"},{"line_number":381,"context_line":"            satisfy the given request."},{"line_number":382,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_179b7a72","line":379,"range":{"start_line":378,"start_character":0,"end_line":379,"end_character":59},"in_reply_to":"9f91af0f_e5cf5255","updated":"2017-12-29 11:56:02.000000000","message":"Whoops. Addressed in the follow-up","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"}],"nova/tests/unit/pci/test_stats.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"3cbf6116f281f5348a946d3ee062700e6548251a","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        self._create_pci_devices()"},{"line_number":406,"context_line":"        self._assertPools()"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def test_consume_reqests(self):"},{"line_number":409,"context_line":"        self._create_pci_devices()"},{"line_number":410,"context_line":"        pci_requests \u003d [objects.InstancePCIRequest(count\u003d1,"},{"line_number":411,"context_line":"                            spec\u003d[{\u0027physical_network\u0027: \u0027physnet1\u0027}]),"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_43b4edf2","line":408,"range":{"start_line":408,"start_character":21,"end_line":408,"end_character":28},"updated":"2017-12-13 06:04:53.000000000","message":"The wrong spell is being corrected to wrong spell, lol.","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"26b3499747116922afa3f536b971f2dfb3a0e401","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        self._create_pci_devices()"},{"line_number":406,"context_line":"        self._assertPools()"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def test_consume_reqests(self):"},{"line_number":409,"context_line":"        self._create_pci_devices()"},{"line_number":410,"context_line":"        pci_requests \u003d [objects.InstancePCIRequest(count\u003d1,"},{"line_number":411,"context_line":"                            spec\u003d[{\u0027physical_network\u0027: \u0027physnet1\u0027}]),"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_925d5ceb","line":408,"range":{"start_line":408,"start_character":21,"end_line":408,"end_character":28},"in_reply_to":"df87a7cf_43b4edf2","updated":"2017-12-13 10:05:54.000000000","message":"Hahaha. Oops. Fixed now :)","commit_id":"62aa1ef23d9329ea93d80ce91222558a601463d0"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"ee5c0cb4801ef996e23c74dc34c0bdbf5bd6f262","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                    spec\u003d[{\u0027vendor_id\u0027: \u0027v3\u0027}])]"},{"line_number":178,"context_line":"        self.assertTrue(self.pci_stats.support_requests(pci_request, cells))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # \u0027legacy\u0027 is a default pci_numa_policy so the result must be same"},{"line_number":181,"context_line":"        pci_numa_policy \u003d fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":182,"context_line":"        self.assertTrue(self.pci_stats.support_requests(pci_request, cells,"},{"line_number":183,"context_line":"                                                        pci_numa_policy))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_7dcadca1","line":180,"updated":"2017-12-13 21:39:04.000000000","message":"nit: \"a\" should be \"the\"","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                    spec\u003d[{\u0027vendor_id\u0027: \u0027v3\u0027}])]"},{"line_number":178,"context_line":"        self.assertTrue(self.pci_stats.support_requests(pci_request, cells))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # \u0027legacy\u0027 is a default pci_numa_policy so the result must be same"},{"line_number":181,"context_line":"        pci_numa_policy \u003d fields.PCINUMAAffinityPolicy.LEGACY"},{"line_number":182,"context_line":"        self.assertTrue(self.pci_stats.support_requests(pci_request, cells,"},{"line_number":183,"context_line":"                                                        pci_numa_policy))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_5427a0b7","line":180,"in_reply_to":"df87a7cf_7dcadca1","updated":"2017-12-14 14:11:05.000000000","message":"Done","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"ee5c0cb4801ef996e23c74dc34c0bdbf5bd6f262","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            self.assertEqual(set(expected),"},{"line_number":262,"context_line":"                             set([dev.product_id for dev in devs]))"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_consume_requests_numa_pci_numa_policy_required(self):"},{"line_number":265,"context_line":"        # We have 3 devices with requested vendor_id \u0027v4\u0027:"},{"line_number":266,"context_line":"        # \u0027pr0\u0027 in NUMA node 0, \u0027pr1\u0027 in NUMA node 1, \u0027pr_none\u0027 without NUMA"},{"line_number":267,"context_line":"        # affinity info. As policy is \u0027required\u0027 and vm will be booted in"},{"line_number":268,"context_line":"        # node 0 we can use only device \u0027pr0\u0027."},{"line_number":269,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":270,"context_line":"            [0], fields.PCINUMAAffinityPolicy.REQUIRED, [\u0027pr0\u0027])"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def test_consume_requests_numa_pci_numa_policy_required_no_devs(self):"},{"line_number":273,"context_line":"        # As policy is \u0027required\u0027 we can use only devices from NUMA node 999."},{"line_number":274,"context_line":"        # But this node has no devices with vendor_id \u0027v4\u0027."},{"line_number":275,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":276,"context_line":"            [999], fields.PCINUMAAffinityPolicy.REQUIRED, None)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy(self):"},{"line_number":279,"context_line":"        # Policy is \u0027legacy\u0027. It means that we can use devices \u0027pr0\u0027 and"},{"line_number":280,"context_line":"        # \u0027pr_none\u0027. But this policy firstly must try to use a device with"},{"line_number":281,"context_line":"        # direct pci numa affinity. This is \u0027pr0\u0027 device."},{"line_number":282,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":283,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr0\u0027])"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy_none_numa(self):"},{"line_number":286,"context_line":"        # Policy is \u0027legacy\u0027. It means that we can use devices \u0027pr0\u0027 and"},{"line_number":287,"context_line":"        # \u0027pr_none\u0027. But we have no device with vendor_id \u0027v4\u0027 in NUMA"},{"line_number":288,"context_line":"        # node \u0027999\u0027. So we have to use device without pci NUMA affinity info."},{"line_number":289,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":290,"context_line":"            [999], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr_none\u0027])"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy_no_devs(self):"},{"line_number":293,"context_line":"        # We have one device with vendor_id \u0027v2\u0027 placed in NUMA node 1."},{"line_number":294,"context_line":"        # There is no other devices with vendor_id \u0027v2\u0027 even without NUMA"},{"line_number":295,"context_line":"        # affinity info. So we can\u0027t use this device because it is out of NUMA"},{"line_number":296,"context_line":"        # node 0."},{"line_number":297,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":298,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, None, vendor_id\u003d\u0027v2\u0027)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred_fake_node(self):"},{"line_number":301,"context_line":"        # Node \u0027999\u0027 has no device with vendor_id \u0027v4\u0027 but we have such device"},{"line_number":302,"context_line":"        # without NUMA affinity info. This is \u0027pr_none\u0027 device."},{"line_number":303,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":304,"context_line":"            [999], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr_none\u0027])"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred(self):"},{"line_number":307,"context_line":"        # There are 3 devices with vendor_id \u0027v4\u0027: in node 0, in node 1 and"},{"line_number":308,"context_line":"        # without NUMA affinity info. As VM will be booted in node 0 we should"},{"line_number":309,"context_line":"        # use device from node 0."},{"line_number":310,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":311,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr0\u0027])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred_different(self):"},{"line_number":314,"context_line":"        # We have one device with vendor_id \u0027v2\u0027 placed in NUMA node 1."},{"line_number":315,"context_line":"        # There is no other devices with vendor_id \u0027v2\u0027 even without NUMA"},{"line_number":316,"context_line":"        # affinity info. But the policy is \u0027preferred\u0027 so we can use devices"},{"line_number":317,"context_line":"        # from other NUMA nodes."},{"line_number":318,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":319,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED,"},{"line_number":320,"context_line":"            [\u0027p2\u0027], vendor_id\u003d\u0027v2\u0027)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    @mock.patch("},{"line_number":323,"context_line":"        \u0027nova.pci.whitelist.Whitelist._parse_white_list_from_config\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_ddd68828","line":320,"range":{"start_line":264,"start_character":0,"end_line":320,"end_character":35},"updated":"2017-12-13 21:39:04.000000000","message":"I\u0027d like to see the tests named consistently for what they\u0027re testing, rather than the expected outcome.\n\nSo \"test_consume_requests_numa_pci_numa_policy_preferred_different\", \"test_consume_requests_numa_pci_numa_policy_legacy_different\", and \"test_consume_requests_numa_pci_numa_policy_required_different\" would all test the same scenario with different policies.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            self.assertEqual(set(expected),"},{"line_number":262,"context_line":"                             set([dev.product_id for dev in devs]))"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_consume_requests_numa_pci_numa_policy_required(self):"},{"line_number":265,"context_line":"        # We have 3 devices with requested vendor_id \u0027v4\u0027:"},{"line_number":266,"context_line":"        # \u0027pr0\u0027 in NUMA node 0, \u0027pr1\u0027 in NUMA node 1, \u0027pr_none\u0027 without NUMA"},{"line_number":267,"context_line":"        # affinity info. As policy is \u0027required\u0027 and vm will be booted in"},{"line_number":268,"context_line":"        # node 0 we can use only device \u0027pr0\u0027."},{"line_number":269,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":270,"context_line":"            [0], fields.PCINUMAAffinityPolicy.REQUIRED, [\u0027pr0\u0027])"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def test_consume_requests_numa_pci_numa_policy_required_no_devs(self):"},{"line_number":273,"context_line":"        # As policy is \u0027required\u0027 we can use only devices from NUMA node 999."},{"line_number":274,"context_line":"        # But this node has no devices with vendor_id \u0027v4\u0027."},{"line_number":275,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":276,"context_line":"            [999], fields.PCINUMAAffinityPolicy.REQUIRED, None)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy(self):"},{"line_number":279,"context_line":"        # Policy is \u0027legacy\u0027. It means that we can use devices \u0027pr0\u0027 and"},{"line_number":280,"context_line":"        # \u0027pr_none\u0027. But this policy firstly must try to use a device with"},{"line_number":281,"context_line":"        # direct pci numa affinity. This is \u0027pr0\u0027 device."},{"line_number":282,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":283,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr0\u0027])"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy_none_numa(self):"},{"line_number":286,"context_line":"        # Policy is \u0027legacy\u0027. It means that we can use devices \u0027pr0\u0027 and"},{"line_number":287,"context_line":"        # \u0027pr_none\u0027. But we have no device with vendor_id \u0027v4\u0027 in NUMA"},{"line_number":288,"context_line":"        # node \u0027999\u0027. So we have to use device without pci NUMA affinity info."},{"line_number":289,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":290,"context_line":"            [999], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr_none\u0027])"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_consume_requests_numa_pci_numa_policy_legacy_no_devs(self):"},{"line_number":293,"context_line":"        # We have one device with vendor_id \u0027v2\u0027 placed in NUMA node 1."},{"line_number":294,"context_line":"        # There is no other devices with vendor_id \u0027v2\u0027 even without NUMA"},{"line_number":295,"context_line":"        # affinity info. So we can\u0027t use this device because it is out of NUMA"},{"line_number":296,"context_line":"        # node 0."},{"line_number":297,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":298,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, None, vendor_id\u003d\u0027v2\u0027)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred_fake_node(self):"},{"line_number":301,"context_line":"        # Node \u0027999\u0027 has no device with vendor_id \u0027v4\u0027 but we have such device"},{"line_number":302,"context_line":"        # without NUMA affinity info. This is \u0027pr_none\u0027 device."},{"line_number":303,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":304,"context_line":"            [999], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr_none\u0027])"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred(self):"},{"line_number":307,"context_line":"        # There are 3 devices with vendor_id \u0027v4\u0027: in node 0, in node 1 and"},{"line_number":308,"context_line":"        # without NUMA affinity info. As VM will be booted in node 0 we should"},{"line_number":309,"context_line":"        # use device from node 0."},{"line_number":310,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":311,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr0\u0027])"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def test_consume_requests_numa_pci_numa_policy_preferred_different(self):"},{"line_number":314,"context_line":"        # We have one device with vendor_id \u0027v2\u0027 placed in NUMA node 1."},{"line_number":315,"context_line":"        # There is no other devices with vendor_id \u0027v2\u0027 even without NUMA"},{"line_number":316,"context_line":"        # affinity info. But the policy is \u0027preferred\u0027 so we can use devices"},{"line_number":317,"context_line":"        # from other NUMA nodes."},{"line_number":318,"context_line":"        self._test_consume_requests_numa_pci_numa_policy("},{"line_number":319,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED,"},{"line_number":320,"context_line":"            [\u0027p2\u0027], vendor_id\u003d\u0027v2\u0027)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    @mock.patch("},{"line_number":323,"context_line":"        \u0027nova.pci.whitelist.Whitelist._parse_white_list_from_config\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_d423b0bd","line":320,"range":{"start_line":264,"start_character":0,"end_line":320,"end_character":35},"in_reply_to":"df87a7cf_ddd68828","updated":"2017-12-14 14:11:05.000000000","message":"Done","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        # numa node 0 has 2 devices with vendor_id \u0027v1\u0027"},{"line_number":187,"context_line":"        # numa node 1 has 1 device with vendor_id \u0027v2\u0027"},{"line_number":188,"context_line":"        # we request two devices with vendor_id \u0027v1\u0027 and \u0027v2\u0027."},{"line_number":189,"context_line":"        # pci_numa_policy is \u0027preferred\u0027 so we can ignore numa affinity"},{"line_number":190,"context_line":"        cells \u003d [objects.InstanceNUMACell(id\u003d0, cpuset\u003dset(), memory\u003d0)]"},{"line_number":191,"context_line":"        pci_numa_policy \u003d fields.PCINUMAAffinityPolicy.PREFERRED"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_992a33e5","line":189,"range":{"start_line":189,"start_character":10,"end_line":189,"end_character":71},"updated":"2017-12-14 20:10:44.000000000","message":"I think I brought this up in the spec, but this statement and naming this policy/behaviour \"preferred\" is extremely confusing. Just imagine the support team member\u0027s conversation with the customer:\n\nCUSTOMER: So, I set the pci_numa_policy to preferred, and I\u0027m seeing that the PCI device\u0027s NUMA affinity is ignored.\n\nSUPPORT TEAM MEMBER: Yes, preferred means ignored.\n\nCUSTOMER: Say what?\n\nSUPPORT TEAM MEMBER: Well, preferred doesn\u0027t exactly mean affinity is ignored, just that it *can* be ignored.\n\nCUSTOMER: Uh, ok.\n\nSUPPORT TEAM MEMBER: Well, you can thank the Nova devs. Not my fault.","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"586a4d5ef88cea739b00b6a0c39b2248fd2ba5de","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        # numa node 0 has 2 devices with vendor_id \u0027v1\u0027"},{"line_number":187,"context_line":"        # numa node 1 has 1 device with vendor_id \u0027v2\u0027"},{"line_number":188,"context_line":"        # we request two devices with vendor_id \u0027v1\u0027 and \u0027v2\u0027."},{"line_number":189,"context_line":"        # pci_numa_policy is \u0027preferred\u0027 so we can ignore numa affinity"},{"line_number":190,"context_line":"        cells \u003d [objects.InstanceNUMACell(id\u003d0, cpuset\u003dset(), memory\u003d0)]"},{"line_number":191,"context_line":"        pci_numa_policy \u003d fields.PCINUMAAffinityPolicy.PREFERRED"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_5c6fb9c4","line":189,"range":{"start_line":189,"start_character":10,"end_line":189,"end_character":71},"in_reply_to":"df87a7cf_992a33e5","updated":"2017-12-14 20:15:48.000000000","message":"I actually don\u0027t think it\u0027s that bad.  PREFER means exactly that...\"I\u0027d prefer that the PCI device is numa affined, but I\u0027m okay if it\u0027s not.\"   REQUIRE is \"I require the device to be numa affined\".  We already have PREFER/REQUIRE for the CPU thread allocation policy.","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        provided ``cell_ids`` and ``policy``. Compare result against"},{"line_number":253,"context_line":"        ``expected``."},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        self._add_fake_devs_with_numa()"},{"line_number":256,"context_line":"        topo \u003d objects.InstanceNUMATopology("},{"line_number":257,"context_line":"            pci_numa_policy\u003dpolicy,"},{"line_number":258,"context_line":"            cells\u003d[objects.InstanceNUMACell(id\u003did, cpuset\u003dset(), memory\u003d0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_19b14390","line":255,"range":{"start_line":255,"start_character":8,"end_line":255,"end_character":39},"updated":"2017-12-14 20:10:44.000000000","message":"since this is the only place you call this, I think it makes things easier to just put the content of _add_fake_devs_with_numa() inline here instead of at the top of the test case class...","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"02b5e3bd3cb997ec7220f7c021a72a8d9d82ba7c","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        Policy is \u0027legacy\u0027 which means we must use a device with strict NUMA"},{"line_number":298,"context_line":"        affinity or no provided NUMA affinity. Request a device from NUMA node"},{"line_number":299,"context_line":"        0, which contains contains such a device, and ensure it\u0027s used."},{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        self._test_consume_requests_numa_policy("},{"line_number":302,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr0\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_e83f27b3","line":299,"range":{"start_line":299,"start_character":26,"end_line":299,"end_character":34},"updated":"2017-12-28 06:46:43.000000000","message":"nix","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        Policy is \u0027legacy\u0027 which means we must use a device with strict NUMA"},{"line_number":298,"context_line":"        affinity or no provided NUMA affinity. Request a device from NUMA node"},{"line_number":299,"context_line":"        0, which contains contains such a device, and ensure it\u0027s used."},{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        self._test_consume_requests_numa_policy("},{"line_number":302,"context_line":"            [0], fields.PCINUMAAffinityPolicy.LEGACY, [\u0027pr0\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_1774da34","line":299,"range":{"start_line":299,"start_character":26,"end_line":299,"end_character":34},"in_reply_to":"9f91af0f_e83f27b3","updated":"2017-12-29 11:56:02.000000000","message":"Done","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"02b5e3bd3cb997ec7220f7c021a72a8d9d82ba7c","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        Policy is \u0027preferred\u0027 which means we must use a device with any level"},{"line_number":330,"context_line":"        of NUMA affinity. Request a device from NUMA node 0, which contains"},{"line_number":331,"context_line":"        contains an affined device, and ensure it\u0027s used."},{"line_number":332,"context_line":"        \"\"\""},{"line_number":333,"context_line":"        self._test_consume_requests_numa_policy("},{"line_number":334,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr0\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_c88d837c","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":16},"updated":"2017-12-28 06:46:43.000000000","message":"nix!","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76255f16c1a3bb2c16e18f72b2e4681b9604f0c6","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        Policy is \u0027preferred\u0027 which means we must use a device with any level"},{"line_number":330,"context_line":"        of NUMA affinity. Request a device from NUMA node 0, which contains"},{"line_number":331,"context_line":"        contains an affined device, and ensure it\u0027s used."},{"line_number":332,"context_line":"        \"\"\""},{"line_number":333,"context_line":"        self._test_consume_requests_numa_policy("},{"line_number":334,"context_line":"            [0], fields.PCINUMAAffinityPolicy.PREFERRED, [\u0027pr0\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_b78e4e25","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":16},"in_reply_to":"9f91af0f_c88d837c","updated":"2017-12-29 11:56:02.000000000","message":"Done","commit_id":"6b3b04d2113915729fd9aced9839338e429e1a01"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":1235,"context_line":"                        )]),"},{"line_number":1236,"context_line":"            },"},{"line_number":1237,"context_line":"            {   # We request different pci numa affinity policy in flavor"},{"line_number":1238,"context_line":"                # and image properties"},{"line_number":1239,"context_line":"                \"flavor\": objects.Flavor(vcpus\u003d2, memory_mb\u003d2048,"},{"line_number":1240,"context_line":"                                         extra_specs\u003d{"},{"line_number":1241,"context_line":"                    \"hw:pci_numa_policy\": \"reqired\","}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_0b21f79f","line":1238,"range":{"start_line":1238,"start_character":18,"end_line":1238,"end_character":21},"updated":"2017-12-14 09:57:41.000000000","message":"that\u0027s a nit, but we accept either a flavor or an image update, or both.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":1235,"context_line":"                        )]),"},{"line_number":1236,"context_line":"            },"},{"line_number":1237,"context_line":"            {   # We request different pci numa affinity policy in flavor"},{"line_number":1238,"context_line":"                # and image properties"},{"line_number":1239,"context_line":"                \"flavor\": objects.Flavor(vcpus\u003d2, memory_mb\u003d2048,"},{"line_number":1240,"context_line":"                                         extra_specs\u003d{"},{"line_number":1241,"context_line":"                    \"hw:pci_numa_policy\": \"reqired\","}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_f4091431","line":1238,"range":{"start_line":1238,"start_character":18,"end_line":1238,"end_character":21},"in_reply_to":"df87a7cf_0b21f79f","updated":"2017-12-14 14:11:05.000000000","message":"No, I think this is correct. We\u0027re saying we request different policies in the flavor extra spec vs the image metadata properties","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c13fa367d1878012256ef130b2ee9975005129c8","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"                    }"},{"line_number":1262,"context_line":"                },"},{"line_number":1263,"context_line":"                \"expect\": objects.InstanceNUMATopology("},{"line_number":1264,"context_line":"                    pci_numa_policy\u003dfields.PCINUMAAffinityPolicy.REQUIRED,"},{"line_number":1265,"context_line":"                    cells\u003d["},{"line_number":1266,"context_line":"                        objects.InstanceNUMACell("},{"line_number":1267,"context_line":"                            id\u003d0, cpuset\u003dset([0, 1]), memory\u003d2048)])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_d92d1ba9","line":1264,"range":{"start_line":1264,"start_character":20,"end_line":1264,"end_character":73},"updated":"2017-12-14 20:10:44.000000000","message":"yikes, we probably should not have put pci_numa_policy as an attribute of InstanceNUMATopology, since it\u0027s not actually an attribute of the NUMA topology. Rather, it\u0027s an attribute of the *request*, so probably should have put in InstancePCIRequest or even in the RequestSpec object.","commit_id":"5e8a00a4cbfe56aae40fdef0701e694d1bf26b3c"}],"nova/virt/hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"    if flavor_policy in [None, fields.CPUThreadAllocationPolicy.PREFER]:"},{"line_number":1182,"context_line":"        policy \u003d flavor_policy or image_policy"},{"line_number":1183,"context_line":"    elif image_policy and image_policy !\u003d flavor_policy:"},{"line_number":1184,"context_line":"        raise exception.ImageCPUThreadPolicyForbidden()"},{"line_number":1185,"context_line":"    else:"},{"line_number":1186,"context_line":"        policy \u003d flavor_policy"},{"line_number":1187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_9f31c1ef","line":1184,"updated":"2017-12-14 14:11:05.000000000","message":"See here","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    if flavor_policy and image_policy and flavor_policy !\u003d image_policy:"},{"line_number":1197,"context_line":"        raise exception.ImagePCINUMAPolicyForbidden(flavor\u003dflavor_policy,"},{"line_number":1198,"context_line":"                                                    image\u003dimage_policy)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    return (flavor_policy or image_policy or"},{"line_number":1201,"context_line":"            fields.PCINUMAAffinityPolicy.LEGACY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_2b2cfb45","line":1198,"updated":"2017-12-14 09:57:41.000000000","message":"I\u0027m a bit concerned by raising a full stop exception here for the instance creation, if the user did used a flavor that was having a policy different from other images.\n\nSince users don\u0027t know the flavor extra specs, they could either ask for a specific policy in their own images, or could just try to use another image given by the operator where the policy could be different, and then they would get an ERROR if the instance couldn\u0027t be spawned.\n\nConfusing, right? \n\nI know it\u0027s not in the spec, but I wonder if we couldn\u0027t say \"okay, let\u0027s consider the flavor as the single source of truth because it\u0027s operator driven, and just log a warning here in case flavor and image policies are different\"\n\nThoughts ?","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    if flavor_policy and image_policy and flavor_policy !\u003d image_policy:"},{"line_number":1197,"context_line":"        raise exception.ImagePCINUMAPolicyForbidden(flavor\u003dflavor_policy,"},{"line_number":1198,"context_line":"                                                    image\u003dimage_policy)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    return (flavor_policy or image_policy or"},{"line_number":1201,"context_line":"            fields.PCINUMAAffinityPolicy.LEGACY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_3f2755b9","line":1198,"in_reply_to":"df87a7cf_2b2cfb45","updated":"2017-12-14 14:11:05.000000000","message":"This was debated a lot during the spec. The problem we have at the moment, which cfriesen can probably attest to, is that we have different behaviors for conflicts between images and flavours. I actually wrote a spec to address this a while back but it didn\u0027t gain any traction. In any case, the thought behind this was that it was very clear-cut and easy to interpret. Note that we already raise exceptions for CPU conflicts and the likes, as above","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fc3760ea4c66047b14723dd5cc99033943a5a58e","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    if flavor_policy and image_policy and flavor_policy !\u003d image_policy:"},{"line_number":1197,"context_line":"        raise exception.ImagePCINUMAPolicyForbidden(flavor\u003dflavor_policy,"},{"line_number":1198,"context_line":"                                                    image\u003dimage_policy)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    return (flavor_policy or image_policy or"},{"line_number":1201,"context_line":"            fields.PCINUMAAffinityPolicy.LEGACY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_831de3be","line":1198,"in_reply_to":"df87a7cf_370459c6","updated":"2017-12-14 18:12:45.000000000","message":"I went to check what actually happens to a client when an exception like this is raised using \u0027stable/pike\u0027 DevStack. Findings below but tl;dr: the instance doesn\u0027t even start booting and the exception is shown to the user via a HTTP 400. I should probably point out that this isn\u0027t consistent among the various \"policies\" we have and this is something we should fix (I started the ball rolling on that in [1] and will likely pick that back up again in Rocky). All in all though, I think we\u0027re handling this just fine and that this is a decent solution.\n\n[1] https://review.openstack.org/#/c/382382/\n\n---\n\nDownload the Cirros image provided by stock DevStack and modify it\n\n    openstack image save cirros-0.3.5-x86_64-disk --file pinned.disk\n    openstack image create --file pinned.disk test.pinned\n    openstack image set test.pinned --property hw_cpu_policy\u003ddedicated\n\nCreate a new flavor and modify it\n\n    openstack flavor create --vcpus 4 --ram 1024 test.pinned\n    openstack flavor set --property hw:cpu_policy\u003dshared test.pinned\n\nBoot an instance with the conflicting image/flavor extra specs.\n\n    openstack server create test --image test.pinned --flavor test.pinned\n\nYou\u0027ll see the following error message in your terminal.\n\n    Image property \u0027hw_cpu_policy\u0027 is not permitted to override CPU pinning policy set against the flavor (HTTP 400) (Request-ID: req-3abcf291-827d-4ba8-852b-f066d80b3b48)\n\nThis happens with both admin (source openrc admin) and non-admin (source openrc) credentials. The `n-api` service gives us this.\n\n    Dec 14 17:59:51 localhost.localdomain devstack@n-api.service[13303]: INFO nova.api.openstack.wsgi [None req-579abbbc-38d5-465d-a287-22c294211198 None None] HTTP exception thrown: Image property \u0027hw_cpu_policy\u0027 is not permitted to override CPU pinning policy set against the flavor\n    Dec 14 17:59:51 localhost.localdomain devstack@n-api.service[13303]: DEBUG nova.api.openstack.wsgi [None req-579abbbc-38d5-465d-a287-22c294211198 None None] Returning 400 to user: Image property \u0027hw_cpu_policy\u0027 is not permitted to override CPU pinning policy set against the flavor {{(pid\u003d13306) __call__ /opt/stack/nova/nova/api/openstack/wsgi.py:1029}}\n\nNo other service gives us anything useful, be it `n-sch` or `n-cpu`. This suprised me, but the outcome _is_ what we want.","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"7bcf7487ead9d271c96b6c4c9cb4f5cdb57c05e4","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    if flavor_policy and image_policy and flavor_policy !\u003d image_policy:"},{"line_number":1197,"context_line":"        raise exception.ImagePCINUMAPolicyForbidden(flavor\u003dflavor_policy,"},{"line_number":1198,"context_line":"                                                    image\u003dimage_policy)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    return (flavor_policy or image_policy or"},{"line_number":1201,"context_line":"            fields.PCINUMAAffinityPolicy.LEGACY)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_370459c6","line":1198,"in_reply_to":"df87a7cf_3f2755b9","updated":"2017-12-14 15:45:24.000000000","message":"As an example, the image/flavor conflicts in the CPU policy is handled differently from the CPU thread policy, while the memory page size is handled differently yet.\n\nAnd don\u0027t get me started on differences in the scheduler filters relating host aggregate metadata to flavors/images...\n\nI think what it boils down to is that either admins need to document the relevent extra-specs for each of their flavors, or else they need to allow \"regular\" users to view the flavor extra-specs.  (We\u0027re mostly aimed at private cloud, so we went with the latter approach.)","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":24777,"name":"Steven Webster","email":"steven.webster@windriver.com","username":"swebster"},"change_message_id":"8168dccdf913d78f558b0d5cf6a1ace12212b21d","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"    :raises: exception.ImageCPUThreadPolicyForbidden if a CPU thread policy"},{"line_number":1362,"context_line":"             specified in a flavor conflicts with one defined in image metadata"},{"line_number":1363,"context_line":"    :returns: objects.InstanceNUMATopology, or None"},{"line_number":1364,"context_line":"    \"\"\""},{"line_number":1365,"context_line":"    flavor_nodes, image_nodes \u003d _get_flavor_image_meta("},{"line_number":1366,"context_line":"        \u0027numa_nodes\u0027, flavor, image_meta)"},{"line_number":1367,"context_line":"    if flavor_nodes and image_nodes:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_344bf787","line":1364,"range":{"start_line":1364,"start_character":4,"end_line":1364,"end_character":7},"updated":"2017-12-14 15:35:55.000000000","message":"Add exception.ImagePCINUMAPolicyForbidden to docstring","commit_id":"8844be3686190db384a3dca44e0d8eb471dcbc73"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"789635b9f68eb60142b192c9da497ce717a4a02d","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"    :raises: exception.ImageCPUThreadPolicyForbidden if a CPU thread policy"},{"line_number":1362,"context_line":"             specified in a flavor conflicts with one defined in image metadata"},{"line_number":1363,"context_line":"    :returns: objects.InstanceNUMATopology, or None"},{"line_number":1364,"context_line":"    \"\"\""},{"line_number":1365,"context_line":"    flavor_nodes, image_nodes \u003d _get_flavor_image_meta("},{"line_number":1366,"context_line":"        \u0027numa_nodes\u0027, flavor, image_meta)"},{"line_number":1367,"context_line":"    if flavor_nodes and image_nodes:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_837c03b6","line":1364,"range":{"start_line":1364,"start_character":4,"end_line":1364,"end_character":7},"in_reply_to":"df87a7cf_344bf787","updated":"2017-12-14 18:16:51.000000000","message":"Done","commit_id":"8844be3686190db384a3dca44e0d8eb471dcbc73"}],"releasenotes/notes/share-pci-between-numa-nodes-0bd206eeca4ebcde.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"27afa14098463178792a533b68f79caf7251c607","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    configure how strict your NUMA affinity should be on a per-instance basis."},{"line_number":6,"context_line":"    This can be configured for an image, using the ``hw_pci_numa_policy``"},{"line_number":7,"context_line":"    metadata key, or for a flavor, using the ``hw:pci_numa_policy`` extra spec."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    There are three policies supported:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    - ``required``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_cbc46f95","line":8,"updated":"2017-12-14 09:57:41.000000000","message":"You need to mention two things more :\n- the fact that if you update both, you need to make sure they are consistent (or say if you modify flavors, make sure you only go that way or users of your cloud would get ERRORS if they try to mix up images and flavors the way you, as an operator, didn\u0027t expect)\n- The fact that there is a choice precedence that even if you set \"preferred\" or \"legacy\", we still try to verify a strict pool assignment","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"643d1e5d34dbcefdaefc478f0fad839739984c6d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    configure how strict your NUMA affinity should be on a per-instance basis."},{"line_number":6,"context_line":"    This can be configured for an image, using the ``hw_pci_numa_policy``"},{"line_number":7,"context_line":"    metadata key, or for a flavor, using the ``hw:pci_numa_policy`` extra spec."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    There are three policies supported:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    - ``required``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_9f8d417d","line":8,"in_reply_to":"df87a7cf_cbc46f95","updated":"2017-12-14 14:11:05.000000000","message":"All good point. I\u0027m going to add a document on this to the end of the series too","commit_id":"27ce8d5eb4d4a12206897dc49883122debaf4207"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"ecc9418837222ff49568e7034793e99523187506","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    There are three policies supported:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    - ``required`` (must-have)"},{"line_number":12,"context_line":"    - ``preferred`` (must-have-if-available)"},{"line_number":13,"context_line":"    - ``legacy`` (nice-to-have) (default)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Where both the image metadata option and flavor extra spec are configured,"},{"line_number":16,"context_line":"    they must have identical values or an error will be raised."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_57931d50","line":13,"range":{"start_line":12,"start_character":9,"end_line":13,"end_character":41},"updated":"2017-12-14 15:51:51.000000000","message":"did you just mix up the descriptions of these two?","commit_id":"8844be3686190db384a3dca44e0d8eb471dcbc73"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"789635b9f68eb60142b192c9da497ce717a4a02d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    There are three policies supported:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    - ``required`` (must-have)"},{"line_number":12,"context_line":"    - ``preferred`` (must-have-if-available)"},{"line_number":13,"context_line":"    - ``legacy`` (nice-to-have) (default)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    Where both the image metadata option and flavor extra spec are configured,"},{"line_number":16,"context_line":"    they must have identical values or an error will be raised."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_034a337f","line":13,"range":{"start_line":12,"start_character":9,"end_line":13,"end_character":41},"in_reply_to":"df87a7cf_57931d50","updated":"2017-12-14 18:16:51.000000000","message":"I did. Fixed now","commit_id":"8844be3686190db384a3dca44e0d8eb471dcbc73"}]}
