)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"379e1117928ff7b980c515f9d748c053b9d93053","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch enables RemoteFX on Hyper-V Server / Windows Server 2012 and"},{"line_number":20,"context_line":"above."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I91fabd5bce2564d48957e8aec1e50ff2625e5747"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAASn%2F%2FaT4%3D","line":21,"updated":"2013-09-05 01:33:10.000000000","message":"Add \u0027DocImpact\u0027  here","commit_id":"7e9d33eedbeae28a8acfc455a6f06f7532b1cb72"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"84c37533ead555d1a86f930ef4601848fda0ce81","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch enables RemoteFX on Hyper-V Server / Windows Server 2012 and"},{"line_number":20,"context_line":"above."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I91fabd5bce2564d48957e8aec1e50ff2625e5747"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAASn%2F%2FZg4%3D","line":21,"in_reply_to":"AAAASn%2F%2FaT4%3D","updated":"2013-09-05 06:52:42.000000000","message":"Done","commit_id":"7e9d33eedbeae28a8acfc455a6f06f7532b1cb72"}],"nova/conf/hyperv.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6e10196b169bc6894fddc97901584ab3a086953a","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    [1, 4] - Windows / Hyper-V Server 2012 R2"},{"line_number":440,"context_line":"    [1, 8] - Windows / Hyper-V Server 2016"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"**os:vram**. Guest VM VRAM amount. Only available on"},{"line_number":443,"context_line":"Windows / Hyper-V Server 2016. Acceptable values::"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    64, 128, 256, 512, 1024"}],"source_content_type":"text/x-python","patch_set":26,"id":"7aa08908_9a54f521","line":442,"updated":"2016-06-06 17:33:30.000000000","message":"Is this in MB? KB?","commit_id":"a39710244a8f26b0d9d80bffa41c04c84b133f17"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"137bc6f772f4b51c3d7eb502e8d0ccb3e22d6c63","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    [1, 4] - Windows / Hyper-V Server 2012 R2"},{"line_number":440,"context_line":"    [1, 8] - Windows / Hyper-V Server 2016"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"**os:vram**. Guest VM VRAM amount. Only available on"},{"line_number":443,"context_line":"Windows / Hyper-V Server 2016. Acceptable values::"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    64, 128, 256, 512, 1024"}],"source_content_type":"text/x-python","patch_set":26,"id":"7aa08908_b8142444","line":442,"in_reply_to":"7aa08908_9a54f521","updated":"2016-06-07 13:55:30.000000000","message":"MB. Yep. sorry. :)","commit_id":"a39710244a8f26b0d9d80bffa41c04c84b133f17"}],"nova/tests/unit/virt/hyperv/test_hostops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        ret_val \u003d self._hostops._get_remotefx_gpu_info()"},{"line_number":207,"context_line":"        self.assertEqual(ret_val[\u0027remotefx_total_video_ram\u0027], 3072)"},{"line_number":208,"context_line":"        self.assertEqual(ret_val[\u0027remotefx_available_video_ram\u0027], 2048)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_df27c2b4","line":208,"updated":"2015-01-23 11:55:39.000000000","message":"expected values first.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.flags(enable_remotefx\u003dTrue, group\u003d\u0027hyperv\u0027)"},{"line_number":202,"context_line":"        fake_gpus \u003d [{\u0027total_video_ram\u0027: \u00272048\u0027,"},{"line_number":203,"context_line":"                      \u0027available_video_ram\u0027: \u00271024\u0027},"},{"line_number":204,"context_line":"                      {\u0027total_video_ram\u0027: \u00271024\u0027,"},{"line_number":205,"context_line":"                      \u0027available_video_ram\u0027: \u00271024\u0027}]"},{"line_number":206,"context_line":"        self._hostops._hostutils.get_remotefx_gpu_info.return_value \u003d fake_gpus"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_3b6fcd2c","line":204,"updated":"2015-05-04 13:59:03.000000000","message":"overindented, { should match the indentation of {","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"1fa0aa7a21d1d4b376e8998924830688f00c9c62","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self.assertEqual(expected, response)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_get_remotefx_gpu_info(self):"},{"line_number":199,"context_line":"        self.flags(enable_remotefx\u003dTrue, group\u003d\u0027hyperv\u0027)"},{"line_number":200,"context_line":"        fake_gpus \u003d [{\u0027total_video_ram\u0027: \u00272048\u0027,"},{"line_number":201,"context_line":"                      \u0027available_video_ram\u0027: \u00271024\u0027},"},{"line_number":202,"context_line":"                     {\u0027total_video_ram\u0027: \u00271024\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"bab6814e_a85eda73","line":199,"updated":"2016-05-24 17:31:50.000000000","message":"should there be another test where enable_remotefx is False?","commit_id":"d76ff9ab624d02af595404a36b97471cc538416b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9411592deb7e69d897b31e531489eff4ecf46067","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self.assertEqual(expected, response)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_get_remotefx_gpu_info(self):"},{"line_number":199,"context_line":"        self.flags(enable_remotefx\u003dTrue, group\u003d\u0027hyperv\u0027)"},{"line_number":200,"context_line":"        fake_gpus \u003d [{\u0027total_video_ram\u0027: \u00272048\u0027,"},{"line_number":201,"context_line":"                      \u0027available_video_ram\u0027: \u00271024\u0027},"},{"line_number":202,"context_line":"                     {\u0027total_video_ram\u0027: \u00271024\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"bab6814e_b9590a91","line":199,"in_reply_to":"bab6814e_a85eda73","updated":"2016-05-24 18:07:56.000000000","message":"yep, you\u0027re right.","commit_id":"d76ff9ab624d02af595404a36b97471cc538416b"}],"nova/tests/unit/virt/hyperv/test_hostutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        fake_gpu.DirectXVersion \u003d mock.sentinel.Fake_gpu_directx"},{"line_number":150,"context_line":"        fake_gpu.DriverVersion \u003d mock.sentinel.Fake_gpu_driver_version"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self._hostutils._conn_virt_v2.Msvm_Physical3dGraphicsProcessor.\\"},{"line_number":153,"context_line":"                            return_value \u003d [fake_gpu]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        return_gpus \u003d self._hostutils.get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_ff039e0a","line":152,"updated":"2015-01-23 11:55:39.000000000","message":"hm, try to avoid using \\ for multi-line statements like this.\n\ntry:\n\n    mock_phys_3d_proc \u003d (\n        self._hostutils._conn_virt_v2.Msvm_Physical3dGraphicsProcessor)\n    mock_phys_3d_proc.return_value \u003d [fake_gpu]","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(return_gpus[0][\u0027available_video_ram\u0027],"},{"line_number":162,"context_line":"            mock.sentinel.Fake_gpu_available_memory)"},{"line_number":163,"context_line":"        self.assertEqual(return_gpus[0][\u0027directx_version\u0027],"},{"line_number":164,"context_line":"            mock.sentinel.Fake_gpu_directx)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_e44b1785","line":164,"updated":"2015-01-23 11:55:39.000000000","message":"expected value is first, then the result","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"}],"nova/tests/unit/virt/hyperv/test_hostutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.assertEqual(mock.sentinel.Fake_gpu_available_memory,"},{"line_number":51,"context_line":"            return_gpus[0][\u0027available_video_ram\u0027])"},{"line_number":52,"context_line":"        self.assertEqual(mock.sentinel.Fake_gpu_directx,"},{"line_number":53,"context_line":"            return_gpus[0][\u0027directx_version\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_bb2cfd02","line":53,"updated":"2015-05-04 13:59:03.000000000","message":"can you indent those lines, so it matches with mock.sentinel?","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"}],"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":737,"context_line":"                              mock_image_meta)"},{"line_number":738,"context_line":"        else:"},{"line_number":739,"context_line":"            self._vmops._configure_remotefx(mock_instance, mock_image_meta)"},{"line_number":740,"context_line":"            enable_remotefx(mock_instance[\u0027name\u0027],"},{"line_number":741,"context_line":"                            mock.sentinel.REMOTEFX_MONITOR_COUNT,"},{"line_number":742,"context_line":"                            mock.sentinel.REMOTEFX_MAX_RESOLUTION)"},{"line_number":743,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_ff78fe90","line":740,"updated":"2015-01-23 11:55:39.000000000","message":"mock_instance.name","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":739,"context_line":"            self._vmops._configure_remotefx(mock_instance, mock_image_meta)"},{"line_number":740,"context_line":"            enable_remotefx(mock_instance[\u0027name\u0027],"},{"line_number":741,"context_line":"                            mock.sentinel.REMOTEFX_MONITOR_COUNT,"},{"line_number":742,"context_line":"                            mock.sentinel.REMOTEFX_MAX_RESOLUTION)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"    def test_configure_remotefx_exception(self):"},{"line_number":745,"context_line":"        self._test_configure_remotefx(exception\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_5f6912bd","line":742,"updated":"2015-01-23 11:55:39.000000000","message":"also, no asserts anywhere?","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from nova.virt.hyperv import constants"},{"line_number":29,"context_line":"from nova.virt.hyperv import vmops"},{"line_number":30,"context_line":"from nova.virt.hyperv import vmutils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_bca059a0","line":31,"updated":"2015-02-03 12:55:12.000000000","message":"uneeded change.","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":396,"context_line":"                                   fake_ephemeral_path\u003dNone,"},{"line_number":397,"context_line":"                                   enable_instance_metrics\u003dFalse,"},{"line_number":398,"context_line":"                                   vm_gen\u003dconstants.VM_GEN_1,"},{"line_number":399,"context_line":"                                   remotefx\u003dTrue)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def test_attach_drive_vm_to_scsi(self):"},{"line_number":402,"context_line":"        self._vmops._attach_drive("}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_9ccd5560","line":399,"updated":"2015-02-03 12:55:12.000000000","message":"as far as I know, remotefx doesn\u0027t work for Gen 2. Unit test for this case?","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":745,"context_line":"        self.flags(enable_remotefx\u003dTrue, group\u003d\u0027hyperv\u0027)"},{"line_number":746,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        fake_config \u003d \"1920x1200,3\""},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        self._vmops._vmutils.enable_remotefx_video_adapter \u003d mock.MagicMock()"},{"line_number":751,"context_line":"        enable_remotefx \u003d self._vmops._vmutils.enable_remotefx_video_adapter"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_5ced9d8a","line":748,"updated":"2015-02-03 12:55:12.000000000","message":"personal preference, but what about:\n\n    resolution \u003d \"1920x1200\"\n    screen_count \u003d 3\n    fake_config \u003d \"%(resolution)s,%(screen_count)s\"\n\nalso, the vars to be used in the assert below.","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":399,"context_line":"                    eph_vhd_path\u003dfake_ephemeral_path,"},{"line_number":400,"context_line":"                    vm_gen\u003dvm_gen)"},{"line_number":401,"context_line":"            if remotefx is True:"},{"line_number":402,"context_line":"                    mock_configure_remotefx.assert_called_with(mock_instance,"},{"line_number":403,"context_line":"                        flavor.extra_specs[\u0027hyperv:remotefx\u0027])"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            self._vmops._vmutils.create_vm.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_1937deb1","line":402,"updated":"2015-04-27 13:08:13.000000000","message":"assert_called_once_with?\n\nalso, can you put the argument ``mock_instance`` on a new line, to match the indentation of flavor.extra_specs? This way you won\u0027t have argument mixed-indentation. Same for L395","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"                              mock_instance, fake_config)"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            self._vmops._configure_remotefx(mock_instance, fake_config)"},{"line_number":1090,"context_line":"            enable_remotefx.assert_called_with(mock_instance.name,"},{"line_number":1091,"context_line":"                                               fake_monitor_count,"},{"line_number":1092,"context_line":"                                               fake_resolution)"},{"line_number":1093,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_f930aaa0","line":1090,"updated":"2015-04-27 13:08:13.000000000","message":"assert_called_once_with?","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        instance_path \u003d os.path.join(CONF.instances_path, mock_instance.name)"},{"line_number":380,"context_line":"        flavor \u003d flavor_obj.Flavor(**test_flavor.fake_flavor)"},{"line_number":381,"context_line":"        if remotefx is True:"},{"line_number":382,"context_line":"                flavor.extra_specs[\u0027hyperv:remotefx\u0027] \u003d \"1920x1200,2\""},{"line_number":383,"context_line":"        mock_instance.flavor \u003d flavor"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        if remotefx is True and vm_gen \u003d\u003d constants.VM_GEN_2:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_3bdfcd6a","line":382,"updated":"2015-05-04 13:59:03.000000000","message":"overindented","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                    block_device_info\u003dmock.sentinel.DEV_INFO,"},{"line_number":399,"context_line":"                    root_vhd_path\u003dfake_root_path,"},{"line_number":400,"context_line":"                    eph_vhd_path\u003dfake_ephemeral_path,"},{"line_number":401,"context_line":"                    vm_gen\u003dvm_gen)"},{"line_number":402,"context_line":"            if remotefx is True:"},{"line_number":403,"context_line":"                    mock_configure_remotefx.assert_called_once_with("},{"line_number":404,"context_line":"                        mock_instance,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_9bd4a147","line":401,"updated":"2015-05-04 13:59:03.000000000","message":"overindented","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                    eph_vhd_path\u003dfake_ephemeral_path,"},{"line_number":401,"context_line":"                    vm_gen\u003dvm_gen)"},{"line_number":402,"context_line":"            if remotefx is True:"},{"line_number":403,"context_line":"                    mock_configure_remotefx.assert_called_once_with("},{"line_number":404,"context_line":"                        mock_instance,"},{"line_number":405,"context_line":"                        flavor.extra_specs[\u0027hyperv:remotefx\u0027])"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_5b13a90d","line":403,"updated":"2015-05-04 13:59:03.000000000","message":"overindented","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5648ca37f9b5b74ae7c721b28c537b6d4dcb98f7","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        flavor \u003d flavor_obj.Flavor(**test_flavor.fake_flavor)"},{"line_number":390,"context_line":"        if remotefx:"},{"line_number":391,"context_line":"            flavor.extra_specs \u003d {\u0027hyperv:remotefx\u0027: \"1920x1200,2\"}"},{"line_number":392,"context_line":"        mock_instance.flavor \u003d flavor"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        self._vmops.create_instance(instance\u003dmock_instance,"}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_9c9ab160","line":391,"updated":"2016-05-17 02:58:57.000000000","message":"Is the \"1920x1200,2\" extra spec value format documented anywhere? How would an administrator know how to set the extra spec in this way? Can you add some reno notes that explain this somewhere? Also, consider adding some help text to the enable_remotefx CONF option that explains how the admin/deployer would set the extra spec value appropriately.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1290cad6fc231a26a49d314f9c2ab2615da86b27","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        flavor \u003d flavor_obj.Flavor(**test_flavor.fake_flavor)"},{"line_number":390,"context_line":"        if remotefx:"},{"line_number":391,"context_line":"            flavor.extra_specs \u003d {\u0027hyperv:remotefx\u0027: \"1920x1200,2\"}"},{"line_number":392,"context_line":"        mock_instance.flavor \u003d flavor"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        self._vmops.create_instance(instance\u003dmock_instance,"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_2ca62153","line":391,"in_reply_to":"dab17558_9c9ab160","updated":"2016-05-20 10:26:20.000000000","message":"So, the format of the extra_specs is \"guest_resolution,guest_num_monitors\". For a given resolution, there is a maximum number of monitors supported. Those values are enumerated here:\n\n    https://github.com/openstack/os-win/blob/master/os_win/utils/compute/vmutils.py#L112\n    https://github.com/openstack/os-win/blob/master/os_win/utils/compute/vmutils10.py#L43\n\nAnd yeah, you\u0027re right, a reno would be helpful for this, as well as in some other form of documentation (documentation for flavor extra_specs, if any, or Hyper-V). CONF option is also a good idea.\n\nHonestly, I\u0027d want to propose another set of extra spec values for RemoteFX, that is going to be more compliant with HostCapabilities. And yes, for RemoteFX, I will want to have a set of host capabilities as follows:\n\n    os:resolution - guest OS resolution\n    os:monitors - guest OS number of monitors\n    os:vram - VRAM amount allocated to the VM\n\nI\u0027ve already added those capabilities to the HostCapabilities object patch.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"}],"nova/tests/unit/virt/hyperv/test_vmutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self._vmutils._get_new_resource_setting_data \u003d mock.MagicMock()"},{"line_number":223,"context_line":"        self._vmutils._add_virt_resource \u003d mock.MagicMock()"},{"line_number":224,"context_line":"        self._vmutils._modify_virt_resource \u003d mock.MagicMock()"},{"line_number":225,"context_line":"        self._vmutils._remove_virt_resource \u003d mock.MagicMock()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":228,"context_line":"            self._FAKE_VM_NAME, self._FAKE_MONITOR_COUNT,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_df834254","line":225,"updated":"2015-01-23 11:55:39.000000000","message":"it might be worth using mock.patch.multiple here..","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":228,"context_line":"            self._FAKE_VM_NAME, self._FAKE_MONITOR_COUNT,"},{"line_number":229,"context_line":"            constants.REMOTEFX_MAX_RES_1024x768)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_enable_remotefx_video_adapter_already_configured(self):"},{"line_number":232,"context_line":"        mock_vm \u003d self._lookup_vm()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_bfb59632","line":229,"updated":"2015-01-23 11:55:39.000000000","message":"no asserts?","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        mock_remove_virt_resource.assert_called_with(mock_r1, mock_vm.path_())"},{"line_number":267,"context_line":"        mock_new_res_setting_data.assert_called_once_with("},{"line_number":268,"context_line":"                self._vmutils._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE,"},{"line_number":269,"context_line":"                \u0027Msvm_Synthetic3DDisplayControllerSettingData\u0027)"},{"line_number":270,"context_line":"        mock_add_virt_res.assert_called_once_with(mock_synth_3d_disp_ctrl_res,"},{"line_number":271,"context_line":"                                                  mock_vm.path_())"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_bcabf91b","line":269,"updated":"2015-02-03 12:55:12.000000000","message":"I think this should be something like: self._utils._SYNTH_3D_DISP_ALLOCATION_SETTING_DATA_CLASS","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                                                  mock_vm.path_())"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        mock_modify_virt_resource(mock_r2, mock_vm.path_())"},{"line_number":274,"context_line":"        self.assertEqual(\"02C1,00000000,01\", mock_r2.Address)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def test_enable_remotefx_video_adapter_already_configured(self):"},{"line_number":277,"context_line":"        mock_vm \u003d self._lookup_vm()"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_47286634","line":274,"updated":"2015-02-03 12:55:12.000000000","message":"should be:\n\n    self._vmutils._DISP_CTRL_ADDRESS_DX_11","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        mock_new_res_setting_data.return_value \u003d mock_synth_3d_disp_ctrl_res"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":293,"context_line":"            self._FAKE_VM_NAME, self._FAKE_MONITOR_COUNT,"},{"line_number":294,"context_line":"            constants.REMOTEFX_MAX_RES_1024x768)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        mock_remove_virt_resource.assert_called_with(mock_r1, mock_vm.path_())"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_f9baeabf","line":293,"updated":"2015-04-27 13:08:13.000000000","message":"mock.sentinel.vm_name instead of self._FAKE_VM_NAME?","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            self._FAKE_VM_NAME, self._FAKE_MONITOR_COUNT,"},{"line_number":294,"context_line":"            constants.REMOTEFX_MAX_RES_1024x768)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        mock_remove_virt_resource.assert_called_with(mock_r1, mock_vm.path_())"},{"line_number":297,"context_line":"        mock_new_res_setting_data.assert_called_once_with("},{"line_number":298,"context_line":"                self._vmutils._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE,"},{"line_number":299,"context_line":"                self._vmutils._SYNTH_3D_DISP_ALLOCATION_SETTING_DATA_CLASS)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_19ba3ee2","line":296,"updated":"2015-04-27 13:08:13.000000000","message":"assert_called_once_with?","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        mock_add_virt_res.assert_called_once_with(mock_synth_3d_disp_ctrl_res,"},{"line_number":301,"context_line":"                                                  mock_vm.path_())"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        mock_modify_virt_resource(mock_r2, mock_vm.path_())"},{"line_number":304,"context_line":"        self.assertEqual(self._vmutils._DISP_CTRL_ADDRESS_DX_11,"},{"line_number":305,"context_line":"                         mock_r2.Address)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_39d8621d","line":303,"updated":"2015-04-27 13:08:13.000000000","message":"you forgot the assertion.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        self.assertRaises(vmutils.HyperVException,"},{"line_number":316,"context_line":"                          self._vmutils.enable_remotefx_video_adapter,"},{"line_number":317,"context_line":"                          self._FAKE_VM_NAME, self._FAKE_MONITOR_COUNT,"},{"line_number":318,"context_line":"                          constants.REMOTEFX_MAX_RES_1024x768)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_enable_remotefx_video_adapter_no_gpu(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_f92f8af4","line":317,"updated":"2015-04-27 13:08:13.000000000","message":"sentinel instead of _FAKE_VM_NAME","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                                                          mock_vm.path_())"},{"line_number":301,"context_line":"        mock_new_res_setting_data.assert_called_once_with("},{"line_number":302,"context_line":"                self._vmutils._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE,"},{"line_number":303,"context_line":"                self._vmutils._SYNTH_3D_DISP_ALLOCATION_SETTING_DATA_CLASS)"},{"line_number":304,"context_line":"        mock_add_virt_res.assert_called_once_with(mock_synth_3d_disp_ctrl_res,"},{"line_number":305,"context_line":"                                                  mock_vm.path_())"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_3b98edbf","line":303,"updated":"2015-05-04 13:59:03.000000000","message":"overindented.","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"}],"nova/virt/hyperv/hostops.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c5573e32c13986324d11dba030435b3f492f0da","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    (arch.X86_64, hv_type.HYPERV, vm_mode.HVM)]),"},{"line_number":164,"context_line":"               \u0027numa_topology\u0027: None,"},{"line_number":165,"context_line":"               }"},{"line_number":166,"context_line":"        dic.update(gpu_info)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        return dic"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_9093085b","line":166,"updated":"2015-07-28 11:08:58.000000000","message":"i am not sure where you use this? is this information stored in the resource tracker?","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"b0e2ed25f08a3bb7d56a6ac6e2bec65abee39ed5","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    (arch.X86_64, hv_type.HYPERV, vm_mode.HVM)]),"},{"line_number":164,"context_line":"               \u0027numa_topology\u0027: None,"},{"line_number":165,"context_line":"               }"},{"line_number":166,"context_line":"        dic.update(gpu_info)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        return dic"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_98181b86","line":166,"in_reply_to":"3a50d1a3_9093085b","updated":"2015-08-03 10:04:41.000000000","message":"No, not at this time. We planned on adding a schedule filter to select nodes based on available video ram.","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5648ca37f9b5b74ae7c721b28c537b6d4dcb98f7","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _get_remotefx_gpu_info(self):"},{"line_number":110,"context_line":"        remotefx_total_video_ram \u003d 0"},{"line_number":111,"context_line":"        remotefx_available_video_ram \u003d 0"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if CONF.hyperv.enable_remotefx:"},{"line_number":114,"context_line":"            gpus \u003d self._hostutils.get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_5c94c935","line":111,"updated":"2016-05-17 02:58:57.000000000","message":"It would have been nice if these resource amounts represented the total and used amounts instead of total and available. Other resources like VCPU, RAM, and DISK_GB are represented by the hypervisor as total and used amounts. I recognize though that os_win.utils.hostutils.get_remotefx_gpu_info() returns things in this way. It just means that unfortunately we won\u0027t be able to treat this quantitative resource like any other quantitative resource in the system and it will be its own special unicorn like all the NUMA topology stuff. :(\n\nYou could, though, make our long-term lives easier by simply returned a total and used amount instead of a total and available amount by calculating the used amount by subtracting available from total...","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1290cad6fc231a26a49d314f9c2ab2615da86b27","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _get_remotefx_gpu_info(self):"},{"line_number":110,"context_line":"        remotefx_total_video_ram \u003d 0"},{"line_number":111,"context_line":"        remotefx_available_video_ram \u003d 0"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if CONF.hyperv.enable_remotefx:"},{"line_number":114,"context_line":"            gpus \u003d self._hostutils.get_remotefx_gpu_info()"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_c7076e16","line":111,"in_reply_to":"dab17558_5c94c935","updated":"2016-05-20 10:26:20.000000000","message":"makes sense. there\u0027s no reason why this should be treated differently.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5648ca37f9b5b74ae7c721b28c537b6d4dcb98f7","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        return {\u0027remotefx_total_video_ram\u0027: remotefx_total_video_ram,"},{"line_number":122,"context_line":"                \u0027remotefx_available_video_ram\u0027: remotefx_available_video_ram,"},{"line_number":123,"context_line":"                \u0027remotefx_gpu_info\u0027: jsonutils.dumps(gpus)}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def get_available_resource(self):"},{"line_number":126,"context_line":"        \"\"\"Retrieve resource info."}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_bc97b538","line":123,"updated":"2016-05-17 02:58:57.000000000","message":"Note that long-term with the expose-host-capabilities and standardize-capabilities specs we will want to standardize this remotefx_gpu_info blob of stuff into capability strings that can be accurately queried and filtered by the scheduler/placement engine.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1290cad6fc231a26a49d314f9c2ab2615da86b27","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        return {\u0027remotefx_total_video_ram\u0027: remotefx_total_video_ram,"},{"line_number":122,"context_line":"                \u0027remotefx_available_video_ram\u0027: remotefx_available_video_ram,"},{"line_number":123,"context_line":"                \u0027remotefx_gpu_info\u0027: jsonutils.dumps(gpus)}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def get_available_resource(self):"},{"line_number":126,"context_line":"        \"\"\"Retrieve resource info."}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_47753e30","line":123,"in_reply_to":"dab17558_bc97b538","updated":"2016-05-20 10:26:20.000000000","message":"yep, you\u0027re right.\n\nThe only other thing that could be considered a capability in the fetched gpu info, would be the directx version, but that\u0027s a bit debatable.\n\n    https://github.com/openstack/os-win/blob/master/os_win/utils/hostutils.py#L227\n\nother than that, as capabilities, I would like to report the supported resolutions, maximum number of monitors per resolution, and the requestable ammounts of VRAM (64, 128, 256, 512, 1024). I\u0027ve already taken steps towards this, but reporting those capabilities will be done in the expose-host-capabilities spec.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"}],"nova/virt/hyperv/hostutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                self._conn_virt_v2 \u003d wmi.WMI(moniker\u003d\u0027//./root/\u0027"},{"line_number":40,"context_line":"                                             \u0027virtualization/v2\u0027)"},{"line_number":41,"context_line":"            else:"},{"line_number":42,"context_line":"                self._conn_virt_v2 \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_cpus_info(self):"},{"line_number":45,"context_line":"        cpus \u003d self._conn_cimv2.query(\"SELECT * FROM Win32_Processor \""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_7fc08e7c","line":42,"updated":"2015-01-23 11:55:39.000000000","message":"Hm, I think a hostutilsv2 would be more appropriate, IMO.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            self._conn_cimv2 \u003d wmi.WMI(privileges\u003d[\"Shutdown\"])"},{"line_number":38,"context_line":"            if self.check_min_windows_version(6, 2):"},{"line_number":39,"context_line":"                self._conn_virt_v2 \u003d wmi.WMI(moniker\u003d\u0027//./root/\u0027"},{"line_number":40,"context_line":"                                             \u0027virtualization/v2\u0027)"},{"line_number":41,"context_line":"            else:"},{"line_number":42,"context_line":"                self._conn_virt_v2 \u003d None"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_594e76c2","line":40,"updated":"2015-04-27 13:08:13.000000000","message":"I think you should create hostutilsv2, for the same reason we have the other v2 modules.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6f4d897aff6b2169c41c6e51240536bb3c0fdab4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                self._conn_virt_v2 \u003d wmi.WMI(moniker\u003d\u0027//./root/\u0027"},{"line_number":40,"context_line":"                                             \u0027virtualization/v2\u0027)"},{"line_number":41,"context_line":"            else:"},{"line_number":42,"context_line":"                self._conn_virt_v2 \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_cpus_info(self):"},{"line_number":45,"context_line":"        cpus \u003d self._conn_cimv2.query(\"SELECT * FROM Win32_Processor \""}],"source_content_type":"text/x-python","patch_set":15,"id":"3acd31a7_9202690a","line":42,"updated":"2015-05-01 14:43:40.000000000","message":"you did not address my previous comment on this.","commit_id":"78bdfa4214c98641cbb598ed1907dfaf52a32591"}],"nova/virt/hyperv/hostutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ed53bcf44524b9456de637d447b0f047ecf7c5fd","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_remotefx_gpu_info(self):"},{"line_number":37,"context_line":"        gpus \u003d []"},{"line_number":38,"context_line":"        if self._conn_virt:"},{"line_number":39,"context_line":"            all_gpus \u003d self._conn_virt.Msvm_Physical3dGraphicsProcessor("},{"line_number":40,"context_line":"                EnabledForVirtualization\u003dTrue)"},{"line_number":41,"context_line":"            for gpu in all_gpus:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_5b5ba92e","line":38,"updated":"2015-05-04 13:59:03.000000000","message":"no longer need this if, it will exist on windows. Even if it wasn\u0027t set, it would have been raised an exception.","commit_id":"aed47e9884da97e86f46161d60fd4a6b7521ab01"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e33dd6a927faedbbaac5237038446f1f4ba766f5","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               default\u003d\u00271024x768\u0027,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum resolution for RemoteFX desktops. Valid \u0027"},{"line_number":71,"context_line":"                    \u0027values: 1024x768, 1280x1024, 1600x1200, 1920x1200, \u0027"},{"line_number":72,"context_line":"                    \u00272560x1600\u0027)"},{"line_number":73,"context_line":"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fd7w%3D","line":72,"updated":"2013-09-04 13:29:58.000000000","message":"I\u0027m not really convinced that \u0027enable_remotefx\u0027  is something that is good to turn on/off at the host level like this.\n\nIIUC, it has quite a significant requirement for network bandwidth between the virt host \u0026 client. As such, I think it is quite likely that admins would not want to unconditionally allow all VMs on a host to use this feature. Also if only  a subset hosts support this feature, then there will need to be a way for users to get their VMs placed on suitable hosts.\n\nIOW, I rather think that this needs to be something configured  at the flavour level. Hosts would also have to export info about whether they are able to support this feature. If the VM\u0027s flavour requested this feature, then the scheduler would have to look for a host which can support it.","commit_id":"36b00492fdc77d3df5a61f0b177df936477ee435"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"d0bb988258473f95a921d6f8ce1d5e23a01d89c1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               default\u003d\u00271024x768\u0027,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum resolution for RemoteFX desktops. Valid \u0027"},{"line_number":71,"context_line":"                    \u0027values: 1024x768, 1280x1024, 1600x1200, 1920x1200, \u0027"},{"line_number":72,"context_line":"                    \u00272560x1600\u0027)"},{"line_number":73,"context_line":"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fd48%3D","line":72,"in_reply_to":"AAAASn%2F%2Fd7w%3D","updated":"2013-09-04 13:46:56.000000000","message":"There\u0027s no network bandwidth used between the host and the guest, it\u0027s done using the Hyper-V VMBUS. \n\nConfiguring it at the image and flavour level is an interesting option. The host could export it easily in the capabilities and a filter could pick it up as needed.","commit_id":"36b00492fdc77d3df5a61f0b177df936477ee435"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027enable_remotefx\u0027,"},{"line_number":87,"context_line":"                default\u003dFalse,"},{"line_number":88,"context_line":"                help\u003d\u0027Enables RemoteFx. This requires at least one DirectX 11 \u0027"},{"line_number":89,"context_line":"                     \u0027capable graphic adapter and the RDS-Virtualization \u0027"},{"line_number":90,"context_line":"                     \u0027feature enabled\u0027)"},{"line_number":91,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1f5a2af3","line":88,"updated":"2015-01-23 11:55:39.000000000","message":"RemoteFX*","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        if vm_gen \u003d\u003d constants.VM_GEN_2:"},{"line_number":341,"context_line":"            raise vmutils.HyperVException(_(\"RemoteFX is not supported on \""},{"line_number":342,"context_line":"                                            \"generation 2 virtual machines.\"))"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            self._configure_remotefx(instance, image_meta)"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_ff8c7e37","line":342,"updated":"2015-01-23 11:55:39.000000000","message":"how can you tell an instance requires RemoteFX? This kind of looks to me that Generation 2 VMs won\u0027t be able to spawn anymore. I\u0027d say that if the VM is generation 2, do not configure RemoteFX on it.\n\nMaybe raise an exception if the image is vm gen 2 and also provide remotefx config options. That should be pretty clear that the user desires RemoteFX on a Gen 2 VM, which is not possible.\n\nAlso, I think this check should be done much early (fail-fast), so none of the operations above are executed with no practical use. Also, eventual cleanup, how is it handled?","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            raise vmutils.HyperVException(_(\"RemoteFX is not supported on \""},{"line_number":342,"context_line":"                                            \"generation 2 virtual machines.\"))"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            self._configure_remotefx(instance, image_meta)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def _attach_drive(self, instance_name, path, drive_addr, ctrl_disk_addr,"},{"line_number":347,"context_line":"                      controller_type, drive_type\u003dconstants.DISK):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_3fe28603","line":344,"updated":"2015-01-23 11:55:39.000000000","message":"Hm, create_instance has a plaethora of arguments already, so I don\u0027t know how I feel about adding a new argument just for this.\n\nHow about this:\n\nmake configure_remotefx public method, add the vm_gen there as argument as well, so you can do the check there.\n\nand call the method from spawn and migrationops.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        return vm_gen"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def _configure_remotefx(self, instance, image_meta):"},{"line_number":380,"context_line":"        if CONF.hyperv.enable_remotefx:"},{"line_number":381,"context_line":"            instance_name \u003d instance[\u0027name\u0027]"},{"line_number":382,"context_line":"            LOG.debug(\u0027Configuring RemoteFX for instance: %s\u0027 %"},{"line_number":383,"context_line":"                      instance_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_bf1cb6c2","line":380,"updated":"2015-01-23 11:55:39.000000000","message":"personal preference and also, it would look a little bit better, not having to indent the code so much:\n\n    if not CONF.hyperv.enable_remotefx:\n        return","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            remotefx_max_resolution \u003d image_properties.get("},{"line_number":388,"context_line":"                \u0027remotefx_max_resolution\u0027)"},{"line_number":389,"context_line":"            if remotefx_max_resolution:"},{"line_number":390,"context_line":"                remotefx_monitor_count \u003d image_properties.get("},{"line_number":391,"context_line":"                    \u0027remotefx_monitor_count\u0027, 1)"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1f5cea7d","line":389,"updated":"2015-01-23 11:55:39.000000000","message":"ditto.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                    \u0027remotefx_monitor_count\u0027, 1)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"                if not self._hostutils.check_server_feature("},{"line_number":394,"context_line":"                        self._hostutils.FEATURE_RDS_VIRTUALIZATION):"},{"line_number":395,"context_line":"                    raise vmutils.HyperVException("},{"line_number":396,"context_line":"                        _(\"The RDS-Virtualization feature must be installed \""},{"line_number":397,"context_line":"                          \"in order to use RemoteFX\"))"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_3f3a8636","line":394,"updated":"2015-01-23 11:55:39.000000000","message":"i think this check should be done earlier in the method. The above code will execute for nothing if this if is True.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        remote_fx_config \u003d flavor_extra_specs.get("},{"line_number":344,"context_line":"                constants.FLAVOR_REMOTE_FX_EXTRA_SPEC_KEY)"},{"line_number":345,"context_line":"        if remote_fx_config:"},{"line_number":346,"context_line":"            if vm_gen \u003d\u003d constants.VM_GEN_2:"},{"line_number":347,"context_line":"                raise vmutils.HyperVException(_(\"RemoteFX is not supported on \""},{"line_number":348,"context_line":"                      \"generation 2 virtual machines.\"))"},{"line_number":349,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_079d8ebc","line":346,"updated":"2015-02-03 12:55:12.000000000","message":"my comment still stands.\n\nBy this point in the code, the Hyper-V driver has already done a lot of operations: create root vhd, create ephemeral vhd, enable vm metrics collection, create / attach NICs, create / attach config drive, attach volumes... just to fail at the very end?\n\nThis should be done early on, fail fast.","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"467c04ad36f4489ad6c0e3ebc53fd16c805cc129","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                  instance_name)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        remotefx_max_resolution \u003d config.split(\u0027,\u0027)[0]"},{"line_number":400,"context_line":"        remotefx_monitor_count \u003d int(config.split(\u0027,\u0027)[1])"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":403,"context_line":"            instance_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_273c5293","line":400,"updated":"2015-02-03 12:55:12.000000000","message":"split is being done twice... how about:\n\n    remotefx_max_resolution, remotefx_monitor_count \u003d config.split(\u0027,\u0027)\n    remotefx_monitor_count \u003d int(remotefx_monitor_count)","commit_id":"c3bae740d2029b1a7e703978ef2ed7f914cc34e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"               help\u003d\u0027Number of seconds to wait for instance to shut down after\u0027"},{"line_number":83,"context_line":"                    \u0027 soft reboot request is made. We fall back to hard reboot\u0027"},{"line_number":84,"context_line":"                    \u0027 if instance does not shutdown within this window.\u0027),"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027enable_remotefx\u0027,"},{"line_number":87,"context_line":"                default\u003dFalse,"},{"line_number":88,"context_line":"                help\u003d\u0027Enables RemoteFX. This requires at least one DirectX 11 \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_1431e5a2","line":85,"updated":"2015-04-27 13:08:13.000000000","message":"unnecessary new line","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        if remote_fx_config:"},{"line_number":318,"context_line":"            if vm_gen \u003d\u003d constants.VM_GEN_2:"},{"line_number":319,"context_line":"                raise vmutils.HyperVException(_(\"RemoteFX is not supported on \""},{"line_number":320,"context_line":"                      \"generation 2 virtual machines.\"))"},{"line_number":321,"context_line":"            else:"},{"line_number":322,"context_line":"                self._configure_remotefx(instance, remote_fx_config)"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_7986daba","line":320,"updated":"2015-04-27 13:08:13.000000000","message":"try not to have mixed indentations.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        return configdrive_path"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def _configure_remotefx(self, instance, config):"},{"line_number":441,"context_line":"        if not CONF.hyperv.enable_remotefx:"},{"line_number":442,"context_line":"            return"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        if not self._hostutils.check_server_feature("}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_746261da","line":441,"updated":"2015-04-27 13:08:13.000000000","message":"if this method is called, it means that the flavor_extra_specs requires this hyper-v host to have the enable_remotefx flag set to True. Otherwise, the VM will be created with no remoteFX capabilities, which will be useless to the user and he won\u0027t know it without debugging.\n\nThe instance creation should fail. Raise exception.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                          \"in order to use RemoteFX\"))"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        instance_name \u003d instance.name"},{"line_number":451,"context_line":"        LOG.debug(\u0027Configuring RemoteFX for instance: %s\u0027 %"},{"line_number":452,"context_line":"                  instance_name)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        (remotefx_max_resolution, remotefx_monitor_count) \u003d config.split(\u0027,\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_b4afd9e2","line":451,"updated":"2015-04-27 13:08:13.000000000","message":"no need for the %. LOG does that automatically. Just have:\n\n    LOG.debug(\u0027Configuring RemoteFX for instance: %s\u0027,\n              instance_name)","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c5573e32c13986324d11dba030435b3f492f0da","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if not self._hostutils.check_server_feature("},{"line_number":447,"context_line":"                        self._hostutils.FEATURE_RDS_VIRTUALIZATION):"},{"line_number":448,"context_line":"                    raise vmutils.HyperVException("},{"line_number":449,"context_line":"                        _(\"The RDS-Virtualization feature must be installed \""},{"line_number":450,"context_line":"                          \"in order to use RemoteFX\"))"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_30731450","line":448,"updated":"2015-07-28 11:08:58.000000000","message":"the indentation here is dodgy","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"b0e2ed25f08a3bb7d56a6ac6e2bec65abee39ed5","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if not self._hostutils.check_server_feature("},{"line_number":447,"context_line":"                        self._hostutils.FEATURE_RDS_VIRTUALIZATION):"},{"line_number":448,"context_line":"                    raise vmutils.HyperVException("},{"line_number":449,"context_line":"                        _(\"The RDS-Virtualization feature must be installed \""},{"line_number":450,"context_line":"                          \"in order to use RemoteFX\"))"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_984d7b74","line":448,"in_reply_to":"3a50d1a3_30731450","updated":"2015-08-03 10:04:41.000000000","message":"Done","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c5573e32c13986324d11dba030435b3f492f0da","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        remotefx_monitor_count \u003d int(remotefx_monitor_count)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":459,"context_line":"            instance_name,"},{"line_number":460,"context_line":"            remotefx_monitor_count,"},{"line_number":461,"context_line":"            remotefx_max_resolution)"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_d09af061","line":459,"updated":"2015-07-28 11:08:58.000000000","message":"would it be worthwhile using the instance.uuid here?","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"b0e2ed25f08a3bb7d56a6ac6e2bec65abee39ed5","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        remotefx_monitor_count \u003d int(remotefx_monitor_count)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        self._vmutils.enable_remotefx_video_adapter("},{"line_number":459,"context_line":"            instance_name,"},{"line_number":460,"context_line":"            remotefx_monitor_count,"},{"line_number":461,"context_line":"            remotefx_max_resolution)"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_982c9b4b","line":459,"in_reply_to":"3a50d1a3_d09af061","updated":"2015-08-03 10:04:41.000000000","message":"Not really, throughout the Hyper-V driver we use the vm_name to get the vm wmi object. Since the enable_remotefx_video_adapter method (vmutilsv2:L349) only uses the vm WMI object,there is no need for the instance.uuid.","commit_id":"01d30b0e41084aa42cdef92a5be1b12bc1b62443"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1290cad6fc231a26a49d314f9c2ab2615da86b27","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d\u0027Enables RemoteFX. This requires at least one DirectX 11 \u0027"},{"line_number":90,"context_line":"                     \u0027capable graphic adapter for Windows Server 2012 R2 and \u0027"},{"line_number":91,"context_line":"                     \u0027RDS-Virtualization feature has to be enabled\u0027)"},{"line_number":92,"context_line":"]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_67bde2b6","line":91,"updated":"2016-05-20 10:26:20.000000000","message":"this is probably the source of the merge conflict, the config options were moved to nova.conf.","commit_id":"28ac68782354e016d91f9cfba90f7910b50d0222"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    _MEMORY_SETTING_DATA_CLASS \u003d \u0027Msvm_MemorySettingData\u0027"},{"line_number":80,"context_line":"    _STORAGE_ALLOC_SETTING_DATA_CLASS \u003d _RESOURCE_ALLOC_SETTING_DATA_CLASS"},{"line_number":81,"context_line":"    _SYNTHETIC_ETHERNET_PORT_SETTING_DATA_CLASS \u003d ("},{"line_number":82,"context_line":"            \u0027Msvm_SyntheticEthernetPortSettingData\u0027)"},{"line_number":83,"context_line":"    _AFFECTED_JOB_ELEMENT_CLASS \u003d \"Msvm_AffectedJobElement\""},{"line_number":84,"context_line":"    _CIM_RES_ALLOC_SETTING_DATA_CLASS \u003d \u0027Cim_ResourceAllocationSettingData\u0027"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_b4dd9972","line":82,"updated":"2015-04-27 13:08:13.000000000","message":"Too indented.\n\nAlso, change seems unrelated to the blueprint.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"}],"nova/virt/hyperv/vmutilsv2.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e33dd6a927faedbbaac5237038446f1f4ba766f5","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if not synth_3d_video_pool.IsSlatCapable:"},{"line_number":248,"context_line":"            raise vmutils.HyperVException(_(\"To enable RemoteFX on Hyper-V it \""},{"line_number":249,"context_line":"                                            \"is required that the host CPUs \""},{"line_number":250,"context_line":"                                            \"support SLAT\"))"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        vmsettings \u003d vm.associators("},{"line_number":253,"context_line":"            wmi_result_class\u003d\u0027Msvm_VirtualSystemSettingData\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fd%2BA%3D","line":250,"updated":"2013-09-04 13:29:58.000000000","message":"IIUC, 1, this is checking for some specific virt host hardware features, 2. the Hyper-V driver supports live migration of VMs.\n\nSo what happens if this feature is enabled on one host and the VM is migrated to a host lacking this feature. It feels like badness would ensue for the VM and/or connected RDP clients. IOW, if configuration of the VM is dependant on specific host hardware, there needs to be some way to expose this logic to the schedule so it can make sensible decisions when picking a migration target host.","commit_id":"36b00492fdc77d3df5a61f0b177df936477ee435"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"d0bb988258473f95a921d6f8ce1d5e23a01d89c1","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if not synth_3d_video_pool.IsSlatCapable:"},{"line_number":248,"context_line":"            raise vmutils.HyperVException(_(\"To enable RemoteFX on Hyper-V it \""},{"line_number":249,"context_line":"                                            \"is required that the host CPUs \""},{"line_number":250,"context_line":"                                            \"support SLAT\"))"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        vmsettings \u003d vm.associators("},{"line_number":253,"context_line":"            wmi_result_class\u003d\u0027Msvm_VirtualSystemSettingData\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fd30%3D","line":250,"in_reply_to":"AAAASn%2F%2Fd%2BA%3D","updated":"2013-09-04 13:46:56.000000000","message":"This is correct, the live migration would fail in that case. I was thinking about putting RemoteFX enabled hosts in a single cell due to lack of support in the scheduler for custom properties.","commit_id":"36b00492fdc77d3df5a61f0b177df936477ee435"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                                            \"support SLAT\"))"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        vmsettings \u003d vm.associators("},{"line_number":335,"context_line":"            wmi_result_class\u003d\u0027Msvm_VirtualSystemSettingData\u0027)"},{"line_number":336,"context_line":"        rasds \u003d vmsettings[0].associators("},{"line_number":337,"context_line":"            wmi_result_class\u003d\u0027Cim_ResourceAllocationSettingData\u0027)"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_5a3be0d0","line":335,"updated":"2015-01-23 11:55:39.000000000","message":"please use class constant self._VIRTUAL_SYSTEM_SETTING_DATA_CLASS","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        vmsettings \u003d vm.associators("},{"line_number":335,"context_line":"            wmi_result_class\u003d\u0027Msvm_VirtualSystemSettingData\u0027)"},{"line_number":336,"context_line":"        rasds \u003d vmsettings[0].associators("},{"line_number":337,"context_line":"            wmi_result_class\u003d\u0027Cim_ResourceAllocationSettingData\u0027)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        if [r for r in rasds if r.ResourceSubType \u003d\u003d"},{"line_number":340,"context_line":"                self._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_9a3548dc","line":337,"updated":"2015-01-23 11:55:39.000000000","message":"There should be a constant for this too. If not, create it.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            wmi_result_class\u003d\u0027Cim_ResourceAllocationSettingData\u0027)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        if [r for r in rasds if r.ResourceSubType \u003d\u003d"},{"line_number":340,"context_line":"                self._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE]:"},{"line_number":341,"context_line":"            raise vmutils.HyperVException(_(\"RemoteFX is already configured \""},{"line_number":342,"context_line":"                                            \"for this VM\"))"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_df32620f","line":340,"updated":"2015-01-23 11:55:39.000000000","message":"In which cases is this True? If the vm is newly created, it shouldn\u0027t have this resource.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        if [r for r in rasds if r.ResourceSubType \u003d\u003d"},{"line_number":340,"context_line":"                self._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE]:"},{"line_number":341,"context_line":"            raise vmutils.HyperVException(_(\"RemoteFX is already configured \""},{"line_number":342,"context_line":"                                            \"for this VM\"))"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        synth_disp_ctrl_res_list \u003d [r for r in rasds if r.ResourceSubType \u003d\u003d"},{"line_number":345,"context_line":"                                    self._SYNTH_DISP_CTRL_RES_SUB_TYPE]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1f14ea4c","line":342,"updated":"2015-01-23 11:55:39.000000000","message":"raising an exception seems excessive to me. I think this will cause the instance spawn to fail, and the instance to end up in ERROR state, unusable.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        synth_3d_disp_ctrl_res \u003d self._get_new_resource_setting_data("},{"line_number":350,"context_line":"            self._SYNTH_3D_DISP_CTRL_RES_SUB_TYPE,"},{"line_number":351,"context_line":"            \u0027Msvm_Synthetic3DDisplayControllerSettingData\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        synth_3d_disp_ctrl_res.MaximumMonitors \u003d monitor_count"},{"line_number":354,"context_line":"        synth_3d_disp_ctrl_res.MaximumScreenResolution \u003d max_res_value"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_9a1e2862","line":351,"updated":"2015-01-23 11:55:39.000000000","message":"please make this a class constant.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        dx_version \u003d map(int, synth_3d_video_pool.DirectXVersion.split(\u0027.\u0027))"},{"line_number":362,"context_line":"        if dx_version \u003e\u003d [11, 0]:"},{"line_number":363,"context_line":"            s3_disp_ctrl_res.Address \u003d \"02C1,00000000,01\""},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            s3_disp_ctrl_res.Address \u003d \"02C1,00000000,00\""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_7ac09c7c","line":363,"updated":"2015-01-23 11:55:39.000000000","message":"I think those should be constants.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1c5cc318bf90cc1429e04e2a65ee5905d3e00409","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        if dx_version \u003e\u003d [11, 0]:"},{"line_number":363,"context_line":"            s3_disp_ctrl_res.Address \u003d \"02C1,00000000,01\""},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            s3_disp_ctrl_res.Address \u003d \"02C1,00000000,00\""},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        self._modify_virt_resource(s3_disp_ctrl_res, vm.path_())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_3aaa94d4","line":365,"updated":"2015-01-23 11:55:39.000000000","message":"so, RemoteFX with DirectX less than 11 is also supported? If it is, the commit message and config options, exception messages, etc. should be updated accordingly.","commit_id":"f5ac7bf3ee4ecb03a254581bc34b85e23da3810e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    _SYNTH_3D_DISP_CTRL_RES_SUB_TYPE \u003d (\u0027Microsoft:Hyper-V:Synthetic 3D \u0027"},{"line_number":54,"context_line":"                                        \u0027Display Controller\u0027)"},{"line_number":55,"context_line":"    _SYNTH_3D_DISP_ALLOCATION_SETTING_DATA_CLASS \u003d ("},{"line_number":56,"context_line":"            \u0027Msvm_Synthetic3DDisplayControllerSettingData\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    _VIRTUAL_SYSTEM_TYPE_REALIZED \u003d \u0027Microsoft:Hyper-V:System:Realized\u0027"},{"line_number":59,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_14d56542","line":56,"updated":"2015-04-27 13:08:13.000000000","message":"Over indended.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        synth_3d_video_pool \u003d self._conn.Msvm_Synth3dVideoPool()[0]"},{"line_number":352,"context_line":"        if not synth_3d_video_pool.IsGpuCapable:"},{"line_number":353,"context_line":"            raise vmutils.HyperVException(_(\"To enable RemoteFX on Hyper-V at \""},{"line_number":354,"context_line":"                                            \"least one GPU supporting DirectX \""},{"line_number":355,"context_line":"                                            \"11 is required\"))"},{"line_number":356,"context_line":"        if not synth_3d_video_pool.IsSlatCapable:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_5452bdde","line":353,"updated":"2015-04-27 13:08:13.000000000","message":"Missing comma:\n\non Hyper-V, at least...","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7321c902fd096853279f0ee7177a11a998ef67b2","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                                            \"least one GPU supporting DirectX \""},{"line_number":355,"context_line":"                                            \"11 is required\"))"},{"line_number":356,"context_line":"        if not synth_3d_video_pool.IsSlatCapable:"},{"line_number":357,"context_line":"            raise vmutils.HyperVException(_(\"To enable RemoteFX on Hyper-V it \""},{"line_number":358,"context_line":"                                            \"is required that the host CPUs \""},{"line_number":359,"context_line":"                                            \"support SLAT\"))"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abe1de1_f45791c8","line":357,"updated":"2015-04-27 13:08:13.000000000","message":"ditto.","commit_id":"55af8ca951a980e62724535caef5ab36dc9fe5dc"}]}
