)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":2469,"context_line":"            post_claim_md \u003d drvr.post_claim_migrate_data("},{"line_number":2470,"context_line":"                self.context, instance, md, claim)"},{"line_number":2471,"context_line":"            self.assertEqual(post_claim_md.dst_numa_info, numa_info)"},{"line_number":2472,"context_line":"            # NOTE(artom) instance.image_meta is actually a @property method"},{"line_number":2473,"context_line":"            # that returns a new object every time, so we can\u0027t use it in the"},{"line_number":2474,"context_line":"            # following call assertion."},{"line_number":2475,"context_line":"            mock_get_lm_numa_info.assert_called_with("}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_185a0e1d","line":2472,"range":{"start_line":2472,"start_character":26,"end_line":2472,"end_character":34},"updated":"2019-09-05 19:26:03.000000000","message":"If you used claim.image_meta you wouldn\u0027t have this problem, but no need to change the runtime code for this test weirdness. I\u0027ve had the same problem stubbing out stuff that relies on instance.image_meta.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":2473,"context_line":"            # that returns a new object every time, so we can\u0027t use it in the"},{"line_number":2474,"context_line":"            # following call assertion."},{"line_number":2475,"context_line":"            mock_get_lm_numa_info.assert_called_with("},{"line_number":2476,"context_line":"                claimed_numa_topology, instance.flavor, mock.ANY)"},{"line_number":2477,"context_line":""},{"line_number":2478,"context_line":"    @mock.patch.object(hardware, \u0027get_vcpu_pin_set\u0027, new\u003dmock.Mock())"},{"line_number":2479,"context_line":"    def test_get_live_migrate_numa_info(self):"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_586406e5","line":2476,"range":{"start_line":2476,"start_character":56,"end_line":2476,"end_character":64},"updated":"2019-09-05 19:26:03.000000000","message":"You could at least use test.MatchType(objects.ImageMeta).","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":2473,"context_line":"            # that returns a new object every time, so we can\u0027t use it in the"},{"line_number":2474,"context_line":"            # following call assertion."},{"line_number":2475,"context_line":"            mock_get_lm_numa_info.assert_called_with("},{"line_number":2476,"context_line":"                claimed_numa_topology, instance.flavor, mock.ANY)"},{"line_number":2477,"context_line":""},{"line_number":2478,"context_line":"    @mock.patch.object(hardware, \u0027get_vcpu_pin_set\u0027, new\u003dmock.Mock())"},{"line_number":2479,"context_line":"    def test_get_live_migrate_numa_info(self):"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_0b086126","line":2476,"range":{"start_line":2476,"start_character":56,"end_line":2476,"end_character":64},"in_reply_to":"7faddb67_586406e5","updated":"2019-09-05 23:57:30.000000000","message":"So while trying to get RPC pinning to work correctly in functional tests, I discovered PropertyMock, it\u0027s useful here.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":2521,"context_line":""},{"line_number":2522,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2523,"context_line":"                               return_value\u003dguest_numa_config):"},{"line_number":2524,"context_line":"            self.assertEqual("},{"line_number":2525,"context_line":"                drvr._get_live_migrate_numa_info("},{"line_number":2526,"context_line":"                    \u0027fake-instance-numa-topology\u0027,"},{"line_number":2527,"context_line":"                    \u0027fake-flavor\u0027, \u0027fake-image-meta\u0027).obj_to_primitive(),"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_7879c27f","line":2524,"range":{"start_line":2524,"start_character":17,"end_line":2524,"end_character":28},"updated":"2019-09-05 19:26:03.000000000","message":"nit: swap the order of the args (expected, actual)","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":2521,"context_line":""},{"line_number":2522,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2523,"context_line":"                               return_value\u003dguest_numa_config):"},{"line_number":2524,"context_line":"            self.assertEqual("},{"line_number":2525,"context_line":"                drvr._get_live_migrate_numa_info("},{"line_number":2526,"context_line":"                    \u0027fake-instance-numa-topology\u0027,"},{"line_number":2527,"context_line":"                    \u0027fake-flavor\u0027, \u0027fake-image-meta\u0027).obj_to_primitive(),"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_2b0d1d37","line":2524,"range":{"start_line":2524,"start_character":17,"end_line":2524,"end_character":28},"in_reply_to":"7faddb67_7879c27f","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":2533,"context_line":"        guest_numa_config \u003d (None, None, None, None)"},{"line_number":2534,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2535,"context_line":"                               return_value\u003dguest_numa_config):"},{"line_number":2536,"context_line":"            self.assertEqual("},{"line_number":2537,"context_line":"                drvr._get_live_migrate_numa_info("},{"line_number":2538,"context_line":"                    \u0027fake-instance-numa-topology\u0027,"},{"line_number":2539,"context_line":"                    \u0027fake-flavor\u0027, \u0027fake-image-meta\u0027).obj_to_primitive(),"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_d89d56bb","line":2536,"range":{"start_line":2536,"start_character":17,"end_line":2536,"end_character":28},"updated":"2019-09-05 19:26:03.000000000","message":"same","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":2533,"context_line":"        guest_numa_config \u003d (None, None, None, None)"},{"line_number":2534,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2535,"context_line":"                               return_value\u003dguest_numa_config):"},{"line_number":2536,"context_line":"            self.assertEqual("},{"line_number":2537,"context_line":"                drvr._get_live_migrate_numa_info("},{"line_number":2538,"context_line":"                    \u0027fake-instance-numa-topology\u0027,"},{"line_number":2539,"context_line":"                    \u0027fake-flavor\u0027, \u0027fake-image-meta\u0027).obj_to_primitive(),"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_6b2c7599","line":2536,"range":{"start_line":2536,"start_character":17,"end_line":2536,"end_character":28},"in_reply_to":"7faddb67_d89d56bb","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48f14981dbce039dda22bde7854c49c5180d8e9d","unresolved":false,"context_lines":[{"line_number":2475,"context_line":"            post_claim_md \u003d drvr.post_claim_migrate_data("},{"line_number":2476,"context_line":"                self.context, instance, md, claim)"},{"line_number":2477,"context_line":"            self.assertEqual(post_claim_md.dst_numa_info, numa_info)"},{"line_number":2478,"context_line":"            # NOTE(artom) instance.image_meta is actually a @property method"},{"line_number":2479,"context_line":"            # that returns a new object every time, so we can\u0027t use it in the"},{"line_number":2480,"context_line":"            # following call assertion."},{"line_number":2481,"context_line":"            mock_get_lm_numa_info.assert_called_with("},{"line_number":2482,"context_line":"                claimed_numa_topology, instance.flavor, \u0027fake-image-meta\u0027)"},{"line_number":2483,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5faad753_89699d26","line":2480,"range":{"start_line":2478,"start_character":12,"end_line":2480,"end_character":39},"updated":"2019-09-07 18:31:09.000000000","message":"Still need this?","commit_id":"fd66653f714b3c91080028ca8b02fbd3d33d5f4f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8888f55250af18b52f37e777d9fe9a3979819482","unresolved":false,"context_lines":[{"line_number":2475,"context_line":"            post_claim_md \u003d drvr.post_claim_migrate_data("},{"line_number":2476,"context_line":"                self.context, instance, md, claim)"},{"line_number":2477,"context_line":"            self.assertEqual(post_claim_md.dst_numa_info, numa_info)"},{"line_number":2478,"context_line":"            # NOTE(artom) instance.image_meta is actually a @property method"},{"line_number":2479,"context_line":"            # that returns a new object every time, so we can\u0027t use it in the"},{"line_number":2480,"context_line":"            # following call assertion."},{"line_number":2481,"context_line":"            mock_get_lm_numa_info.assert_called_with("},{"line_number":2482,"context_line":"                claimed_numa_topology, instance.flavor, \u0027fake-image-meta\u0027)"},{"line_number":2483,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5faad753_6c5f8f41","line":2480,"range":{"start_line":2478,"start_character":12,"end_line":2480,"end_character":39},"in_reply_to":"5faad753_89699d26","updated":"2019-09-07 23:28:33.000000000","message":"Nope, forgot to take it out.","commit_id":"fd66653f714b3c91080028ca8b02fbd3d33d5f4f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":2464,"context_line":"        claim.claimed_numa_topology \u003d claimed_numa_topology"},{"line_number":2465,"context_line":"        claim.instance_type \u003d instance.flavor"},{"line_number":2466,"context_line":"        numa_info \u003d objects.LibvirtLiveMigrateNUMAInfo()"},{"line_number":2467,"context_line":"        with test.nested("},{"line_number":2468,"context_line":"            mock.patch.object(drvr, \u0027_get_live_migrate_numa_info\u0027,"},{"line_number":2469,"context_line":"                              return_value\u003dnuma_info),"},{"line_number":2470,"context_line":"            mock.patch(\u0027nova.objects.Instance.image_meta\u0027,"},{"line_number":2471,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":2472,"context_line":"                       return_value\u003d\u0027fake-image-meta\u0027)"},{"line_number":2473,"context_line":"        ) as (mock_get_lm_numa_info, mock_image_meta):"},{"line_number":2474,"context_line":"            claim.image_meta \u003d instance.image_meta"},{"line_number":2475,"context_line":"            post_claim_md \u003d drvr.post_claim_migrate_data("},{"line_number":2476,"context_line":"                self.context, instance, md, claim)"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_639227f9","line":2473,"range":{"start_line":2467,"start_character":6,"end_line":2473,"end_character":54},"updated":"2019-09-09 20:58:28.000000000","message":"nit: i would prefer to read the decorator form but this should work correctly too. although the fewer uses of test.nested the fewer we will have to update when we eventually remove it after we drop python 2 supprot","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":2484,"context_line":"        expected_nmd \u003d objects.LibvirtLiveMigrateNUMAInfo("},{"line_number":2485,"context_line":"            allocation_cpu_pins\u003dset([0, 1]))"},{"line_number":2486,"context_line":"        guest_numa_config \u003d (set([0, 1]), None, None, None)"},{"line_number":2487,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2488,"context_line":"                               return_value\u003dguest_numa_config):"},{"line_number":2489,"context_line":"            self.assertEqual("},{"line_number":2490,"context_line":"                expected_nmd.obj_to_primitive(),"},{"line_number":2491,"context_line":"                drvr._get_live_migrate_numa_info("}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_837de3b2","line":2488,"range":{"start_line":2487,"start_character":0,"end_line":2488,"end_character":63},"updated":"2019-09-09 20:58:28.000000000","message":"nit: again you could have just mocked this as a decorator above and avoid the extra indentaion below but we do use both forms so i guess its fine.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":2496,"context_line":"    def test_get_live_migrate_numa_info_tuning_cpu_pins(self):"},{"line_number":2497,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":2498,"context_line":""},{"line_number":2499,"context_line":"        vcpupin1 \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUPin()"},{"line_number":2500,"context_line":"        vcpupin1.id \u003d 0"},{"line_number":2501,"context_line":"        vcpupin1.cpuset \u003d set([0, 1])"},{"line_number":2502,"context_line":"        vcpupin2 \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUPin()"},{"line_number":2503,"context_line":"        vcpupin2.id \u003d 1"},{"line_number":2504,"context_line":"        vcpupin2.cpuset \u003d set([2, 3])"},{"line_number":2505,"context_line":"        emulatorpin \u003d vconfig.LibvirtConfigGuestCPUTuneEmulatorPin()"},{"line_number":2506,"context_line":"        emulatorpin.cpuset \u003d set([4, 5])"},{"line_number":2507,"context_line":"        guest_cpu_tune \u003d vconfig.LibvirtConfigGuestCPUTune()"},{"line_number":2508,"context_line":"        guest_cpu_tune.vcpupin \u003d [vcpupin1, vcpupin2]"},{"line_number":2509,"context_line":"        guest_cpu_tune.emulatorpin \u003d emulatorpin"},{"line_number":2510,"context_line":"        guest_cpu_tune.vcpusched \u003d ["},{"line_number":2511,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneVCPUSched()]"},{"line_number":2512,"context_line":"        guest_cpu_tune.vcpusched[0].vcpus \u003d set([6, 7])"},{"line_number":2513,"context_line":"        guest_cpu_tune.vcpusched[0].priority \u003d 8"},{"line_number":2514,"context_line":""},{"line_number":2515,"context_line":"        memnode1 \u003d vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":2516,"context_line":"        memnode1.cellid \u003d 2"},{"line_number":2517,"context_line":"        memnode1.nodeset \u003d [6, 7]"},{"line_number":2518,"context_line":"        memnode2 \u003d vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":2519,"context_line":"        memnode2.cellid \u003d 3"},{"line_number":2520,"context_line":"        memnode2.nodeset \u003d [8, 9]"},{"line_number":2521,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"},{"line_number":2522,"context_line":"        guest_numa_tune.memnodes \u003d [memnode1, memnode2]"},{"line_number":2523,"context_line":""},{"line_number":2524,"context_line":"        expected_nmd \u003d objects.LibvirtLiveMigrateNUMAInfo("},{"line_number":2525,"context_line":"            tuning_cpu_pins\u003d{\u00270\u0027: set([0, 1]), \u00271\u0027: set([2, 3])},"},{"line_number":2526,"context_line":"            cell_pins\u003d{\u00272\u0027: set([6, 7]), \u00273\u0027: set([8, 9])},"},{"line_number":2527,"context_line":"            emulator_pins\u003dset([4, 5]),"},{"line_number":2528,"context_line":"            sched_vcpus\u003dset([7, 6]),"},{"line_number":2529,"context_line":"            sched_priority\u003d8)"},{"line_number":2530,"context_line":""},{"line_number":2531,"context_line":"        # NOTE(artom) This is a"},{"line_number":2532,"context_line":"        # (cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune)"},{"line_number":2533,"context_line":"        # tuple. See _get_guest_numa_config() docstring for full documenation."},{"line_number":2534,"context_line":"        # _get_live_migrate_numa_info() only cares about guest_cpu_tune for CPU"},{"line_number":2535,"context_line":"        # pinning and emulator thread pinning, and guest_numa_tune for cell"},{"line_number":2536,"context_line":"        # pinning; so only include those 2 in the tuple."},{"line_number":2537,"context_line":"        guest_numa_config \u003d (None, guest_cpu_tune, None, guest_numa_tune)"},{"line_number":2538,"context_line":""},{"line_number":2539,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2540,"context_line":"                               return_value\u003dguest_numa_config):"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_167613a6","line":2537,"range":{"start_line":2499,"start_character":6,"end_line":2537,"end_character":73},"updated":"2019-09-09 20:58:28.000000000","message":"this does not really fell like it should be in this function\n\nim not goign to push back on this too much but i dont like seeing thest of the xml generation in driver if they can be tested seperately in the config or designer test.\n\nin this case i think the constuction of the numa config should really be testin a sperate test of \n_get_guest_numa_config\n\nand here we shoudl just attest that it is called with the correct parmaters. that said i guess any test are bettter then none.\n\nalso can you move \"expected_nmd\"\n\nafter guest_numa_config\n\nits really had to see it burried in the middle.\nit does not use any of the other element you created and it is not part of guest_numa_config so its curret postioning is just confusing.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e6af9bd3d9cd001cba184ab91161df0bdd17c83b","unresolved":false,"context_lines":[{"line_number":2496,"context_line":"    def test_get_live_migrate_numa_info_tuning_cpu_pins(self):"},{"line_number":2497,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":2498,"context_line":""},{"line_number":2499,"context_line":"        vcpupin1 \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUPin()"},{"line_number":2500,"context_line":"        vcpupin1.id \u003d 0"},{"line_number":2501,"context_line":"        vcpupin1.cpuset \u003d set([0, 1])"},{"line_number":2502,"context_line":"        vcpupin2 \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUPin()"},{"line_number":2503,"context_line":"        vcpupin2.id \u003d 1"},{"line_number":2504,"context_line":"        vcpupin2.cpuset \u003d set([2, 3])"},{"line_number":2505,"context_line":"        emulatorpin \u003d vconfig.LibvirtConfigGuestCPUTuneEmulatorPin()"},{"line_number":2506,"context_line":"        emulatorpin.cpuset \u003d set([4, 5])"},{"line_number":2507,"context_line":"        guest_cpu_tune \u003d vconfig.LibvirtConfigGuestCPUTune()"},{"line_number":2508,"context_line":"        guest_cpu_tune.vcpupin \u003d [vcpupin1, vcpupin2]"},{"line_number":2509,"context_line":"        guest_cpu_tune.emulatorpin \u003d emulatorpin"},{"line_number":2510,"context_line":"        guest_cpu_tune.vcpusched \u003d ["},{"line_number":2511,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneVCPUSched()]"},{"line_number":2512,"context_line":"        guest_cpu_tune.vcpusched[0].vcpus \u003d set([6, 7])"},{"line_number":2513,"context_line":"        guest_cpu_tune.vcpusched[0].priority \u003d 8"},{"line_number":2514,"context_line":""},{"line_number":2515,"context_line":"        memnode1 \u003d vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":2516,"context_line":"        memnode1.cellid \u003d 2"},{"line_number":2517,"context_line":"        memnode1.nodeset \u003d [6, 7]"},{"line_number":2518,"context_line":"        memnode2 \u003d vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":2519,"context_line":"        memnode2.cellid \u003d 3"},{"line_number":2520,"context_line":"        memnode2.nodeset \u003d [8, 9]"},{"line_number":2521,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"},{"line_number":2522,"context_line":"        guest_numa_tune.memnodes \u003d [memnode1, memnode2]"},{"line_number":2523,"context_line":""},{"line_number":2524,"context_line":"        expected_nmd \u003d objects.LibvirtLiveMigrateNUMAInfo("},{"line_number":2525,"context_line":"            tuning_cpu_pins\u003d{\u00270\u0027: set([0, 1]), \u00271\u0027: set([2, 3])},"},{"line_number":2526,"context_line":"            cell_pins\u003d{\u00272\u0027: set([6, 7]), \u00273\u0027: set([8, 9])},"},{"line_number":2527,"context_line":"            emulator_pins\u003dset([4, 5]),"},{"line_number":2528,"context_line":"            sched_vcpus\u003dset([7, 6]),"},{"line_number":2529,"context_line":"            sched_priority\u003d8)"},{"line_number":2530,"context_line":""},{"line_number":2531,"context_line":"        # NOTE(artom) This is a"},{"line_number":2532,"context_line":"        # (cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune)"},{"line_number":2533,"context_line":"        # tuple. See _get_guest_numa_config() docstring for full documenation."},{"line_number":2534,"context_line":"        # _get_live_migrate_numa_info() only cares about guest_cpu_tune for CPU"},{"line_number":2535,"context_line":"        # pinning and emulator thread pinning, and guest_numa_tune for cell"},{"line_number":2536,"context_line":"        # pinning; so only include those 2 in the tuple."},{"line_number":2537,"context_line":"        guest_numa_config \u003d (None, guest_cpu_tune, None, guest_numa_tune)"},{"line_number":2538,"context_line":""},{"line_number":2539,"context_line":"        with mock.patch.object(drvr, \u0027_get_guest_numa_config\u0027,"},{"line_number":2540,"context_line":"                               return_value\u003dguest_numa_config):"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_652b0794","line":2537,"range":{"start_line":2499,"start_character":6,"end_line":2537,"end_character":73},"in_reply_to":"5faad753_167613a6","updated":"2019-09-10 02:29:21.000000000","message":"The test is L2542, everything else is just building up the inputs (guest_cpu_tune, guest_numa_tube) and expected outputs (expected_nmd).","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"}],"nova/tests/unit/virt/libvirt/test_migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":155,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_update_numa_xml_only_cpu_pinning(self):"},{"line_number":158,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":159,"context_line":"            \u003cdomain\u003e"},{"line_number":160,"context_line":"                \u003ccputune\u003e"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_b82adae3","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":45},"updated":"2019-09-05 19:26:03.000000000","message":"What about a test like this but where cputune isn\u0027t set but numatune is? They are exclusive right?","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e16495663c3d0aee3fe4c7591dd1e7425a3b6f3f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":155,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_update_numa_xml_only_cpu_pinning(self):"},{"line_number":158,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":159,"context_line":"            \u003cdomain\u003e"},{"line_number":160,"context_line":"                \u003ccputune\u003e"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_ee0e3331","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":45},"in_reply_to":"5faad753_6b51d50e","updated":"2019-09-06 00:31:38.000000000","message":"\u003clater\u003e Looking at _get_guest_numa_config in the libvirt driver, I\u0027m not even sure ^^ is right. It looks like it\u0027s all or nothing. \n\nIs also made me notice another thing. If we set vcpu_pin_set to some list, and an instance with no NUMA topology lands on that host, it won\u0027t have cputune in the XML, it\u0027ll use [1]-style pinning. I\u0027m talking about the case described in [2], with the code in [3].\n\nIn the gate, vcpu_pin_set is None, which causes guest.cpuset to be None in [4], so no cpuset attribute gets generated, but I assume there are deployments out there booting instances without NUMA on hosts with vcpu_pin_set, so I need to handle live migrating them correctly.\n\n[1] https://libvirt.org/formatdomain.html#elementsCPUAllocation\n[2] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4525-L4528\n[3] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4557-L4563\n[4] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/config.py#L2587-L2592","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":155,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_update_numa_xml_only_cpu_pinning(self):"},{"line_number":158,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":159,"context_line":"            \u003cdomain\u003e"},{"line_number":160,"context_line":"                \u003ccputune\u003e"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_6b51d50e","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":45},"in_reply_to":"7faddb67_b82adae3","updated":"2019-09-05 23:57:30.000000000","message":"No - if you just use hw:cpu_pinning\u003ddedicated, you\u0027ll get only CPU pinning. But if you have cell pinning to allocate backing host memory from specific NUMA cells, you\u0027ll also get CPU pinning to confine guest CPUs to host CPUs from those cells.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertEqual(1, mock_tostring.called)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_update_numa_xml_allocation_cpu_pins(self):"},{"line_number":120,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":121,"context_line":"            \u003cdomain\u003e"},{"line_number":122,"context_line":"                \u003cvcpu\u003e2\u003c/vcpu\u003e"},{"line_number":123,"context_line":"            \u003c/domain\u003e\"\"\")"},{"line_number":124,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":125,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("},{"line_number":126,"context_line":"            dst_numa_info\u003dobjects.LibvirtLiveMigrateNUMAInfo("},{"line_number":127,"context_line":"                allocation_cpu_pins\u003dset([0, 1])))"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_f6181782","line":124,"range":{"start_line":120,"start_character":8,"end_line":124,"end_character":35},"updated":"2019-09-09 20:58:28.000000000","message":"as noted below texwar.dedent is not need here and jsut add noise.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                                        data),"},{"line_number":130,"context_line":"                             encoding\u003d\u0027unicode\u0027)"},{"line_number":131,"context_line":"        doc.find(\u0027./vcpu\u0027).set(\u0027cpuset\u0027, \u00270-1\u0027)"},{"line_number":132,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_update_numa_xml_tuning_cpu_pins(self):"},{"line_number":135,"context_line":"        xml \u003d textwrap.dedent(\"\"\""}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_36eeaf22","line":132,"range":{"start_line":132,"start_character":63,"end_line":132,"end_character":70},"updated":"2019-09-09 20:58:28.000000000","message":"nit: we probably shoudl default to utf-8 rather then unicode but it wont make a difference in this case.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e6af9bd3d9cd001cba184ab91161df0bdd17c83b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                                        data),"},{"line_number":130,"context_line":"                             encoding\u003d\u0027unicode\u0027)"},{"line_number":131,"context_line":"        doc.find(\u0027./vcpu\u0027).set(\u0027cpuset\u0027, \u00270-1\u0027)"},{"line_number":132,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_update_numa_xml_tuning_cpu_pins(self):"},{"line_number":135,"context_line":"        xml \u003d textwrap.dedent(\"\"\""}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_8dff4900","line":132,"range":{"start_line":132,"start_character":63,"end_line":132,"end_character":70},"in_reply_to":"5faad753_36eeaf22","updated":"2019-09-10 02:29:21.000000000","message":"It\u0027s unicode pretty much everywhere else","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_update_numa_xml_tuning_cpu_pins(self):"},{"line_number":135,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":136,"context_line":"            \u003cdomain\u003e"},{"line_number":137,"context_line":"                \u003ccputune\u003e"},{"line_number":138,"context_line":"                    \u003cvcpupin vcpu\u003d\"0\" cpuset\u003d\"0,1,2,^2\"/\u003e"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_b65cdf4b","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":29},"updated":"2019-09-09 20:58:28.000000000","message":"you dont need this since we parse this on line 149\nwe never atully us xml directly after that point so all fomating is lost at that point.\n\nassertXMLEquals also ignore whitepsace by defualt. between elements","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def test_update_numa_xml_tuning_cpu_pins(self):"},{"line_number":135,"context_line":"        xml \u003d textwrap.dedent(\"\"\""},{"line_number":136,"context_line":"            \u003cdomain\u003e"},{"line_number":137,"context_line":"                \u003ccputune\u003e"},{"line_number":138,"context_line":"                    \u003cvcpupin vcpu\u003d\"0\" cpuset\u003d\"0,1,2,^2\"/\u003e"},{"line_number":139,"context_line":"                    \u003cvcpupin vcpu\u003d\"1\" cpuset\u003d\"2-4,^4\"/\u003e"},{"line_number":140,"context_line":"                    \u003cemulatorpin cpuset\u003d\"8-10,^8\"/\u003e"},{"line_number":141,"context_line":"                    \u003cvcpusched vcpus\u003d\"10-12,^12\" priority\u003d\"13\"/\u003e"},{"line_number":142,"context_line":"                \u003c/cputune\u003e"},{"line_number":143,"context_line":"                \u003cnumatune\u003e"},{"line_number":144,"context_line":"                    \u003cmemory nodeset\u003d\"4,5,6,7\"/\u003e"},{"line_number":145,"context_line":"                    \u003cmemnode cellid\u003d\"2\" nodeset\u003d\"4-6,^6\"/\u003e"},{"line_number":146,"context_line":"                    \u003cmemnode cellid\u003d\"3\" nodeset\u003d\"6-8,^8\"/\u003e"},{"line_number":147,"context_line":"                \u003c/numatune\u003e"},{"line_number":148,"context_line":"            \u003c/domain\u003e\"\"\")"},{"line_number":149,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":150,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_1637f3b2","line":147,"range":{"start_line":137,"start_character":13,"end_line":147,"end_character":27},"updated":"2019-09-09 20:58:28.000000000","message":"nit it would be nice to use realistic values but i guess this is  ok.\n\n8 numa node systems exist but its not that common.\n\ne.g. quad socket intel high core count skus or dual socket amd eypc gen1 plathforms have 8 numa nodes if the reight bios settes are enabled but most systems are 1-4\n\nwe also wont generate xml that  only pinned guest numa node 2 and 3 allow owing guest numa node 0 and 1 to fall back to the memory elemnt for pinning.\n\nthese look like example form libvirt rather then nova so you are asserting behavior about toplogy we wont generate.\n\nwe shoudl be able to haneld these more extream edgecase but i dont link using only data that does not map to what we generate","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        res \u003d etree.tostring(migration._update_numa_xml(copy.deepcopy(doc),"},{"line_number":160,"context_line":"                                                        data),"},{"line_number":161,"context_line":"                             encoding\u003d\u0027unicode\u0027)"},{"line_number":162,"context_line":"        doc.find(\u0027./cputune/vcpupin/[@vcpu\u003d\"0\"]\u0027).set(\u0027cpuset\u0027, \u002710-11\u0027)"},{"line_number":163,"context_line":"        doc.find(\u0027./cputune/vcpupin/[@vcpu\u003d\"1\"]\u0027).set(\u0027cpuset\u0027, \u002712-13\u0027)"},{"line_number":164,"context_line":"        doc.find(\u0027./cputune/emulatorpin\u0027).set(\u0027cpuset\u0027, \u002718-19\u0027)"},{"line_number":165,"context_line":"        doc.find(\u0027./cputune/vcpusched\u0027).set(\u0027vcpus\u0027, \u002720-21\u0027)"},{"line_number":166,"context_line":"        doc.find(\u0027./cputune/vcpusched\u0027).set(\u0027priority\u0027, \u002722\u0027)"},{"line_number":167,"context_line":"        doc.find(\u0027./numatune/memory\u0027).set(\u0027nodeset\u0027, \u002714-17\u0027)"},{"line_number":168,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"2\"]\u0027).set(\u0027nodeset\u0027, \u002714-15\u0027)"},{"line_number":169,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":170,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_update_numa_xml_no_updates(self):"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_16be1365","line":169,"range":{"start_line":162,"start_character":7,"end_line":169,"end_character":76},"updated":"2019-09-09 20:58:28.000000000","message":"just replace this with the update xml that you expect to have.\n\n\ndoing a quick eyeball diff of the xml fragment\nLibvirtLiveMigrateNUMAInfo and this i belive it is asserting the correct behavior this just is a much more complicated way to do it then you could have done.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e6af9bd3d9cd001cba184ab91161df0bdd17c83b","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        res \u003d etree.tostring(migration._update_numa_xml(copy.deepcopy(doc),"},{"line_number":160,"context_line":"                                                        data),"},{"line_number":161,"context_line":"                             encoding\u003d\u0027unicode\u0027)"},{"line_number":162,"context_line":"        doc.find(\u0027./cputune/vcpupin/[@vcpu\u003d\"0\"]\u0027).set(\u0027cpuset\u0027, \u002710-11\u0027)"},{"line_number":163,"context_line":"        doc.find(\u0027./cputune/vcpupin/[@vcpu\u003d\"1\"]\u0027).set(\u0027cpuset\u0027, \u002712-13\u0027)"},{"line_number":164,"context_line":"        doc.find(\u0027./cputune/emulatorpin\u0027).set(\u0027cpuset\u0027, \u002718-19\u0027)"},{"line_number":165,"context_line":"        doc.find(\u0027./cputune/vcpusched\u0027).set(\u0027vcpus\u0027, \u002720-21\u0027)"},{"line_number":166,"context_line":"        doc.find(\u0027./cputune/vcpusched\u0027).set(\u0027priority\u0027, \u002722\u0027)"},{"line_number":167,"context_line":"        doc.find(\u0027./numatune/memory\u0027).set(\u0027nodeset\u0027, \u002714-17\u0027)"},{"line_number":168,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"2\"]\u0027).set(\u0027nodeset\u0027, \u002714-15\u0027)"},{"line_number":169,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":170,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_update_numa_xml_no_updates(self):"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_ad024508","line":169,"range":{"start_line":162,"start_character":7,"end_line":169,"end_character":76},"in_reply_to":"5faad753_16be1365","updated":"2019-09-10 02:29:21.000000000","message":"Yeah, I should have done that.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        doc.find(\u0027./numatune/memory\u0027).set(\u0027nodeset\u0027, \u002714-17\u0027)"},{"line_number":168,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"2\"]\u0027).set(\u0027nodeset\u0027, \u002714-15\u0027)"},{"line_number":169,"context_line":"        doc.find(\u0027./numatune/memnode/[@cellid\u003d\"3\"]\u0027).set(\u0027nodeset\u0027, \u002716-17\u0027)"},{"line_number":170,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_update_numa_xml_no_updates(self):"},{"line_number":173,"context_line":"        xml \u003d textwrap.dedent(\"\"\""}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_5607ab1d","line":170,"range":{"start_line":170,"start_character":28,"end_line":170,"end_character":32},"updated":"2019-09-09 20:58:28.000000000","message":"i then pass expected here \n\nthis is expect,actual as far as i know so i think you have this reversed.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        res \u003d etree.tostring(migration._update_numa_xml(copy.deepcopy(doc),"},{"line_number":194,"context_line":"                                                        data),"},{"line_number":195,"context_line":"                             encoding\u003d\u0027unicode\u0027)"},{"line_number":196,"context_line":"        self.assertXmlEqual(res, etree.tostring(doc, encoding\u003d\u0027unicode\u0027))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_update_serial_xml_serial(self):"},{"line_number":199,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_79197877","line":196,"range":{"start_line":196,"start_character":32,"end_line":196,"end_character":72},"updated":"2019-09-09 20:58:28.000000000","message":"this is the same as the xml variable\nmodulo possible the xml encodeing stiring which you could just add.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"60916799e04fe665c56693bbc577c3ac67258e52","unresolved":false,"context_lines":[{"line_number":857,"context_line":""},{"line_number":858,"context_line":"    def test_post_claim_migrate_data(self):"},{"line_number":859,"context_line":"        self.assertEqual("},{"line_number":860,"context_line":"            self.connection.post_claim_migrate_data("},{"line_number":861,"context_line":"                \u0027fake-context\u0027, \u0027fake-instance\u0027, \u0027fake-migrate-data\u0027,"},{"line_number":862,"context_line":"                \u0027fake-claim\u0027),"},{"line_number":863,"context_line":"            \u0027fake-migrate-data\u0027)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"class FakeConnectionTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_7e730e4f","line":863,"range":{"start_line":860,"start_character":0,"end_line":863,"end_character":32},"updated":"2019-09-04 14:32:51.000000000","message":"This is backwards.. Should be (expected, actual).","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e16495663c3d0aee3fe4c7591dd1e7425a3b6f3f","unresolved":false,"context_lines":[{"line_number":857,"context_line":""},{"line_number":858,"context_line":"    def test_post_claim_migrate_data(self):"},{"line_number":859,"context_line":"        self.assertEqual("},{"line_number":860,"context_line":"            self.connection.post_claim_migrate_data("},{"line_number":861,"context_line":"                \u0027fake-context\u0027, \u0027fake-instance\u0027, \u0027fake-migrate-data\u0027,"},{"line_number":862,"context_line":"                \u0027fake-claim\u0027),"},{"line_number":863,"context_line":"            \u0027fake-migrate-data\u0027)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"class FakeConnectionTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_0e214fa0","line":863,"range":{"start_line":860,"start_character":0,"end_line":863,"end_character":32},"in_reply_to":"7faddb67_7e730e4f","updated":"2019-09-06 00:31:38.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"}],"nova/virt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        operation, after resources have been claimed on it."},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"        :param context: The request context."},{"line_number":1254,"context_line":"        :param instance: The instance being-live migrated."},{"line_number":1255,"context_line":"        :param migrate_data: The existing LiveMigrateData object for this live"},{"line_number":1256,"context_line":"                             migration."},{"line_number":1257,"context_line":"        :param claim: The Claim that was made on the destination for this live"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_fd17e444","line":1254,"range":{"start_line":1254,"start_character":38,"end_line":1254,"end_character":57},"updated":"2019-09-05 19:26:03.000000000","message":"nit: being live-migrated","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        operation, after resources have been claimed on it."},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"        :param context: The request context."},{"line_number":1254,"context_line":"        :param instance: The instance being-live migrated."},{"line_number":1255,"context_line":"        :param migrate_data: The existing LiveMigrateData object for this live"},{"line_number":1256,"context_line":"                             migration."},{"line_number":1257,"context_line":"        :param claim: The Claim that was made on the destination for this live"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_0bcb81a5","line":1254,"range":{"start_line":1254,"start_character":38,"end_line":1254,"end_character":57},"in_reply_to":"7faddb67_fd17e444","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"        :param instance: The instance being-live migrated."},{"line_number":1255,"context_line":"        :param migrate_data: The existing LiveMigrateData object for this live"},{"line_number":1256,"context_line":"                             migration."},{"line_number":1257,"context_line":"        :param claim: The Claim that was made on the destination for this live"},{"line_number":1258,"context_line":"                      migration."},{"line_number":1259,"context_line":"        :returns: A LiveMigrateData object augmented with information obtained"},{"line_number":1260,"context_line":"                  from the Claim."}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_dd2a287c","line":1257,"range":{"start_line":1257,"start_character":26,"end_line":1257,"end_character":31},"updated":"2019-09-05 19:26:03.000000000","message":"nit: technically a MoveClaim","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"        :param instance: The instance being-live migrated."},{"line_number":1255,"context_line":"        :param migrate_data: The existing LiveMigrateData object for this live"},{"line_number":1256,"context_line":"                             migration."},{"line_number":1257,"context_line":"        :param claim: The Claim that was made on the destination for this live"},{"line_number":1258,"context_line":"                      migration."},{"line_number":1259,"context_line":"        :returns: A LiveMigrateData object augmented with information obtained"},{"line_number":1260,"context_line":"                  from the Claim."}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_cbc48995","line":1257,"range":{"start_line":1257,"start_character":26,"end_line":1257,"end_character":31},"in_reply_to":"7faddb67_dd2a287c","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9c433d03141adf4363dcae5d5dd70f792b47968c","unresolved":false,"context_lines":[{"line_number":7361,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7362,"context_line":""},{"line_number":7363,"context_line":"            if guest_cpu_tune.vcpusched:"},{"line_number":7364,"context_line":"                # NOTE(artom) vcpushced is a list, but there\u0027s only ever one"},{"line_number":7365,"context_line":"                # element in it (see _get_guest_numa_config under"},{"line_number":7366,"context_line":"                # wants_realtime)"},{"line_number":7367,"context_line":"                info.sched_vcpus \u003d guest_cpu_tune.vcpusched[0].vcpus"}],"source_content_type":"text/x-python","patch_set":52,"id":"7faddb67_c7d71122","line":7364,"range":{"start_line":7364,"start_character":30,"end_line":7364,"end_character":39},"updated":"2019-08-30 14:16:30.000000000","message":"vcpusched","commit_id":"0b55c4cfcb02fef6ce3ebc57e2c8232976a2d860"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1402a0d14146a719296c9addf3b6a5a676a1683d","unresolved":false,"context_lines":[{"line_number":7361,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7362,"context_line":""},{"line_number":7363,"context_line":"            if guest_cpu_tune.vcpusched:"},{"line_number":7364,"context_line":"                # NOTE(artom) vcpushced is a list, but there\u0027s only ever one"},{"line_number":7365,"context_line":"                # element in it (see _get_guest_numa_config under"},{"line_number":7366,"context_line":"                # wants_realtime)"},{"line_number":7367,"context_line":"                info.sched_vcpus \u003d guest_cpu_tune.vcpusched[0].vcpus"}],"source_content_type":"text/x-python","patch_set":52,"id":"7faddb67_848a74b9","line":7364,"range":{"start_line":7364,"start_character":30,"end_line":7364,"end_character":39},"in_reply_to":"7faddb67_c7d71122","updated":"2019-09-01 13:15:46.000000000","message":"You did, and I fixed \u0027vcpushed\u0027 with \u0027vcpushced\u0027, yey me. Done.","commit_id":"0b55c4cfcb02fef6ce3ebc57e2c8232976a2d860"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_3d125c59","line":7325,"range":{"start_line":7325,"start_character":16,"end_line":7325,"end_character":43},"updated":"2019-09-05 19:26:03.000000000","message":"OK and this is set in the MoveClaim object here:\n\nhttps://review.opendev.org/#/c/635669/50/nova/compute/claims.py@154","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_7dee9421","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"updated":"2019-09-05 19:26:03.000000000","message":"Technically you could use claim.instance_type and claim.image_meta, but I\u0027m not sure if that matters. That\u0027s what gets used in the claim though:\n\nhttps://review.opendev.org/#/c/635669/50/nova/compute/claims.py@175\n\nBut the values are the same so it doesn\u0027t really matter:\n\nhttps://review.opendev.org/#/c/635669/50/nova/compute/resource_tracker.py@261","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4d3acf35436a911cf27089b115bb1449d6c53c4d","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_68b6a5dc","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_3ccd575d","updated":"2019-09-06 20:20:51.000000000","message":"I changed this and am getting:\n\n    AttributeError: \u0027NopClaim\u0027 object has no attribute \u0027instance_type\u0027\n\n\nin my func tests. Will continue investigating later tonight.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48f14981dbce039dda22bde7854c49c5180d8e9d","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_8952fd66","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_3fa2249c","updated":"2019-09-07 18:31:09.000000000","message":"Looks like your tests just failed b/c you didn\u0027t have the fields set on the claim used in the test properly, right?","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d7c6fce2e6d83a58f11b9cedefb55d596b7eab83","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_3fa2249c","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_68b6a5dc","updated":"2019-09-06 22:25:41.000000000","message":"Turns out that error has nothing to do with this, it\u0027s from https://review.opendev.org/#/c/634606/75/nova/compute/manager.py@6526 (see comments there)","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8888f55250af18b52f37e777d9fe9a3979819482","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_cf74759c","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_8952fd66","updated":"2019-09-07 23:28:33.000000000","message":"No, it was func tests that failed - and I thought the problem was here, but it\u0027s actually in https://review.opendev.org/#/c/634606/77/nova/compute/manager.py@6535 (L6535 to L6939)","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"713a38af77b20d0e85e32f69aa9ac92b52927b33","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_b903990d","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_abbb4d0c","updated":"2019-09-06 15:09:52.000000000","message":"Flavor and image meta don\u0027t change for cold migration but that doesn\u0027t mean the move claim isn\u0027t using them to call the hardware module to get the requested numa topology for the instance, right?","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4543c6a0c4b767a9a263f2d23b4ce98df23e3592","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_3ccd575d","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"5faad753_b903990d","updated":"2019-09-06 16:22:50.000000000","message":"Yeah, fair, I can change this.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7322,"context_line":""},{"line_number":7323,"context_line":"    def post_claim_migrate_data(self, context, instance, migrate_data, claim):"},{"line_number":7324,"context_line":"        migrate_data.dst_numa_info \u003d self._get_live_migrate_numa_info("},{"line_number":7325,"context_line":"                claim.claimed_numa_topology, instance.flavor,"},{"line_number":7326,"context_line":"                instance.image_meta)"},{"line_number":7327,"context_line":"        return migrate_data"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"    def _get_live_migrate_numa_info(self, instance_numa_topology, flavor,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_abbb4d0c","line":7326,"range":{"start_line":7325,"start_character":45,"end_line":7326,"end_character":35},"in_reply_to":"7faddb67_7dee9421","updated":"2019-09-05 23:57:30.000000000","message":"It\u0027s a live migration, so neither instance_type (flavor) nor image_meta can change. Those fields in the claim are technically for resizes/rebuilds.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7335,"context_line":"        :param instance_numa_topology: The InstanceNUMATopology as fitted to"},{"line_number":7336,"context_line":"                                       the destination by the live migration"},{"line_number":7337,"context_line":"                                       Claim."},{"line_number":7338,"context_line":"        :param flavor: The instance flavor."},{"line_number":7339,"context_line":"        :param image_meta: The instance\u0027s image properties."},{"line_number":7340,"context_line":"        :returns: A LibvirtLiveMigrateNUMAInfo object indicating how to update"},{"line_number":7341,"context_line":"                  the XML for the destination host."}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_ddba28be","line":7338,"range":{"start_line":7338,"start_character":36,"end_line":7338,"end_character":42},"updated":"2019-09-05 19:26:03.000000000","message":"nit: Flavor object","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7335,"context_line":"        :param instance_numa_topology: The InstanceNUMATopology as fitted to"},{"line_number":7336,"context_line":"                                       the destination by the live migration"},{"line_number":7337,"context_line":"                                       Claim."},{"line_number":7338,"context_line":"        :param flavor: The instance flavor."},{"line_number":7339,"context_line":"        :param image_meta: The instance\u0027s image properties."},{"line_number":7340,"context_line":"        :returns: A LibvirtLiveMigrateNUMAInfo object indicating how to update"},{"line_number":7341,"context_line":"                  the XML for the destination host."}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_eb1dc50f","line":7338,"range":{"start_line":7338,"start_character":36,"end_line":7338,"end_character":42},"in_reply_to":"7faddb67_ddba28be","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7336,"context_line":"                                       the destination by the live migration"},{"line_number":7337,"context_line":"                                       Claim."},{"line_number":7338,"context_line":"        :param flavor: The instance flavor."},{"line_number":7339,"context_line":"        :param image_meta: The instance\u0027s image properties."},{"line_number":7340,"context_line":"        :returns: A LibvirtLiveMigrateNUMAInfo object indicating how to update"},{"line_number":7341,"context_line":"                  the XML for the destination host."},{"line_number":7342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_9db030de","line":7339,"range":{"start_line":7339,"start_character":42,"end_line":7339,"end_character":59},"updated":"2019-09-05 19:26:03.000000000","message":"nit: ImageMeta object","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7336,"context_line":"                                       the destination by the live migration"},{"line_number":7337,"context_line":"                                       Claim."},{"line_number":7338,"context_line":"        :param flavor: The instance flavor."},{"line_number":7339,"context_line":"        :param image_meta: The instance\u0027s image properties."},{"line_number":7340,"context_line":"        :returns: A LibvirtLiveMigrateNUMAInfo object indicating how to update"},{"line_number":7341,"context_line":"                  the XML for the destination host."},{"line_number":7342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_8b1a1115","line":7339,"range":{"start_line":7339,"start_character":42,"end_line":7339,"end_character":59},"in_reply_to":"7faddb67_9db030de","updated":"2019-09-05 23:57:30.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1034ba0b4dcc373c755789a52cbe33d88c3f71bc","unresolved":false,"context_lines":[{"line_number":7342,"context_line":"        \"\"\""},{"line_number":7343,"context_line":"        LOG.debug(\u0027Building NUMA live migration data\u0027)"},{"line_number":7344,"context_line":"        info \u003d objects.LibvirtLiveMigrateNUMAInfo()"},{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        LOG.debug(\u0027Guest NUMA config is: \u0027"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_ee3713e3","line":7345,"range":{"start_line":7345,"start_character":8,"end_line":7345,"end_character":15},"updated":"2019-09-06 00:32:17.000000000","message":"This being set but not anything else needs to be handled.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1fb61a7ea5b692030fe9084867f99ff60acdc8dc","unresolved":false,"context_lines":[{"line_number":7342,"context_line":"        \"\"\""},{"line_number":7343,"context_line":"        LOG.debug(\u0027Building NUMA live migration data\u0027)"},{"line_number":7344,"context_line":"        info \u003d objects.LibvirtLiveMigrateNUMAInfo()"},{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        LOG.debug(\u0027Guest NUMA config is: \u0027"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_a203670d","line":7345,"range":{"start_line":7345,"start_character":8,"end_line":7345,"end_character":15},"in_reply_to":"5faad753_999d8b68","updated":"2019-09-06 10:43:17.000000000","message":"Talking to Sean and Stephen on IRC, this is indeed a thing. vcpu_pin_set should be set for all hosts, regardless of NUMA.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"64c6bc297522004cc415cde2b048965205606813","unresolved":false,"context_lines":[{"line_number":7342,"context_line":"        \"\"\""},{"line_number":7343,"context_line":"        LOG.debug(\u0027Building NUMA live migration data\u0027)"},{"line_number":7344,"context_line":"        info \u003d objects.LibvirtLiveMigrateNUMAInfo()"},{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        LOG.debug(\u0027Guest NUMA config is: \u0027"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_f3c4d394","line":7345,"range":{"start_line":7345,"start_character":8,"end_line":7345,"end_character":15},"in_reply_to":"5faad753_a203670d","updated":"2019-09-06 13:42:03.000000000","message":"Done","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7adcf9c4e731ce6f87eb7c8ee174245d6e61ba11","unresolved":false,"context_lines":[{"line_number":7342,"context_line":"        \"\"\""},{"line_number":7343,"context_line":"        LOG.debug(\u0027Building NUMA live migration data\u0027)"},{"line_number":7344,"context_line":"        info \u003d objects.LibvirtLiveMigrateNUMAInfo()"},{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        LOG.debug(\u0027Guest NUMA config is: \u0027"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_999d8b68","line":7345,"range":{"start_line":7345,"start_character":8,"end_line":7345,"end_character":15},"in_reply_to":"5faad753_ee3713e3","updated":"2019-09-06 02:28:00.000000000","message":"Or... does it? It can only happen if an instance without a numa topology lands on a host with vcpu_pin_set defined, which normally shouldn\u0027t be happening, as we recommend splitting NUMA/dedicated VMs from normal VMs by host aggregates, and only the NUMA/dedicated aggregate will have vcpu_pin_set. I think I\u0027d rather get a second opinion on this before panicking.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"60916799e04fe665c56693bbc577c3ac67258e52","unresolved":false,"context_lines":[{"line_number":7353,"context_line":"                  {\u0027cpu_set\u0027: cpu_set,"},{"line_number":7354,"context_line":"                   \u0027guest_cpu_tune\u0027: guest_cpu_tune,"},{"line_number":7355,"context_line":"                   \u0027guest_cpu_numa\u0027: guest_cpu_numa,"},{"line_number":7356,"context_line":"                   \u0027guest_numa_tune\u0027: guest_numa_tune})"},{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_becf467d","line":7356,"updated":"2019-09-04 14:32:51.000000000","message":"I\u0027m not sure this is a useful debug to leave in:\n\nGuest NUMA config is: cpu_set: None, guest_cpu_tune: \u003cnova.virt.libvirt.config.LibvirtConfigGuestCPUTune object at 0x7fab3440b3c8\u003e, guest_cpu_numa: \u003cnova.virt.libvirt.config.LibvirtConfigGuestCPUNUMA object at 0x7fab3440b4a8\u003e, guest_numa_tune: \u003cnova.virt.libvirt.config.LibvirtConfigGuestNUMATune object at 0x7fab3440b160\u003e {{(pid\u003d25790) _get_live_migrate_numa_info /opt/stack/nova/nova/virt/libvirt/driver.py:7356}}","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7353,"context_line":"                  {\u0027cpu_set\u0027: cpu_set,"},{"line_number":7354,"context_line":"                   \u0027guest_cpu_tune\u0027: guest_cpu_tune,"},{"line_number":7355,"context_line":"                   \u0027guest_cpu_numa\u0027: guest_cpu_numa,"},{"line_number":7356,"context_line":"                   \u0027guest_numa_tune\u0027: guest_numa_tune})"},{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_2bbafddd","line":7356,"in_reply_to":"7faddb67_5d671852","updated":"2019-09-05 23:57:30.000000000","message":"OK, it\u0027s gone.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7353,"context_line":"                  {\u0027cpu_set\u0027: cpu_set,"},{"line_number":7354,"context_line":"                   \u0027guest_cpu_tune\u0027: guest_cpu_tune,"},{"line_number":7355,"context_line":"                   \u0027guest_cpu_numa\u0027: guest_cpu_numa,"},{"line_number":7356,"context_line":"                   \u0027guest_numa_tune\u0027: guest_numa_tune})"},{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_5d671852","line":7356,"in_reply_to":"7faddb67_becf467d","updated":"2019-09-05 19:26:03.000000000","message":"Yeah, definitely not. You\u0027d have to format them into to_xml strings or something to make them more useful and if you do that I\u0027d make it conditional on whether or not DEBUG logging is enabled:\n\n  if LOG.isEnabledFor(logging.DEBUG):\n\nOtherwise you convert those objects just to not log them.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7354,"context_line":"                   \u0027guest_cpu_tune\u0027: guest_cpu_tune,"},{"line_number":7355,"context_line":"                   \u0027guest_cpu_numa\u0027: guest_cpu_numa,"},{"line_number":7356,"context_line":"                   \u0027guest_numa_tune\u0027: guest_numa_tune})"},{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"},{"line_number":7360,"context_line":"                info.cpu_pins[str(pin.id)] \u003d pin.cpuset"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_f88cd280","line":7357,"updated":"2019-09-05 19:26:03.000000000","message":"You don\u0027t have a test where this is falsey and guest_numa_tune is truthy (and vice-versa), but maybe that doesn\u0027t matter since you have test_get_live_migrate_numa_info_empty hitting both \"empty\" cases. I guess my point is they are exclusive conditions and the tests that hit this are either all or none rather than a mix.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7354,"context_line":"                   \u0027guest_cpu_tune\u0027: guest_cpu_tune,"},{"line_number":7355,"context_line":"                   \u0027guest_cpu_numa\u0027: guest_cpu_numa,"},{"line_number":7356,"context_line":"                   \u0027guest_numa_tune\u0027: guest_numa_tune})"},{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"},{"line_number":7360,"context_line":"                info.cpu_pins[str(pin.id)] \u003d pin.cpuset"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_cb93295c","line":7357,"in_reply_to":"7faddb67_f88cd280","updated":"2019-09-05 23:57:30.000000000","message":"They\u0027re not exclusive, see my reply in [1]. I could add a test that hits just guest_cpu_tune and not the other stuff, but as you said, does that add much value over a test that hits them both being False-y?\n\n[1] https://review.opendev.org/#/c/635229/58/nova/tests/unit/virt/libvirt/test_migration.py@157","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7357,"context_line":"        if guest_cpu_tune:"},{"line_number":7358,"context_line":"            info.cpu_pins \u003d {}"},{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"},{"line_number":7360,"context_line":"                info.cpu_pins[str(pin.id)] \u003d pin.cpuset"},{"line_number":7361,"context_line":""},{"line_number":7362,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7363,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_dd9788ea","line":7360,"range":{"start_line":7360,"start_character":45,"end_line":7360,"end_character":55},"updated":"2019-09-05 19:26:03.000000000","message":"OK and this came from _get_pin_cpuset.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7359,"context_line":"            for pin in guest_cpu_tune.vcpupin:"},{"line_number":7360,"context_line":"                info.cpu_pins[str(pin.id)] \u003d pin.cpuset"},{"line_number":7361,"context_line":""},{"line_number":7362,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7363,"context_line":""},{"line_number":7364,"context_line":"            if guest_cpu_tune.vcpusched:"},{"line_number":7365,"context_line":"                # NOTE(artom) vcpusched is a list, but there\u0027s only ever one"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_fd54c423","line":7362,"range":{"start_line":7362,"start_character":33,"end_line":7362,"end_character":66},"updated":"2019-09-05 19:26:03.000000000","message":"And this is from _get_emulatorpin_cpuset.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7361,"context_line":""},{"line_number":7362,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7363,"context_line":""},{"line_number":7364,"context_line":"            if guest_cpu_tune.vcpusched:"},{"line_number":7365,"context_line":"                # NOTE(artom) vcpusched is a list, but there\u0027s only ever one"},{"line_number":7366,"context_line":"                # element in it (see _get_guest_numa_config under"},{"line_number":7367,"context_line":"                # wants_realtime)"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_dd1c6878","line":7364,"updated":"2019-09-05 19:26:03.000000000","message":"And this is for realtime (as the comment below says), ack.\n\nhttps://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/driver.py#L4596","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7362,"context_line":"            info.emulator_pins \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":7363,"context_line":""},{"line_number":7364,"context_line":"            if guest_cpu_tune.vcpusched:"},{"line_number":7365,"context_line":"                # NOTE(artom) vcpusched is a list, but there\u0027s only ever one"},{"line_number":7366,"context_line":"                # element in it (see _get_guest_numa_config under"},{"line_number":7367,"context_line":"                # wants_realtime)"},{"line_number":7368,"context_line":"                info.sched_vcpus \u003d guest_cpu_tune.vcpusched[0].vcpus"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_98fefe67","line":7365,"updated":"2019-09-05 19:26:03.000000000","message":"I guess we don\u0027t worry about scheduler https://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/config.py#L2220 because we hard-code that to fifo on both sides?\n\nhttps://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/designer.py#L197","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"60916799e04fe665c56693bbc577c3ac67258e52","unresolved":false,"context_lines":[{"line_number":7366,"context_line":"                # element in it (see _get_guest_numa_config under"},{"line_number":7367,"context_line":"                # wants_realtime)"},{"line_number":7368,"context_line":"                info.sched_vcpus \u003d guest_cpu_tune.vcpusched[0].vcpus"},{"line_number":7369,"context_line":"                info.sched_priority \u003d guest_cpu_tune.vcpusched[0].priority"},{"line_number":7370,"context_line":""},{"line_number":7371,"context_line":"        if guest_numa_tune:"},{"line_number":7372,"context_line":"            info.cell_pins \u003d {}"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_fe7ffe13","line":7369,"updated":"2019-09-04 14:32:51.000000000","message":"Note that these are unset in the tempest test run. It\u0027s fine, just noting that this doesn\u0027t get covered.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":7373,"context_line":"            for node in guest_numa_tune.memnodes:"},{"line_number":7374,"context_line":"                info.cell_pins[str(node.cellid)] \u003d set(node.nodeset)"},{"line_number":7375,"context_line":""},{"line_number":7376,"context_line":"        LOG.debug(\u0027Built NUMA live migration info: %s\u0027, info)"},{"line_number":7377,"context_line":"        return info"},{"line_number":7378,"context_line":""},{"line_number":7379,"context_line":"    def cleanup_live_migration_destination_check(self, context,"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_f83052eb","line":7376,"range":{"start_line":7376,"start_character":56,"end_line":7376,"end_character":60},"updated":"2019-09-05 19:26:03.000000000","message":"What does this look like in the logs? Is it useful? I guess it looks like this:\n\nhttps://zuul.opendev.org/t/openstack/build/d51f91efa937411a9179b930eff3ab08/log/controller/logs/screen-n-cpu.txt.gz#2199\n\nSep 04 15:37:45.544375 ubuntu-bionic-expanded-fortnebula-regionone-0010749569 nova-compute[26046]: DEBUG nova.virt.libvirt.driver [None req-2da7dc18-5e64-4f15-a9ab-e4855fa60c03 tempest-LiveAutoBlockMigrationV225Test-279415405 tempest-LiveAutoBlockMigrationV225Test-279415405] Built NUMA live migration info: LibvirtLiveMigrateNUMAInfo(cell_pins\u003d{0\u003dset([0]),1\u003dset([1])},cpu_pins\u003d{0\u003dset([1,2,3]),1\u003dset([4,5,6,7])},emulator_pins\u003dset([1,2,3,4,5,6,7]),sched_priority\u003d\u003c?\u003e,sched_vcpus\u003d\u003c?\u003e) {{(pid\u003d26046) _get_live_migrate_numa_info /opt/stack/nova/nova/virt/libvirt/driver.py:7366}}\n\nLooks OK.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":7373,"context_line":"            for node in guest_numa_tune.memnodes:"},{"line_number":7374,"context_line":"                info.cell_pins[str(node.cellid)] \u003d set(node.nodeset)"},{"line_number":7375,"context_line":""},{"line_number":7376,"context_line":"        LOG.debug(\u0027Built NUMA live migration info: %s\u0027, info)"},{"line_number":7377,"context_line":"        return info"},{"line_number":7378,"context_line":""},{"line_number":7379,"context_line":"    def cleanup_live_migration_destination_check(self, context,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_6bbc75bb","line":7376,"range":{"start_line":7376,"start_character":56,"end_line":7376,"end_character":60},"in_reply_to":"7faddb67_f83052eb","updated":"2019-09-05 23:57:30.000000000","message":"While migrate_data gets logged a bunch of times anyways, it doesn\u0027t print the detail of the nested objects, so having this in full could be useful.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"478864ce774cb2c7b79c765d85c2548d4ea435fa","unresolved":false,"context_lines":[{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        if cpu_set:"},{"line_number":7349,"context_line":"            info.allocation_cpu_pins \u003d cpu_set"},{"line_number":7350,"context_line":"        # NOTE(artom) These two should always be either None together, or"},{"line_number":7351,"context_line":"        # truth-y together."}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_c052f167","line":7348,"updated":"2019-09-09 18:32:01.000000000","message":"Hrmm, if we go from a host with a vcpu_pin_set to a host without one, this will be None (as will everything else, assuming the instance has no NUMA topology). We need to handle that case and remove cpuset from \u003cvcpu\u003e.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e6af9bd3d9cd001cba184ab91161df0bdd17c83b","unresolved":false,"context_lines":[{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        if cpu_set:"},{"line_number":7349,"context_line":"            info.allocation_cpu_pins \u003d cpu_set"},{"line_number":7350,"context_line":"        # NOTE(artom) These two should always be either None together, or"},{"line_number":7351,"context_line":"        # truth-y together."}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_0d3cb9c6","line":7348,"in_reply_to":"5faad753_c052f167","updated":"2019-09-10 02:29:21.000000000","message":"We\u0027ve decide that this it out of scope of this series, and to remove the allocation-style CPU pinning stuff completely.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":7345,"context_line":"        cpu_set, guest_cpu_tune, guest_cpu_numa, guest_numa_tune \u003d \\"},{"line_number":7346,"context_line":"            self._get_guest_numa_config(instance_numa_topology, flavor,"},{"line_number":7347,"context_line":"                                        image_meta)"},{"line_number":7348,"context_line":"        if cpu_set:"},{"line_number":7349,"context_line":"            info.allocation_cpu_pins \u003d cpu_set"},{"line_number":7350,"context_line":"        # NOTE(artom) These two should always be either None together, or"},{"line_number":7351,"context_line":"        # truth-y together."}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_b9f5b0cd","line":7348,"in_reply_to":"5faad753_c052f167","updated":"2019-09-09 20:58:28.000000000","message":"right so you should be able to set cpu_set explcitly to a sentenal like an empy list wihc is not the same as the value being unset in that case and just remove the cpuset attibute if it exists on the element.\n\nso remove the if an change\n\ninfo.allocation_cpu_pins \u003d cpu_set\n\nto \n\ninfo.allocation_cpu_pins \u003d cpu_set or []\n\nthe in the update code treat [] as remove cpuset if present","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"318ec9fab9888e7861dfcaffcab44692b20f7cdd","unresolved":false,"context_lines":[{"line_number":7364,"context_line":"            for node in guest_numa_tune.memnodes:"},{"line_number":7365,"context_line":"                info.cell_pins[str(node.cellid)] \u003d set(node.nodeset)"},{"line_number":7366,"context_line":""},{"line_number":7367,"context_line":"        LOG.debug(\u0027Built NUMA live migration info: %s\u0027, info)"},{"line_number":7368,"context_line":"        return info"},{"line_number":7369,"context_line":""},{"line_number":7370,"context_line":"    def cleanup_live_migration_destination_check(self, context,"}],"source_content_type":"text/x-python","patch_set":62,"id":"5faad753_50c0e17b","line":7367,"updated":"2019-09-11 14:13:45.000000000","message":"Ack from the most recent run of the CI job:\n\nhttps://zuul.opendev.org/t/openstack/build/2ad3676591e440b6a76d30e966833a49/log/compute/logs/screen-n-cpu.txt.gz#2416\n\nSep 10 23:28:21.199741 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]: DEBUG nova.virt.libvirt.driver [None req-fc74c810-f549-40b0-8199-ce46ebda4fa3 tempest-LiveAutoBlockMigrationV225Test-705998529 tempest-LiveAutoBlockMigrationV225Test-705998529] Built NUMA live migration info: LibvirtLiveMigrateNUMAInfo(cell_pins\u003d{0\u003dset([0]),1\u003dset([1])},cpu_pins\u003d{0\u003dset([0,1,2,3]),1\u003dset([4,5,6])},emulator_pins\u003dset([0,1,2,3,4,5,6]),sched_priority\u003d\u003c?\u003e,sched_vcpus\u003d\u003c?\u003e) {{(pid\u003d14195) _get_live_migrate_numa_info /opt/stack/nova/nova/virt/libvirt/driver.py:7364}}","commit_id":"18b89a2c53b9dbb3e0f2b9d86dccbffce669430e"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"77eb1fdb60a616976ac517493a14b421207dbe8e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":99,"context_line":"    if cpu_pins:"},{"line_number":100,"context_line":"        for guest, host in cpu_pins.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_17604632","line":97,"range":{"start_line":97,"start_character":21,"end_line":97,"end_character":28},"updated":"2019-02-06 20:29:14.000000000","message":"you might want to make a copy of this.\ncurrently you are modifying the object you are passed in.","commit_id":"f4f45ceab2681eb3de2c02cab36226cda72ad3f6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"626993bb44d70eac12e085519542a9e15181ef04","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":99,"context_line":"    if cpu_pins:"},{"line_number":100,"context_line":"        for guest, host in cpu_pins.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_ba0efa2f","line":97,"range":{"start_line":97,"start_character":21,"end_line":97,"end_character":28},"in_reply_to":"9fdfeff1_17604632","updated":"2019-02-07 00:16:57.000000000","message":"It seems the logic in the _update_xml methods is get xml_doc, modify it, return the modified version to be passed to the next _update method.","commit_id":"f4f45ceab2681eb3de2c02cab36226cda72ad3f6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"77eb1fdb60a616976ac517493a14b421207dbe8e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            vcpupin.set(\u0027cpuset\u0027, host)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    cell_pins \u003d migrate_data.dst_numa_config.cell_pins"},{"line_number":105,"context_line":"    if cell_pins:"},{"line_number":106,"context_line":"        for guest, host in cell_pins.items():"},{"line_number":107,"context_line":"            memnode \u003d xml_doc.find(\u0027./numatune/memnode[@cellid\u003d%d]\u0027 % guest)"},{"line_number":108,"context_line":"            memnode.set(\u0027nodeset\u0027, host)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    emulator_pins \u003d migrate_data.dst_numa_config.emulator_pins"},{"line_number":111,"context_line":"    if emulator_pins:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_7720b2f8","line":108,"range":{"start_line":105,"start_character":4,"end_line":108,"end_character":40},"updated":"2019-02-06 20:29:14.000000000","message":"you need to also update the nodeset for the guest memory backing i think.\n\nthe rest looks correct","commit_id":"f4f45ceab2681eb3de2c02cab36226cda72ad3f6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"626993bb44d70eac12e085519542a9e15181ef04","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            vcpupin.set(\u0027cpuset\u0027, host)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    cell_pins \u003d migrate_data.dst_numa_config.cell_pins"},{"line_number":105,"context_line":"    if cell_pins:"},{"line_number":106,"context_line":"        for guest, host in cell_pins.items():"},{"line_number":107,"context_line":"            memnode \u003d xml_doc.find(\u0027./numatune/memnode[@cellid\u003d%d]\u0027 % guest)"},{"line_number":108,"context_line":"            memnode.set(\u0027nodeset\u0027, host)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    emulator_pins \u003d migrate_data.dst_numa_config.emulator_pins"},{"line_number":111,"context_line":"    if emulator_pins:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5a1b4e72","line":108,"range":{"start_line":105,"start_character":4,"end_line":108,"end_character":40},"in_reply_to":"9fdfeff1_7720b2f8","updated":"2019-02-07 00:16:57.000000000","message":"Doh, after talking a whole day about this, I forget. Done.","commit_id":"f4f45ceab2681eb3de2c02cab36226cda72ad3f6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b910a9bb23fd227ac0999eba584dd1c7c2ec096","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_1b37dab2","line":92,"range":{"start_line":92,"start_character":4,"end_line":92,"end_character":35},"updated":"2019-02-10 20:32:10.000000000","message":"this raises \nNotImplementedError: Cannot load \u0027dst_numa_config\u0027 in the base class \n\nfor a non guest host. you have to use\n\nif migrate_data.obj_attr_is_set(\u0027dst_numa_config\u0027):\n\ninstead because its a ovo.\n\ni belive there are ways to use in or hasattr too\nbut the current code triggering lazeloading fo the field which will not work.","commit_id":"028e10d2ae7c49d8bdea367eda645f4a11357f7a"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4bf3cd5c4eeebf26300fc7ac4ecd90bfba250fdd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_bb456e17","line":92,"in_reply_to":"9fdfeff1_1b37dab2","updated":"2019-02-10 20:34:01.000000000","message":"yeah, ci caught this in a non-voting job (forgot which). I was thinking of just defaulting it to None.","commit_id":"028e10d2ae7c49d8bdea367eda645f4a11357f7a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2524c8da0c860138d1c2ccb5db53908184daa255","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if \u0027dst_numa_config\u0027 in migrate_data and migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_aa0ac386","line":92,"range":{"start_line":92,"start_character":45,"end_line":92,"end_character":73},"updated":"2019-02-26 17:12:22.000000000","message":"This is not nullable, so this will always be true AFAICT.","commit_id":"07af33ccd2edb027a2ed81ed07a0d0931e68a64b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"eff080ba79d42e9b59ca690b7b0622ee166e30ae","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if \u0027dst_numa_config\u0027 in migrate_data and migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_d017b645","line":92,"range":{"start_line":92,"start_character":45,"end_line":92,"end_character":73},"in_reply_to":"9fdfeff1_aa0ac386","updated":"2019-02-26 18:51:22.000000000","message":"Fixed in previous patch.","commit_id":"07af33ccd2edb027a2ed81ed07a0d0931e68a64b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d4382f933c4f2c7d5891c1f276bacf7882a50be2","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    LOG.debug(\u0027Updating NUMA XML\u0027)"},{"line_number":99,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":100,"context_line":"    if cpu_pins:"},{"line_number":101,"context_line":"        for pin_mapping in cpu_pins:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_52afe193","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":34},"updated":"2019-07-04 10:34:33.000000000","message":"I think this can go since we don\u0027t log it for anything else and it\u0027s bound to be very noisy. Ditto for the other logs here","commit_id":"504b84224edb74275ab69847b30c7b04d1954979"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a71c6899ddb444ca7b6dba2253815330a59873ec","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    LOG.debug(\u0027Updating NUMA XML\u0027)"},{"line_number":99,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":100,"context_line":"    if cpu_pins:"},{"line_number":101,"context_line":"        for pin_mapping in cpu_pins:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_f7efdcad","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":34},"in_reply_to":"7faddb67_52afe193","updated":"2019-07-04 12:22:46.000000000","message":"It\u0027s debug level, I\u0027d rather have too much than not enough, especially for this sort of stuff? I don\u0027t mind removing, but maybe wait for someone else to chime in?","commit_id":"504b84224edb74275ab69847b30c7b04d1954979"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e3d0bf499c151dd3e9f295bfde96fcd4a99569b9","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if \u0027dst_numa_config\u0027 in migrate_data and migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_15d9b781","line":92,"updated":"2019-08-16 18:09:23.000000000","message":"Correct me if I\u0027m wrong, but this will either be unset, or set to a suitable object and not None, right? Thus, I would expect that this field should be non-nullable, and that all you need to do is check to see if the other end was new enough to provide this field or not (i.e. the \u0027in\u0027 check you have).","commit_id":"4a2265f6cae70cf2aaa8dda3a5a1bb411c71e736"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e242b868b74dc3c7da9167a8df9e148fe30e5f65","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    xml_doc \u003d _update_memory_backing_xml(xml_doc, migrate_data)"},{"line_number":90,"context_line":"    if get_vif_config is not None:"},{"line_number":91,"context_line":"        xml_doc \u003d _update_vif_xml(xml_doc, migrate_data, get_vif_config)"},{"line_number":92,"context_line":"    if \u0027dst_numa_config\u0027 in migrate_data and migrate_data.dst_numa_config:"},{"line_number":93,"context_line":"        xml_doc \u003d _update_numa_xml(xml_doc, migrate_data)"},{"line_number":94,"context_line":"    return etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_143876d2","line":92,"in_reply_to":"7faddb67_15d9b781","updated":"2019-08-22 21:20:25.000000000","message":"Correct. Fixed.","commit_id":"4a2265f6cae70cf2aaa8dda3a5a1bb411c71e736"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e3d0bf499c151dd3e9f295bfde96fcd4a99569b9","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    LOG.debug(\u0027Updating NUMA XML\u0027)"},{"line_number":99,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":100,"context_line":"    if cpu_pins:"},{"line_number":101,"context_line":"        for guest_id, host_ids in cpu_pins.items():"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_f5497b31","line":98,"updated":"2019-08-16 18:09:23.000000000","message":"Is this useful in the long run? I\u0027m sure that during very basic testing it\u0027s nice to see that a thing was passed and it\u0027s doing this part, but if you think that indication is necessary in the future, it might be good to make this something like:\n\n Destination node provided NUMA details, updating target defintion\n\nor something. I just think that an operator with debug\u003dtrue seeing this  is probably not going to know what it means, especially since you didn\u0027t provide instance\u003d).","commit_id":"4a2265f6cae70cf2aaa8dda3a5a1bb411c71e736"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e3d0bf499c151dd3e9f295bfde96fcd4a99569b9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":105,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":106,"context_line":"            LOG.debug(\u0027Set CPU pin guest %d -\u003e host %s\u0027,"},{"line_number":107,"context_line":"                      int(guest_id), host_ids)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    emulator_pins \u003d migrate_data.dst_numa_config.emulator_pins"},{"line_number":110,"context_line":"    if emulator_pins:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_d5655fb0","line":107,"updated":"2019-08-16 18:09:23.000000000","message":"For a 24 vcpu instance this will log 24 lines, which might be a little excessive, amirite? If you think this is useful debug info, maybe we could just dump it at the end or something? Also, here and elsewhere in this method, I think the log calls should include instance\u003d to make it easier to grep this info out.","commit_id":"4a2265f6cae70cf2aaa8dda3a5a1bb411c71e736"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e242b868b74dc3c7da9167a8df9e148fe30e5f65","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":105,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":106,"context_line":"            LOG.debug(\u0027Set CPU pin guest %d -\u003e host %s\u0027,"},{"line_number":107,"context_line":"                      int(guest_id), host_ids)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    emulator_pins \u003d migrate_data.dst_numa_config.emulator_pins"},{"line_number":110,"context_line":"    if emulator_pins:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_346d7299","line":107,"in_reply_to":"7faddb67_d5655fb0","updated":"2019-08-22 21:20:25.000000000","message":"I\u0027ll just remote all the logging. We log the migrate_data many time during a live migration, and the logging here is essentially just printing it migrate_data.dst_numa_info a different way.","commit_id":"4a2265f6cae70cf2aaa8dda3a5a1bb411c71e736"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"770a80a1cd5224cdceef50ed106986bb0dfe9016","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":99,"context_line":"    if cpu_pins:"},{"line_number":100,"context_line":"        for guest_id, host_ids in cpu_pins.items():"},{"line_number":101,"context_line":"            vcpupin \u003d xml_doc.find("}],"source_content_type":"text/x-python","patch_set":42,"id":"7faddb67_aa9d6e6d","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":43},"updated":"2019-08-23 14:14:26.000000000","message":"info here and below?","commit_id":"6e79c45e05fb0001c0459a0a5327c1c6b3bb660a"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5ba60b42f3dd0580ea09159e0dbb43bc5a1b8110","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    cpu_pins \u003d migrate_data.dst_numa_config.cpu_pins"},{"line_number":99,"context_line":"    if cpu_pins:"},{"line_number":100,"context_line":"        for guest_id, host_ids in cpu_pins.items():"},{"line_number":101,"context_line":"            vcpupin \u003d xml_doc.find("}],"source_content_type":"text/x-python","patch_set":42,"id":"7faddb67_ca10e703","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":43},"in_reply_to":"7faddb67_aa9d6e6d","updated":"2019-08-27 16:33:31.000000000","message":"Done","commit_id":"6e79c45e05fb0001c0459a0a5327c1c6b3bb660a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    if \u0027cpu_pins\u0027 in info:"},{"line_number":100,"context_line":"        for guest_id, host_ids in info.cpu_pins.items():"},{"line_number":101,"context_line":"            vcpupin \u003d xml_doc.find("},{"line_number":102,"context_line":"                \u0027./cputune/vcpupin[@vcpu\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":103,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":104,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_58f3a6e7","line":102,"range":{"start_line":102,"start_character":50,"end_line":102,"end_character":63},"updated":"2019-09-05 19:26:03.000000000","message":"Seems kind of weird that you cast this from an int to a string key in the object dict back to an int, but whatever.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    if \u0027cpu_pins\u0027 in info:"},{"line_number":100,"context_line":"        for guest_id, host_ids in info.cpu_pins.items():"},{"line_number":101,"context_line":"            vcpupin \u003d xml_doc.find("},{"line_number":102,"context_line":"                \u0027./cputune/vcpupin[@vcpu\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":103,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":104,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_ebc70545","line":102,"range":{"start_line":102,"start_character":50,"end_line":102,"end_character":63},"in_reply_to":"7faddb67_58f3a6e7","updated":"2019-09-05 23:57:30.000000000","message":"The DictOf fields are setup like that, the keys are strings.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            vcpupin \u003d xml_doc.find("},{"line_number":102,"context_line":"                \u0027./cputune/vcpupin[@vcpu\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":103,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":104,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    if \u0027emulator_pins\u0027 in info:"},{"line_number":107,"context_line":"        emulatorpin \u003d xml_doc.find(\u0027./cputune/emulatorpin\u0027)"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_38e6ea17","line":104,"range":{"start_line":104,"start_character":33,"end_line":104,"end_character":48},"updated":"2019-09-05 19:26:03.000000000","message":"yup, matches this:\n\nhttps://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/config.py#L2188","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":104,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    if \u0027emulator_pins\u0027 in info:"},{"line_number":107,"context_line":"        emulatorpin \u003d xml_doc.find(\u0027./cputune/emulatorpin\u0027)"},{"line_number":108,"context_line":"        emulatorpin.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.emulator_pins))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_b8a09aa6","line":106,"updated":"2019-09-05 19:26:03.000000000","message":"nit: you could remove this and nest the emulatorpin under the cpu_pins conditional above since if cpu_pins is set then emulator_pins is also set.","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a444302031c55eb146ac45612a9fb1604895830f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            vcpupin.set(\u0027cpuset\u0027,"},{"line_number":104,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    if \u0027emulator_pins\u0027 in info:"},{"line_number":107,"context_line":"        emulatorpin \u003d xml_doc.find(\u0027./cputune/emulatorpin\u0027)"},{"line_number":108,"context_line":"        emulatorpin.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.emulator_pins))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"5faad753_abefcdae","line":106,"in_reply_to":"7faddb67_b8a09aa6","updated":"2019-09-05 23:57:30.000000000","message":"So I had doubts about that, but yeah, you\u0027re right, you can\u0027t use hw:emulator_threads_policy\u003dshare without hw:cpu_policy_dedicated [1]\n\n[1] https://docs.openstack.org/nova/latest/admin/cpu-topologies.html#customizing-instance-emulator-thread-pinning-policies","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    if \u0027emulator_pins\u0027 in info:"},{"line_number":107,"context_line":"        emulatorpin \u003d xml_doc.find(\u0027./cputune/emulatorpin\u0027)"},{"line_number":108,"context_line":"        emulatorpin.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.emulator_pins))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    all_cells \u003d []"},{"line_number":111,"context_line":"    if \u0027cell_pins\u0027 in info:"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_78b1c200","line":108,"updated":"2019-09-05 19:26:03.000000000","message":"yup: https://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/config.py#L2206","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            all_cells.extend(host_ids)"},{"line_number":114,"context_line":"            memnode \u003d xml_doc.find("},{"line_number":115,"context_line":"                \u0027./numatune/memnode[@cellid\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":116,"context_line":"            memnode.set(\u0027nodeset\u0027,"},{"line_number":117,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":118,"context_line":"    if all_cells:"},{"line_number":119,"context_line":"        memory \u003d xml_doc.find(\u0027./numatune/memory\u0027)"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_18952e3d","line":116,"updated":"2019-09-05 19:26:03.000000000","message":"ack: https://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/config.py#L2393","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57fb3b4c94a04f90f9ff91e251c55e4c7d53f82c","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    if \u0027sched_vcpus\u0027 and \u0027sched_priority\u0027 in info:"},{"line_number":123,"context_line":"        vcpusched \u003d xml_doc.find(\u0027./cputune/vcpusched\u0027)"},{"line_number":124,"context_line":"        vcpusched.set(\u0027vcpus\u0027, hardware.format_cpu_spec(info.sched_vcpus))"},{"line_number":125,"context_line":"        vcpusched.set(\u0027priority\u0027, str(info.sched_priority))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    return xml_doc"}],"source_content_type":"text/x-python","patch_set":58,"id":"7faddb67_9897de39","line":124,"updated":"2019-09-05 19:26:03.000000000","message":"yup: https://github.com/openstack/nova/blob/f7f5e1846c7b19aa05817df7f3c4345819db413f/nova/virt/libvirt/config.py#L2228","commit_id":"022e9b97cbba6f8cc28806ebfabbf5b9953cfdc0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48f14981dbce039dda22bde7854c49c5180d8e9d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                \u0027./numatune/memnode[@cellid\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":124,"context_line":"            memnode.set(\u0027nodeset\u0027,"},{"line_number":125,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        memory \u003d xml_doc.find(\u0027./numatune/memory\u0027)"},{"line_number":128,"context_line":"        memory.set(\u0027nodeset\u0027, hardware.format_cpu_spec(set(all_cells)))"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5faad753_a9d019cb","line":126,"updated":"2019-09-07 18:31:09.000000000","message":"Why did you remove the condition for all_cells?\n\n  if all_cells:","commit_id":"fd66653f714b3c91080028ca8b02fbd3d33d5f4f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8888f55250af18b52f37e777d9fe9a3979819482","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                \u0027./numatune/memnode[@cellid\u003d\"%d\"]\u0027 % int(guest_id))"},{"line_number":124,"context_line":"            memnode.set(\u0027nodeset\u0027,"},{"line_number":125,"context_line":"                        hardware.format_cpu_spec(host_ids))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        memory \u003d xml_doc.find(\u0027./numatune/memory\u0027)"},{"line_number":128,"context_line":"        memory.set(\u0027nodeset\u0027, hardware.format_cpu_spec(set(all_cells)))"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"5faad753_4f47254d","line":126,"in_reply_to":"5faad753_a9d019cb","updated":"2019-09-07 23:28:33.000000000","message":"The way we\u0027re generating the guest NUMA config [1], there\u0027ll be a memnode for each guest cell, and a memory element that lists them all. So when we build the LibvirtLiveMigrateNUMAInfo object [2], just by iterating over all the memnodes and storing their info in cell_pins, we\u0027ll be sure that we have the info we need to modify the \u003cmemory\u003e element.\n\n[1] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4599-L4617\n[2] https://review.opendev.org/#/c/635229/60/nova/virt/libvirt/driver.py@7367","commit_id":"fd66653f714b3c91080028ca8b02fbd3d33d5f4f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    LOG.debug(\u0027_update_numa_xml input xml\u003d%s\u0027,"},{"line_number":99,"context_line":"              etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027, pretty_print\u003dTrue))"},{"line_number":100,"context_line":"    info \u003d migrate_data.dst_numa_info"},{"line_number":101,"context_line":"    if \u0027allocation_cpu_pins\u0027 in info:"},{"line_number":102,"context_line":"        vcpu \u003d xml_doc.find(\u0027./vcpu\u0027)"},{"line_number":103,"context_line":"        vcpu.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.allocation_cpu_pins))"},{"line_number":104,"context_line":"    # NOTE(artom) tuning_cpu_pins, cell_pins and emulator_pins should always"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_79ff38aa","line":101,"range":{"start_line":101,"start_character":4,"end_line":101,"end_character":37},"updated":"2019-09-09 20:58:28.000000000","message":"with \ninfo.allocation_cpu_pins \u003d []\nthis should still be true","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    info \u003d migrate_data.dst_numa_info"},{"line_number":101,"context_line":"    if \u0027allocation_cpu_pins\u0027 in info:"},{"line_number":102,"context_line":"        vcpu \u003d xml_doc.find(\u0027./vcpu\u0027)"},{"line_number":103,"context_line":"        vcpu.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.allocation_cpu_pins))"},{"line_number":104,"context_line":"    # NOTE(artom) tuning_cpu_pins, cell_pins and emulator_pins should always"},{"line_number":105,"context_line":"    # come together, or not at all."},{"line_number":106,"context_line":"    elif (\u0027tuning_cpu_pins\u0027 in info and"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_19d3a43a","line":103,"range":{"start_line":103,"start_character":7,"end_line":103,"end_character":78},"updated":"2019-09-09 20:58:28.000000000","message":"then you can wrap this in an if like this\n\n\nif info[\u0027allocation_cpu_pins\u0027]:\n vcpu.set(\u0027cpuset\u0027, hardware.format_cpu_spec(info.allocation_cpu_pins))\nelse:\n  #unset the cpuset attibute if present","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d12fce048920a07a4fcd7792d4f1d773280c135","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        memory \u003d xml_doc.find(\u0027./numatune/memory\u0027)"},{"line_number":128,"context_line":"        memory.set(\u0027nodeset\u0027, hardware.format_cpu_spec(set(all_cells)))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    if \u0027sched_vcpus\u0027 and \u0027sched_priority\u0027 in info:"},{"line_number":131,"context_line":"        vcpusched \u003d xml_doc.find(\u0027./cputune/vcpusched\u0027)"},{"line_number":132,"context_line":"        vcpusched.set(\u0027vcpus\u0027, hardware.format_cpu_spec(info.sched_vcpus))"},{"line_number":133,"context_line":"        vcpusched.set(\u0027priority\u0027, str(info.sched_priority))"}],"source_content_type":"text/x-python","patch_set":61,"id":"5faad753_f9880820","line":130,"range":{"start_line":130,"start_character":4,"end_line":130,"end_character":50},"updated":"2019-09-09 20:58:28.000000000","message":"can you add a comment to explain that test are teh realtime cpus and the realtime priority of the guest cpus.","commit_id":"3efc5268120c32803d5bd65cc949f70f2b655b42"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"318ec9fab9888e7861dfcaffcab44692b20f7cdd","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def _update_numa_xml(xml_doc, migrate_data):"},{"line_number":98,"context_line":"    LOG.debug(\u0027_update_numa_xml input xml\u003d%s\u0027,"},{"line_number":99,"context_line":"              etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027, pretty_print\u003dTrue))"},{"line_number":100,"context_line":"    info \u003d migrate_data.dst_numa_info"},{"line_number":101,"context_line":"    # NOTE(artom) cpu_pins, cell_pins and emulator_pins should always come"}],"source_content_type":"text/x-python","patch_set":62,"id":"5faad753_d05a91f1","line":98,"updated":"2019-09-11 14:13:45.000000000","message":"ack from latest CI job run:\n\nhttps://zuul.opendev.org/t/openstack/build/2ad3676591e440b6a76d30e966833a49/log/compute/logs/screen-n-cpu.txt.gz#2679\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003cvcpu placement\u003d\"static\"\u003e2\u003c/vcpu\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003ccputune\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cshares\u003e2048\u003c/shares\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cvcpupin vcpu\u003d\"0\" cpuset\u003d\"0-3\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cvcpupin vcpu\u003d\"1\" cpuset\u003d\"4-6\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cemulatorpin cpuset\u003d\"0-6\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003c/cputune\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003cnumatune\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemory mode\u003d\"strict\" nodeset\u003d\"0-1\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemnode cellid\u003d\"0\" mode\u003d\"strict\" nodeset\u003d\"0\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemnode cellid\u003d\"1\" mode\u003d\"strict\" nodeset\u003d\"1\"/\u003e\n\nSep 10 23:28:55.402993 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003c/numatune\u003e","commit_id":"18b89a2c53b9dbb3e0f2b9d86dccbffce669430e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"318ec9fab9888e7861dfcaffcab44692b20f7cdd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        vcpusched.set(\u0027vcpus\u0027, hardware.format_cpu_spec(info.sched_vcpus))"},{"line_number":130,"context_line":"        vcpusched.set(\u0027priority\u0027, str(info.sched_priority))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    LOG.debug(\u0027_update_numa_xml output xml\u003d%s\u0027,"},{"line_number":133,"context_line":"              etree.tostring(xml_doc, encoding\u003d\u0027unicode\u0027, pretty_print\u003dTrue))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    return xml_doc"}],"source_content_type":"text/x-python","patch_set":62,"id":"5faad753_102fc93f","line":132,"updated":"2019-09-11 14:13:45.000000000","message":"and here:\n\nhttps://zuul.opendev.org/t/openstack/build/2ad3676591e440b6a76d30e966833a49/log/compute/logs/screen-n-cpu.txt.gz#2794\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003cvcpu placement\u003d\"static\"\u003e2\u003c/vcpu\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003ccputune\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cshares\u003e2048\u003c/shares\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cvcpupin vcpu\u003d\"0\" cpuset\u003d\"1-3\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cvcpupin vcpu\u003d\"1\" cpuset\u003d\"4-7\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cemulatorpin cpuset\u003d\"1-7\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003c/cputune\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003cnumatune\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemory mode\u003d\"strict\" nodeset\u003d\"0-1\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemnode cellid\u003d\"0\" mode\u003d\"strict\" nodeset\u003d\"0\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:     \u003cmemnode cellid\u003d\"1\" mode\u003d\"strict\" nodeset\u003d\"1\"/\u003e\n\nSep 10 23:28:55.408845 ubuntu-bionic-expanded-fortnebula-regionone-0011115920 nova-compute[14195]:   \u003c/numatune\u003e\n\nYou can see the cputune values changed. numatune didn\u0027t but I guess that\u0027s because the hosts in the multinode CI job are configured with the same values?","commit_id":"18b89a2c53b9dbb3e0f2b9d86dccbffce669430e"}]}
