)]}'
{"nova/virt/hardware.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"82fceb77e48c3a49a4b471744a63bd6684c3fb91","unresolved":false,"context_lines":[{"line_number":1918,"context_line":"        if rt_mask:"},{"line_number":1919,"context_line":"            raise exception.RealtimeConfigurationInvalid()"},{"line_number":1920,"context_line":""},{"line_number":1921,"context_line":"        return numa_topology"},{"line_number":1922,"context_line":""},{"line_number":1923,"context_line":"    if numa_topology:"},{"line_number":1924,"context_line":"        for cell in numa_topology.cells:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_c6048f81","side":"PARENT","line":1921,"range":{"start_line":1921,"start_character":8,"end_line":1921,"end_character":28},"updated":"2020-04-06 08:47:21.000000000","message":"emm...this is in my radar","commit_id":"000473ac3400363ffa97985fc193e8e3158638e9"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"ffd22823f868cd70d67ac3a3361d917dca76513f","unresolved":false,"context_lines":[{"line_number":1917,"context_line":""},{"line_number":1918,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1919,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"},{"line_number":1920,"context_line":"    vpmems \u003d get_vpmems(flavor)"},{"line_number":1921,"context_line":""},{"line_number":1922,"context_line":"    # NOTE(stephenfin): There are currently four things that will configure a"},{"line_number":1923,"context_line":"    # NUMA topology for an instance:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_7b6dd6ca","line":1920,"updated":"2020-03-31 14:47:28.000000000","message":"@Stephen, how do you think moving above three lines to L1851? \u0027nodes\u0027 is an informatoin I need to use before this position. See change I6a14688aa9d9091b19c744b23d0ec0e1ce6b96b8a for what I want.","commit_id":"f4dca14455a448f880069f4bcfaaf8d617a995ca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"94b186fa9f6481d92462fbcf87af06d4ee3b9c96","unresolved":false,"context_lines":[{"line_number":1917,"context_line":""},{"line_number":1918,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1919,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"},{"line_number":1920,"context_line":"    vpmems \u003d get_vpmems(flavor)"},{"line_number":1921,"context_line":""},{"line_number":1922,"context_line":"    # NOTE(stephenfin): There are currently four things that will configure a"},{"line_number":1923,"context_line":"    # NUMA topology for an instance:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_1b7f6ae0","line":1920,"in_reply_to":"df33271e_7b6dd6ca","updated":"2020-03-31 15:02:17.000000000","message":"Yup, can do if I respin. It\u0027s also okay to move these separately as you\u0027ve done","commit_id":"f4dca14455a448f880069f4bcfaaf8d617a995ca"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"ffd22823f868cd70d67ac3a3361d917dca76513f","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"        nodes \u003d nodes or 1"},{"line_number":1933,"context_line":""},{"line_number":1934,"context_line":"        cpu_list \u003d _get_numa_cpu_constraint(flavor, image_meta)"},{"line_number":1935,"context_line":"        mem_list \u003d _get_numa_mem_constraint(flavor, image_meta)"},{"line_number":1936,"context_line":""},{"line_number":1937,"context_line":"        if cpu_list is None and mem_list is None:"},{"line_number":1938,"context_line":"            numa_topology \u003d _get_numa_topology_auto("}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_5b7292ae","line":1935,"updated":"2020-03-31 14:47:28.000000000","message":"@Stephen, how about moving the above two lines to L1851, in a later patch I6a14688aa9d9091b19c744b23d0ec0e1ce6b96b8, \u0027cpu_list\u0027 is used out of this code block.","commit_id":"f4dca14455a448f880069f4bcfaaf8d617a995ca"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"82fceb77e48c3a49a4b471744a63bd6684c3fb91","unresolved":false,"context_lines":[{"line_number":1960,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1961,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1962,"context_line":"    else:"},{"line_number":1963,"context_line":"        numa_topology \u003d None"},{"line_number":1964,"context_line":""},{"line_number":1965,"context_line":"    return numa_topology"},{"line_number":1966,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_a6098b96","line":1963,"range":{"start_line":1963,"start_character":8,"end_line":1963,"end_character":28},"updated":"2020-04-06 08:47:21.000000000","message":"emm...my radar said it is safe.","commit_id":"f4dca14455a448f880069f4bcfaaf8d617a995ca"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a775bd8b9db16c9d1556471f1025757a1d218e1b","unresolved":false,"context_lines":[{"line_number":1587,"context_line":") -\u003e \u0027objects.InstanceNUMATopology\u0027:"},{"line_number":1588,"context_line":"    \"\"\"Generate a NUMA topology automatically based on CPUs and memory."},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"    This is \"automatic\" because there\u0027s no user-provided configuration here -"},{"line_number":1591,"context_line":"    it\u0027s all auto-generated."},{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"    :param nodes: The number of nodes required in the generated topology."},{"line_number":1594,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_5e7648a6","line":1591,"range":{"start_line":1590,"start_character":0,"end_line":1591,"end_character":28},"updated":"2020-06-18 18:40:24.000000000","message":"Where does `nodes` come from then?","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0bb759b4c15593a85e81f01289eee45b0c114df","unresolved":false,"context_lines":[{"line_number":1587,"context_line":") -\u003e \u0027objects.InstanceNUMATopology\u0027:"},{"line_number":1588,"context_line":"    \"\"\"Generate a NUMA topology automatically based on CPUs and memory."},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"    This is \"automatic\" because there\u0027s no user-provided configuration here -"},{"line_number":1591,"context_line":"    it\u0027s all auto-generated."},{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"    :param nodes: The number of nodes required in the generated topology."},{"line_number":1594,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_e8095495","line":1591,"range":{"start_line":1590,"start_character":0,"end_line":1591,"end_character":28},"in_reply_to":"bf51134e_5e7648a6","updated":"2020-06-19 11:46:51.000000000","message":"Fair point. Reworded.","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a775bd8b9db16c9d1556471f1025757a1d218e1b","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"},{"line_number":1623,"context_line":"        CPU and memory count."},{"line_number":1624,"context_line":"    :param cpu_list: A list of sets of ints; each set in the list corresponds"},{"line_number":1625,"context_line":"        to the set of cores to assign to NUMA node $index."},{"line_number":1626,"context_line":"    :param mem_list: A list of ints; each int corresponds to the amount of"},{"line_number":1627,"context_line":"        memory to assign to NUMA node $index."},{"line_number":1628,"context_line":"    :returns: The generated instance NUMA topology."}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_3e9ef4b7","line":1625,"range":{"start_line":1625,"start_character":22,"end_line":1625,"end_character":27},"updated":"2020-06-18 18:40:24.000000000","message":"guest cores, right?","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0bb759b4c15593a85e81f01289eee45b0c114df","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"},{"line_number":1623,"context_line":"        CPU and memory count."},{"line_number":1624,"context_line":"    :param cpu_list: A list of sets of ints; each set in the list corresponds"},{"line_number":1625,"context_line":"        to the set of cores to assign to NUMA node $index."},{"line_number":1626,"context_line":"    :param mem_list: A list of ints; each int corresponds to the amount of"},{"line_number":1627,"context_line":"        memory to assign to NUMA node $index."},{"line_number":1628,"context_line":"    :returns: The generated instance NUMA topology."}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_4801606b","line":1625,"range":{"start_line":1625,"start_character":22,"end_line":1625,"end_character":27},"in_reply_to":"bf51134e_3e9ef4b7","updated":"2020-06-19 11:46:51.000000000","message":"Yup. Done","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a775bd8b9db16c9d1556471f1025757a1d218e1b","unresolved":false,"context_lines":[{"line_number":1941,"context_line":""},{"line_number":1942,"context_line":"        if cpu_list is None and mem_list is None:"},{"line_number":1943,"context_line":"            numa_topology \u003d _get_numa_topology_auto("},{"line_number":1944,"context_line":"                nodes, flavor)"},{"line_number":1945,"context_line":"        elif cpu_list is not None and mem_list is not None:"},{"line_number":1946,"context_line":"            # If any node has data set, all nodes must have data set"},{"line_number":1947,"context_line":"            if len(cpu_list) !\u003d nodes or len(mem_list) !\u003d nodes:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_7ccb5571","line":1944,"range":{"start_line":1944,"start_character":16,"end_line":1944,"end_character":21},"updated":"2020-06-18 18:40:24.000000000","message":"Ah, this is where `nodes` come from - IOW, from the flavor, so it\u0027s not 100% correct to say there\u0027s no user input at all.","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0bb759b4c15593a85e81f01289eee45b0c114df","unresolved":false,"context_lines":[{"line_number":1941,"context_line":""},{"line_number":1942,"context_line":"        if cpu_list is None and mem_list is None:"},{"line_number":1943,"context_line":"            numa_topology \u003d _get_numa_topology_auto("},{"line_number":1944,"context_line":"                nodes, flavor)"},{"line_number":1945,"context_line":"        elif cpu_list is not None and mem_list is not None:"},{"line_number":1946,"context_line":"            # If any node has data set, all nodes must have data set"},{"line_number":1947,"context_line":"            if len(cpu_list) !\u003d nodes or len(mem_list) !\u003d nodes:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_88fa5872","line":1944,"range":{"start_line":1944,"start_character":16,"end_line":1944,"end_character":21},"in_reply_to":"bf51134e_7ccb5571","updated":"2020-06-19 11:46:51.000000000","message":"Done","commit_id":"7061b6a34e89a83e794d2b290b1bc93a7e07df87"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"39e480585b1450826ec95862928e650dae5c0ef1","unresolved":false,"context_lines":[{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":"    :param nodes: The number of nodes required in the generated topology."},{"line_number":1588,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"},{"line_number":1589,"context_line":"        CPU and memory count."},{"line_number":1590,"context_line":"    \"\"\""},{"line_number":1591,"context_line":"    if (flavor.vcpus % nodes) \u003e 0 or (flavor.memory_mb % nodes) \u003e 0:"},{"line_number":1592,"context_line":"        raise exception.ImageNUMATopologyAsymmetric()"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_9c40e937","line":1589,"updated":"2020-07-07 10:29:07.000000000","message":"I would add \n\n  :raises ImageNUMATopologyAsymmetric: if the requested memory or vcpu in the flavor cannot be split symmetrically across the number of NUMA nodes.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"39e480585b1450826ec95862928e650dae5c0ef1","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"        to the set of guest cores to assign to NUMA node $index."},{"line_number":1620,"context_line":"    :param mem_list: A list of ints; each int corresponds to the amount of"},{"line_number":1621,"context_line":"        memory to assign to NUMA node $index."},{"line_number":1622,"context_line":"    :returns: The generated instance NUMA topology."},{"line_number":1623,"context_line":"    \"\"\""},{"line_number":1624,"context_line":"    cells \u003d []"},{"line_number":1625,"context_line":"    totalmem \u003d 0"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_5c7011a6","line":1622,"updated":"2020-07-07 10:29:07.000000000","message":"There are couple of exception that could be documented too","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4f12cf94fbc116099e7e25757547395d115ab622","unresolved":false,"context_lines":[{"line_number":1846,"context_line":"    # handle explicit VCPU/PCPU resource requests and the HW_CPU_HYPERTHREADING"},{"line_number":1847,"context_line":"    # trait"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"    requested_vcpus, requested_pcpus \u003d _get_vcpu_pcpu_resources(flavor)"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":"    if cpu_policy and (requested_vcpus or requested_pcpus):"},{"line_number":1852,"context_line":"        raise exception.InvalidRequest("},{"line_number":1853,"context_line":"            \"It is not possible to use the \u0027resources:VCPU\u0027 or \""},{"line_number":1854,"context_line":"            \"\u0027resources:PCPU\u0027 extra specs in combination with the \""},{"line_number":1855,"context_line":"            \"\u0027hw:cpu_policy\u0027 extra spec or \u0027hw_cpu_policy\u0027 image metadata \""},{"line_number":1856,"context_line":"            \"property; use one or the other\")"},{"line_number":1857,"context_line":""},{"line_number":1858,"context_line":"    if requested_vcpus and requested_pcpus:"},{"line_number":1859,"context_line":"        raise exception.InvalidRequest("},{"line_number":1860,"context_line":"            \"It is not possible to specify both \u0027resources:VCPU\u0027 and \""},{"line_number":1861,"context_line":"            \"\u0027resources:PCPU\u0027 extra specs; use one or the other\")"},{"line_number":1862,"context_line":""},{"line_number":1863,"context_line":"    if requested_pcpus:"},{"line_number":1864,"context_line":"        if (emu_threads_policy \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE and"},{"line_number":1865,"context_line":"                flavor.vcpus + 1 !\u003d requested_pcpus):"},{"line_number":1866,"context_line":"            raise exception.InvalidRequest("},{"line_number":1867,"context_line":"                \"You have requested \u0027hw:emulator_threads_policy\u003disolate\u0027 but \""},{"line_number":1868,"context_line":"                \"have not requested sufficient PCPUs to handle this policy; \""},{"line_number":1869,"context_line":"                \"you must allocate exactly flavor.vcpus + 1 PCPUs.\")"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"        if (emu_threads_policy !\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE and"},{"line_number":1872,"context_line":"                flavor.vcpus !\u003d requested_pcpus):"},{"line_number":1873,"context_line":"            raise exception.InvalidRequest("},{"line_number":1874,"context_line":"                \"There is a mismatch between the number of PCPUs requested \""},{"line_number":1875,"context_line":"                \"via \u0027resourcesNN:PCPU\u0027 and the flavor); you must allocate \""},{"line_number":1876,"context_line":"                \"exactly flavor.vcpus PCPUs\")"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        cpu_policy \u003d fields.CPUAllocationPolicy.DEDICATED"},{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":"    if requested_vcpus:"},{"line_number":1881,"context_line":"        # NOTE(stephenfin): It would be nice if we could error out if"},{"line_number":1882,"context_line":"        # flavor.vcpus !\u003d resources:PCPU, but that would be a breaking change."},{"line_number":1883,"context_line":"        # Better to wait until we remove flavor.vcpus or something"},{"line_number":1884,"context_line":"        cpu_policy \u003d fields.CPUAllocationPolicy.SHARED"},{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"    hyperthreading_trait \u003d _get_hyperthreading_trait(flavor, image_meta)"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"    if cpu_thread_policy and hyperthreading_trait:"},{"line_number":1889,"context_line":"        raise exception.InvalidRequest("},{"line_number":1890,"context_line":"            \"It is not possible to use the \u0027trait:HW_CPU_HYPERTHREADING\u0027 \""},{"line_number":1891,"context_line":"            \"extra spec in combination with the \u0027hw:cpu_thread_policy\u0027 \""},{"line_number":1892,"context_line":"            \"extra spec or \u0027hw_cpu_thread_policy\u0027 image metadata property; \""},{"line_number":1893,"context_line":"            \"use one or the other\")"},{"line_number":1894,"context_line":""},{"line_number":1895,"context_line":"    if hyperthreading_trait \u003d\u003d \u0027forbidden\u0027:"},{"line_number":1896,"context_line":"        cpu_thread_policy \u003d fields.CPUThreadAllocationPolicy.ISOLATE"},{"line_number":1897,"context_line":"    elif hyperthreading_trait \u003d\u003d \u0027required\u0027:"},{"line_number":1898,"context_line":"        cpu_thread_policy \u003d fields.CPUThreadAllocationPolicy.REQUIRE"},{"line_number":1899,"context_line":""},{"line_number":1900,"context_line":"    # sanity checks"},{"line_number":1901,"context_line":""},{"line_number":1902,"context_line":"    if cpu_policy in (fields.CPUAllocationPolicy.SHARED, None):"},{"line_number":1903,"context_line":"        if cpu_thread_policy:"},{"line_number":1904,"context_line":"            raise exception.CPUThreadPolicyConfigurationInvalid()"},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"        if emu_threads_policy \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE:"},{"line_number":1907,"context_line":"            raise exception.BadRequirementEmulatorThreadsPolicy()"},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        if rt_mask:"},{"line_number":1910,"context_line":"            raise exception.RealtimeConfigurationInvalid()"},{"line_number":1911,"context_line":""},{"line_number":1912,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1913,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_9a539b39","line":1910,"range":{"start_line":1849,"start_character":0,"end_line":1910,"end_character":58},"updated":"2020-07-09 12:31:56.000000000","message":"i feel like all of this should be pulled out into a speerate function and jsut called here.\n\nperhaps that can be done as a follow up?","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"5f6ad34e38eeb919c4bcf6e0f3c0630a1ffd7ccf","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"            setattr(c, \u0027cpu_thread_policy\u0027, cpu_thread_policy)"},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_23e4f1df","line":1954,"updated":"2020-07-09 08:57:19.000000000","message":"\u003e as far as I see nova code does not differentiate between None or unset for this field\n\nAgree. The \u0027emulator_threads_policy\u0027 field is carefully pretected, each time the nova code try to acess it, the existence of this OVO filed is checked by \u0027if \"emulator_threads_policy\" in instance_topo\u0027.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"39e480585b1450826ec95862928e650dae5c0ef1","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"            setattr(c, \u0027cpu_thread_policy\u0027, cpu_thread_policy)"},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_623baeea","line":1954,"updated":"2020-07-07 10:29:07.000000000","message":"in the old code this setting was guarded with an \n\n    if emu_threads_policy: \n\nconditional. In the ovo the emulator_thread_policy is nullable so it is OK to set None there. Also as far as I see nova code does not differentiate between None or unset for this field. So this change is OK.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"39e480585b1450826ec95862928e650dae5c0ef1","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""},{"line_number":1958,"context_line":"    return numa_topology"},{"line_number":1959,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_c5172445","line":1956,"updated":"2020-07-07 10:29:07.000000000","message":"Does this mean that when the old code returned a single cell topology (L1928 in the old code) now this code returns None? Is this a compatible change?","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"5f6ad34e38eeb919c4bcf6e0f3c0630a1ffd7ccf","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""},{"line_number":1958,"context_line":"    return numa_topology"},{"line_number":1959,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_03e9edb5","line":1956,"updated":"2020-07-09 08:57:19.000000000","message":"The change is compatible. The numa_topology returned in old cold L1928 is for the request of \u0027dedicated\u0027 policy and no demand for hugepage or pmem or multi-numa. In new code, this request is covered in loop L1926-1954.\nIf it is a request for \u0027shared\u0027 or None cpu policy and without demanding any feature of huagepage or vpmem or mlti-numa, this function will return a None value.\n\n@Stephen, if I made any mismake in interpreting the code, please correct me.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3c6c71992fa735e5e6d6a302a5b6e0bd6fdc10a1","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""},{"line_number":1958,"context_line":"    return numa_topology"},{"line_number":1959,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_7a2847e1","line":1956,"in_reply_to":"bf51134e_03e9edb5","updated":"2020-07-09 12:21:34.000000000","message":"Thanks for the explanation.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4f12cf94fbc116099e7e25757547395d115ab622","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"        # ...but emulator threads policy is not \\o/"},{"line_number":1954,"context_line":"        numa_topology.emulator_threads_policy \u003d emu_threads_policy"},{"line_number":1955,"context_line":"    else:"},{"line_number":1956,"context_line":"        numa_topology \u003d None"},{"line_number":1957,"context_line":""},{"line_number":1958,"context_line":"    return numa_topology"},{"line_number":1959,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_dd2d0d96","line":1956,"in_reply_to":"bf51134e_7a2847e1","updated":"2020-07-09 12:31:56.000000000","message":"ya i think this is correct\nas noted on irc i would have inverted the logic and did an early return instead of setting it to none in the else but this works too.","commit_id":"eedac34b21e591ca4d31aa1856ef8a52b7b86d3d"}]}
