)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"45f422f8f115d203c46164d2e05d214735c6d052","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":20,"context_line":"Signed-off-by: Wang Huaqiang \u003chuaqiang.wang@intel.com\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I901fbd7df00e45196395ff4c69e7b8aa3359edf6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df33271e_b8128460","line":22,"updated":"2020-04-02 18:12:59.000000000","message":"Thanks.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":20,"context_line":"Signed-off-by: Wang Huaqiang \u003chuaqiang.wang@intel.com\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I901fbd7df00e45196395ff4c69e7b8aa3359edf6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df33271e_3d5306e4","line":22,"updated":"2020-04-02 16:43:10.000000000","message":"super nit: can you put this above the Signed-off-by lines, please :)","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u0027InstanceNUMACell.pcpuset\u0027 field."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch is based on https://review.opendev.org/714707 and"},{"line_number":22,"context_line":"https://review.opendev.org/714705."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Part of blueprint use-pcpu-and-vcpu-in-one-instance"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bf51134e_477e1fe4","line":22,"updated":"2020-07-13 16:33:27.000000000","message":"Dropped.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"content of \u0027InstanceNUMACell.cpuset\u0027 and move it to"},{"line_number":19,"context_line":"\u0027InstanceNUMACell.pcpuset\u0027 field."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch is based on https://review.opendev.org/714707 and"},{"line_number":22,"context_line":"https://review.opendev.org/714705."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Part of blueprint use-pcpu-and-vcpu-in-one-instance"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bf51134e_93eb5d76","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":34},"updated":"2020-07-13 13:51:15.000000000","message":"nit: You could probably drop this, since it won\u0027t be all that relevant in the future","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"}],"nova/api/openstack/compute/server_topology.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"53eceb72a445936998570b64893bcff21a282247","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        for cell_ in instance.numa_topology.cells:"},{"line_number":53,"context_line":"            cell \u003d {}"},{"line_number":54,"context_line":"            cell[\u0027vcpu_set\u0027] \u003d cell_.cpuset"},{"line_number":55,"context_line":"            cell[\u0027pcpu_set\u0027] \u003d cell_.pcpuset"},{"line_number":56,"context_line":"            cell[\u0027siblings\u0027] \u003d cell_.siblings"},{"line_number":57,"context_line":"            cell[\u0027memory_mb\u0027] \u003d cell_.memory"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_c6071082","line":55,"updated":"2020-03-30 03:01:22.000000000","message":"we aren\u0027t going to add new field for this API, at least, not in this spec.","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a27fd3f06277e89ac6410363f2c4a8dc073f4dee","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        for cell_ in instance.numa_topology.cells:"},{"line_number":53,"context_line":"            cell \u003d {}"},{"line_number":54,"context_line":"            cell[\u0027vcpu_set\u0027] \u003d cell_.cpuset"},{"line_number":55,"context_line":"            cell[\u0027pcpu_set\u0027] \u003d cell_.pcpuset"},{"line_number":56,"context_line":"            cell[\u0027siblings\u0027] \u003d cell_.siblings"},{"line_number":57,"context_line":"            cell[\u0027memory_mb\u0027] \u003d cell_.memory"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_f3776a9f","line":55,"in_reply_to":"df33271e_c6071082","updated":"2020-03-30 16:04:53.000000000","message":"Yeah, you should just combine the sets for now. We can expose this properly in a new API microversion","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"}],"nova/notifications/objects/request_spec.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a27fd3f06277e89ac6410363f2c4a8dc073f4dee","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        for numa_cell in numa_cell_list:"},{"line_number":193,"context_line":"            payloads.append(cls(numa_cell))"},{"line_number":194,"context_line":"        return payloads"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":198,"context_line":"class VirtCPUTopologyPayload(base.NotificationPayloadBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_935ede0f","line":195,"updated":"2020-03-30 16:04:53.000000000","message":"Do we need to provide a \u0027obj_make_compatible\u0027 function? I\u0027d assume not given this isn\u0027t going over the wire, but I\u0027m not sure","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \u0027cpu_pinning_raw\u0027: (\u0027numa_cell\u0027, \u0027cpu_pinning_raw\u0027),"},{"line_number":159,"context_line":"        \u0027cpu_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_policy\u0027),"},{"line_number":160,"context_line":"        \u0027cpu_thread_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_thread_policy\u0027),"},{"line_number":161,"context_line":"        \u0027cpuset_reserved\u0027: (\u0027numa_cell\u0027, \u0027cpuset_reserved\u0027),"},{"line_number":162,"context_line":"    }"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_6e6184a9","line":161,"updated":"2020-04-01 03:42:26.000000000","message":"Yes. Moved \u0027cpuset_reserved\u0027 to a bit upper position, and be close t \u0027cpuset\u0027 and the new \u0027pcpuset\u0027 fields.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \u0027cpu_pinning_raw\u0027: (\u0027numa_cell\u0027, \u0027cpu_pinning_raw\u0027),"},{"line_number":159,"context_line":"        \u0027cpu_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_policy\u0027),"},{"line_number":160,"context_line":"        \u0027cpu_thread_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_thread_policy\u0027),"},{"line_number":161,"context_line":"        \u0027cpuset_reserved\u0027: (\u0027numa_cell\u0027, \u0027cpuset_reserved\u0027),"},{"line_number":162,"context_line":"    }"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_983d32df","line":161,"updated":"2020-04-01 02:28:38.000000000","message":"you move this, right?","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \u0027cpu_pinning_raw\u0027: (\u0027numa_cell\u0027, \u0027cpu_pinning_raw\u0027),"},{"line_number":159,"context_line":"        \u0027cpu_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_policy\u0027),"},{"line_number":160,"context_line":"        \u0027cpu_thread_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_thread_policy\u0027),"},{"line_number":161,"context_line":"        \u0027cpuset_reserved\u0027: (\u0027numa_cell\u0027, \u0027cpuset_reserved\u0027),"},{"line_number":162,"context_line":"    }"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_e2473b1c","line":161,"in_reply_to":"df33271e_6e6184a9","updated":"2020-04-02 16:21:28.000000000","message":"Yup, makes sense to me","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30077,"name":"Qiu Fossen","display_name":"fossnqiu","email":"qiujunting@inspur.com","username":"qiufossen"},"change_message_id":"aad76866185c1e9fdc839c22b7b71ecafe71958c","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \u0027cpu_pinning_raw\u0027: (\u0027numa_cell\u0027, \u0027cpu_pinning_raw\u0027),"},{"line_number":159,"context_line":"        \u0027cpu_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_policy\u0027),"},{"line_number":160,"context_line":"        \u0027cpu_thread_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_thread_policy\u0027),"},{"line_number":161,"context_line":"        \u0027cpuset_reserved\u0027: (\u0027numa_cell\u0027, \u0027cpuset_reserved\u0027),"},{"line_number":162,"context_line":"    }"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_489d5dba","line":161,"range":{"start_line":161,"start_character":7,"end_line":161,"end_character":60},"updated":"2020-04-03 03:35:33.000000000","message":"Here and repeated the line 155","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"c191b51a0a8d78cc91c2f674eba3f186f157d638","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \u0027cpu_pinning_raw\u0027: (\u0027numa_cell\u0027, \u0027cpu_pinning_raw\u0027),"},{"line_number":159,"context_line":"        \u0027cpu_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_policy\u0027),"},{"line_number":160,"context_line":"        \u0027cpu_thread_policy\u0027: (\u0027numa_cell\u0027, \u0027cpu_thread_policy\u0027),"},{"line_number":161,"context_line":"        \u0027cpuset_reserved\u0027: (\u0027numa_cell\u0027, \u0027cpuset_reserved\u0027),"},{"line_number":162,"context_line":"    }"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_48eb9d11","line":161,"range":{"start_line":161,"start_character":7,"end_line":161,"end_character":60},"in_reply_to":"df33271e_489d5dba","updated":"2020-04-03 03:37:49.000000000","message":"Good catch. Will remove this one.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6e02e177bce550e49e1d508c6cb7bf33714da97c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            self.cpu_topology \u003d None"},{"line_number":185,"context_line":"        self.populate_schema(numa_cell\u003dnuma_cell)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":188,"context_line":"        super(InstanceNUMACellPayload, self).obj_make_compatible("},{"line_number":189,"context_line":"            primitive, target_version)"},{"line_number":190,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_5beadf74","line":187,"range":{"start_line":187,"start_character":5,"end_line":187,"end_character":61},"updated":"2020-04-08 07:07:52.000000000","message":"I\u0027m not sure we need this for notification objects, but gibi can help to ensure this.","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"948414bef5abdf7e200f1539f13edea6ef27404d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            self.cpu_topology \u003d None"},{"line_number":185,"context_line":"        self.populate_schema(numa_cell\u003dnuma_cell)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":188,"context_line":"        super(InstanceNUMACellPayload, self).obj_make_compatible("},{"line_number":189,"context_line":"            primitive, target_version)"},{"line_number":190,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_a3c0152c","line":187,"range":{"start_line":187,"start_character":5,"end_line":187,"end_character":61},"in_reply_to":"df33271e_5beadf74","updated":"2020-05-18 05:55:15.000000000","message":"Done","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"}],"nova/objects/instance_numa.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"05dd0c9ca94d34d4832718c9628d107fc0cad592","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cpuset \u003d hardware.parse_cpu_spec(data_dict.get(\u0027cpus\u0027, \u0027\u0027))"},{"line_number":83,"context_line":"        memory \u003d data_dict.get(\u0027mem\u0027, {}).get(\u0027total\u0027, 0)"},{"line_number":84,"context_line":"        cell_id \u003d data_dict.get(\u0027id\u0027)"},{"line_number":85,"context_line":"        pagesize \u003d data_dict.get(\u0027pagesize\u0027)"},{"line_number":86,"context_line":"        return cls(id\u003dcell_id, cpuset\u003dcpuset,"},{"line_number":87,"context_line":"                   memory\u003dmemory, pagesize\u003dpagesize)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_0a5ad14d","line":85,"updated":"2020-03-26 05:51:48.000000000","message":"you probably need some special thing here, like, you found this cpu policy is dedicated, but the pcpuset is empty, then you fullfill the pcpuset with vcpuset.","commit_id":"da3a3b3e2c7c89ee88ced64375b1053d777fd97d"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"12fabf32cf10f02aa9f658b0f0f18353e3db7040","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cpuset \u003d hardware.parse_cpu_spec(data_dict.get(\u0027cpus\u0027, \u0027\u0027))"},{"line_number":83,"context_line":"        memory \u003d data_dict.get(\u0027mem\u0027, {}).get(\u0027total\u0027, 0)"},{"line_number":84,"context_line":"        cell_id \u003d data_dict.get(\u0027id\u0027)"},{"line_number":85,"context_line":"        pagesize \u003d data_dict.get(\u0027pagesize\u0027)"},{"line_number":86,"context_line":"        return cls(id\u003dcell_id, cpuset\u003dcpuset,"},{"line_number":87,"context_line":"                   memory\u003dmemory, pagesize\u003dpagesize)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_9f2298a3","line":85,"in_reply_to":"df33271e_0a5ad14d","updated":"2020-03-26 16:51:14.000000000","message":"Got.Thanks","commit_id":"da3a3b3e2c7c89ee88ced64375b1053d777fd97d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dd74310fd175d7763971418816012684f71f685b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def _from_dict(cls, data_dict):"},{"line_number":89,"context_line":"        # NOTE(sahid): Used as legacy, could be renamed in"},{"line_number":90,"context_line":"        # _legacy_from_dict_ to the future to avoid confusing."},{"line_number":91,"context_line":"        cpuset \u003d hardware.parse_cpu_spec(data_dict.get(\u0027cpus\u0027, \u0027\u0027))"},{"line_number":92,"context_line":"        memory \u003d data_dict.get(\u0027mem\u0027, {}).get(\u0027total\u0027, 0)"},{"line_number":93,"context_line":"        cell_id \u003d data_dict.get(\u0027id\u0027)"},{"line_number":94,"context_line":"        pagesize \u003d data_dict.get(\u0027pagesize\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_b6dae274","line":91,"updated":"2020-03-31 06:39:09.000000000","message":"we need something here to test, if the pcpu is none, but the cpu_policy is dedicated, then copy the vcpu to pcpu.","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":97,"context_line":"        if vcpu not in self.cpuset:"},{"line_number":98,"context_line":"            return"},{"line_number":99,"context_line":"        pinning_dict \u003d self.cpu_pinning or {}"},{"line_number":100,"context_line":"        pinning_dict[vcpu] \u003d pcpu"},{"line_number":101,"context_line":"        self.cpu_pinning \u003d pinning_dict"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_18548220","side":"PARENT","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":18},"updated":"2020-04-01 02:28:38.000000000","message":"Emm...I know this isn\u0027t your problem. I\u0027m thinking we should raise exception. It must be a bug if we reach here. But this can be fix later","commit_id":"0e17528f7362cff98e7d7ce30e5d3b9c83eb0e2c"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1c4355cb3428dd37a6e4c2409959bbdd0db14104","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":55,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":56,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":57,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":58,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":59,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_1801f006","line":56,"updated":"2020-04-02 18:13:42.000000000","message":"@Alex ans @Stepen, I found if I set it as obj_fields.SetOfIntegersField(default\u003dset()), will avoid a lot of code cahnges, see my changes of my next update. (acutally I have sent it out. you can check how I make it done in that.)","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":55,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":56,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":57,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":58,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":59,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_ee74746a","line":56,"updated":"2020-04-01 03:42:26.000000000","message":"I assumed that in \u0027InstanceNUMACell\u0027, \u0027pcpuset\u0027 is of equal importance of \u0027cpuset\u0027, since \u0027cpuset\u0027 is not nullable, then \n\u0027pcpuset\u0027 is not nullable.\n\nIf you perfer to say \u0027pcpuset\u0027 could be a optional field, I can change as you said.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":55,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":56,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":57,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":58,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":59,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_986ff2fa","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":51},"updated":"2020-04-01 02:28:38.000000000","message":"maybe we should set it as \u0027nullable\u003dTrue\u0027 and \u0027default\u003dNone\u0027","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":55,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":56,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":57,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":58,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":59,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_425387e2","line":56,"in_reply_to":"df33271e_ee74746a","updated":"2020-04-02 16:21:28.000000000","message":"We shouldn\u0027t. This should always be a set. It will be an empty set for shared instances.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    cpu_pinning \u003d obj_fields.DictProxyField(\u0027cpu_pinning_raw\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def __len__(self):"},{"line_number":76,"context_line":"        return len(self.cpuset) + len(self.pcpuset)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @classmethod"},{"line_number":79,"context_line":"    def _from_dict(cls, data_dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_b86ab6e9","line":76,"range":{"start_line":76,"start_character":38,"end_line":76,"end_character":50},"updated":"2020-04-01 02:28:38.000000000","message":"I guess, you can\u0027t assume the pcpuset is set, right?","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    cpu_pinning \u003d obj_fields.DictProxyField(\u0027cpu_pinning_raw\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def __len__(self):"},{"line_number":76,"context_line":"        return len(self.cpuset) + len(self.pcpuset)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @classmethod"},{"line_number":79,"context_line":"    def _from_dict(cls, data_dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_ce71b078","line":76,"updated":"2020-04-01 03:42:26.000000000","message":"I have assumed pcpuset is set. I have cleared in-tree unit tests and functional test as far as I can do. There may have\npotential issue for thrid-part code that using this, but \u0027NUMACell.pcpuset\u0027 is also added as a non-nullable field.\nYou still think I should make \u0027pcpuset\u0027 be nullable?","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @property"},{"line_number":90,"context_line":"    def siblings(self):"},{"line_number":91,"context_line":"        cpu_list \u003d sorted(list(self.cpuset) + list(self.pcpuset))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        threads \u003d 0"},{"line_number":94,"context_line":"        if (\u0027cpu_topology\u0027 in self) and self.cpu_topology:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_d874dad1","line":91,"range":{"start_line":91,"start_character":51,"end_line":91,"end_character":63},"updated":"2020-04-01 02:28:38.000000000","message":"ditto, assume the pcpuset is set here also.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1c4355cb3428dd37a6e4c2409959bbdd0db14104","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":102,"context_line":"        if \u0027pcpuset\u0027 in self:"},{"line_number":103,"context_line":"            if vcpu not in self.pcpuset:"},{"line_number":104,"context_line":"                return"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_73013f05","line":102,"updated":"2020-04-02 18:13:42.000000000","message":"I also think it could be deleted. \nAnd \u0027obj_from_primitive\u0027 I have done in the update of this patch[1].\n\n[1]","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":102,"context_line":"        if \u0027pcpuset\u0027 in self:"},{"line_number":103,"context_line":"            if vcpu not in self.pcpuset:"},{"line_number":104,"context_line":"                return"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_387ea6ae","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":29},"updated":"2020-04-01 02:28:38.000000000","message":"yea, there is check to ensure the pcpuset is set.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":102,"context_line":"        if \u0027pcpuset\u0027 in self:"},{"line_number":103,"context_line":"            if vcpu not in self.pcpuset:"},{"line_number":104,"context_line":"                return"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_8230efa0","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":29},"in_reply_to":"df33271e_387ea6ae","updated":"2020-04-02 16:21:28.000000000","message":"Actually, this isn\u0027t needed now if we\u0027re definitely setting \u0027pcpuset\u0027 everywhere in the code and if we modify \u0027obj_from_primitive\u0027 to set the attribute","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1c4355cb3428dd37a6e4c2409959bbdd0db14104","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj_topology \u003d super(InstanceNUMATopology, cls).obj_from_primitive("},{"line_number":155,"context_line":"                primitive, context\u003dNone)"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_5304fb14","line":154,"updated":"2020-04-02 18:13:42.000000000","message":"@Stephen, thanks for the comments, I\u0027ll think how to make it.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj_topology \u003d super(InstanceNUMATopology, cls).obj_from_primitive("},{"line_number":155,"context_line":"                primitive, context\u003dNone)"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_2e6bfc84","line":154,"updated":"2020-04-01 03:42:26.000000000","message":"Maybe we should talk about his in two situations.\n\n1. For legacy situation, for the case \"\u0027nova_object.name\u0027 not in db_obj\".\nWe\u0027ll not support this situation any longer, right?\n\n2. For case \"\u0027nova_object.name\u0027 in db_obj\", the generation of \u0027InstanceNUMACell.pcpuset\u0027 is generated through the role of NovaObject class, and I need not to make any extra work for it.\n\nRegarding the translation of any \u0027cpuset\u0027 to \u0027pcpuset\u0027, I don\u0027t think this kind of translation is happened here. In my thought, \u0027InstanceNUMACell\u0027 regard any CPU in \u0027cpuset\u0027 as shared CPU, and any CPU in \u0027pcpuset\u0027 field as dedicated CPU.\n\nIf you pass a DEDICATED cpu policy to InstanceNUMACEll, in creating the InstanceNUMACell object, you should set \u0027cpuset\u0027 filed to set([]), and \u0027pcpuset\u0027 to set(rangex(flavor.vcpus)).\n\nSo, in conclusion, there is no cpuset to pcpuset migration taking place inside the InstanceNUMACell class.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"31de6c0b8c7ad0b06553945bc616c4d386c64404","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj_topology \u003d super(InstanceNUMATopology, cls).obj_from_primitive("},{"line_number":155,"context_line":"                primitive, context\u003dNone)"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_d8bdf1b7","line":154,"updated":"2020-04-01 11:22:30.000000000","message":"[Later] Now I understand what you mean for migration. You are talking about the existing InstanceNUMACell object kept in db, and there is no \u0027pcpuset\u0027 field, onc we find such already exisiting instance cell object, we should move the value of \u0027cpuset\u0027 to \u0027pcpuset\u0027 and clear the \u0027cpuset\u0027 field, once we find the cpu_poicy is \u0027dedicated\u0027.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj_topology \u003d super(InstanceNUMATopology, cls).obj_from_primitive("},{"line_number":155,"context_line":"                primitive, context\u003dNone)"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_58528a3c","line":154,"range":{"start_line":154,"start_character":60,"end_line":154,"end_character":78},"updated":"2020-04-01 02:28:38.000000000","message":"yea, I guess you forget to add the code for migrating cpuset to pcpuset.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj_topology \u003d super(InstanceNUMATopology, cls).obj_from_primitive("},{"line_number":155,"context_line":"                primitive, context\u003dNone)"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_02fb3fc0","line":154,"in_reply_to":"df33271e_d8bdf1b7","updated":"2020-04-02 16:21:28.000000000","message":"\u003e [Later] Now I understand what you mean for migration. You are\n \u003e talking about the existing InstanceNUMACell object kept in db, and\n \u003e there is no \u0027pcpuset\u0027 field, onc we find such already exisiting\n \u003e instance cell object, we should move the value of \u0027cpuset\u0027 to\n \u003e \u0027pcpuset\u0027 and clear the \u0027cpuset\u0027 field, once we find the cpu_poicy\n \u003e is \u0027dedicated\u0027.\n\nYes, that would allow us to do this migration in real-time. We could add a proper migration like [1] down the line.\n\nThen again, maybe it would be wiser to do that migration now? I\u0027m not sure. Might be worth asking dansmith\n\n[1] https://review.opendev.org/#/c/537414/","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1c4355cb3428dd37a6e4c2409959bbdd0db14104","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"},{"line_number":158,"context_line":"            # guarantee that there are no cases of the old format stored in"},{"line_number":159,"context_line":"            # the database (or forever, if we can never guarantee that)."},{"line_number":160,"context_line":"            obj_topology \u003d InstanceNUMATopology._from_dict(primitive)"},{"line_number":161,"context_line":"            obj_topology.id \u003d 0"},{"line_number":162,"context_line":"        return obj_topology"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_b3074718","line":160,"updated":"2020-04-02 18:13:42.000000000","message":"My understand is to set pcpuset\u003dset(), as you mentioned in [here_], right?\n[here_]https://review.opendev.org/#/c/714658/4/nova/objects/instance_numa.py","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            # NOTE(sahid): This compatibility code needs to stay until we can"},{"line_number":158,"context_line":"            # guarantee that there are no cases of the old format stored in"},{"line_number":159,"context_line":"            # the database (or forever, if we can never guarantee that)."},{"line_number":160,"context_line":"            obj_topology \u003d InstanceNUMATopology._from_dict(primitive)"},{"line_number":161,"context_line":"            obj_topology.id \u003d 0"},{"line_number":162,"context_line":"        return obj_topology"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_0224df5c","line":160,"range":{"start_line":160,"start_character":48,"end_line":160,"end_character":58},"updated":"2020-04-02 16:21:28.000000000","message":"Until [1] merges, you also need to update this to set \u0027pcpuset\u0027.\n\n[1] https://review.opendev.org/#/c/537414/","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"243adc4633010db23d9643e8f234c614f551352c","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"},{"line_number":86,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":87,"context_line":"        if primitive[\u0027nova_object.name\u0027] \u003d\u003d cls.__name__:"},{"line_number":88,"context_line":"            obj \u003d super(InstanceNUMACell, cls).obj_from_primitive("},{"line_number":89,"context_line":"                primitive, context\u003dNone)"},{"line_number":90,"context_line":"            data \u003d primitive[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_6f09d92a","line":87,"updated":"2020-04-08 08:47:29.000000000","message":"@stephen, if this url:https://review.opendev.org/#/c/718345/ is merged, the `else` statements could be removed.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"},{"line_number":86,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":87,"context_line":"        if primitive[\u0027nova_object.name\u0027] \u003d\u003d cls.__name__:"},{"line_number":88,"context_line":"            obj \u003d super(InstanceNUMACell, cls).obj_from_primitive("},{"line_number":89,"context_line":"                primitive, context\u003dNone)"},{"line_number":90,"context_line":"            data \u003d primitive[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_02069f52","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":57},"updated":"2020-04-02 16:43:10.000000000","message":"I don\u0027t understand why this if-else is necessary. Could you explain by way of a NOTE here? I would have expected something like this:\n\n    obj \u003d super(InstanceNUMACell, cls).obj_from_primitive(\n                primitive, context\u003dNone)\n    if \u0027cpu_policy\u0027 in obj and obj.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:\n        if \u0027pcpuset\u0027 not in obj:\n            obj.pcpuset \u003d obj.cpuset\n            obj.cpuset \u003d set()\n    return obj\n\nBut maybe that\u0027s not possible?\n\nLater: Ah, I think you might be copy-pasting from the definition in \u0027InstanceNUMATopology\u0027? If so, that\u0027s wrong. The reason we do it that way is because we didn\u0027t always store instance NUMA topologies as oslo.versionedobjects in the DB. You\u0027re never going to hit that here though, so you can drop the \u0027else\u0027 clause here","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"45f422f8f115d203c46164d2e05d214735c6d052","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"},{"line_number":86,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":87,"context_line":"        if primitive[\u0027nova_object.name\u0027] \u003d\u003d cls.__name__:"},{"line_number":88,"context_line":"            obj \u003d super(InstanceNUMACell, cls).obj_from_primitive("},{"line_number":89,"context_line":"                primitive, context\u003dNone)"},{"line_number":90,"context_line":"            data \u003d primitive[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_9815004c","line":87,"updated":"2020-04-02 18:12:59.000000000","message":"[later] It should be the code of \u0027oslo_versionedobjects.fields.Object.from_primitive()\u0027 is not that smart, not \u0027oslo_versioned_object.ObjectFeild.from_primitive()\u0027, I spelt out the later according to my bad memory.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"},{"line_number":86,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":87,"context_line":"        if primitive[\u0027nova_object.name\u0027] \u003d\u003d cls.__name__:"},{"line_number":88,"context_line":"            obj \u003d super(InstanceNUMACell, cls).obj_from_primitive("},{"line_number":89,"context_line":"                primitive, context\u003dNone)"},{"line_number":90,"context_line":"            data \u003d primitive[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_bd339661","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":57},"in_reply_to":"df33271e_02069f52","updated":"2020-04-02 17:30:15.000000000","message":"No. I have debugged this for a whole day, and learn a lot about \u0027VersionedObject\u0027. \n\nThe reason is not only \u0027InstanceNUMATopology.obj_from_primitive\u0027 will call this method, but the \u0027oslo_versioned_object.ObjectField\u0027 will effectively call this function pass the result of \u0027VirtCPUTopology.obj_to_primitive\u0027 as argument \u0027primitive\u0027.\n\nThe code for oslo_versioned_object.ObjectFeild.from_primitive() method is not that smart.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"51154f658be4d688b2117874ab0591a6f62ddfca","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"},{"line_number":86,"context_line":"    def obj_from_primitive(cls, primitive, context\u003dNone):"},{"line_number":87,"context_line":"        if primitive[\u0027nova_object.name\u0027] \u003d\u003d cls.__name__:"},{"line_number":88,"context_line":"            obj \u003d super(InstanceNUMACell, cls).obj_from_primitive("},{"line_number":89,"context_line":"                primitive, context\u003dNone)"},{"line_number":90,"context_line":"            data \u003d primitive[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_b32a5029","line":87,"in_reply_to":"df33271e_9815004c","updated":"2020-04-07 11:09:14.000000000","message":"Hi Stephen, Here is a note summary:\nThe @primitive argument that passed in to InstanceNUMACell.obj_from_primitive sometimes is not a primitive dictionary of object InstanceNUMACell, it could be a primitive dictionary of an object in its fields list. In this case, it could be a dictoionary of VirtCPUTopology primitive. So I need a if and else statement.\n\nAnd I put the content in detail in this link:\nhttps://etherpad.openstack.org/p/versioned_object-obj_from_primitive-behavior","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        memory \u003d data_dict.get(\u0027mem\u0027, {}).get(\u0027total\u0027, 0)"},{"line_number":107,"context_line":"        cell_id \u003d data_dict.get(\u0027id\u0027)"},{"line_number":108,"context_line":"        pagesize \u003d data_dict.get(\u0027pagesize\u0027)"},{"line_number":109,"context_line":"        return cls(id\u003dcell_id, cpuset\u003dcpuset,"},{"line_number":110,"context_line":"                   memory\u003dmemory, pagesize\u003dpagesize)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_fddebe6a","line":109,"updated":"2020-04-02 16:43:10.000000000","message":"You need to set pcpuset to an empty set here, otherwise legacy objects from before Kilo will break your assumption that pcpuset is always set","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        memory \u003d data_dict.get(\u0027mem\u0027, {}).get(\u0027total\u0027, 0)"},{"line_number":107,"context_line":"        cell_id \u003d data_dict.get(\u0027id\u0027)"},{"line_number":108,"context_line":"        pagesize \u003d data_dict.get(\u0027pagesize\u0027)"},{"line_number":109,"context_line":"        return cls(id\u003dcell_id, cpuset\u003dcpuset,"},{"line_number":110,"context_line":"                   memory\u003dmemory, pagesize\u003dpagesize)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_3d4786be","line":109,"in_reply_to":"df33271e_fddebe6a","updated":"2020-04-02 17:30:15.000000000","message":"Sure.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":125,"context_line":"        if \u0027pcpuset\u0027 in self:"},{"line_number":126,"context_line":"            if vcpu not in self.pcpuset:"},{"line_number":127,"context_line":"                return"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_224923b6","line":125,"range":{"start_line":125,"start_character":0,"end_line":125,"end_character":29},"updated":"2020-04-02 16:43:10.000000000","message":"This can be dropped since pcpuset will always be set","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":125,"context_line":"        if \u0027pcpuset\u0027 in self:"},{"line_number":126,"context_line":"            if vcpu not in self.pcpuset:"},{"line_number":127,"context_line":"                return"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_1d4282ab","line":125,"range":{"start_line":125,"start_character":0,"end_line":125,"end_character":29},"in_reply_to":"df33271e_224923b6","updated":"2020-04-02 17:30:15.000000000","message":"OK.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6e02e177bce550e49e1d508c6cb7bf33714da97c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                                                          target_version)"},{"line_number":42,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":43,"context_line":"        # From 1.4 to 1.5, the meaning of \u0027cpuset\u0027 was alerted and be"},{"line_number":44,"context_line":"        # special for shared CPUs. We provide a backward  compatibility to"},{"line_number":45,"context_line":"        # move \u0027pcpuset\u0027 value to \u0027cpuset\u0027 field for an instance cell with a"},{"line_number":46,"context_line":"        # \u0027dedicated\u0027 CPU allocation policy when this happens."},{"line_number":47,"context_line":"        if target_version \u003c (1, 5):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_7bfec338","line":44,"range":{"start_line":44,"start_character":56,"end_line":44,"end_character":58},"updated":"2020-04-08 07:07:52.000000000","message":"nit, double space here","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"096f2729c451672d133c4dad6b34270902450a69","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                                                          target_version)"},{"line_number":42,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":43,"context_line":"        # From 1.4 to 1.5, the meaning of \u0027cpuset\u0027 was alerted and be"},{"line_number":44,"context_line":"        # special for shared CPUs. We provide a backward  compatibility to"},{"line_number":45,"context_line":"        # move \u0027pcpuset\u0027 value to \u0027cpuset\u0027 field for an instance cell with a"},{"line_number":46,"context_line":"        # \u0027dedicated\u0027 CPU allocation policy when this happens."},{"line_number":47,"context_line":"        if target_version \u003c (1, 5):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_4f5df5e7","line":44,"range":{"start_line":44,"start_character":56,"end_line":44,"end_character":58},"in_reply_to":"df33271e_7bfec338","updated":"2020-04-08 09:00:25.000000000","message":"Done","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86d08cd2b90d57492e8cd9db2710594fe7c2cce4","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                values \u003d {"},{"line_number":169,"context_line":"                    \u0027numa_topology\u0027: db_obj,"},{"line_number":170,"context_line":"                }"},{"line_number":171,"context_line":"                db.instance_extra_update_by_uuid(context, instance_uuid,"},{"line_number":172,"context_line":"                                                 values)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bf51134e_6f7e276c","line":172,"range":{"start_line":171,"start_character":16,"end_line":172,"end_character":56},"updated":"2020-06-17 07:13:23.000000000","message":"I guess you need to call \u0027obj_reset_changes\u0027 after this.","commit_id":"0b31a819499d7312fcfe5a87dca9a342462eea3e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2fa7d96ba68a3eb6dbba4b81b7d7aab55b4a3551","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                values \u003d {"},{"line_number":169,"context_line":"                    \u0027numa_topology\u0027: db_obj,"},{"line_number":170,"context_line":"                }"},{"line_number":171,"context_line":"                db.instance_extra_update_by_uuid(context, instance_uuid,"},{"line_number":172,"context_line":"                                                 values)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bf51134e_0c379ce5","line":172,"range":{"start_line":171,"start_character":16,"end_line":172,"end_character":56},"in_reply_to":"bf51134e_6f7e276c","updated":"2020-06-18 06:55:18.000000000","message":"Sorry, actually, we needn\u0027t which field changed when we update to the db, so it is useless to reset the changes.","commit_id":"0b31a819499d7312fcfe5a87dca9a342462eea3e"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                                                          target_version)"},{"line_number":42,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":43,"context_line":"        # Note(huaqiang): From 1.4 to 1.5, the meaning of \u0027cpuset\u0027 was alerted"},{"line_number":44,"context_line":"        # and being special for keeping shared CPUs. We provide a backward"},{"line_number":45,"context_line":"        # compatibility to move \u0027pcpuset\u0027 value to \u0027cpuset\u0027 field for an"},{"line_number":46,"context_line":"        # instance cell with a \u0027dedicated\u0027 CPU allocation policy when this"},{"line_number":47,"context_line":"        # happens."}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_2dd8f750","line":44,"updated":"2020-06-29 10:37:38.000000000","message":"This\u0027s a better wording. Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(InstanceNUMACell, self).obj_make_compatible(primitive,"},{"line_number":41,"context_line":"                                                          target_version)"},{"line_number":42,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":43,"context_line":"        # Note(huaqiang): From 1.4 to 1.5, the meaning of \u0027cpuset\u0027 was alerted"},{"line_number":44,"context_line":"        # and being special for keeping shared CPUs. We provide a backward"},{"line_number":45,"context_line":"        # compatibility to move \u0027pcpuset\u0027 value to \u0027cpuset\u0027 field for an"},{"line_number":46,"context_line":"        # instance cell with a \u0027dedicated\u0027 CPU allocation policy when this"},{"line_number":47,"context_line":"        # happens."}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_086e2cc8","line":44,"range":{"start_line":43,"start_character":71,"end_line":44,"end_character":51},"updated":"2020-06-22 10:17:47.000000000","message":"modified to only track unpinned CPUs, with pinned CPUs tracked via \u0027pcpuset\u0027 instead.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    fields \u003d {"},{"line_number":62,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":63,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":64,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(default\u003dset()),"},{"line_number":65,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":66,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":67,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_8ddb034d","line":64,"updated":"2020-06-29 10:37:38.000000000","message":"In the design of this patch, line #83 and #87 and some place else, the \u0027pcpuset\u0027 property should not be an un-set property in any \u0027InstanceNUMACell\u0027 object, so we need to make a assignment either in defintion or object initialization stage.\n\n\u003e  we can detect places where we\u0027ve forgotten to update it\nI think you mean to detect the \u0027place\u0027 that the instanace has a \u0027dedicated\u0027 policy but \u0027pcpuset\u0027 is not updated manually. If we make the \u0027pcpuset\u0027 without a default value, it helps by raising a NotImplementedError.\n\nI agree to remove the default value and manually add it at each place creating a InstanceNUMACell object.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    fields \u003d {"},{"line_number":62,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":63,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":64,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(default\u003dset()),"},{"line_number":65,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":66,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":67,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_68452843","line":64,"range":{"start_line":64,"start_character":49,"end_line":64,"end_character":62},"updated":"2020-06-22 10:17:47.000000000","message":"Would it be better to leave this unset, and manually set it so we can detect places where we\u0027ve forgotten to update it?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    fields \u003d {"},{"line_number":62,"context_line":"        \u0027id\u0027: obj_fields.IntegerField(),"},{"line_number":63,"context_line":"        \u0027cpuset\u0027: obj_fields.SetOfIntegersField(),"},{"line_number":64,"context_line":"        \u0027pcpuset\u0027: obj_fields.SetOfIntegersField(default\u003dset()),"},{"line_number":65,"context_line":"        # These physical CPUs are reserved for use by the hypervisor"},{"line_number":66,"context_line":"        \u0027cpuset_reserved\u0027: obj_fields.SetOfIntegersField(nullable\u003dTrue,"},{"line_number":67,"context_line":"                                                         default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_989dff0b","line":64,"in_reply_to":"bf51134e_8ddb034d","updated":"2020-06-29 12:32:50.000000000","message":"\u003e I agree to remove the default value and manually add it at each\n \u003e place creating a InstanceNUMACell object.\n\n+1","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @property"},{"line_number":87,"context_line":"    def siblings(self):"},{"line_number":88,"context_line":"        cpu_list \u003d sorted(list(self.cpuset) + list(self.pcpuset))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        threads \u003d 0"},{"line_number":91,"context_line":"        if (\u0027cpu_topology\u0027 in self) and self.cpu_topology:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_6dde6f3e","line":88,"updated":"2020-06-29 10:37:38.000000000","message":"Seems we have to allow the situation you mentioned.\n\nFor a hardware processor, the sibling CPUs share and are subject to the hardware resources in one processor core. The workoads on sibling CPUs and workloads not on silbings CPUs likely have different performance achivement. But the instance sibling CPUs are never guaranteed to be schduled on the hardware processor siblings. Considering the current guest sibling CPU status I think it might be ok to mix the two types of instanqce CPUs in one sibling group.\n\nI am curious what scenario the instance CPU sibling structure is for? To make some software license happy?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @property"},{"line_number":87,"context_line":"    def siblings(self):"},{"line_number":88,"context_line":"        cpu_list \u003d sorted(list(self.cpuset) + list(self.pcpuset))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        threads \u003d 0"},{"line_number":91,"context_line":"        if (\u0027cpu_topology\u0027 in self) and self.cpu_topology:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_e8801849","line":88,"updated":"2020-06-22 10:17:47.000000000","message":"Yeah, things are going to get a bit weird here. Do we allow situations where one sibling is pinned and the other floating? I guess we have to?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @property"},{"line_number":87,"context_line":"    def siblings(self):"},{"line_number":88,"context_line":"        cpu_list \u003d sorted(list(self.cpuset) + list(self.pcpuset))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        threads \u003d 0"},{"line_number":91,"context_line":"        if (\u0027cpu_topology\u0027 in self) and self.cpu_topology:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_1891eff1","line":88,"in_reply_to":"bf51134e_6dde6f3e","updated":"2020-06-29 12:32:50.000000000","message":"\u003e Seems we have to allow the situation you mentioned.\n \u003e \n \u003e For a hardware processor, the sibling CPUs share and are subject to\n \u003e the hardware resources in one processor core. The workoads on\n \u003e sibling CPUs and workloads not on silbings CPUs likely have\n \u003e different performance achivement. But the instance sibling CPUs are\n \u003e never guaranteed to be schduled on the hardware processor siblings.\n \u003e Considering the current guest sibling CPU status I think it might\n \u003e be ok to mix the two types of instanqce CPUs in one sibling group.\n \u003e \n \u003e I am curious what scenario the instance CPU sibling structure is\n \u003e for? To make some software license happy?\n\nYes, afaik Windows licenses restrict the number of sockets allowed, so people have to customize the CPU topology for this.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # version \u0027InstanceNUMACell\u0027 cells, in that case, the \u0027dedicated\u0027"},{"line_number":154,"context_line":"            # CPU is kept in \u0027InstanceNUMACell.cpuset\u0027 field, but it should"},{"line_number":155,"context_line":"            # be kept in \u0027InstanceNUMACell.pcpuset\u0027 field. here is the"},{"line_number":156,"context_line":"            # chance for this action."},{"line_number":157,"context_line":"            update_db \u003d False"},{"line_number":158,"context_line":"            for cell in obj.cells:"},{"line_number":159,"context_line":"                if (len(cell.cpuset) !\u003d 0 and"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_e8ce58b2","line":156,"updated":"2020-06-22 10:17:47.000000000","message":"Can you add a TODO about when we can remove this? I suspect it\u0027ll be in W(allaby) or X.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # version \u0027InstanceNUMACell\u0027 cells, in that case, the \u0027dedicated\u0027"},{"line_number":154,"context_line":"            # CPU is kept in \u0027InstanceNUMACell.cpuset\u0027 field, but it should"},{"line_number":155,"context_line":"            # be kept in \u0027InstanceNUMACell.pcpuset\u0027 field. here is the"},{"line_number":156,"context_line":"            # chance for this action."},{"line_number":157,"context_line":"            update_db \u003d False"},{"line_number":158,"context_line":"            for cell in obj.cells:"},{"line_number":159,"context_line":"                if (len(cell.cpuset) !\u003d 0 and"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_cde85be3","line":156,"updated":"2020-06-29 10:37:38.000000000","message":"We only can remove this piece of code if all pre-Victoria dedicated instance database object are upgraded, right?\nThis condition could be reached if \neither\n1. all dedicated instances are ever fetched from database and running the code here.\nor \n2. Actively perform a kind of online data migration process, which is introduced in patch[1].\n\n\nIf we choose the 2nd solution, these code could be removed after two releases, which is X, right? Otherwise, we should always keep these code.\n\n[1] https://review.opendev.org/#/c/718493/","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # version \u0027InstanceNUMACell\u0027 cells, in that case, the \u0027dedicated\u0027"},{"line_number":154,"context_line":"            # CPU is kept in \u0027InstanceNUMACell.cpuset\u0027 field, but it should"},{"line_number":155,"context_line":"            # be kept in \u0027InstanceNUMACell.pcpuset\u0027 field. here is the"},{"line_number":156,"context_line":"            # chance for this action."},{"line_number":157,"context_line":"            update_db \u003d False"},{"line_number":158,"context_line":"            for cell in obj.cells:"},{"line_number":159,"context_line":"                if (len(cell.cpuset) !\u003d 0 and"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_38515337","line":156,"in_reply_to":"bf51134e_cde85be3","updated":"2020-06-29 12:32:50.000000000","message":"Okay, I think (1) is okay. We\u0027ll need to figure out how often these objects are loaded, but that can be done later (fwiw, I think it happens everytime we try to calculate host usage). Can you add that as a TODO? Something like.\n\n\n  TODO(huaquiang): Remove after Wallaby, once we\u0027re sure these\n  objects have been loaded at least once.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            for cell in obj.cells:"},{"line_number":159,"context_line":"                if (len(cell.cpuset) !\u003d 0 and"},{"line_number":160,"context_line":"                        cell.cpu_policy \u003d\u003d"},{"line_number":161,"context_line":"                        obj_fields.CPUAllocationPolicy.DEDICATED):"},{"line_number":162,"context_line":"                    cell.pcpuset \u003d cell.cpuset"},{"line_number":163,"context_line":"                    cell.cpuset \u003d set([])"},{"line_number":164,"context_line":"                    update_db \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_ade36704","line":161,"updated":"2020-06-29 10:37:38.000000000","message":"Done","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            # chance for this action."},{"line_number":157,"context_line":"            update_db \u003d False"},{"line_number":158,"context_line":"            for cell in obj.cells:"},{"line_number":159,"context_line":"                if (len(cell.cpuset) !\u003d 0 and"},{"line_number":160,"context_line":"                        cell.cpu_policy \u003d\u003d"},{"line_number":161,"context_line":"                        obj_fields.CPUAllocationPolicy.DEDICATED):"},{"line_number":162,"context_line":"                    cell.pcpuset \u003d cell.cpuset"},{"line_number":163,"context_line":"                    cell.cpuset \u003d set([])"},{"line_number":164,"context_line":"                    update_db \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_688c087f","line":161,"range":{"start_line":159,"start_character":16,"end_line":161,"end_character":66},"updated":"2020-06-22 10:17:47.000000000","message":"nit:\n\n  if len(cell.cpuset \u003d\u003d 0):\n      continue\n\n  if cell.cpu_policy !\u003d obj_fields.CPUAllocationPolicy.DEDICATED:\n      continue\n\n  cell.pcpuset \u003d cell.cpuset\n  ...","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        if threads \u003d\u003d 1:"},{"line_number":97,"context_line":"            threads \u003d 0"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        return list(map(set, zip(* [iter(cpu_list)] * threads)))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":102,"context_line":"        if vcpu not in self.pcpuset:"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_67624340","line":99,"updated":"2020-07-13 16:33:27.000000000","message":"Dropping due to being not relevant to this topic.\n\nMy though is adding a space between the first *star* sign and its left open parenthesis will improve the code readability, because \u0027zip(*)\u0027 means a unzip operation over the result of [iter(cpu_list)]*threads and having a lower priority.\nIt seems the third recommendation, about adding space around lower priority operators, mentioned in PEP0008[1] is not enforced in Nova project.\n\n[1] https://www.python.org/dev/peps/pep-0008/#other-recommendations","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        if threads \u003d\u003d 1:"},{"line_number":97,"context_line":"            threads \u003d 0"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        return list(map(set, zip(* [iter(cpu_list)] * threads)))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def pin(self, vcpu, pcpu):"},{"line_number":102,"context_line":"        if vcpu not in self.pcpuset:"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_33fa5142","line":99,"range":{"start_line":99,"start_character":34,"end_line":99,"end_character":35},"updated":"2020-07-13 13:51:15.000000000","message":"This wasn\u0027t necessary, and what was here before was likely correct","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if \u0027nova_object.name\u0027 in primitive:"},{"line_number":154,"context_line":"            obj \u003d cls.obj_from_primitive(primitive)"},{"line_number":155,"context_line":"            # TODO(huaqiang): Remove after Wallaby once we are sure these"},{"line_number":156,"context_line":"            # objects have been loaded at least once."},{"line_number":157,"context_line":"            # NOTE(huaqiang): We may meet some topology object with the old"},{"line_number":158,"context_line":"            # version \u0027InstanceNUMACell\u0027 cells, in that case, the \u0027dedicated\u0027"},{"line_number":159,"context_line":"            # CPU is kept in \u0027InstanceNUMACell.cpuset\u0027 field, but it should"},{"line_number":160,"context_line":"            # be kept in \u0027InstanceNUMACell.pcpuset\u0027 field now. here is the"},{"line_number":161,"context_line":"            # chance to make a upgrade and persist the latest version to"},{"line_number":162,"context_line":"            # dababase."},{"line_number":163,"context_line":"            update_db \u003d False"},{"line_number":164,"context_line":"            for cell in obj.cells:"},{"line_number":165,"context_line":"                if len(cell.cpuset) \u003d\u003d 0:"},{"line_number":166,"context_line":"                    continue"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"                if cell.cpu_policy !\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":169,"context_line":"                    continue"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":172,"context_line":"                cell.cpuset \u003d set()"},{"line_number":173,"context_line":"                update_db \u003d True"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            if update_db:"},{"line_number":176,"context_line":"                db_obj \u003d jsonutils.dumps(obj.obj_to_primitive())"},{"line_number":177,"context_line":"                values \u003d {"},{"line_number":178,"context_line":"                    \u0027numa_topology\u0027: db_obj,"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"                db.instance_extra_update_by_uuid(context, instance_uuid,"},{"line_number":181,"context_line":"                                                 values)"},{"line_number":182,"context_line":"        else:"},{"line_number":183,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_93b99d7a","line":181,"range":{"start_line":155,"start_character":0,"end_line":181,"end_character":56},"updated":"2020-07-13 13:51:15.000000000","message":"Could we move this to a separate class method like \u0027_migrate_legacy_object\u0027 below?","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                    \u0027numa_topology\u0027: db_obj,"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"                db.instance_extra_update_by_uuid(context, instance_uuid,"},{"line_number":181,"context_line":"                                                 values)"},{"line_number":182,"context_line":"        else:"},{"line_number":183,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_47673f4e","line":181,"updated":"2020-07-13 16:33:27.000000000","message":"Done.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"}],"nova/tests/functional/api_sample_tests/test_server_topology.py":[{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1c4355cb3428dd37a6e4c2409959bbdd0db14104","unresolved":false,"context_lines":[{"line_number":23,"context_line":"           cpu_topology\u003dcpu_topology,"},{"line_number":24,"context_line":"           cpu_pinning\u003d{0: 0, 1: 5},"},{"line_number":25,"context_line":"           cpuset\u003dset(),"},{"line_number":26,"context_line":"           pcpuset\u003dset([0, 1]))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    cell_1 \u003d numa.InstanceNUMACell(node\u003d1, memory\u003d2048, pagesize\u003d4, id\u003d1,"},{"line_number":29,"context_line":"           cpu_topology\u003dcpu_topology,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_38067421","line":26,"updated":"2020-04-02 18:13:42.000000000","message":"Yes, I should make this strcuture reasonable, even it is created intentionally for test only. Will do.\n\nOK, I\u0027ll have a patch for the indent format problem.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f5777256db4bc382df638fa1516bdfbc65ac9aa","unresolved":false,"context_lines":[{"line_number":23,"context_line":"           cpu_topology\u003dcpu_topology,"},{"line_number":24,"context_line":"           cpu_pinning\u003d{0: 0, 1: 5},"},{"line_number":25,"context_line":"           cpuset\u003dset(),"},{"line_number":26,"context_line":"           pcpuset\u003dset([0, 1]))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    cell_1 \u003d numa.InstanceNUMACell(node\u003d1, memory\u003d2048, pagesize\u003d4, id\u003d1,"},{"line_number":29,"context_line":"           cpu_topology\u003dcpu_topology,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_e291fb53","line":26,"updated":"2020-04-02 16:21:28.000000000","message":"You should also ensure that you also add \u0027cpu_policy\u003d\u0027 on any of these where you\u0027re setting \u0027pcpuset\u0027 to a non-empty value. Perhaps you could do that in a separate commit before this one? If you do, consider fixing indentation on these too since it\u0027ll make it easier to grok the difference later","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":5685,"context_line":"                    id\u003d0, cpuset\u003dset([1, 2]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":5686,"context_line":"                    pagesize\u003d2048,"},{"line_number":5687,"context_line":"                    cpu_policy\u003dobj_fields.CPUAllocationPolicy.DEDICATED,"},{"line_number":5688,"context_line":"                    cpu_pinning\u003d{\u00270\u0027: 1, \u00271\u0027: 2})"},{"line_number":5689,"context_line":"        ])"},{"line_number":5690,"context_line":"        # instance will use two cpus from node_1 (cpu3 and cpu4)"},{"line_number":5691,"context_line":"        # on *some other host*"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_c7698f25","line":5688,"updated":"2020-07-13 16:33:27.000000000","message":"Good catch. The \u0027cpuset\u0027 to \u0027pcpuset\u0027 transformation is triggered by \u0027intance.refresh\u0027@L5762, which is performed by \u0027InstanceNUMATopology.obj_from_db_obj\u0027, in the tox test. See details in the call stack in below:\n\n    | /opt/stack/nova/nova/tests/unit/compute/test_compute.py(5762)test_confirm_resize_with_numa_topology_and_cpu_pinning()\n    -\u003e instance.refresh()\n    | /usr/local/lib/python3.6/dist-packages/oslo_versionedobjects/base.py(231)wrapper()\n    -\u003e return fn(self, *args, **kwargs)\n    | /opt/stack/nova/nova/objects/instance.py(855)refresh()\n    -\u003e use_slave\u003duse_slave)\n    | /usr/local/lib/python3.6/dist-packages/oslo_versionedobjects/base.py(189)wrapper()\n    -\u003e result \u003d fn(cls, context, *args, **kwargs)\n    | /opt/stack/nova/nova/objects/instance.py(526)get_by_uuid()\n    -\u003e expected_attrs)\n    | /opt/stack/nova/nova/objects/instance.py(441)_from_db_object()\n    -\u003e expected_attrs)\n    | /opt/stack/nova/nova/objects/instance.py(463)_extra_attributes_from_db_object()\n    -\u003e db_inst[\u0027extra\u0027].get(\u0027numa_topology\u0027))\n    | /opt/stack/nova/nova/objects/instance.py(905)_load_numa_topology()\n    -\u003e self._context, self.uuid, db_topology)\n    \u003e /opt/stack/nova/nova/objects/instance_numa.py(181)obj_from_db_obj()\n    -\u003e \u0027numa_topology\u0027: db_obj,\n    (Pdb)","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":5682,"context_line":"        old_inst_topology \u003d objects.InstanceNUMATopology("},{"line_number":5683,"context_line":"            instance_uuid\u003dinstance.uuid, cells\u003d["},{"line_number":5684,"context_line":"                objects.InstanceNUMACell("},{"line_number":5685,"context_line":"                    id\u003d0, cpuset\u003dset([1, 2]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":5686,"context_line":"                    pagesize\u003d2048,"},{"line_number":5687,"context_line":"                    cpu_policy\u003dobj_fields.CPUAllocationPolicy.DEDICATED,"},{"line_number":5688,"context_line":"                    cpu_pinning\u003d{\u00270\u0027: 1, \u00271\u0027: 2})"},{"line_number":5689,"context_line":"        ])"},{"line_number":5690,"context_line":"        # instance will use two cpus from node_1 (cpu3 and cpu4)"},{"line_number":5691,"context_line":"        # on *some other host*"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_5351c535","line":5688,"range":{"start_line":5685,"start_character":0,"end_line":5688,"end_character":49},"updated":"2020-07-13 13:51:15.000000000","message":"This is wrong. Your policy is DEDICATED but the pcpuset field is not set. I suspect the reason we\u0027re not seeing issues is that it\u0027s being transformed on load below, but this should be updated","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":5695,"context_line":"                    id\u003d1, cpuset\u003dset([3, 4]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":5696,"context_line":"                    pagesize\u003d2048,"},{"line_number":5697,"context_line":"                    cpu_policy\u003dobj_fields.CPUAllocationPolicy.DEDICATED,"},{"line_number":5698,"context_line":"                    cpu_pinning\u003d{\u00270\u0027: 3, \u00271\u0027: 4})"},{"line_number":5699,"context_line":"        ])"},{"line_number":5700,"context_line":""},{"line_number":5701,"context_line":"        instance.numa_topology \u003d old_inst_topology"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_27732b18","line":5698,"updated":"2020-07-13 16:33:27.000000000","message":"Done.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":5692,"context_line":"        new_inst_topology \u003d objects.InstanceNUMATopology("},{"line_number":5693,"context_line":"            instance_uuid\u003dinstance.uuid, cells\u003d["},{"line_number":5694,"context_line":"                objects.InstanceNUMACell("},{"line_number":5695,"context_line":"                    id\u003d1, cpuset\u003dset([3, 4]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":5696,"context_line":"                    pagesize\u003d2048,"},{"line_number":5697,"context_line":"                    cpu_policy\u003dobj_fields.CPUAllocationPolicy.DEDICATED,"},{"line_number":5698,"context_line":"                    cpu_pinning\u003d{\u00270\u0027: 3, \u00271\u0027: 4})"},{"line_number":5699,"context_line":"        ])"},{"line_number":5700,"context_line":""},{"line_number":5701,"context_line":"        instance.numa_topology \u003d old_inst_topology"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_1353cd3a","line":5698,"range":{"start_line":5695,"start_character":0,"end_line":5698,"end_character":49},"updated":"2020-07-13 13:51:15.000000000","message":"ditto","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":5763,"context_line":"        self.assertEqual(vm_states.ACTIVE, instance[\u0027vm_state\u0027])"},{"line_number":5764,"context_line":""},{"line_number":5765,"context_line":"        updated_topology \u003d objects.NUMATopology.obj_from_primitive("},{"line_number":5766,"context_line":"            jsonutils.loads(cn.numa_topology))"},{"line_number":5767,"context_line":""},{"line_number":5768,"context_line":"        # after confirming resize all cpus on currect host must be free"},{"line_number":5769,"context_line":"        self.assertEqual(2, len(updated_topology.cells))"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_0770a707","line":5766,"updated":"2020-07-13 16:33:27.000000000","message":"No. That \u0027cpuset\u0027 to \u0027pcpuset\u0027 migration is not triggered here. This load is to load the host NUMATopology, not for instance.\nSee the call-stack listed in above for that reason.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":5763,"context_line":"        self.assertEqual(vm_states.ACTIVE, instance[\u0027vm_state\u0027])"},{"line_number":5764,"context_line":""},{"line_number":5765,"context_line":"        updated_topology \u003d objects.NUMATopology.obj_from_primitive("},{"line_number":5766,"context_line":"            jsonutils.loads(cn.numa_topology))"},{"line_number":5767,"context_line":""},{"line_number":5768,"context_line":"        # after confirming resize all cpus on currect host must be free"},{"line_number":5769,"context_line":"        self.assertEqual(2, len(updated_topology.cells))"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_3356d12b","line":5766,"updated":"2020-07-13 13:51:15.000000000","message":"here","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"}],"nova/tests/unit/objects/test_instance_numa.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.assertEqual((0, 1), primitive[\u0027cpuset\u0027])"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_obj_to_primitive_translate_dedicated_pcpuset(self):"},{"line_number":157,"context_line":"        primitive \u003d {\u0027nova_object.name\u0027: \u0027InstanceNUMACell\u0027,"},{"line_number":158,"context_line":"                     \u0027nova_object.namespace\u0027: \u0027nova\u0027,"},{"line_number":159,"context_line":"                     \u0027nova_object.version\u0027: \u00271.4\u0027,"},{"line_number":160,"context_line":"                     \u0027nova_object.data\u0027: {\u0027cpuset\u0027: (0, 1, 2),"},{"line_number":161,"context_line":"                                          \u0027memory\u0027: 1024,"},{"line_number":162,"context_line":"                                          \u0027pagesize\u0027: None,"},{"line_number":163,"context_line":"                                          \u0027cpu_pinning_raw\u0027: None,"},{"line_number":164,"context_line":"                                          \u0027cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":165,"context_line":"                                          \u0027cputhread_policy\u0027: None,"},{"line_number":166,"context_line":"                                          \u0027cpuset_reserved\u0027: None}"},{"line_number":167,"context_line":"                     }"},{"line_number":168,"context_line":"        cell_obj \u003d objects.InstanceNUMACell(cpuset\u003dset(),"},{"line_number":169,"context_line":"                                            cpu_policy\u003d\u0027dedicated\u0027,"},{"line_number":170,"context_line":"                                            memory\u003d1024)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_e221fbb5","line":167,"range":{"start_line":157,"start_character":0,"end_line":167,"end_character":22},"updated":"2020-04-02 16:43:10.000000000","message":"Hmm, I\u0027m not sure about this. It feels like we\u0027re storing an implementation detail of o.vo. How about:\n\n  # NOTE(huaqiang): We\u0027re purposefully putting pinned CPUs in the\n  # wrong (old) place to make sure they get moved\n  cell_obj \u003d objects.InstanceNUMACell(\n      cpuset\u003dset(range(4)),\n      cpu_policy\u003dobj_fields.CPUAllocationPolicy.DEDICATED,\n  )\n  primitive \u003d cell_obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)\n  objects.InstanceNUMACell.obj_from_primitive(primitive)","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.assertEqual((0, 1), primitive[\u0027cpuset\u0027])"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_obj_to_primitive_translate_dedicated_pcpuset(self):"},{"line_number":157,"context_line":"        primitive \u003d {\u0027nova_object.name\u0027: \u0027InstanceNUMACell\u0027,"},{"line_number":158,"context_line":"                     \u0027nova_object.namespace\u0027: \u0027nova\u0027,"},{"line_number":159,"context_line":"                     \u0027nova_object.version\u0027: \u00271.4\u0027,"},{"line_number":160,"context_line":"                     \u0027nova_object.data\u0027: {\u0027cpuset\u0027: (0, 1, 2),"},{"line_number":161,"context_line":"                                          \u0027memory\u0027: 1024,"},{"line_number":162,"context_line":"                                          \u0027pagesize\u0027: None,"},{"line_number":163,"context_line":"                                          \u0027cpu_pinning_raw\u0027: None,"},{"line_number":164,"context_line":"                                          \u0027cpu_policy\u0027: \u0027dedicated\u0027,"},{"line_number":165,"context_line":"                                          \u0027cputhread_policy\u0027: None,"},{"line_number":166,"context_line":"                                          \u0027cpuset_reserved\u0027: None}"},{"line_number":167,"context_line":"                     }"},{"line_number":168,"context_line":"        cell_obj \u003d objects.InstanceNUMACell(cpuset\u003dset(),"},{"line_number":169,"context_line":"                                            cpu_policy\u003d\u0027dedicated\u0027,"},{"line_number":170,"context_line":"                                            memory\u003d1024)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_5d7ecae3","line":167,"range":{"start_line":157,"start_character":0,"end_line":167,"end_character":22},"in_reply_to":"df33271e_e221fbb5","updated":"2020-04-02 17:30:15.000000000","message":"No problem, it could be done like that. We should provide backward compatibility for a dedicated instance.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":25,"context_line":"fake_instance_uuid \u003d uuids.fake"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"fake_obj_numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":28,"context_line":"    instance_uuid \u003d fake_instance_uuid,"},{"line_number":29,"context_line":"    cells\u003d["},{"line_number":30,"context_line":"        objects.InstanceNUMACell("},{"line_number":31,"context_line":"            id\u003d0, pcpuset\u003dset([1, 2]), cpuset\u003dset(), memory\u003d512,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_0deff3e8","line":28,"updated":"2020-06-29 10:37:38.000000000","message":"Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":25,"context_line":"fake_instance_uuid \u003d uuids.fake"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"fake_obj_numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":28,"context_line":"    instance_uuid \u003d fake_instance_uuid,"},{"line_number":29,"context_line":"    cells\u003d["},{"line_number":30,"context_line":"        objects.InstanceNUMACell("},{"line_number":31,"context_line":"            id\u003d0, pcpuset\u003dset([1, 2]), cpuset\u003dset(), memory\u003d512,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_a83d8090","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":20},"updated":"2020-06-22 10:17:47.000000000","message":"No spaces. I don\u0027t know why flake8 isn\u0027t complaining about this","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    instance_uuid \u003d fake_instance_uuid,"},{"line_number":29,"context_line":"    cells\u003d["},{"line_number":30,"context_line":"        objects.InstanceNUMACell("},{"line_number":31,"context_line":"            id\u003d0, pcpuset\u003dset([1, 2]), cpuset\u003dset(), memory\u003d512,"},{"line_number":32,"context_line":"            pagesize\u003d2048),"},{"line_number":33,"context_line":"        objects.InstanceNUMACell("},{"line_number":34,"context_line":"            id\u003d1, pcpuset\u003dset([3, 4]), cpuset\u003dset(), memory\u003d512,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_ede9dfe2","line":31,"updated":"2020-06-29 10:37:38.000000000","message":"Agree. Will be fixed for all.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    instance_uuid \u003d fake_instance_uuid,"},{"line_number":29,"context_line":"    cells\u003d["},{"line_number":30,"context_line":"        objects.InstanceNUMACell("},{"line_number":31,"context_line":"            id\u003d0, pcpuset\u003dset([1, 2]), cpuset\u003dset(), memory\u003d512,"},{"line_number":32,"context_line":"            pagesize\u003d2048),"},{"line_number":33,"context_line":"        objects.InstanceNUMACell("},{"line_number":34,"context_line":"            id\u003d1, pcpuset\u003dset([3, 4]), cpuset\u003dset(), memory\u003d512,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_484ca441","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":51},"updated":"2020-06-22 10:17:47.000000000","message":"style nit: placing \u0027cpuset\u0027 before \u0027pcpuset\u0027 would make visual comparision with the below easier","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                cpuset\u003dset([0, 1, 2]), cpu_topology\u003dtopo)"},{"line_number":80,"context_line":"        self.assertEqual([], inst_cell.siblings)"},{"line_number":81,"context_line":"        inst_cell \u003d objects.InstanceNUMACell("},{"line_number":82,"context_line":"                cpuset\u003dset(), pcpuset\u003dset([0, 1, 2]), cpu_topology\u003dtopo)"},{"line_number":83,"context_line":"        self.assertEqual([], inst_cell.siblings)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d2, threads\u003d2)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_4dbe0bd5","line":82,"updated":"2020-06-29 10:37:38.000000000","message":"Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                cpuset\u003dset([0, 1, 2]), cpu_topology\u003dtopo)"},{"line_number":80,"context_line":"        self.assertEqual([], inst_cell.siblings)"},{"line_number":81,"context_line":"        inst_cell \u003d objects.InstanceNUMACell("},{"line_number":82,"context_line":"                cpuset\u003dset(), pcpuset\u003dset([0, 1, 2]), cpu_topology\u003dtopo)"},{"line_number":83,"context_line":"        self.assertEqual([], inst_cell.siblings)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        topo \u003d objects.VirtCPUTopology(sockets\u003d1, cores\u003d2, threads\u003d2)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_c861d4ab","line":82,"range":{"start_line":82,"start_character":12,"end_line":82,"end_character":16},"updated":"2020-06-22 10:17:47.000000000","message":"nit\n\n(I know it\u0027s wrong above, but no point perpetuating the mistake)","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        inst_cell.pin(0, 14)"},{"line_number":110,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":111,"context_line":"        inst_cell.pin(12, 14)"},{"line_number":112,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":113,"context_line":"        inst_cell.pin(4, 15)"},{"line_number":114,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":115,"context_line":"        inst_cell.pin(1, 16)"},{"line_number":116,"context_line":"        self.assertEqual({0: 14, 1: 16}, inst_cell.cpu_pinning)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_a8346094","line":113,"range":{"start_line":112,"start_character":0,"end_line":113,"end_character":27},"updated":"2020-06-22 10:17:47.000000000","message":"Can we get some comments before each case stating what we\u0027re testing (that attempting to pin CPUs not listed in \u0027pcpuset\u0027 will fail silently)","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":111,"context_line":"        inst_cell.pin(12, 14)"},{"line_number":112,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":113,"context_line":"        inst_cell.pin(4, 15)"},{"line_number":114,"context_line":"        self.assertEqual({0: 14}, inst_cell.cpu_pinning)"},{"line_number":115,"context_line":"        inst_cell.pin(1, 16)"},{"line_number":116,"context_line":"        self.assertEqual({0: 14, 1: 16}, inst_cell.cpu_pinning)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_2dc11755","line":113,"updated":"2020-06-29 10:37:38.000000000","message":"Sure. Step-by-step comments will improve the readability. Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        inst_cell \u003d objects.InstanceNUMACell("},{"line_number":120,"context_line":"            cpuset\u003dset([4, 5]), pcpuset\u003dset([0, 1, 2, 3]), cpu_pinning\u003dNone)"},{"line_number":121,"context_line":"        inst_cell.pin_vcpus((0, 14), (1, 15), (2, 16), (3, 17))"},{"line_number":122,"context_line":"        self.assertEqual({0: 14, 1: 15, 2: 16, 3: 17}, inst_cell.cpu_pinning)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def test_cpu_pinning(self):"},{"line_number":125,"context_line":"        topo_obj \u003d get_fake_obj_numa_topology(self.context)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_8db4a3f3","line":122,"updated":"2020-06-29 10:37:38.000000000","message":"Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        inst_cell \u003d objects.InstanceNUMACell("},{"line_number":120,"context_line":"            cpuset\u003dset([4, 5]), pcpuset\u003dset([0, 1, 2, 3]), cpu_pinning\u003dNone)"},{"line_number":121,"context_line":"        inst_cell.pin_vcpus((0, 14), (1, 15), (2, 16), (3, 17))"},{"line_number":122,"context_line":"        self.assertEqual({0: 14, 1: 15, 2: 16, 3: 17}, inst_cell.cpu_pinning)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def test_cpu_pinning(self):"},{"line_number":125,"context_line":"        topo_obj \u003d get_fake_obj_numa_topology(self.context)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_e82ad829","line":122,"updated":"2020-06-22 10:17:47.000000000","message":"It would be good to add an additional case testing pinning when called with an invalid CPU (something from \u0027cpuset\u0027)","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            fields.CPUEmulatorThreadsPolicy.ISOLATE)"},{"line_number":153,"context_line":"        self.assertTrue(topo_obj.emulator_threads_isolated)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_obj_make_compatible_numa_cell_pre_1_5(self):"},{"line_number":156,"context_line":"        topo_obj \u003d objects.InstanceNUMACell("},{"line_number":157,"context_line":"            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),"},{"line_number":158,"context_line":"            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_6db78ff6","line":155,"updated":"2020-06-29 10:37:38.000000000","message":"Done. The name is nicer since we know this test targets for InstanceNUMACell object.\n\nAnd similar function renaming will be done for #L291, change the name from \u0027test_obj_make_compatible_numa_pre_1_3\u0027 to \u0027test_obj_make_compatible\u0027.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            fields.CPUEmulatorThreadsPolicy.ISOLATE)"},{"line_number":153,"context_line":"        self.assertTrue(topo_obj.emulator_threads_isolated)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_obj_make_compatible_numa_cell_pre_1_5(self):"},{"line_number":156,"context_line":"        topo_obj \u003d objects.InstanceNUMACell("},{"line_number":157,"context_line":"            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),"},{"line_number":158,"context_line":"            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_6816c8f3","line":155,"range":{"start_line":155,"start_character":32,"end_line":155,"end_character":50},"updated":"2020-06-22 10:17:47.000000000","message":"Just drop this?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def test_obj_make_compatible_numa_cell_pre_1_5(self):"},{"line_number":156,"context_line":"        topo_obj \u003d objects.InstanceNUMACell("},{"line_number":157,"context_line":"            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),"},{"line_number":158,"context_line":"            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027InstanceNUMACell\u0027)"},{"line_number":161,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_cdd17b25","line":158,"updated":"2020-06-29 10:37:38.000000000","message":"I am not insisted but prefered another kind of coding style as following code showing:\n\n        topo_obj \u003d objects.InstanceNUMACell(\n            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),\n            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)\n\nInstead of adding a trailing comma, it moves the closing parenthesis upper to the end of line \u0027cpu_policy ....\u0027, there is more common in this file, you can see from #L42, #L44, #94 ....\n\nHow do you think?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def test_obj_make_compatible_numa_cell_pre_1_5(self):"},{"line_number":156,"context_line":"        topo_obj \u003d objects.InstanceNUMACell("},{"line_number":157,"context_line":"            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),"},{"line_number":158,"context_line":"            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027InstanceNUMACell\u0027)"},{"line_number":161,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_08dbcc4e","line":158,"updated":"2020-06-22 10:17:47.000000000","message":"nit: add trailing comma","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def test_obj_make_compatible_numa_cell_pre_1_5(self):"},{"line_number":156,"context_line":"        topo_obj \u003d objects.InstanceNUMACell("},{"line_number":157,"context_line":"            cpuset\u003dset(), pcpuset\u003dset([0, 1]), cpuset_reserved\u003dset([1, 2]),"},{"line_number":158,"context_line":"            cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027InstanceNUMACell\u0027)"},{"line_number":161,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_38367304","line":158,"in_reply_to":"bf51134e_cdd17b25","updated":"2020-06-29 12:32:50.000000000","message":"Yes, that\u0027s also okay","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027InstanceNUMACell\u0027)"},{"line_number":161,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"},{"line_number":162,"context_line":"        primitive \u003d data(topo_obj.obj_to_primitive(target_version\u003d\u00271.5\u0027,"},{"line_number":163,"context_line":"                                                   version_manifest\u003dversions))"},{"line_number":164,"context_line":"        self.assertIn(\u0027pcpuset\u0027, primitive)"},{"line_number":165,"context_line":"        primitive \u003d data(topo_obj.obj_to_primitive(target_version\u003d\u00271.4\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_adcc0789","line":162,"updated":"2020-06-29 10:37:38.000000000","message":"Sure. Done.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        versions \u003d ovo_base.obj_tree_get_versions(\u0027InstanceNUMACell\u0027)"},{"line_number":161,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"},{"line_number":162,"context_line":"        primitive \u003d data(topo_obj.obj_to_primitive(target_version\u003d\u00271.5\u0027,"},{"line_number":163,"context_line":"                                                   version_manifest\u003dversions))"},{"line_number":164,"context_line":"        self.assertIn(\u0027pcpuset\u0027, primitive)"},{"line_number":165,"context_line":"        primitive \u003d data(topo_obj.obj_to_primitive(target_version\u003d\u00271.4\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_c8bd54d9","line":162,"updated":"2020-06-22 10:17:47.000000000","message":"nit: Can you insert linebreaks before each of these new \"tests\"?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                                   version_manifest\u003dversions))"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027cpuset_reserved\u0027, primitive)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_obj_from_db_obj(self):"},{"line_number":175,"context_line":"        fake_topo_obj \u003d copy.deepcopy(fake_obj_numa_topology_w_cell_v1_4)"},{"line_number":176,"context_line":"        for cell in fake_topo_obj.cells:"},{"line_number":177,"context_line":"            cell.cpu_policy \u003d objects.fields.CPUAllocationPolicy.DEDICATED"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_a8c2a057","line":174,"updated":"2020-06-22 10:17:47.000000000","message":"A docstring about what\u0027s so special that you\u0027re testing here would be helpful","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                                   version_manifest\u003dversions))"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027cpuset_reserved\u0027, primitive)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_obj_from_db_obj(self):"},{"line_number":175,"context_line":"        fake_topo_obj \u003d copy.deepcopy(fake_obj_numa_topology_w_cell_v1_4)"},{"line_number":176,"context_line":"        for cell in fake_topo_obj.cells:"},{"line_number":177,"context_line":"            cell.cpu_policy \u003d objects.fields.CPUAllocationPolicy.DEDICATED"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_0dc89371","line":174,"updated":"2020-06-29 10:37:38.000000000","message":"Sure. Added.\n\nAnd another thing, I would like to move this test into the class \u0027_TestInstanceNUMATopology\u0027, because this test is acutally to validate the function from \u0027InstanceNUMATology\u0027 not \u0027InstanceNUMACell\u0027.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                                   version_manifest\u003dversions))"},{"line_number":172,"context_line":"        self.assertNotIn(\u0027cpuset_reserved\u0027, primitive)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_obj_from_db_obj(self):"},{"line_number":175,"context_line":"        fake_topo_obj \u003d copy.deepcopy(fake_obj_numa_topology_w_cell_v1_4)"},{"line_number":176,"context_line":"        for cell in fake_topo_obj.cells:"},{"line_number":177,"context_line":"            cell.cpu_policy \u003d objects.fields.CPUAllocationPolicy.DEDICATED"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_98397ff3","line":174,"in_reply_to":"bf51134e_0dc89371","updated":"2020-06-29 12:32:50.000000000","message":"Good point. Agreed","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            id\u003d0, cpuset\u003dset([1, 2]), memory\u003d512, pagesize\u003d2048),"},{"line_number":31,"context_line":"        objects.InstanceNUMACell("},{"line_number":32,"context_line":"            id\u003d1, cpuset\u003dset([3, 4]), memory\u003d512, pagesize\u003d2048)"},{"line_number":33,"context_line":"    ])"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"fake_db_topology \u003d {"},{"line_number":36,"context_line":"    \u0027created_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_071b87c9","side":"PARENT","line":33,"updated":"2020-07-13 16:33:27.000000000","message":"Make kj","commit_id":"55ff7517750662ddb4d529803a64206bd2dc621d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            pagesize\u003d2048),"},{"line_number":36,"context_line":"    ])"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"fake_obj_numa_topology_w_cell_v1_4 \u003d objects.InstanceNUMATopology("},{"line_number":39,"context_line":"    instance_uuid \u003d fake_instance_uuid,"},{"line_number":40,"context_line":"    cells\u003d["},{"line_number":41,"context_line":"        objects.InstanceNUMACell("},{"line_number":42,"context_line":"            id\u003d0, cpuset\u003dset([1, 2]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":43,"context_line":"            pagesize\u003d2048),"},{"line_number":44,"context_line":"        objects.InstanceNUMACell("},{"line_number":45,"context_line":"            id\u003d1, cpuset\u003dset([3, 4]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":46,"context_line":"            pagesize\u003d2048),"},{"line_number":47,"context_line":"    ])"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"fake_db_topology \u003d {"},{"line_number":50,"context_line":"    \u0027created_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_b61e4f5c","line":47,"range":{"start_line":38,"start_character":0,"end_line":47,"end_character":6},"updated":"2020-07-13 13:51:15.000000000","message":"Given you only use this in one caller below, what about moving this into the test itself rather than having it global?","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        objects.InstanceNUMACell("},{"line_number":45,"context_line":"            id\u003d1, cpuset\u003dset([3, 4]), pcpuset\u003dset(), memory\u003d512,"},{"line_number":46,"context_line":"            pagesize\u003d2048),"},{"line_number":47,"context_line":"    ])"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"fake_db_topology \u003d {"},{"line_number":50,"context_line":"    \u0027created_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_6779a3fa","line":47,"updated":"2020-07-13 16:33:27.000000000","message":"Make sense. Done.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"}],"nova/tests/unit/scheduler/filters/test_numa_topology_filters.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a27fd3f06277e89ac6410363f2c4a8dc073f4dee","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def test_numa_topology_filter_pass(self):"},{"line_number":45,"context_line":"        instance_topology \u003d objects.InstanceNUMATopology("},{"line_number":46,"context_line":"            cells\u003d[objects.InstanceNUMACell(id\u003d0, cpuset\u003dset([1]),"},{"line_number":47,"context_line":"                                            pcpuset\u003dset(), memory\u003d512),"},{"line_number":48,"context_line":"                   objects.InstanceNUMACell(id\u003d1, cpuset\u003dset([3]),"},{"line_number":49,"context_line":"                                            pcpuset\u003dset(), memory\u003d512)"},{"line_number":50,"context_line":"               ])"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_6e29ade4","line":47,"updated":"2020-03-30 16:04:53.000000000","message":"I think it would be good to have a precursor \"fix all the indentation\" patch like Id3441073adde563a568c9550df53690d1e6c998a","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"                    instance_topology.cells,"},{"line_number":3688,"context_line":"                    cfg.cpu.numa.cells)):"},{"line_number":3689,"context_line":"                self.assertEqual(index, numa_cfg_cell.id)"},{"line_number":3690,"context_line":"                self.assertEqual(instance_cell.cpuset | instance_cell.pcpuset,"},{"line_number":3691,"context_line":"                                 numa_cfg_cell.cpus)"},{"line_number":3692,"context_line":"                self.assertEqual(instance_cell.memory * units.Ki,"},{"line_number":3693,"context_line":"                                 numa_cfg_cell.memory)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_ed143feb","line":3690,"updated":"2020-06-29 10:37:38.000000000","message":"I think your mean to add a property to \u0027InstanceNUMACell\u0027, I would like to do as below:\n\nclass InstanceNUMACell(...):\n    ...\n    @property\n    def total_cpuset(self):\n        return self.cpuset | self.pcpuset\n\n\nHow do you think?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"                    instance_topology.cells,"},{"line_number":3688,"context_line":"                    cfg.cpu.numa.cells)):"},{"line_number":3689,"context_line":"                self.assertEqual(index, numa_cfg_cell.id)"},{"line_number":3690,"context_line":"                self.assertEqual(instance_cell.cpuset | instance_cell.pcpuset,"},{"line_number":3691,"context_line":"                                 numa_cfg_cell.cpus)"},{"line_number":3692,"context_line":"                self.assertEqual(instance_cell.memory * units.Ki,"},{"line_number":3693,"context_line":"                                 numa_cfg_cell.memory)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_88c7dc64","line":3690,"range":{"start_line":3690,"start_character":33,"end_line":3690,"end_character":78},"updated":"2020-06-22 10:17:47.000000000","message":"a \u0027total_cpuset\u0027 property on the object might be helpful for these kinds of things","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08df5e556981b9e5fbdb78fa6494cc059a29e3fc","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"                    instance_topology.cells,"},{"line_number":3688,"context_line":"                    cfg.cpu.numa.cells)):"},{"line_number":3689,"context_line":"                self.assertEqual(index, numa_cfg_cell.id)"},{"line_number":3690,"context_line":"                self.assertEqual(instance_cell.cpuset | instance_cell.pcpuset,"},{"line_number":3691,"context_line":"                                 numa_cfg_cell.cpus)"},{"line_number":3692,"context_line":"                self.assertEqual(instance_cell.memory * units.Ki,"},{"line_number":3693,"context_line":"                                 numa_cfg_cell.memory)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_b821e3b6","line":3690,"in_reply_to":"bf51134e_ed143feb","updated":"2020-06-29 12:32:50.000000000","message":"Yup, that makes sense","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":3394,"context_line":"                cells\u003d[objects.InstanceNUMACell("},{"line_number":3395,"context_line":"                    cpuset\u003dset(), pcpuset\u003dset([0, 1]), memory\u003d2048,"},{"line_number":3396,"context_line":"                    cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":3397,"context_line":""},{"line_number":3398,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host(host_topo, inst_topo)"},{"line_number":3399,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_4dd56b1b","line":3396,"updated":"2020-06-29 10:37:38.000000000","message":"Ok. I\u0027ll address your comment by considering removing  the \u0027-1\u0027 from \u0027workflow\u0027 for this patch[1].\n\n[1] https://review.opendev.org/#/c/728793/","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":3391,"context_line":"                siblings\u003d[set([2]), set([3])])"},{"line_number":3392,"context_line":"        ])"},{"line_number":3393,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":3394,"context_line":"                cells\u003d[objects.InstanceNUMACell("},{"line_number":3395,"context_line":"                    cpuset\u003dset(), pcpuset\u003dset([0, 1]), memory\u003d2048,"},{"line_number":3396,"context_line":"                    cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":3397,"context_line":""},{"line_number":3398,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host(host_topo, inst_topo)"},{"line_number":3399,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_4896644e","line":3396,"range":{"start_line":3394,"start_character":16,"end_line":3396,"end_character":70},"updated":"2020-06-22 10:17:47.000000000","message":"nit: it would be nice if you\u0027d a precursor patch to fix all the indentation for these, like we did for the host NUMA objects. This is pretty clear though, in fairness","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        with mock.patch.object(stats.PciDeviceStats,"},{"line_number":2510,"context_line":"                \u0027support_requests\u0027, return_value\u003d False):"},{"line_number":2511,"context_line":"            fitted_instance1 \u003d hw.numa_fit_instance_to_host("},{"line_number":2512,"context_line":"                                                        self.host,"},{"line_number":2513,"context_line":"                                                        self.instance1,"},{"line_number":2514,"context_line":"                                                        pci_requests\u003dpci_reqs,"},{"line_number":2515,"context_line":"                                                        pci_stats\u003dpci_stats)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_a77f3bdd","line":2512,"updated":"2020-07-13 16:33:27.000000000","message":"Drop this change, it is made by mistake.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        with mock.patch.object(stats.PciDeviceStats,"},{"line_number":2510,"context_line":"                \u0027support_requests\u0027, return_value\u003d False):"},{"line_number":2511,"context_line":"            fitted_instance1 \u003d hw.numa_fit_instance_to_host("},{"line_number":2512,"context_line":"                                                        self.host,"},{"line_number":2513,"context_line":"                                                        self.instance1,"},{"line_number":2514,"context_line":"                                                        pci_requests\u003dpci_reqs,"},{"line_number":2515,"context_line":"                                                        pci_stats\u003dpci_stats)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_8784b7d4","line":2512,"updated":"2020-07-13 16:33:27.000000000","message":"These lines should not be changed due to its perfect coding style.","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7123facd4042ea12fa0ddbc46d403766ea79b19f","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"        with mock.patch.object(stats.PciDeviceStats,"},{"line_number":2510,"context_line":"                \u0027support_requests\u0027, return_value\u003d False):"},{"line_number":2511,"context_line":"            fitted_instance1 \u003d hw.numa_fit_instance_to_host("},{"line_number":2512,"context_line":"                                                        self.host,"},{"line_number":2513,"context_line":"                                                        self.instance1,"},{"line_number":2514,"context_line":"                                                        pci_requests\u003dpci_reqs,"},{"line_number":2515,"context_line":"                                                        pci_stats\u003dpci_stats)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_76e95718","line":2512,"range":{"start_line":2512,"start_character":16,"end_line":2512,"end_character":56},"updated":"2020-07-13 13:51:15.000000000","message":"unrelated change?","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"44317f5f659dfb5f8c9c8d1f23f98bc77332244d","unresolved":false,"context_lines":[{"line_number":4260,"context_line":"                cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":4261,"context_line":""},{"line_number":4262,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host(host_topo, inst_topo)"},{"line_number":4263,"context_line":"        self.assertEqual({0: 0}, inst_topo.cells[0].cpu_pinning)"},{"line_number":4264,"context_line":"        self.assertEqual(set([1]), inst_topo.cells[0].cpuset_reserved)"},{"line_number":4265,"context_line":"        self.assertEqual({1: 2}, inst_topo.cells[1].cpu_pinning)"},{"line_number":4266,"context_line":"        self.assertIsNone(inst_topo.cells[1].cpuset_reserved)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_e76c9337","line":4263,"updated":"2020-07-13 16:33:27.000000000","message":";","commit_id":"1b8ee15f254d77e8e8d93c7748e7454fa56a12a4"}],"nova/virt/hardware.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"53eceb72a445936998570b64893bcff21a282247","unresolved":false,"context_lines":[{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"    # NOTE(stephenfin): As with memory, do not allow an instance to overcommit"},{"line_number":1129,"context_line":"    # against itself on any NUMA cell"},{"line_number":1130,"context_line":"    req_dedicated_cpus \u003d 0"},{"line_number":1131,"context_line":"    req_shared_cpus \u003d 0"},{"line_number":1132,"context_line":"    if instance_cell.cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1133,"context_line":"        req_dedicated_cpus \u003d len(instance_cell.cpuset)"},{"line_number":1134,"context_line":"    elif instance_cell.cpu_policy \u003d\u003d fields.CPUAllocationPolicy.MIXED:"},{"line_number":1135,"context_line":"        req_dedicated_cpus \u003d len(instance_cell.cpu_pinning)"},{"line_number":1136,"context_line":"        req_shared_cpus \u003d len(instance_cell.cpuset) - req_dedicated_cpus"},{"line_number":1137,"context_line":"    else:"},{"line_number":1138,"context_line":"        req_shared_cpus \u003d len(instance_cell.cpuset)"},{"line_number":1139,"context_line":""},{"line_number":1140,"context_line":"    if req_dedicated_cpus + cpuset_reserved \u003e len(host_cell.pcpuset):"},{"line_number":1141,"context_line":"        LOG.debug(\u0027Not enough host cell CPUs to fit instance cell; \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_e602146f","side":"PARENT","line":1138,"range":{"start_line":1130,"start_character":4,"end_line":1138,"end_character":51},"updated":"2020-03-30 03:01:22.000000000","message":"I like the removing of this.","commit_id":"fc2b7ac50390c9193a33ddda2f6dec55092969d9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a27fd3f06277e89ac6410363f2c4a8dc073f4dee","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        NOTE: Depending on how host is configured (HT/non-HT) a thread can"},{"line_number":798,"context_line":"              be considered as an entire core."},{"line_number":799,"context_line":"        \"\"\""},{"line_number":800,"context_line":"        if instance_cell is None:"},{"line_number":801,"context_line":"            return None"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        if threads_no * len(sibling_set) \u003c (len(instance_cores)):"},{"line_number":804,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_2e5a0582","line":801,"range":{"start_line":800,"start_character":0,"end_line":801,"end_character":23},"updated":"2020-03-30 16:04:53.000000000","message":"This shouldn\u0027t be necessary since this function will only ever be called when instance_cell is not None","commit_id":"b975b88919825beb708cd27926a3dcfdbaa7e453"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"    dedicated_cpus \u003d set()"},{"line_number":1911,"context_line":"    if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1912,"context_line":"        dedicated_cpus \u003d set(range(flavor.vcpus))"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1915,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_134f4534","line":1912,"updated":"2020-04-01 02:28:38.000000000","message":"I\u0027m thinking why we need this dedicated_cpus variable. I image the code will be looks like:\n\nvcpus \u003d set(range(flavor.vcpus))\n\nif cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:\n     pcpus \u003d vcpus\n     vcpus \u003d []\nelif cpu_policy\u003d\u003d fields.CPUAllocationPolicy.MIXED:\n    vcpus -\u003d pcpus","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"    dedicated_cpus \u003d set()"},{"line_number":1911,"context_line":"    if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1912,"context_line":"        dedicated_cpus \u003d set(range(flavor.vcpus))"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1915,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_4e6640c3","line":1912,"updated":"2020-04-01 03:42:26.000000000","message":"You are right. Up to here, dedicated_cpus is duplicated with pcpus.\n\nWhile in later patch, there are not same, pcpus may take value from realtime_cpus if instance has realtime cpus.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"    dedicated_cpus \u003d set()"},{"line_number":1911,"context_line":"    if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1912,"context_line":"        dedicated_cpus \u003d set(range(flavor.vcpus))"},{"line_number":1913,"context_line":""},{"line_number":1914,"context_line":"    nodes \u003d _get_numa_node_count_constraint(flavor, image_meta)"},{"line_number":1915,"context_line":"    pagesize \u003d _get_numa_pagesize_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_ae570cca","line":1912,"updated":"2020-04-01 03:42:26.000000000","message":"pcpus \u003d realtime_cpus or dedicated_cpus or set()","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"1328fdc3850adec01eef1ed44a729c423d76371b","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1931,"context_line":"        pcpus \u003d cpus \u0026 dedicated_cpus"},{"line_number":1932,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1933,"context_line":""},{"line_number":1934,"context_line":"        cpu_list \u003d _get_numa_cpu_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_8e5cc8ed","line":1931,"updated":"2020-04-01 03:42:26.000000000","message":"Good catch. dedicated_cpus should be ensured being a subset of cpus in funciton \u0027get_dedicated_cpu_constraint\u0027.","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1ba6f8c0d191feaaeb72f24ef5b2a472863189d8","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1931,"context_line":"        pcpus \u003d cpus \u0026 dedicated_cpus"},{"line_number":1932,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1933,"context_line":""},{"line_number":1934,"context_line":"        cpu_list \u003d _get_numa_cpu_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_f34bc127","line":1931,"range":{"start_line":1931,"start_character":16,"end_line":1931,"end_character":37},"updated":"2020-04-01 02:28:38.000000000","message":"why need \u0026 with cpus?","commit_id":"f757e1fec708ae637dc740565971f8ad8e78a9b3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"        if rt_mask:"},{"line_number":1908,"context_line":"            raise exception.RealtimeConfigurationInvalid()"},{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"    dedicated_cpus \u003d set()"},{"line_number":1911,"context_line":"    if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1912,"context_line":"        dedicated_cpus \u003d set(range(flavor.vcpus))"},{"line_number":1913,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_5d3c0a92","line":1910,"range":{"start_line":1910,"start_character":4,"end_line":1910,"end_character":18},"updated":"2020-04-02 16:43:10.000000000","message":"maybe just call this pcpus, since you effectively alias it below","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"        if rt_mask:"},{"line_number":1908,"context_line":"            raise exception.RealtimeConfigurationInvalid()"},{"line_number":1909,"context_line":""},{"line_number":1910,"context_line":"    dedicated_cpus \u003d set()"},{"line_number":1911,"context_line":"    if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1912,"context_line":"        dedicated_cpus \u003d set(range(flavor.vcpus))"},{"line_number":1913,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_7d646e4a","line":1910,"range":{"start_line":1910,"start_character":4,"end_line":1910,"end_character":18},"in_reply_to":"df33271e_5d3c0a92","updated":"2020-04-02 17:30:15.000000000","message":"We can do like that. \n\nBut, anyway, this is temporary line and will be removed, in a later patch the \u0027dedicated_cpus\u0027 might be translated from \u0027hw:cpu_dedicated_set\u0027 or \u0027PCPU|VCPU\u0027, and we\u0027ll have lines like:\n\ncpus\u003dset(range(flavor.vcpus))\npcpus\u003d realtime_cpus or dedicated_cpus or set()\nvcpus \u003d cpus - pcpus\n\nIf you insist, I can change it.","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80f3eceda719768d0d132a68c792a3a1c11925a8","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"    ):"},{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1931,"context_line":"        pcpus \u003d dedicated_cpus"},{"line_number":1932,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1933,"context_line":""},{"line_number":1934,"context_line":"        cpu_list \u003d _get_numa_cpu_constraint(flavor, image_meta)"},{"line_number":1935,"context_line":"        mem_list \u003d _get_numa_mem_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_fd4cfe42","line":1932,"range":{"start_line":1930,"start_character":0,"end_line":1932,"end_character":28},"updated":"2020-04-02 16:43:10.000000000","message":"Can you move this up alongside the ones above","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"093825a61483dfd3db9fd55fddc82a21a9c109fe","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"    ):"},{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1931,"context_line":"        pcpus \u003d dedicated_cpus"},{"line_number":1932,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1933,"context_line":""},{"line_number":1934,"context_line":"        cpu_list \u003d _get_numa_cpu_constraint(flavor, image_meta)"},{"line_number":1935,"context_line":"        mem_list \u003d _get_numa_mem_constraint(flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_3849545f","line":1932,"range":{"start_line":1930,"start_character":0,"end_line":1932,"end_character":28},"in_reply_to":"df33271e_fd4cfe42","updated":"2020-04-02 17:30:15.000000000","message":"Do you mean arranging like this:\n\nif nodes or pagesize ...:\n\n        cpus \u003d set(range(flavor.vcpus))\n        pcpus \u003d dedicated_cpus\n        vcpus \u003d cpus - pcpus\n        nodes \u003d nodes or 1","commit_id":"e3f34b80f6b7a4a2404938536115964137659378"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            LOG.debug(\u0027Host does not support requested memory pagesize, \u0027"},{"line_number":1033,"context_line":"                      \u0027or not enough free pages of the requested size. \u0027"},{"line_number":1034,"context_line":"                      \u0027Requested: %d kB\u0027, instance_cell.pagesize)"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":"        LOG.debug(\u0027Selected memory pagesize: %(selected_mem_pagesize)d kB. \u0027"},{"line_number":1037,"context_line":"                  \u0027Requested memory pagesize: %(requested_mem_pagesize)d \u0027"},{"line_number":1038,"context_line":"                  \u0027(small \u003d -1, large \u003d -2, any \u003d -3)\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_42f84b48","line":1035,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"                           \u0027available\u0027: host_cell.avail_memory,"},{"line_number":1062,"context_line":"                           \u0027total\u0027: host_cell.memory,"},{"line_number":1063,"context_line":"                           \u0027pagesize\u0027: pagesize})"},{"line_number":1064,"context_line":"                return"},{"line_number":1065,"context_line":"        else:"},{"line_number":1066,"context_line":"            # The host does not support explicit page sizes. Ignore pagesizes"},{"line_number":1067,"context_line":"            # completely."}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_a294b7e9","line":1064,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                          \u0027Required: %(required)d, actual: %(actual)d\u0027,"},{"line_number":1075,"context_line":"                          {\u0027required\u0027: instance_cell.memory,"},{"line_number":1076,"context_line":"                           \u0027actual\u0027: host_cell.memory})"},{"line_number":1077,"context_line":"                return"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    # NOTE(stephenfin): As with memory, do not allow an instance to overcommit"},{"line_number":1080,"context_line":"    # against itself on any NUMA cell"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_8297f3eb","line":1077,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1088,"context_line":"                          \u0027actual\u0027: len(host_cell.pcpuset),"},{"line_number":1089,"context_line":"                          \u0027cpuset_reserved\u0027: cpuset_reserved"},{"line_number":1090,"context_line":"                      })"},{"line_number":1091,"context_line":"            return"},{"line_number":1092,"context_line":"    else:"},{"line_number":1093,"context_line":"        required_cpus \u003d len(instance_cell.cpuset)"},{"line_number":1094,"context_line":"        if required_cpus \u003e len(host_cell.cpuset):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_e29ebf05","line":1091,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                          \u0027required\u0027: len(instance_cell.cpuset),"},{"line_number":1098,"context_line":"                          \u0027actual\u0027: len(host_cell.cpuset),"},{"line_number":1099,"context_line":"                      })"},{"line_number":1100,"context_line":"            return"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"    if instance_cell.cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1103,"context_line":"        LOG.debug(\u0027Pinning has been requested\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_c2a1fb48","line":1100,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"                       \u0027vcpus\u0027: len(instance_cell.pcpuset),"},{"line_number":1112,"context_line":"                       \u0027actual\u0027: host_cell.avail_pcpus,"},{"line_number":1113,"context_line":"                       \u0027num_cpu_reserved\u0027: cpuset_reserved})"},{"line_number":1114,"context_line":"            return"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        if instance_cell.memory \u003e host_cell.avail_memory:"},{"line_number":1117,"context_line":"            LOG.debug(\u0027Not enough available memory to schedule instance. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_2288a7c4","line":1114,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"                      {\u0027required\u0027: instance_cell.memory,"},{"line_number":1122,"context_line":"                       \u0027available\u0027: host_cell.avail_memory,"},{"line_number":1123,"context_line":"                       \u0027total\u0027: host_cell.memory})"},{"line_number":1124,"context_line":"            return"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        # Try to pack the instance cell onto cores"},{"line_number":1127,"context_line":"        instance_cell \u003d _pack_instance_onto_cores("}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_0283e3aa","line":1124,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"        )"},{"line_number":1130,"context_line":"        if not instance_cell:"},{"line_number":1131,"context_line":"            LOG.debug(\u0027Failed to map instance cell CPUs to host cell CPUs\u0027)"},{"line_number":1132,"context_line":"            return"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    elif limits:"},{"line_number":1135,"context_line":"        LOG.debug(\u0027No pinning requested, considering limitations on usable cpu\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_6292aff8","line":1132,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"                      \u0027not enough free CPUs to schedule this instance. \u0027"},{"line_number":1142,"context_line":"                      \u0027Usage: %(usage)d, limit: %(limit)d\u0027,"},{"line_number":1143,"context_line":"                      {\u0027usage\u0027: cpu_usage, \u0027limit\u0027: cpu_limit})"},{"line_number":1144,"context_line":"            return"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        ram_usage \u003d host_cell.memory_usage + instance_cell.memory"},{"line_number":1147,"context_line":"        ram_limit \u003d host_cell.memory * limits.ram_allocation_ratio"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_428debd1","line":1144,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"                      \u0027not enough free memory to schedule this instance. \u0027"},{"line_number":1151,"context_line":"                      \u0027Usage: %(usage)d, limit: %(limit)d\u0027,"},{"line_number":1152,"context_line":"                      {\u0027usage\u0027: ram_usage, \u0027limit\u0027: ram_limit})"},{"line_number":1153,"context_line":"            return"},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":1156,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_a2bdd769","line":1153,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Return value expected","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e9e33cf2de2ca50758b01fb2289e4951c13f9520","unresolved":false,"context_lines":[{"line_number":2100,"context_line":"    # indicative of a PCI device being associated with that node"},{"line_number":2101,"context_line":"    if not pci_requests and pci_stats:"},{"line_number":2102,"context_line":"        host_cells \u003d sorted(host_cells, key\u003dlambda cell: cell.id in ["},{"line_number":2103,"context_line":"            pool[\u0027numa_node\u0027] for pool in pci_stats.pools])"},{"line_number":2104,"context_line":""},{"line_number":2105,"context_line":"    for host_cell_perm in itertools.permutations("},{"line_number":2106,"context_line":"            host_cells, len(instance_topology)):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_82c093e2","line":2103,"updated":"2020-04-07 12:47:50.000000000","message":"pep8: error: Item \"None\" of \"Optional[Any]\" has no attribute \"pools\"","commit_id":"8afcdd706606c449391bab974db31987c4b78536"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            LOG.debug(\u0027Host does not support requested memory pagesize, \u0027"},{"line_number":1033,"context_line":"                      \u0027or not enough free pages of the requested size. \u0027"},{"line_number":1034,"context_line":"                      \u0027Requested: %d kB\u0027, instance_cell.pagesize)"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":"        LOG.debug(\u0027Selected memory pagesize: %(selected_mem_pagesize)d kB. \u0027"},{"line_number":1037,"context_line":"                  \u0027Requested memory pagesize: %(requested_mem_pagesize)d \u0027"},{"line_number":1038,"context_line":"                  \u0027(small \u003d -1, large \u003d -2, any \u003d -3)\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_583b05ea","line":1035,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"                           \u0027available\u0027: host_cell.avail_memory,"},{"line_number":1062,"context_line":"                           \u0027total\u0027: host_cell.memory,"},{"line_number":1063,"context_line":"                           \u0027pagesize\u0027: pagesize})"},{"line_number":1064,"context_line":"                return"},{"line_number":1065,"context_line":"        else:"},{"line_number":1066,"context_line":"            # The host does not support explicit page sizes. Ignore pagesizes"},{"line_number":1067,"context_line":"            # completely."}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_383e01da","line":1064,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                          \u0027Required: %(required)d, actual: %(actual)d\u0027,"},{"line_number":1075,"context_line":"                          {\u0027required\u0027: instance_cell.memory,"},{"line_number":1076,"context_line":"                           \u0027actual\u0027: host_cell.memory})"},{"line_number":1077,"context_line":"                return"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    # NOTE(stephenfin): As with memory, do not allow an instance to overcommit"},{"line_number":1080,"context_line":"    # against itself on any NUMA cell"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_98246dc8","line":1077,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1088,"context_line":"                          \u0027actual\u0027: len(host_cell.pcpuset),"},{"line_number":1089,"context_line":"                          \u0027cpuset_reserved\u0027: cpuset_reserved"},{"line_number":1090,"context_line":"                      })"},{"line_number":1091,"context_line":"            return"},{"line_number":1092,"context_line":"    else:"},{"line_number":1093,"context_line":"        required_cpus \u003d len(instance_cell.cpuset)"},{"line_number":1094,"context_line":"        if required_cpus \u003e len(host_cell.cpuset):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_781fe96f","line":1091,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                          \u0027required\u0027: len(instance_cell.cpuset),"},{"line_number":1098,"context_line":"                          \u0027actual\u0027: len(host_cell.cpuset),"},{"line_number":1099,"context_line":"                      })"},{"line_number":1100,"context_line":"            return"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"    if instance_cell.cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1103,"context_line":"        LOG.debug(\u0027Pinning has been requested\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_d82ef5a3","line":1100,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"                       \u0027vcpus\u0027: len(instance_cell.pcpuset),"},{"line_number":1112,"context_line":"                       \u0027actual\u0027: host_cell.avail_pcpus,"},{"line_number":1113,"context_line":"                       \u0027num_cpu_reserved\u0027: cpuset_reserved})"},{"line_number":1114,"context_line":"            return"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        if instance_cell.memory \u003e host_cell.avail_memory:"},{"line_number":1117,"context_line":"            LOG.debug(\u0027Not enough available memory to schedule instance. \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_b829719c","line":1114,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1121,"context_line":"                      {\u0027required\u0027: instance_cell.memory,"},{"line_number":1122,"context_line":"                       \u0027available\u0027: host_cell.avail_memory,"},{"line_number":1123,"context_line":"                       \u0027total\u0027: host_cell.memory})"},{"line_number":1124,"context_line":"            return"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        # Try to pack the instance cell onto cores"},{"line_number":1127,"context_line":"        instance_cell \u003d _pack_instance_onto_cores("}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_181a1d7c","line":1124,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"        )"},{"line_number":1130,"context_line":"        if not instance_cell:"},{"line_number":1131,"context_line":"            LOG.debug(\u0027Failed to map instance cell CPUs to host cell CPUs\u0027)"},{"line_number":1132,"context_line":"            return"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    elif limits:"},{"line_number":1135,"context_line":"        LOG.debug(\u0027No pinning requested, considering limitations on usable cpu\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_f81c9978","line":1132,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"                      \u0027not enough free CPUs to schedule this instance. \u0027"},{"line_number":1142,"context_line":"                      \u0027Usage: %(usage)d, limit: %(limit)d\u0027,"},{"line_number":1143,"context_line":"                      {\u0027usage\u0027: cpu_usage, \u0027limit\u0027: cpu_limit})"},{"line_number":1144,"context_line":"            return"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        ram_usage \u003d host_cell.memory_usage + instance_cell.memory"},{"line_number":1147,"context_line":"        ram_limit \u003d host_cell.memory * limits.ram_allocation_ratio"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_5814a54e","line":1144,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"                      \u0027not enough free memory to schedule this instance. \u0027"},{"line_number":1151,"context_line":"                      \u0027Usage: %(usage)d, limit: %(limit)d\u0027,"},{"line_number":1152,"context_line":"                      {\u0027usage\u0027: ram_usage, \u0027limit\u0027: ram_limit})"},{"line_number":1153,"context_line":"            return"},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":1156,"context_line":"    return instance_cell"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_38172154","line":1153,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Return value expected","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"65be8effb92b3d5a8a9de3152e4ab27b16328e27","unresolved":false,"context_lines":[{"line_number":2099,"context_line":"    # indicative of a PCI device being associated with that node"},{"line_number":2100,"context_line":"    if not pci_requests and pci_stats:"},{"line_number":2101,"context_line":"        host_cells \u003d sorted(host_cells, key\u003dlambda cell: cell.id in ["},{"line_number":2102,"context_line":"            pool[\u0027numa_node\u0027] for pool in pci_stats.pools])"},{"line_number":2103,"context_line":""},{"line_number":2104,"context_line":"    for host_cell_perm in itertools.permutations("},{"line_number":2105,"context_line":"            host_cells, len(instance_topology)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_980d8d40","line":2102,"updated":"2020-04-08 03:51:49.000000000","message":"pep8: error: Item \"None\" of \"Optional[Any]\" has no attribute \"pools\"","commit_id":"772302c5f0ed123024d9a6db39eaf3a294c1530e"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"    :param nodes: The number of nodes required in the generated topology."},{"line_number":1574,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"},{"line_number":1575,"context_line":"        CPU and memory count."},{"line_number":1576,"context_line":"    :param vcpus: A set of IDs for CPUs that should be shared"},{"line_number":1577,"context_line":"    :param pcpus: A set of IDs for CPUs that should be dedicated"},{"line_number":1578,"context_line":"    \"\"\""},{"line_number":1579,"context_line":"    if (flavor.vcpus % nodes) \u003e 0 or (flavor.memory_mb % nodes) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_edc27f52","line":1576,"updated":"2020-06-29 10:37:38.000000000","message":"Done. Add a full stop for L1608-1609.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"    :param nodes: The number of nodes required in the generated topology."},{"line_number":1574,"context_line":"    :param flavor: The flavor used for the instance, from which to extract the"},{"line_number":1575,"context_line":"        CPU and memory count."},{"line_number":1576,"context_line":"    :param vcpus: A set of IDs for CPUs that should be shared"},{"line_number":1577,"context_line":"    :param pcpus: A set of IDs for CPUs that should be dedicated"},{"line_number":1578,"context_line":"    \"\"\""},{"line_number":1579,"context_line":"    if (flavor.vcpus % nodes) \u003e 0 or (flavor.memory_mb % nodes) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_2893305d","line":1576,"updated":"2020-06-22 10:17:47.000000000","message":"nit: full stop","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":30209,"name":"Huaqiang","email":"huaqiang.wang@intel.com","username":"Huaqiang.Wang"},"change_message_id":"f73e9927a06c4012573b3d50351a7f197a82aa80","unresolved":false,"context_lines":[{"line_number":1922,"context_line":"    ):"},{"line_number":1923,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1924,"context_line":"        pcpus \u003d set()"},{"line_number":1925,"context_line":"        if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1926,"context_line":"            pcpus \u003d cpus"},{"line_number":1927,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_4da3abb2","line":1925,"updated":"2020-06-29 10:37:38.000000000","message":"# NOTE(huaqiang): Here we build the instance dedicated CPU set and the\n    # shared CPU set, through \u0027pcpus\u0027 and \u0027vcpus\u0027 respectively,\n    # which will be used later to calculate the per-NUMA-cell CPU distribution.\n\nDone.","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6b4bad4f9efbd32441892eadf15cc42b8be6dbf","unresolved":false,"context_lines":[{"line_number":1922,"context_line":"    ):"},{"line_number":1923,"context_line":"        cpus \u003d set(range(flavor.vcpus))"},{"line_number":1924,"context_line":"        pcpus \u003d set()"},{"line_number":1925,"context_line":"        if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1926,"context_line":"            pcpus \u003d cpus"},{"line_number":1927,"context_line":"        vcpus \u003d cpus - pcpus"},{"line_number":1928,"context_line":"        nodes \u003d nodes or 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_c88b941c","line":1925,"updated":"2020-06-22 10:17:47.000000000","message":"Can we get a comment about what you\u0027re doing here?","commit_id":"76c981c2cf759113fab1a19a1369324e52c20067"}]}
