)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2ba2a79b05f41ade7cf886c01bdc0891c909178","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"34a58537_f35419e2","updated":"2024-03-11 12:55:48.000000000","message":"-1 only to agree on the need of the extra functional test","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c2b7db7126dccf24e71d78e4cbc2534d89c3d88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b4b828db_ecd3cd1a","updated":"2024-03-13 16:36:00.000000000","message":"Okay, lgtm.","commit_id":"c1ccc1a3165ec1556c605b3b036274e992b0a09d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0e952c375362e1a35e5eb0363efca652fb4ff5e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f6fec509_085e1d73","updated":"2024-03-13 19:59:14.000000000","message":"i submitted https://review.opendev.org/c/openstack/grenade/+/912813 to add more swap to the grenade jobs so we can see what the qa team thinks","commit_id":"c1ccc1a3165ec1556c605b3b036274e992b0a09d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"13afeca971275e4be07ddd5e05061a356885dfed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2749490b_00eedc8f","updated":"2024-03-13 19:41:00.000000000","message":"recheck oom-kill:constraint\u003dCONSTRAINT_NONE,nodemask\u003d(null),cpuset\u003duser.slice,mems_allowed\u003d0,global_oom,task_memcg\u003d/system.slice/mysql.service,task\u003dmysqld,pid\u003d48215,uid\u003d116 in the grenade job","commit_id":"c1ccc1a3165ec1556c605b3b036274e992b0a09d"}],"nova/tests/functional/libvirt/test_power_manage.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2ba2a79b05f41ade7cf886c01bdc0891c909178","unresolved":true,"context_lines":[{"line_number":188,"context_line":"        self.assertEqual(\u0027src\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":189,"context_line":"        self.assert_cores(self.src, set(range(1, 10)), online\u003dTrue)"},{"line_number":190,"context_line":"        self.assert_cores(self.dest, set(range(1, 10)), online\u003dFalse)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"class PowerManagementTests(PowerManagementTestsBase):"},{"line_number":194,"context_line":"    \"\"\"Test suite for a single host with 9 dedicated cores and 1 used for OS\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"ce422bf9_0c9b22e1","line":191,"updated":"2024-03-11 12:55:48.000000000","message":"Would it make sense to add a test where we live migrate with isolated emulator thread?","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b733d1ae2e102a888d884277dc8416b21839debf","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.assertEqual(\u0027src\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":189,"context_line":"        self.assert_cores(self.src, set(range(1, 10)), online\u003dTrue)"},{"line_number":190,"context_line":"        self.assert_cores(self.dest, set(range(1, 10)), online\u003dFalse)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"class PowerManagementTests(PowerManagementTestsBase):"},{"line_number":194,"context_line":"    \"\"\"Test suite for a single host with 9 dedicated cores and 1 used for OS\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"31c6fa34_f25ac8ec","line":191,"in_reply_to":"3494e104_ce68f48a","updated":"2024-03-13 15:13:53.000000000","message":"Done","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ff06b15dc77e4f8f0955cae395933b63a36122f","unresolved":true,"context_lines":[{"line_number":188,"context_line":"        self.assertEqual(\u0027src\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":189,"context_line":"        self.assert_cores(self.src, set(range(1, 10)), online\u003dTrue)"},{"line_number":190,"context_line":"        self.assert_cores(self.dest, set(range(1, 10)), online\u003dFalse)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"class PowerManagementTests(PowerManagementTestsBase):"},{"line_number":194,"context_line":"    \"\"\"Test suite for a single host with 9 dedicated cores and 1 used for OS\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3494e104_ce68f48a","line":191,"in_reply_to":"ce422bf9_0c9b22e1","updated":"2024-03-11 18:59:37.000000000","message":"Yep, I\u0027ll never say no to adding more functional tests :)","commit_id":"01141881defdd73810ebace61226e9a544e8f246"}],"nova/virt/libvirt/cpu/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b546293c71016e707e56d1bebc9483928e292246","unresolved":true,"context_lines":[{"line_number":75,"context_line":"        core.set_governor(self.ident, CONF.libvirt.cpu_power_governor_low)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def power_up(instance: objects.Instance) -\u003e None:"},{"line_number":79,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":80,"context_line":"        return"},{"line_number":81,"context_line":"    if instance.numa_topology is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"6efd829d_65d67fb9","line":78,"updated":"2024-02-22 10:38:37.000000000","message":"ok so i would rename this power_up_instance_cpus","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b1403721ffcf75ddae4c5e38c45ff1a170200dad","unresolved":true,"context_lines":[{"line_number":75,"context_line":"        core.set_governor(self.ident, CONF.libvirt.cpu_power_governor_low)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def power_up(instance: objects.Instance) -\u003e None:"},{"line_number":79,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":80,"context_line":"        return"},{"line_number":81,"context_line":"    if instance.numa_topology is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"c18a833d_5d265ff3","line":78,"in_reply_to":"6efd829d_65d67fb9","updated":"2024-03-08 23:10:46.000000000","message":"Mostly agreed - I went with \u0027power_up_for_instance\u0027","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c2b7db7126dccf24e71d78e4cbc2534d89c3d88","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        core.set_governor(self.ident, CONF.libvirt.cpu_power_governor_low)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def power_up(instance: objects.Instance) -\u003e None:"},{"line_number":79,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":80,"context_line":"        return"},{"line_number":81,"context_line":"    if instance.numa_topology is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"6e662383_c8034e96","line":78,"in_reply_to":"c18a833d_5d265ff3","updated":"2024-03-13 16:36:00.000000000","message":"Done","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4eb457d3315dfdbf51ba72ce8bf79eeffd121979","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def power_up_cpus(dst_numa_info):"},{"line_number":100,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9456884d_dcc4f379","line":99,"updated":"2024-02-22 08:31:07.000000000","message":"do we need to a symmetrical change to power down the dedicated emulator pin when a vm moved away?","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4971c7551171d87c659cc630d17f22881c733677","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def power_up_cpus(dst_numa_info):"},{"line_number":100,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ac85eab4_976c6a8e","line":99,"in_reply_to":"3ba572bd_6abb8f4c","updated":"2024-02-22 13:12:21.000000000","message":"good  point about revert, I only thought about post","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b546293c71016e707e56d1bebc9483928e292246","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def power_up_cpus(dst_numa_info):"},{"line_number":100,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ba572bd_6abb8f4c","line":99,"in_reply_to":"9456884d_dcc4f379","updated":"2024-02-22 10:38:37.000000000","message":"yes for revert and post live migrate\n\nalso maybe call this power_up_migration_cpus","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b1403721ffcf75ddae4c5e38c45ff1a170200dad","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"def power_up_cpus(dst_numa_info):"},{"line_number":100,"context_line":"    if not CONF.libvirt.cpu_power_management:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"6977bfd4_f55c32db","line":99,"in_reply_to":"ac85eab4_976c6a8e","updated":"2024-03-08 23:10:46.000000000","message":"Done","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4971c7551171d87c659cc630d17f22881c733677","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    cpu_dedicated_set \u003d hardware.get_cpu_dedicated_set_nozero() or set()"},{"line_number":104,"context_line":"    pcpus \u003d dst_numa_info.emulator_pins"},{"line_number":105,"context_line":"    for pins in dst_numa_info.cpu_pins.values():"},{"line_number":106,"context_line":"        pcpus \u003d pcpus.union(pins)"},{"line_number":107,"context_line":"    powered_up \u003d set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"b525f53b_f0a6347c","line":104,"updated":"2024-02-22 13:12:21.000000000","message":"nova fails here Feb 22 03:45:17.085381 np0036833327 nova-compute[103912]: ERROR oslo_messaging.rpc.server NotImplementedError: Cannot load \u0027emulator_pins\u0027 in the base class","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2ba2a79b05f41ade7cf886c01bdc0891c909178","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    cpu_dedicated_set \u003d hardware.get_cpu_dedicated_set_nozero() or set()"},{"line_number":104,"context_line":"    pcpus \u003d dst_numa_info.emulator_pins"},{"line_number":105,"context_line":"    for pins in dst_numa_info.cpu_pins.values():"},{"line_number":106,"context_line":"        pcpus \u003d pcpus.union(pins)"},{"line_number":107,"context_line":"    powered_up \u003d set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"dad1c93c_8b83fd2b","line":104,"in_reply_to":"b525f53b_f0a6347c","updated":"2024-03-11 12:55:48.000000000","message":"Done","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4eb457d3315dfdbf51ba72ce8bf79eeffd121979","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    powered_up \u003d set()"},{"line_number":108,"context_line":"    for pcpu in pcpus:"},{"line_number":109,"context_line":"        if pcpu in cpu_dedicated_set:"},{"line_number":110,"context_line":"            pcpu \u003d Core(pcpu)"},{"line_number":111,"context_line":"            if CONF.libvirt.cpu_power_management_strategy \u003d\u003d \u0027cpu_state\u0027:"},{"line_number":112,"context_line":"                pcpu.online \u003d True"},{"line_number":113,"context_line":"            else:"},{"line_number":114,"context_line":"                pcpu.set_high_governor()"},{"line_number":115,"context_line":"            powered_up.add(str(pcpu))"},{"line_number":116,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"2dc283ae_d17a52e5","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":37},"updated":"2024-02-22 08:31:07.000000000","message":"this is now repeated, lets pull this out to  function","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b546293c71016e707e56d1bebc9483928e292246","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    powered_up \u003d set()"},{"line_number":108,"context_line":"    for pcpu in pcpus:"},{"line_number":109,"context_line":"        if pcpu in cpu_dedicated_set:"},{"line_number":110,"context_line":"            pcpu \u003d Core(pcpu)"},{"line_number":111,"context_line":"            if CONF.libvirt.cpu_power_management_strategy \u003d\u003d \u0027cpu_state\u0027:"},{"line_number":112,"context_line":"                pcpu.online \u003d True"},{"line_number":113,"context_line":"            else:"},{"line_number":114,"context_line":"                pcpu.set_high_governor()"},{"line_number":115,"context_line":"            powered_up.add(str(pcpu))"},{"line_number":116,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"65e8f958_1bb7cbf3","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":37},"in_reply_to":"2dc283ae_d17a52e5","updated":"2024-02-22 10:38:37.000000000","message":"im wondering if we should factor out more then just this and also include the config check\nadd \n\n```\n_power_up_cpus(cpu_ids:ty.SET[int]):\n  # config check\n  …\n  for cpu in cpu_ids:\n   …\n```","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4971c7551171d87c659cc630d17f22881c733677","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    powered_up \u003d set()"},{"line_number":108,"context_line":"    for pcpu in pcpus:"},{"line_number":109,"context_line":"        if pcpu in cpu_dedicated_set:"},{"line_number":110,"context_line":"            pcpu \u003d Core(pcpu)"},{"line_number":111,"context_line":"            if CONF.libvirt.cpu_power_management_strategy \u003d\u003d \u0027cpu_state\u0027:"},{"line_number":112,"context_line":"                pcpu.online \u003d True"},{"line_number":113,"context_line":"            else:"},{"line_number":114,"context_line":"                pcpu.set_high_governor()"},{"line_number":115,"context_line":"            powered_up.add(str(pcpu))"},{"line_number":116,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f9c0e89_c6fc7dfe","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":37},"in_reply_to":"65e8f958_1bb7cbf3","updated":"2024-02-22 13:12:21.000000000","message":"works for me","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b1403721ffcf75ddae4c5e38c45ff1a170200dad","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    powered_up \u003d set()"},{"line_number":108,"context_line":"    for pcpu in pcpus:"},{"line_number":109,"context_line":"        if pcpu in cpu_dedicated_set:"},{"line_number":110,"context_line":"            pcpu \u003d Core(pcpu)"},{"line_number":111,"context_line":"            if CONF.libvirt.cpu_power_management_strategy \u003d\u003d \u0027cpu_state\u0027:"},{"line_number":112,"context_line":"                pcpu.online \u003d True"},{"line_number":113,"context_line":"            else:"},{"line_number":114,"context_line":"                pcpu.set_high_governor()"},{"line_number":115,"context_line":"            powered_up.add(str(pcpu))"},{"line_number":116,"context_line":"    LOG.debug(\"Cores powered up : %s\", powered_up)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"a29860a8_70ac5157","line":115,"range":{"start_line":110,"start_character":0,"end_line":115,"end_character":37},"in_reply_to":"9f9c0e89_c6fc7dfe","updated":"2024-03-08 23:10:46.000000000","message":"Done","commit_id":"a5dcd89592a7a6dbc29075c410692fc04342dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2ba2a79b05f41ade7cf886c01bdc0891c909178","unresolved":true,"context_lines":[{"line_number":117,"context_line":"        self, dst_numa_info: objects.LibvirtLiveMigrateNUMAInfo"},{"line_number":118,"context_line":"    ) -\u003e None:"},{"line_number":119,"context_line":"        pcpus \u003d set()"},{"line_number":120,"context_line":"        if \u0027emulator_pins\u0027 in dst_numa_info and dst_numa_info.emulator_pins:"},{"line_number":121,"context_line":"            pcpus \u003d dst_numa_info.emulator_pins"},{"line_number":122,"context_line":"        for pins in dst_numa_info.cpu_pins.values():"},{"line_number":123,"context_line":"            pcpus \u003d pcpus.union(pins)"},{"line_number":124,"context_line":"        self._power_up(pcpus)"}],"source_content_type":"text/x-python","patch_set":7,"id":"8586b19b_b0184f84","line":121,"range":{"start_line":120,"start_character":0,"end_line":121,"end_character":47},"updated":"2024-03-11 12:55:48.000000000","message":"I\u0027m tempted to pull this out to a helper, like get_emulator_pins, that return and empty dict if not pins is found so we can hide the conditional into the helper.","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b733d1ae2e102a888d884277dc8416b21839debf","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self, dst_numa_info: objects.LibvirtLiveMigrateNUMAInfo"},{"line_number":118,"context_line":"    ) -\u003e None:"},{"line_number":119,"context_line":"        pcpus \u003d set()"},{"line_number":120,"context_line":"        if \u0027emulator_pins\u0027 in dst_numa_info and dst_numa_info.emulator_pins:"},{"line_number":121,"context_line":"            pcpus \u003d dst_numa_info.emulator_pins"},{"line_number":122,"context_line":"        for pins in dst_numa_info.cpu_pins.values():"},{"line_number":123,"context_line":"            pcpus \u003d pcpus.union(pins)"},{"line_number":124,"context_line":"        self._power_up(pcpus)"}],"source_content_type":"text/x-python","patch_set":7,"id":"767898ae_4f1eb9fc","line":121,"range":{"start_line":120,"start_character":0,"end_line":121,"end_character":47},"in_reply_to":"7708e9c9_b2ed4223","updated":"2024-03-13 15:13:53.000000000","message":"As far as I see here unset, None, and having dict() as pcpus has the same effect so we could translate the conditional to a unconditional sequence that always returns a dict either empty or with the pins. Your are right that this might not be a generic helper as other caller might care about the different cases.\n\nLet\u0027s keep it as is as the fix is more important than this small nit.","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ff06b15dc77e4f8f0955cae395933b63a36122f","unresolved":true,"context_lines":[{"line_number":117,"context_line":"        self, dst_numa_info: objects.LibvirtLiveMigrateNUMAInfo"},{"line_number":118,"context_line":"    ) -\u003e None:"},{"line_number":119,"context_line":"        pcpus \u003d set()"},{"line_number":120,"context_line":"        if \u0027emulator_pins\u0027 in dst_numa_info and dst_numa_info.emulator_pins:"},{"line_number":121,"context_line":"            pcpus \u003d dst_numa_info.emulator_pins"},{"line_number":122,"context_line":"        for pins in dst_numa_info.cpu_pins.values():"},{"line_number":123,"context_line":"            pcpus \u003d pcpus.union(pins)"},{"line_number":124,"context_line":"        self._power_up(pcpus)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7708e9c9_b2ed4223","line":121,"range":{"start_line":120,"start_character":0,"end_line":121,"end_character":47},"in_reply_to":"8586b19b_b0184f84","updated":"2024-03-11 18:59:37.000000000","message":"There\u0027s technically a difference between being unset and being none, and I don\u0027t see a way of expressing in a helper, that would presumably return None in both cases. It\u0027s a super pedantic detail, and none of our code cares, but...","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"282546d614b1e1389c8a2fbca9aa6927c6612932","unresolved":true,"context_lines":[{"line_number":136,"context_line":"                else:"},{"line_number":137,"context_line":"                    pcpu.set_low_governor()"},{"line_number":138,"context_line":"                powered_down.add(str(pcpu))"},{"line_number":139,"context_line":"        LOG.info(\"Cores powered down : %s\", powered_down)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def power_down_for_migration("},{"line_number":142,"context_line":"        self, dst_numa_info: objects.LibvirtLiveMigrateNUMAInfo"}],"source_content_type":"text/x-python","patch_set":7,"id":"e4215da2_32caf065","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":16},"updated":"2024-03-11 14:13:38.000000000","message":"whoops, forgot to switch this back after debugging stuff in func tests locally.","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ff06b15dc77e4f8f0955cae395933b63a36122f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                else:"},{"line_number":137,"context_line":"                    pcpu.set_low_governor()"},{"line_number":138,"context_line":"                powered_down.add(str(pcpu))"},{"line_number":139,"context_line":"        LOG.info(\"Cores powered down : %s\", powered_down)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def power_down_for_migration("},{"line_number":142,"context_line":"        self, dst_numa_info: objects.LibvirtLiveMigrateNUMAInfo"}],"source_content_type":"text/x-python","patch_set":7,"id":"4ad24dab_9832cdd5","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":16},"in_reply_to":"e4215da2_32caf065","updated":"2024-03-11 18:59:37.000000000","message":"Done","commit_id":"01141881defdd73810ebace61226e9a544e8f246"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2ba2a79b05f41ade7cf886c01bdc0891c909178","unresolved":true,"context_lines":[{"line_number":11361,"context_line":""},{"line_number":11362,"context_line":"                migrate_data.bdms.append(bdmi)"},{"line_number":11363,"context_line":""},{"line_number":11364,"context_line":"        if \u0027dst_numa_info\u0027 in migrate_data and migrate_data.dst_numa_info:"},{"line_number":11365,"context_line":"            self.cpu_api.power_up_for_migration(migrate_data.dst_numa_info)"},{"line_number":11366,"context_line":"        else:"},{"line_number":11367,"context_line":"            LOG.debug(\u0027No dst_numa_info in migrate_data, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"71ebab1b_603e2396","line":11364,"updated":"2024-03-11 12:55:48.000000000","message":"nit: this conditional is now used twice so we could add a has_dst_numa_info() call to migrate_data","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4ff06b15dc77e4f8f0955cae395933b63a36122f","unresolved":true,"context_lines":[{"line_number":11361,"context_line":""},{"line_number":11362,"context_line":"                migrate_data.bdms.append(bdmi)"},{"line_number":11363,"context_line":""},{"line_number":11364,"context_line":"        if \u0027dst_numa_info\u0027 in migrate_data and migrate_data.dst_numa_info:"},{"line_number":11365,"context_line":"            self.cpu_api.power_up_for_migration(migrate_data.dst_numa_info)"},{"line_number":11366,"context_line":"        else:"},{"line_number":11367,"context_line":"            LOG.debug(\u0027No dst_numa_info in migrate_data, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"7fc996d8_ff3a5ae4","line":11364,"in_reply_to":"71ebab1b_603e2396","updated":"2024-03-11 18:59:37.000000000","message":"There\u0027s a bunch of other places there this idiom is used (I\u0027m thinking back to all the NUMA live migration code that I wrote), so do we want to do this refactor in a separate patch? Does it have any bearing on the backportability of this patch?","commit_id":"01141881defdd73810ebace61226e9a544e8f246"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b733d1ae2e102a888d884277dc8416b21839debf","unresolved":false,"context_lines":[{"line_number":11361,"context_line":""},{"line_number":11362,"context_line":"                migrate_data.bdms.append(bdmi)"},{"line_number":11363,"context_line":""},{"line_number":11364,"context_line":"        if \u0027dst_numa_info\u0027 in migrate_data and migrate_data.dst_numa_info:"},{"line_number":11365,"context_line":"            self.cpu_api.power_up_for_migration(migrate_data.dst_numa_info)"},{"line_number":11366,"context_line":"        else:"},{"line_number":11367,"context_line":"            LOG.debug(\u0027No dst_numa_info in migrate_data, \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"980885ff_9dd76913","line":11364,"in_reply_to":"7fc996d8_ff3a5ae4","updated":"2024-03-13 15:13:53.000000000","message":"Sure, let\u0027s keep it as is.","commit_id":"01141881defdd73810ebace61226e9a544e8f246"}]}
