)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Adds validation for instances requiring NUMA topology (no asymmetric"},{"line_number":16,"context_line":"topology and no CPU pinning supported)."},{"line_number":17,"context_line":"Creates NUMA aware instances, if necessary."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Iba2110e95e80b9511698cb7df2963fd218264c8e"},{"line_number":20,"context_line":"Implements: blueprint hyper-v-vnuma-enable"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"ba5201f7_eca439a7","line":18,"updated":"2017-01-11 21:44:39.000000000","message":"Please tag this with DocImpact and note that we need to update the compute-cpu-topologies page in the admin-guide.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9ea20b905bf5ca6e26762219ff81aee2c507abf6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Adds validation for instances requiring NUMA topology (no asymmetric"},{"line_number":16,"context_line":"topology and no CPU pinning supported)."},{"line_number":17,"context_line":"Creates NUMA aware instances, if necessary."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Iba2110e95e80b9511698cb7df2963fd218264c8e"},{"line_number":20,"context_line":"Implements: blueprint hyper-v-vnuma-enable"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"ba5201f7_995f6ae4","line":18,"in_reply_to":"ba5201f7_eca439a7","updated":"2017-01-11 22:58:31.000000000","message":"Done","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"}],"nova/tests/unit/virt/hyperv/test_hostops.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77a21b1ccdaa159e16b73e930bf756b4549a07bc","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                     \u0027cpuset\u0027: mock.sentinel.cpuset,"},{"line_number":142,"context_line":"                     \u0027cpu_usage\u0027: mock.sentinel.cpu_usage}"},{"line_number":143,"context_line":"        self._hostops._hostutils.get_numa_nodes.return_value \u003d ["},{"line_number":144,"context_line":"            dict(numa_node)]"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_04e7bfb0","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":27},"updated":"2017-01-04 09:50:13.000000000","message":"nit: The \u0027dict\u0027 wrapper looks unnecessary","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e659c24c50b4d08d6dd82f47ae9cd1440632566","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                     \u0027cpuset\u0027: mock.sentinel.cpuset,"},{"line_number":142,"context_line":"                     \u0027cpu_usage\u0027: mock.sentinel.cpu_usage}"},{"line_number":143,"context_line":"        self._hostops._hostutils.get_numa_nodes.return_value \u003d ["},{"line_number":144,"context_line":"            dict(numa_node)]"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_b68aa2bd","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":27},"in_reply_to":"ba5201f7_04e7bfb0","updated":"2017-01-04 12:35:57.000000000","message":"it only looks unnecessary. :)\n\n_get_host_numa_topology updates the numa_node dict with pinned_cpus, mempages, siblings. dict creates a copy of a given dict.\n\nwithout this, the assert at L149 would raise an exception: TypeError: assert_called_once_with() got multiple values for keyword argument \u0027siblings\u0027","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"614a50173f92393f0b81070980bcfba212618350","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                     \u0027cpuset\u0027: mock.sentinel.cpuset,"},{"line_number":142,"context_line":"                     \u0027cpu_usage\u0027: mock.sentinel.cpu_usage}"},{"line_number":143,"context_line":"        self._hostops._hostutils.get_numa_nodes.return_value \u003d ["},{"line_number":144,"context_line":"            dict(numa_node)]"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_15250408","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":27},"in_reply_to":"ba5201f7_71b91979","updated":"2017-01-11 19:17:44.000000000","message":"Done","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e1e720165b2bbabadd8d0ccac934e9698bbc222a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                     \u0027cpuset\u0027: mock.sentinel.cpuset,"},{"line_number":142,"context_line":"                     \u0027cpu_usage\u0027: mock.sentinel.cpu_usage}"},{"line_number":143,"context_line":"        self._hostops._hostutils.get_numa_nodes.return_value \u003d ["},{"line_number":144,"context_line":"            dict(numa_node)]"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_71b91979","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":27},"in_reply_to":"ba5201f7_b68aa2bd","updated":"2017-01-11 16:28:49.000000000","message":"nit: numa_node.copy() would be more explicit or comments.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e1e720165b2bbabadd8d0ccac934e9698bbc222a","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertEqual(mock_NUMATopology.return_value, result)"},{"line_number":149,"context_line":"        mock_NUMACell.assert_called_once_with("},{"line_number":150,"context_line":"            pinned_cpus\u003dset([]), mempages\u003d[], siblings\u003d[], **numa_node)"},{"line_number":151,"context_line":"        mock_NUMATopology.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_675b1bf7","line":148,"updated":"2017-01-11 16:28:49.000000000","message":"It isn\u0027t clear to me what this assert is doing.\nCould this can be replaced with isinstance(..., NUMATopology)?","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"578b60f18efd588d0f282462b9a4f75587170fc3","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertEqual(mock_NUMATopology.return_value, result)"},{"line_number":149,"context_line":"        mock_NUMACell.assert_called_once_with("},{"line_number":150,"context_line":"            pinned_cpus\u003dset([]), mempages\u003d[], siblings\u003d[], **numa_node)"},{"line_number":151,"context_line":"        mock_NUMATopology.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_75757096","line":148,"in_reply_to":"ba5201f7_675b1bf7","updated":"2017-01-11 19:14:20.000000000","message":"ehh, NUMATopology is mocked, calling NUMATopology will return a mock, not a NUMATopology instance.\n\nthis still asserts that _get_host_numa_topology returns whatever NUMATopology returns. :)","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"690f609983b01dbafb40920e2784bdbc6a32217c","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        result \u003d self._hostops._get_host_numa_topology()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertEqual(mock_NUMATopology.return_value, result)"},{"line_number":149,"context_line":"        mock_NUMACell.assert_called_once_with("},{"line_number":150,"context_line":"            pinned_cpus\u003dset([]), mempages\u003d[], siblings\u003d[], **numa_node)"},{"line_number":151,"context_line":"        mock_NUMATopology.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_d8281336","line":148,"in_reply_to":"ba5201f7_75757096","updated":"2017-01-11 19:41:18.000000000","message":"Sounds cryptically.","commit_id":"1da18785d5c3c180f35add59028429480232a130"}],"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e1e720165b2bbabadd8d0ccac934e9698bbc222a","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                              mock_requires_secure_boot,"},{"line_number":545,"context_line":"                              enable_instance_metrics,"},{"line_number":546,"context_line":"                              vm_gen\u003dconstants.VM_GEN_1,"},{"line_number":547,"context_line":"                              vnuma_enabled\u003dFalse):"},{"line_number":548,"context_line":"        mock_vif_driver \u003d mock.MagicMock()"},{"line_number":549,"context_line":"        self.flags(dynamic_memory_ratio\u003d2.0, group\u003d\u0027hyperv\u0027)"},{"line_number":550,"context_line":"        self._vmops._vif_driver \u003d mock_vif_driver"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_07eecf8a","line":547,"updated":"2017-01-11 16:28:49.000000000","message":"I don\u0027t see how vnuma_enabled parameter is used. Did I miss something?","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"614a50173f92393f0b81070980bcfba212618350","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                              mock_requires_secure_boot,"},{"line_number":545,"context_line":"                              enable_instance_metrics,"},{"line_number":546,"context_line":"                              vm_gen\u003dconstants.VM_GEN_1,"},{"line_number":547,"context_line":"                              vnuma_enabled\u003dFalse):"},{"line_number":548,"context_line":"        mock_vif_driver \u003d mock.MagicMock()"},{"line_number":549,"context_line":"        self.flags(dynamic_memory_ratio\u003d2.0, group\u003d\u0027hyperv\u0027)"},{"line_number":550,"context_line":"        self._vmops._vif_driver \u003d mock_vif_driver"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_95e3b4d8","line":547,"in_reply_to":"ba5201f7_07eecf8a","updated":"2017-01-11 19:17:44.000000000","message":"See L564: if it is enabled, it will set the mock_get_vnuma_config\u0027s return_value to (mock.sentinel.mem_per_numa, mock.sentinel.cpus_per_numa), while setting it to (None, None) if it is False.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3ab340b50a4aaec42bbdd608733865a12252778a","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                              mock_requires_secure_boot,"},{"line_number":545,"context_line":"                              enable_instance_metrics,"},{"line_number":546,"context_line":"                              vm_gen\u003dconstants.VM_GEN_1,"},{"line_number":547,"context_line":"                              vnuma_enabled\u003dFalse):"},{"line_number":548,"context_line":"        mock_vif_driver \u003d mock.MagicMock()"},{"line_number":549,"context_line":"        self.flags(dynamic_memory_ratio\u003d2.0, group\u003d\u0027hyperv\u0027)"},{"line_number":550,"context_line":"        self._vmops._vif_driver \u003d mock_vif_driver"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_7bd4811f","line":547,"in_reply_to":"ba5201f7_58e26330","updated":"2017-01-11 21:01:46.000000000","message":"oh, good point.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"690f609983b01dbafb40920e2784bdbc6a32217c","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                              mock_requires_secure_boot,"},{"line_number":545,"context_line":"                              enable_instance_metrics,"},{"line_number":546,"context_line":"                              vm_gen\u003dconstants.VM_GEN_1,"},{"line_number":547,"context_line":"                              vnuma_enabled\u003dFalse):"},{"line_number":548,"context_line":"        mock_vif_driver \u003d mock.MagicMock()"},{"line_number":549,"context_line":"        self.flags(dynamic_memory_ratio\u003d2.0, group\u003d\u0027hyperv\u0027)"},{"line_number":550,"context_line":"        self._vmops._vif_driver \u003d mock_vif_driver"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_58e26330","line":547,"in_reply_to":"ba5201f7_95e3b4d8","updated":"2017-01-11 19:41:18.000000000","message":"Yes, I mean _test_create_instance is called only with vnuma_enabled\u003dFalse. I didn\u0027t find other usages like _test_create_instance(..., vnuma_enabled\u003dTrue)","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77a21b1ccdaa159e16b73e930bf756b4549a07bc","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                                    root_device\u003droot_device_info,"},{"line_number":578,"context_line":"                                    block_device_info\u003dblock_device_info,"},{"line_number":579,"context_line":"                                    vm_gen\u003dvm_gen,"},{"line_number":580,"context_line":"                                    image_meta\u003dmock.sentinel.image_meta)"},{"line_number":581,"context_line":"        self._vmops._vmutils.create_vm.assert_called_once_with("},{"line_number":582,"context_line":"            mock_instance.name, vnuma_enabled, vm_gen, instance_path,"},{"line_number":583,"context_line":"            [mock_instance.uuid])"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_4432a711","line":580,"updated":"2017-01-04 09:50:13.000000000","message":"nit: could you insert a new line between this function call and the asserts below?","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e659c24c50b4d08d6dd82f47ae9cd1440632566","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                                    root_device\u003droot_device_info,"},{"line_number":578,"context_line":"                                    block_device_info\u003dblock_device_info,"},{"line_number":579,"context_line":"                                    vm_gen\u003dvm_gen,"},{"line_number":580,"context_line":"                                    image_meta\u003dmock.sentinel.image_meta)"},{"line_number":581,"context_line":"        self._vmops._vmutils.create_vm.assert_called_once_with("},{"line_number":582,"context_line":"            mock_instance.name, vnuma_enabled, vm_gen, instance_path,"},{"line_number":583,"context_line":"            [mock_instance.uuid])"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_56c096e0","line":580,"in_reply_to":"ba5201f7_4432a711","updated":"2017-01-04 12:35:57.000000000","message":"Done","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77a21b1ccdaa159e16b73e930bf756b4549a07bc","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        mock_get_vnuma_config.assert_called_once_with(mock_instance,"},{"line_number":586,"context_line":"                                                      mock.sentinel.image_meta)"},{"line_number":587,"context_line":"        self._vmops._vmutils.create_vm.assert_called_once_with("},{"line_number":588,"context_line":"            mock_instance.name, vnuma_enabled, vm_gen,"},{"line_number":589,"context_line":"            instance_path, [mock_instance.uuid])"},{"line_number":590,"context_line":"        self._vmops._vmutils.update_vm.assert_called_once_with("},{"line_number":591,"context_line":"            mock_instance.name, mock_instance.memory_mb, mem_per_numa,"},{"line_number":592,"context_line":"            mock_instance.vcpus, cpus_per_numa,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_e4739be5","line":589,"range":{"start_line":587,"start_character":0,"end_line":589,"end_character":48},"updated":"2017-01-04 09:50:13.000000000","message":"This appears to be a duplicate of the assertion on line 581-583","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e659c24c50b4d08d6dd82f47ae9cd1440632566","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        mock_get_vnuma_config.assert_called_once_with(mock_instance,"},{"line_number":586,"context_line":"                                                      mock.sentinel.image_meta)"},{"line_number":587,"context_line":"        self._vmops._vmutils.create_vm.assert_called_once_with("},{"line_number":588,"context_line":"            mock_instance.name, vnuma_enabled, vm_gen,"},{"line_number":589,"context_line":"            instance_path, [mock_instance.uuid])"},{"line_number":590,"context_line":"        self._vmops._vmutils.update_vm.assert_called_once_with("},{"line_number":591,"context_line":"            mock_instance.name, mock_instance.memory_mb, mem_per_numa,"},{"line_number":592,"context_line":"            mock_instance.vcpus, cpus_per_numa,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_b6b1c291","line":589,"range":{"start_line":587,"start_character":0,"end_line":589,"end_character":48},"in_reply_to":"ba5201f7_e4739be5","updated":"2017-01-04 12:35:57.000000000","message":"Done","commit_id":"1da18785d5c3c180f35add59028429480232a130"}],"nova/virt/hyperv/hostops.py":[{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"f6081debe7bfb4d5e6c7624513d4d3cf9b8d9eda","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":112,"context_line":"        cells \u003d []"},{"line_number":113,"context_line":"        for numa_node in numa_nodes:"},{"line_number":114,"context_line":"            numa_node[\u0027pinned_cpus\u0027] \u003d set([])"},{"line_number":115,"context_line":"            numa_node[\u0027mempages\u0027] \u003d []"},{"line_number":116,"context_line":"            numa_node[\u0027siblings\u0027] \u003d []"},{"line_number":117,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_1694d540","line":114,"range":{"start_line":114,"start_character":39,"end_line":114,"end_character":46},"updated":"2016-05-11 10:15:57.000000000","message":"set() will give the same result","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"81ecaf5851e422a895900f58ac032a3df33a35f9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":112,"context_line":"        cells \u003d []"},{"line_number":113,"context_line":"        for numa_node in numa_nodes:"},{"line_number":114,"context_line":"            numa_node[\u0027pinned_cpus\u0027] \u003d set([])"},{"line_number":115,"context_line":"            numa_node[\u0027mempages\u0027] \u003d []"},{"line_number":116,"context_line":"            numa_node[\u0027siblings\u0027] \u003d []"},{"line_number":117,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_ec821ec7","line":114,"range":{"start_line":114,"start_character":39,"end_line":114,"end_character":46},"in_reply_to":"dab17558_1694d540","updated":"2016-05-11 10:56:22.000000000","message":"Done","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"f6081debe7bfb4d5e6c7624513d4d3cf9b8d9eda","unresolved":false,"context_lines":[{"line_number":160,"context_line":"               }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        numa_topology \u003d self._get_host_numa_topology()"},{"line_number":163,"context_line":"        if numa_topology:"},{"line_number":164,"context_line":"            dic[\u0027numa_topology\u0027] \u003d numa_topology._to_json()"},{"line_number":165,"context_line":"        else:"},{"line_number":166,"context_line":"            dic[\u0027numa_topology\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_d6d36dd3","line":163,"range":{"start_line":163,"start_character":11,"end_line":163,"end_character":24},"updated":"2016-05-11 10:15:57.000000000","message":"Won\u0027t it always be True? _get_host_numa_topology() always returns a NUMATopology object.","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"81ecaf5851e422a895900f58ac032a3df33a35f9","unresolved":false,"context_lines":[{"line_number":160,"context_line":"               }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        numa_topology \u003d self._get_host_numa_topology()"},{"line_number":163,"context_line":"        if numa_topology:"},{"line_number":164,"context_line":"            dic[\u0027numa_topology\u0027] \u003d numa_topology._to_json()"},{"line_number":165,"context_line":"        else:"},{"line_number":166,"context_line":"            dic[\u0027numa_topology\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_6762c9d9","line":163,"range":{"start_line":163,"start_character":11,"end_line":163,"end_character":24},"in_reply_to":"dab17558_d6d36dd3","updated":"2016-05-11 10:56:22.000000000","message":"yes, you are right. I was thinking about the case if NUMA is not supported on Hyper-V (2008 R2 didn\u0027t support NUMA placement, AFAIK, but we don\u0027t support 2008 R2 anymore), but there is always at least a numa node on any Hyper-V host.","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a2720bee5c8e570b23a0ee8cb3f3f8ea638b00e","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"},{"line_number":179,"context_line":"        dic.update(gpu_info)"},{"line_number":180,"context_line":"        numa_topology \u003d self._get_host_numa_topology()"},{"line_number":181,"context_line":"        dic[\u0027numa_topology\u0027] \u003d numa_topology._to_json()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        return dic"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_9d1f686b","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":55},"updated":"2016-09-26 09:57:33.000000000","message":"nit: Any reason this can\u0027t be done where it was (at dict creation time)?","commit_id":"0490a0228671b2c67daa2087bb716382d929ca3b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9c81e06961e094fa1dc37a76c1a110fe9e0465ee","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"},{"line_number":179,"context_line":"        dic.update(gpu_info)"},{"line_number":180,"context_line":"        numa_topology \u003d self._get_host_numa_topology()"},{"line_number":181,"context_line":"        dic[\u0027numa_topology\u0027] \u003d numa_topology._to_json()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        return dic"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_694c9a9e","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":55},"in_reply_to":"5a8bc5a2_9d1f686b","updated":"2016-09-26 10:57:36.000000000","message":"nope. will do.","commit_id":"0490a0228671b2c67daa2087bb716382d929ca3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4525a07345f5158e666283c1d77061bc30e19108","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"},{"line_number":182,"context_line":"        dic.update(gpu_info)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return dic"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def host_power_action(self, action):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_82050812","line":183,"updated":"2016-12-28 23:10:22.000000000","message":"nit: unrelated whitespace change","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"44df584b31345a871295b0f718abdd806b7baf8c","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"},{"line_number":182,"context_line":"        dic.update(gpu_info)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return dic"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def host_power_action(self, action):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_17271665","line":183,"in_reply_to":"da4df55a_82050812","updated":"2017-01-03 13:28:02.000000000","message":"Done","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77a21b1ccdaa159e16b73e930bf756b4549a07bc","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":126,"context_line":"        cells \u003d []"},{"line_number":127,"context_line":"        for numa_node in numa_nodes:"},{"line_number":128,"context_line":"            numa_node[\u0027pinned_cpus\u0027] \u003d set()"},{"line_number":129,"context_line":"            numa_node[\u0027mempages\u0027] \u003d []"},{"line_number":130,"context_line":"            numa_node[\u0027siblings\u0027] \u003d []"},{"line_number":131,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"},{"line_number":132,"context_line":"            cells.append(cell)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_7fed7424","line":130,"range":{"start_line":128,"start_character":0,"end_line":130,"end_character":38},"updated":"2017-01-04 09:50:13.000000000","message":"Why are we zeroing out all this data? If I were to guess, it\u0027s because we don\u0027t support CPU pinning or hugepages but if this is the case then is it expected to change in the future? In any case, we should comment this","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5bc5a7f2fd12489ab875079e0be52c6870420c8b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":126,"context_line":"        cells \u003d []"},{"line_number":127,"context_line":"        for numa_node in numa_nodes:"},{"line_number":128,"context_line":"            numa_node[\u0027pinned_cpus\u0027] \u003d set()"},{"line_number":129,"context_line":"            numa_node[\u0027mempages\u0027] \u003d []"},{"line_number":130,"context_line":"            numa_node[\u0027siblings\u0027] \u003d []"},{"line_number":131,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"},{"line_number":132,"context_line":"            cells.append(cell)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_bf135c0c","line":130,"range":{"start_line":128,"start_character":0,"end_line":130,"end_character":38},"in_reply_to":"ba5201f7_7fed7424","updated":"2017-01-04 09:52:46.000000000","message":"Ah, wait - we\u0027re not zeroing it out but rather defining it. I still think this needs a comment, and it might be better to be explicit about what we\u0027re doing here though the use of \u0027update\u0027 or similar:\n\n    numa_node.update({\n        \u0027pinned_cpus\u0027: set(),\n        ...","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e659c24c50b4d08d6dd82f47ae9cd1440632566","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":126,"context_line":"        cells \u003d []"},{"line_number":127,"context_line":"        for numa_node in numa_nodes:"},{"line_number":128,"context_line":"            numa_node[\u0027pinned_cpus\u0027] \u003d set()"},{"line_number":129,"context_line":"            numa_node[\u0027mempages\u0027] \u003d []"},{"line_number":130,"context_line":"            numa_node[\u0027siblings\u0027] \u003d []"},{"line_number":131,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"},{"line_number":132,"context_line":"            cells.append(cell)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_561c1677","line":130,"range":{"start_line":128,"start_character":0,"end_line":130,"end_character":38},"in_reply_to":"ba5201f7_bf135c0c","updated":"2017-01-04 12:35:57.000000000","message":"Done","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c3d28e843a8ce2ce72ccfe4ce9b8e11680eca44","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def _get_host_numa_topology(self):"},{"line_number":125,"context_line":"        numa_nodes \u003d self._hostutils.get_numa_nodes()"},{"line_number":126,"context_line":"        cells \u003d []"},{"line_number":127,"context_line":"        for numa_node in numa_nodes:"},{"line_number":128,"context_line":"            # Hyper-V does not support CPU pinning / mempages."},{"line_number":129,"context_line":"            # initializing the rest of the fields."},{"line_number":130,"context_line":"            numa_node.update(pinned_cpus\u003dset(), mempages\u003d[], siblings\u003d[])"},{"line_number":131,"context_line":"            cell \u003d objects.NUMACell(**numa_node)"},{"line_number":132,"context_line":"            cells.append(cell)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_e39c3f5f","line":130,"range":{"start_line":127,"start_character":0,"end_line":130,"end_character":73},"updated":"2017-01-05 11:48:38.000000000","message":"Much better. Thanks :)","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                   (obj_fields.Architecture.X86_64,"},{"line_number":176,"context_line":"                    obj_fields.HVType.HYPERV,"},{"line_number":177,"context_line":"                    obj_fields.VMMode.HVM)],"},{"line_number":178,"context_line":"               \u0027numa_topology\u0027: self._get_host_numa_topology()._to_json(),"},{"line_number":179,"context_line":"               }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_479a7e6f","line":178,"range":{"start_line":178,"start_character":63,"end_line":178,"end_character":71},"updated":"2017-01-11 21:44:39.000000000","message":"I\u0027m not crazy about using the internal method here but it\u0027s not the end of the world.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9ea20b905bf5ca6e26762219ff81aee2c507abf6","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                   (obj_fields.Architecture.X86_64,"},{"line_number":176,"context_line":"                    obj_fields.HVType.HYPERV,"},{"line_number":177,"context_line":"                    obj_fields.VMMode.HVM)],"},{"line_number":178,"context_line":"               \u0027numa_topology\u0027: self._get_host_numa_topology()._to_json(),"},{"line_number":179,"context_line":"               }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_d90c92ee","line":178,"range":{"start_line":178,"start_character":63,"end_line":178,"end_character":71},"in_reply_to":"ba5201f7_479a7e6f","updated":"2017-01-11 22:58:31.000000000","message":"hm, it seems that using jsonutils.dumps on a NumaTopology object, it ends up in a ValueError: Circular reference detected error.\n\nit seems _to_json is used in quite a few cases, including libvirt.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a347fc4833f96cf23c0693562352f6e0b54d6cf6","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                   (obj_fields.Architecture.X86_64,"},{"line_number":176,"context_line":"                    obj_fields.HVType.HYPERV,"},{"line_number":177,"context_line":"                    obj_fields.VMMode.HVM)],"},{"line_number":178,"context_line":"               \u0027numa_topology\u0027: self._get_host_numa_topology()._to_json(),"},{"line_number":179,"context_line":"               }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_ed28b035","line":178,"updated":"2017-01-11 23:44:52.000000000","message":"Have I mentioned that I friggin HATE the fact that the NUMA objects -- and ONLY the NUMA objects -- have their own legacy JSON serialization routines instead of using the oslo.versionedobjects serialization primitives? :( Yet another place we need to undo all this technical debt :(","commit_id":"b494f06c7b309dcf48fd5a0ae1cb230f019dae19"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f923a4e21cb7f1813deb6de1049771acd802bf0d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                   (obj_fields.Architecture.X86_64,"},{"line_number":176,"context_line":"                    obj_fields.HVType.HYPERV,"},{"line_number":177,"context_line":"                    obj_fields.VMMode.HVM)],"},{"line_number":178,"context_line":"               \u0027numa_topology\u0027: self._get_host_numa_topology()._to_json(),"},{"line_number":179,"context_line":"               }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        gpu_info \u003d self._get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_8361b33b","line":178,"in_reply_to":"ba5201f7_ed28b035","updated":"2017-01-12 01:09:52.000000000","message":"Heh I commented on the same thing earlier.","commit_id":"b494f06c7b309dcf48fd5a0ae1cb230f019dae19"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"bc7f563519ce026a13cac729277c182dd0c19694","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        :raises exception.InstanceUnacceptable:"},{"line_number":341,"context_line":"            If the given instance NUMA topology is not possible on Hyper-V."},{"line_number":342,"context_line":"        \"\"\""},{"line_number":343,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(image_meta)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        instance_topology \u003d hardware.numa_get_constraints(instance.flavor,"},{"line_number":346,"context_line":"                                                          image_meta)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a061dce_e17d7e6f","line":343,"updated":"2016-04-05 17:51:30.000000000","message":"This is already an ImageMeta object.","commit_id":"31b05de9df8ddeeea83e0d3a031ccedbe81c1e18"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5d0667be440f6d1bbd43d289914d1ff7fd48c3d5","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        :raises exception.InstanceUnacceptable:"},{"line_number":341,"context_line":"            If the given instance NUMA topology is not possible on Hyper-V."},{"line_number":342,"context_line":"        \"\"\""},{"line_number":343,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(image_meta)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        instance_topology \u003d hardware.numa_get_constraints(instance.flavor,"},{"line_number":346,"context_line":"                                                          image_meta)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_f3ade8e9","line":343,"in_reply_to":"9a061dce_e17d7e6f","updated":"2016-05-11 07:42:59.000000000","message":"Done","commit_id":"31b05de9df8ddeeea83e0d3a031ccedbe81c1e18"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"f6081debe7bfb4d5e6c7624513d4d3cf9b8d9eda","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from nova.api.metadata import base as instance_metadata"},{"line_number":40,"context_line":"import nova.conf"},{"line_number":41,"context_line":"from nova import exception"},{"line_number":42,"context_line":"from nova import objects"},{"line_number":43,"context_line":"from nova.i18n import _, _LI, _LE, _LW"},{"line_number":44,"context_line":"from nova import utils"},{"line_number":45,"context_line":"from nova.virt import configdrive"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_912c4f9a","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":24},"updated":"2016-05-11 10:15:57.000000000","message":"This is not needed any longer.","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"81ecaf5851e422a895900f58ac032a3df33a35f9","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from nova.api.metadata import base as instance_metadata"},{"line_number":40,"context_line":"import nova.conf"},{"line_number":41,"context_line":"from nova import exception"},{"line_number":42,"context_line":"from nova import objects"},{"line_number":43,"context_line":"from nova.i18n import _, _LI, _LE, _LW"},{"line_number":44,"context_line":"from nova import utils"},{"line_number":45,"context_line":"from nova.virt import configdrive"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_8c31d25c","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":24},"in_reply_to":"dab17558_912c4f9a","updated":"2016-05-11 10:56:22.000000000","message":"Done","commit_id":"3e806a44899904f9c8291ce6685855279f315bac"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"27e1db3a189e8111b5d1887135a211c01bb3e835","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                self.destroy(instance)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":262,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen, image_meta):"},{"line_number":263,"context_line":"        instance_name \u003d instance.name"},{"line_number":264,"context_line":"        instance_path \u003d os.path.join(CONF.instances_path, instance_name)"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bab6814e_ddda5316","line":262,"range":{"start_line":262,"start_character":61,"end_line":262,"end_character":71},"updated":"2016-05-23 11:24:56.000000000","message":"You modified the method signature here, this is used in other places like migrationops and that\u0027s why Hyper-V is crying.","commit_id":"e13656709258f98a8045c88ba7cee0c07b2087e5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a191f0c7e6390639c7fbfd94d8f5df0a2e6cc0c4","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                self.destroy(instance)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":262,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen, image_meta):"},{"line_number":263,"context_line":"        instance_name \u003d instance.name"},{"line_number":264,"context_line":"        instance_path \u003d os.path.join(CONF.instances_path, instance_name)"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bab6814e_9d0f2b36","line":262,"range":{"start_line":262,"start_character":61,"end_line":262,"end_character":71},"in_reply_to":"bab6814e_ddda5316","updated":"2016-05-23 11:31:45.000000000","message":"Done","commit_id":"e13656709258f98a8045c88ba7cee0c07b2087e5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4525a07345f5158e666283c1d77061bc30e19108","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            vnuma_enabled \u003d False"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        self._vmutils.create_vm(instance_name,"},{"line_number":375,"context_line":"                                vnuma_enabled,"},{"line_number":376,"context_line":"                                vm_gen,"},{"line_number":377,"context_line":"                                instance_path,"},{"line_number":378,"context_line":"                                [instance.uuid])"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_1f2fb3a1","line":375,"updated":"2016-12-28 23:10:22.000000000","message":"This doesn\u0027t seem right, see:\n\nhttps://github.com/openstack/os-win/blob/1.1.0/os_win/utils/compute/vmutils.py#L301\n\nThose args aren\u0027t in the correct order, at least not for os-win 1.1.0 which is the minimum version we currently require in global-requirements.\n\nOh I see because of the TypeError that\u0027s handled for that...\n\nhttps://github.com/openstack/os-win/blob/1.1.0/os_win/utils/compute/vmutils.py#L293\n\nMaybe we should just use kwargs at some point...","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"44df584b31345a871295b0f718abdd806b7baf8c","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            vnuma_enabled \u003d False"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        self._vmutils.create_vm(instance_name,"},{"line_number":375,"context_line":"                                vnuma_enabled,"},{"line_number":376,"context_line":"                                vm_gen,"},{"line_number":377,"context_line":"                                instance_path,"},{"line_number":378,"context_line":"                                [instance.uuid])"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_9704e6c0","line":375,"in_reply_to":"da4df55a_1f2fb3a1","updated":"2017-01-03 13:28:02.000000000","message":"So, I\u0027m currently working on os-win specific objects, in which we\u0027ll set these kinds of properties in the future (similar to how os-vif has os-vif objects). This will be easier / simpler than just add new arguments to create_vm; it will be easier to maintain.","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4525a07345f5158e666283c1d77061bc30e19108","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            if (len(cell.cpuset) !\u003d cpus_per_numa_node or"},{"line_number":450,"context_line":"                    cell.memory !\u003d memory_per_numa_node):"},{"line_number":451,"context_line":"                raise exception.InstanceUnacceptable("},{"line_number":452,"context_line":"                    reason\u003d\"Hyper-V cannot guarantee the given instance NUMA \""},{"line_number":453,"context_line":"                           \"topology.\", instance_id\u003dinstance.uuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        return memory_per_numa_node, cpus_per_numa_node"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_9f3ac3e5","line":453,"range":{"start_line":452,"start_character":27,"end_line":453,"end_character":38},"updated":"2016-12-28 23:10:22.000000000","message":"This should probably be marked for translation using _().","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"44df584b31345a871295b0f718abdd806b7baf8c","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            if (len(cell.cpuset) !\u003d cpus_per_numa_node or"},{"line_number":450,"context_line":"                    cell.memory !\u003d memory_per_numa_node):"},{"line_number":451,"context_line":"                raise exception.InstanceUnacceptable("},{"line_number":452,"context_line":"                    reason\u003d\"Hyper-V cannot guarantee the given instance NUMA \""},{"line_number":453,"context_line":"                           \"topology.\", instance_id\u003dinstance.uuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        return memory_per_numa_node, cpus_per_numa_node"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_57219e4c","line":453,"range":{"start_line":452,"start_character":27,"end_line":453,"end_character":38},"in_reply_to":"da4df55a_9f3ac3e5","updated":"2017-01-03 13:28:02.000000000","message":"Done","commit_id":"5ce3837fe114acf59a1f4e0cf9aef54f98fd9e82"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e1e720165b2bbabadd8d0ccac934e9698bbc222a","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":421,"context_line":"                instance.name, msft_ca_required\u003dcertificate_required)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_instance_vnuma_config(self, instance, image_meta):"},{"line_number":424,"context_line":"        \"\"\"Returns the appropriate NUMA configuration for Hyper-V instances,"},{"line_number":425,"context_line":"        given the desired instance NUMA topology."},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_b57d221e","line":423,"updated":"2017-01-11 16:28:49.000000000","message":"Sorry for this question, but what v in vnuma means? )","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"578b60f18efd588d0f282462b9a4f75587170fc3","unresolved":false,"context_lines":[{"line_number":420,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":421,"context_line":"                instance.name, msft_ca_required\u003dcertificate_required)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_instance_vnuma_config(self, instance, image_meta):"},{"line_number":424,"context_line":"        \"\"\"Returns the appropriate NUMA configuration for Hyper-V instances,"},{"line_number":425,"context_line":"        given the desired instance NUMA topology."},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_32569e2a","line":423,"in_reply_to":"ba5201f7_b57d221e","updated":"2017-01-11 19:14:20.000000000","message":"virtual. that\u0027s simply how microsoft decided to name it. :)\n\nthe instances are still mapped on the host\u0027s numa topology.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                                                         vm_gen)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        self._vmutils.create_vm(instance_name,"},{"line_number":360,"context_line":"                                instance.flavor.memory_mb,"},{"line_number":361,"context_line":"                                instance.flavor.vcpus,"},{"line_number":362,"context_line":"                                CONF.hyperv.limit_cpu_features,"},{"line_number":363,"context_line":"                                CONF.hyperv.dynamic_memory_ratio,"},{"line_number":364,"context_line":"                                vm_gen,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_e740d2a7","side":"PARENT","line":361,"range":{"start_line":360,"start_character":32,"end_line":361,"end_character":53},"updated":"2017-01-11 21:44:39.000000000","message":"Did you intend on changing what was used for this in the update call?","commit_id":"6d5333494658143a948677dee7dcfdbefc2ddc44"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9ea20b905bf5ca6e26762219ff81aee2c507abf6","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                                                         vm_gen)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        self._vmutils.create_vm(instance_name,"},{"line_number":360,"context_line":"                                instance.flavor.memory_mb,"},{"line_number":361,"context_line":"                                instance.flavor.vcpus,"},{"line_number":362,"context_line":"                                CONF.hyperv.limit_cpu_features,"},{"line_number":363,"context_line":"                                CONF.hyperv.dynamic_memory_ratio,"},{"line_number":364,"context_line":"                                vm_gen,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_f9add69b","side":"PARENT","line":361,"range":{"start_line":360,"start_character":32,"end_line":361,"end_character":53},"in_reply_to":"ba5201f7_e740d2a7","updated":"2017-01-11 22:58:31.000000000","message":"ah, you mean that I mistakenly changed from instance.flavor.memory_mb to instance.memory_mb? My bad. This patch is since before this transition, and I simply forgot to update this patch as well.","commit_id":"6d5333494658143a948677dee7dcfdbefc2ddc44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c3d28e843a8ce2ce72ccfe4ce9b8e11680eca44","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                                instance_path,"},{"line_number":378,"context_line":"                                [instance.uuid])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self._vmutils.update_vm(instance_name,"},{"line_number":381,"context_line":"                                instance.memory_mb,"},{"line_number":382,"context_line":"                                memory_per_numa_node,"},{"line_number":383,"context_line":"                                instance.vcpus,"},{"line_number":384,"context_line":"                                cpus_per_numa_node,"},{"line_number":385,"context_line":"                                CONF.hyperv.limit_cpu_features,"},{"line_number":386,"context_line":"                                dynamic_memory_ratio)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        self._configure_remotefx(instance, vm_gen)"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_03ea23db","line":386,"range":{"start_line":380,"start_character":0,"end_line":386,"end_character":53},"updated":"2017-01-05 11:48:38.000000000","message":"out of curiosity, why does this have to be split into a create and update step? Perhaps some docs would help here","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9bcdc0043827cd36134bcc35bb3b7b412ef6dd9e","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                                instance_path,"},{"line_number":378,"context_line":"                                [instance.uuid])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self._vmutils.update_vm(instance_name,"},{"line_number":381,"context_line":"                                instance.memory_mb,"},{"line_number":382,"context_line":"                                memory_per_numa_node,"},{"line_number":383,"context_line":"                                instance.vcpus,"},{"line_number":384,"context_line":"                                cpus_per_numa_node,"},{"line_number":385,"context_line":"                                CONF.hyperv.limit_cpu_features,"},{"line_number":386,"context_line":"                                dynamic_memory_ratio)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        self._configure_remotefx(instance, vm_gen)"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_f5e880e4","line":386,"range":{"start_line":380,"start_character":0,"end_line":386,"end_character":53},"in_reply_to":"ba5201f7_03ea23db","updated":"2017-01-11 19:13:59.000000000","message":"hm, simply put, so we don\u0027t have an enormous number of arguments in the create_vm method. The number of steps /calls required to properly configure the newly created the VM still remains the same though.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c3d28e843a8ce2ce72ccfe4ce9b8e11680eca44","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            if (len(cell.cpuset) !\u003d cpus_per_numa_node or"},{"line_number":450,"context_line":"                    cell.memory !\u003d memory_per_numa_node):"},{"line_number":451,"context_line":"                raise exception.InstanceUnacceptable("},{"line_number":452,"context_line":"                    reason\u003d_(\"Hyper-V cannot guarantee the given instance \""},{"line_number":453,"context_line":"                             \"NUMA topology.\"), instance_id\u003dinstance.uuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        return memory_per_numa_node, cpus_per_numa_node"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_832e1341","line":452,"range":{"start_line":452,"start_character":45,"end_line":452,"end_character":54},"updated":"2017-01-05 11:48:38.000000000","message":"I always think this word is mispelt when it is in fact correct","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                    cell.memory !\u003d memory_per_numa_node):"},{"line_number":451,"context_line":"                raise exception.InstanceUnacceptable("},{"line_number":452,"context_line":"                    reason\u003d_(\"Hyper-V cannot guarantee the given instance \""},{"line_number":453,"context_line":"                             \"NUMA topology.\"), instance_id\u003dinstance.uuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        return memory_per_numa_node, cpus_per_numa_node"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_478efed0","line":453,"updated":"2017-01-11 21:44:39.000000000","message":"It might be useful to add a hint to this about what the actual cause of the failure is, i.e. if cpus per node don\u0027t match or memory per node doesn\u0027t match. This error could be a little cryptic otherwise.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9ea20b905bf5ca6e26762219ff81aee2c507abf6","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                    cell.memory !\u003d memory_per_numa_node):"},{"line_number":451,"context_line":"                raise exception.InstanceUnacceptable("},{"line_number":452,"context_line":"                    reason\u003d_(\"Hyper-V cannot guarantee the given instance \""},{"line_number":453,"context_line":"                             \"NUMA topology.\"), instance_id\u003dinstance.uuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        return memory_per_numa_node, cpus_per_numa_node"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5201f7_799ac66f","line":453,"in_reply_to":"ba5201f7_478efed0","updated":"2017-01-11 22:58:31.000000000","message":"Done","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf2dc3e39f06689c564d45a3cb0ed25d99002057","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            self._get_instance_vnuma_config(instance, image_meta))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if memory_per_numa_node:"},{"line_number":363,"context_line":"            LOG.debug(\"Instance requires vNUMA topology. Host\u0027s NUMA spanning \""},{"line_number":364,"context_line":"                      \"has to be disabled in order for the instance to \""},{"line_number":365,"context_line":"                      \"benefit from it.\", instance\u003dinstance)"},{"line_number":366,"context_line":"            if CONF.hyperv.dynamic_memory_ratio \u003e 1.0:"},{"line_number":367,"context_line":"                LOG.warning(_LW("},{"line_number":368,"context_line":"                    \"Instance vNUMA topology requested, but dynamic memory \""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_3994be41","line":365,"range":{"start_line":363,"start_character":12,"end_line":365,"end_character":60},"updated":"2017-01-11 21:48:47.000000000","message":"What happens if the hosts NUMA spanning isn\u0027t disabled? Does it result in an error, or just things silently don\u0027t work as expected?","commit_id":"a288c2765c48f73d971b98acef6f94390f35886d"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"22aaadef9301a007f61582effbc3b07b8a7dd7f2","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            self._get_instance_vnuma_config(instance, image_meta))"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if memory_per_numa_node:"},{"line_number":363,"context_line":"            LOG.debug(\"Instance requires vNUMA topology. Host\u0027s NUMA spanning \""},{"line_number":364,"context_line":"                      \"has to be disabled in order for the instance to \""},{"line_number":365,"context_line":"                      \"benefit from it.\", instance\u003dinstance)"},{"line_number":366,"context_line":"            if CONF.hyperv.dynamic_memory_ratio \u003e 1.0:"},{"line_number":367,"context_line":"                LOG.warning(_LW("},{"line_number":368,"context_line":"                    \"Instance vNUMA topology requested, but dynamic memory \""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_4f60d4cf","line":365,"range":{"start_line":363,"start_character":12,"end_line":365,"end_character":60},"in_reply_to":"ba5201f7_3994be41","updated":"2017-01-11 22:26:46.000000000","message":"it doesn\u0027t raise any error. the configurations are still set, but they will take place after NUMA spanning is disabled and the instance is restarted.","commit_id":"a288c2765c48f73d971b98acef6f94390f35886d"}],"releasenotes/notes/hyper-v-vnuma-support-ffedfaadac91bbac.yaml":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"e1e720165b2bbabadd8d0ccac934e9698bbc222a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_f51a4a6e","line":17,"range":{"start_line":16,"start_character":3,"end_line":17,"end_character":13},"updated":"2017-01-11 16:28:49.000000000","message":"Can we do this automatically for hyperv? Or at least we can make a warning for operator on such configuration?","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b7ba9234653dc23194aa20aa34e626ba5e9370b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_ac7f9115","line":17,"range":{"start_line":16,"start_character":3,"end_line":17,"end_character":13},"in_reply_to":"ba5201f7_2cc64168","updated":"2017-01-11 21:03:34.000000000","message":"Logging could be helpful but yeah, we\u0027re also going to need to update http://docs.openstack.org/admin-guide/compute-cpu-topologies.html regardless so we could have a DocImpact tag in the commit message for tracking that.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"690f609983b01dbafb40920e2784bdbc6a32217c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_b8418f65","line":17,"range":{"start_line":16,"start_character":3,"end_line":17,"end_character":13},"in_reply_to":"ba5201f7_7264a621","updated":"2017-01-11 19:41:18.000000000","message":"Understood, thanks. As warning I mean something like https://review.openstack.org/#/c/282407/17/nova/virt/hyperv/vmops.py@364\n\nif numa and conf.numa.spanning:\n   LOG.warning(\u0027... spanning must be disabled\u0027)","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3ab340b50a4aaec42bbdd608733865a12252778a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_2cc64168","line":17,"range":{"start_line":16,"start_character":3,"end_line":17,"end_character":13},"in_reply_to":"ba5201f7_b8418f65","updated":"2017-01-11 21:01:46.000000000","message":"Hmm, I see. \n\nWell, I will have to edit the openstack nova docs related to numa and numa topology, and I will definetely mention this.\n\nPersonally, I wouldn\u0027t add a config option regarding enabling numa spanning or not, as it might be confused to *actually* turn NUMA spanning on / off on the host. But, I could add debug / info level debug if an instance + numa topology is requested.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"578b60f18efd588d0f282462b9a4f75587170fc3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_7264a621","line":17,"range":{"start_line":16,"start_character":3,"end_line":17,"end_character":13},"in_reply_to":"ba5201f7_f51a4a6e","updated":"2017-01-11 19:14:20.000000000","message":"Hm, how exactly are we going to warn the operators about this?\n\nAnd no, it is something that the operators will have to configure. Enabling / disabling NUMA spanning will also require restarting the vmms service (Hyper-V Service), which means some down time.","commit_id":"1da18785d5c3c180f35add59028429480232a130"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The nova Hyper-V driver now supports symmetric NUMA topologies."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - The nova Hyper-V driver now supports symmetric NUMA topologies. This means"},{"line_number":6,"context_line":"    that all the NUMA nodes in the NUMA topology must have the same amount of"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"ba5201f7_27a81a20","line":3,"updated":"2017-01-11 21:44:39.000000000","message":"nit: we don\u0027t really need this in the prelude section of the release notes, having this documented in the features section is adequate.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2cd5a56497189d0d2974f8cb28b164715087ae","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"ba5201f7_99d12a5a","line":16,"range":{"start_line":16,"start_character":29,"end_line":16,"end_character":41},"updated":"2017-01-11 21:44:39.000000000","message":"Hmm, a point of clarify, does \u0027this feature\u0027 mean NUMA in general or dedicated CPU pinning? I think it means the former, but I could see how it could be confused with the latter since that\u0027s the last feature you were just talking about in here. Maybe move this note before the thing about dedicated CPU pinning?","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9ea20b905bf5ca6e26762219ff81aee2c507abf6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Hyper-V does not guarantee CPU pinning, thus, the nova Hyper-V driver will"},{"line_number":14,"context_line":"    not spawn instances with the flavor extra_spec \"hw:cpu_policy\" or image"},{"line_number":15,"context_line":"    property \"hw_cpu_policy\" set to \"dedicated\"."},{"line_number":16,"context_line":"    In order to benefit from this feature, the host\u0027s NUMA spanning must be"},{"line_number":17,"context_line":"    disabled."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"ba5201f7_d97f3215","line":16,"range":{"start_line":16,"start_character":29,"end_line":16,"end_character":41},"in_reply_to":"ba5201f7_99d12a5a","updated":"2017-01-11 22:58:31.000000000","message":"NUMA in general.","commit_id":"52e65ba3b57a308a9eeab7cf37a80c01f1f81960"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f923a4e21cb7f1813deb6de1049771acd802bf0d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The nova Hyper-V driver now supports symmetric NUMA topologies."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - The nova Hyper-V driver now supports symmetric NUMA topologies. This means"},{"line_number":6,"context_line":"    that all the NUMA nodes in the NUMA topology must have the same amount of"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"ba5201f7_9e7ae886","line":3,"updated":"2017-01-12 01:09:52.000000000","message":"I\u0027d like to drop this from the prelude section.","commit_id":"b494f06c7b309dcf48fd5a0ae1cb230f019dae19"}]}
