)]}'
{"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"cb0989744d4c353fc7663a4d866ce1d2980357d2","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"},{"line_number":660,"context_line":"                if not cpu.model:"},{"line_number":661,"context_line":"                    msg \u003d _(\"Configured CPU model: {model} is not correct, or \""},{"line_number":662,"context_line":"                            \"your host CPU arch does not suuport this model. \""},{"line_number":663,"context_line":"                            \"Please correct your config and try again.\") % {"},{"line_number":664,"context_line":"                                \u0027model\u0027: model}"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_cbb885e6","line":661,"range":{"start_line":661,"start_character":51,"end_line":661,"end_character":58},"updated":"2019-07-12 08:25:12.000000000","message":"%(model)s","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"259298ef23c678f6aa5b3c4db1fd87c4729a7309","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"},{"line_number":660,"context_line":"                if not cpu.model:"},{"line_number":661,"context_line":"                    msg \u003d _(\"Configured CPU model: {model} is not correct, or \""},{"line_number":662,"context_line":"                            \"your host CPU arch does not suuport this model. \""},{"line_number":663,"context_line":"                            \"Please correct your config and try again.\") % {"},{"line_number":664,"context_line":"                                \u0027model\u0027: model}"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_fa7bb877","line":661,"range":{"start_line":661,"start_character":51,"end_line":661,"end_character":58},"in_reply_to":"7faddb67_cbb885e6","updated":"2019-07-15 01:27:20.000000000","message":"Done","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"cb0989744d4c353fc7663a4d866ce1d2980357d2","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":666,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":667,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":668,"context_line":"                    msg \u003d _(\"Configured CPU model: {mode} is not compatible \""},{"line_number":669,"context_line":"                            \"with host CPU. Please correct your config and \""},{"line_number":670,"context_line":"                            \"try again\") % {\u0027model\u0027: model}"},{"line_number":671,"context_line":"                    raise exception.InvalidCPUInfo(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_8bce0d80","line":668,"range":{"start_line":668,"start_character":51,"end_line":668,"end_character":57},"updated":"2019-07-12 08:25:12.000000000","message":"%(model)s","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"259298ef23c678f6aa5b3c4db1fd87c4729a7309","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":666,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":667,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":668,"context_line":"                    msg \u003d _(\"Configured CPU model: {mode} is not compatible \""},{"line_number":669,"context_line":"                            \"with host CPU. Please correct your config and \""},{"line_number":670,"context_line":"                            \"try again\") % {\u0027model\u0027: model}"},{"line_number":671,"context_line":"                    raise exception.InvalidCPUInfo(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_ba99c0c4","line":668,"range":{"start_line":668,"start_character":51,"end_line":668,"end_character":57},"in_reply_to":"7faddb67_8bce0d80","updated":"2019-07-15 01:27:20.000000000","message":"Done","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"cb0989744d4c353fc7663a4d866ce1d2980357d2","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":679,"context_line":"            ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":680,"context_line":"            if ret \u003c\u003d 0:"},{"line_number":681,"context_line":"                msg \u003d _(\"Configured extra flag: {flag} it not correct, or \""},{"line_number":682,"context_line":"                        \"your host CPU does not support this flag. Please \""},{"line_number":683,"context_line":"                        \"correct your config and try again.\") % {\u0027flag\u0027: flag}"},{"line_number":684,"context_line":"            raise exception.InvalidCPUInfo(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_2bc7d966","line":681,"range":{"start_line":681,"start_character":48,"end_line":681,"end_character":54},"updated":"2019-07-12 08:25:12.000000000","message":"%(flag)s","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"259298ef23c678f6aa5b3c4db1fd87c4729a7309","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":679,"context_line":"            ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":680,"context_line":"            if ret \u003c\u003d 0:"},{"line_number":681,"context_line":"                msg \u003d _(\"Configured extra flag: {flag} it not correct, or \""},{"line_number":682,"context_line":"                        \"your host CPU does not support this flag. Please \""},{"line_number":683,"context_line":"                        \"correct your config and try again.\") % {\u0027flag\u0027: flag}"},{"line_number":684,"context_line":"            raise exception.InvalidCPUInfo(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_1a81f44a","line":681,"range":{"start_line":681,"start_character":48,"end_line":681,"end_character":54},"in_reply_to":"7faddb67_2bc7d966","updated":"2019-07-15 01:27:20.000000000","message":"Done","commit_id":"d636ca3d0443c3eed536176341f6f669bf826a3c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        models \u003d CONF.libvirt.cpu_models"},{"line_number":646,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":647,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_c70fdc2b","line":648,"updated":"2019-08-02 13:40:16.000000000","message":"Maybe add a quick return?\n\n  if not mode or models:\n      return","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        models \u003d CONF.libvirt.cpu_models"},{"line_number":646,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":647,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_7bcd555b","line":648,"in_reply_to":"7faddb67_c70fdc2b","updated":"2019-08-05 08:54:28.000000000","message":"Done","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":647,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_070ad41e","line":651,"range":{"start_line":649,"start_character":0,"end_line":651,"end_character":40},"updated":"2019-08-02 13:40:16.000000000","message":"Were we not checking this elsewhere before? Can we remove that check now?","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":647,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_e090b045","line":651,"range":{"start_line":649,"start_character":0,"end_line":651,"end_character":40},"in_reply_to":"7faddb67_070ad41e","updated":"2019-08-05 08:54:28.000000000","message":"Hi, the checking is here: https://github.com/openstack/nova/blob/stable/stein/nova/virt/libvirt/driver.py#L3943\n\nAnd it\u0027s removed in previous patch: https://review.opendev.org/#/c/670298/2/nova/virt/libvirt/driver.py","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_0415f248","line":652,"range":{"start_line":652,"start_character":8,"end_line":652,"end_character":10},"updated":"2019-08-02 13:40:16.000000000","message":"nit: you don\u0027t need to use elif here since you\u0027re raising above\n\n  if foo:\n      raise\n\n  if bar:\n      raise","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_3bd35d03","line":652,"range":{"start_line":652,"start_character":8,"end_line":652,"end_character":10},"in_reply_to":"7faddb67_0415f248","updated":"2019-08-05 08:54:28.000000000","message":"Done","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"},{"line_number":656,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_47044c15","line":655,"range":{"start_line":653,"start_character":0,"end_line":655,"end_character":40},"updated":"2019-08-02 13:40:16.000000000","message":"Is this really something we need to error on? Couldn\u0027t we possibly break upgrades here if someone had set cpu_model for some reason and forgot to set \u0027cpu_mode\u0027. Maybe we should warn for now and raise a warning in the future?","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":650,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":651,"context_line":"            raise exception.Invalid(msg)"},{"line_number":652,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"},{"line_number":656,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_c0001469","line":655,"range":{"start_line":653,"start_character":0,"end_line":655,"end_character":40},"in_reply_to":"7faddb67_47044c15","updated":"2019-08-05 08:54:28.000000000","message":"For now, if \u0027cpu_model\u0027 is set and \u0027cpu_mode\u0027 is not \u0027custom\u0027, the create action will raise an exception.[1]_ Therefore, we do the check when nova compute service start.\n\nRef:\n[1] https://github.com/openstack/nova/blob/stable/stein/nova/virt/libvirt/driver.py#L3947","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"},{"line_number":656,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_a7142045","line":656,"range":{"start_line":656,"start_character":0,"end_line":656,"end_character":41},"updated":"2019-08-02 13:40:16.000000000","message":"As above, if you just use ifs then you can drop this check","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":654,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":655,"context_line":"            raise exception.Invalid(msg)"},{"line_number":656,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_db07a981","line":656,"range":{"start_line":656,"start_character":0,"end_line":656,"end_character":41},"in_reply_to":"7faddb67_a7142045","updated":"2019-08-05 08:54:28.000000000","message":"Done","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a5a8a704a2ec0ca36a29fc017231054e8fe4723","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"},{"line_number":660,"context_line":"                if not cpu.model:"},{"line_number":661,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not correct, \""},{"line_number":662,"context_line":"                             \"or your host CPU arch does not suuport this \""},{"line_number":663,"context_line":"                             \"model. Please correct your config and try \""},{"line_number":664,"context_line":"                             \"again.\") % {\u0027model\u0027: model})"},{"line_number":665,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":666,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":667,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":668,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_472d2c93","line":665,"range":{"start_line":660,"start_character":0,"end_line":665,"end_character":55},"updated":"2019-08-02 13:40:16.000000000","message":"As above, were we doing this check before? If so, can we remove the other check. If not, what happened if you defined an unsupported CPU?","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c9a18f5e8bb2ccb319513f1e5af7bb2a91c426f3","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":658,"context_line":"            for model in models:"},{"line_number":659,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"},{"line_number":660,"context_line":"                if not cpu.model:"},{"line_number":661,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not correct, \""},{"line_number":662,"context_line":"                             \"or your host CPU arch does not suuport this \""},{"line_number":663,"context_line":"                             \"model. Please correct your config and try \""},{"line_number":664,"context_line":"                             \"again.\") % {\u0027model\u0027: model})"},{"line_number":665,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":666,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":667,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":668,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_604040a6","line":665,"range":{"start_line":660,"start_character":0,"end_line":665,"end_character":55},"in_reply_to":"7faddb67_472d2c93","updated":"2019-08-05 08:54:28.000000000","message":"No, we don\u0027t check CPU compatible before. If an unsupported CPU defined, it will raise an exception and block nova compute service startup.","commit_id":"98fc112773123d0f82c996fb8b5f1d7ae1c3482b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"21c3e3b7adb2a3b9d883f65ec969ecb514e74a82","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                             \"model. Please correct your config and try \""},{"line_number":668,"context_line":"                             \"again.\") % {\u0027model\u0027: model})"},{"line_number":669,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":670,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":671,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":672,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not \""},{"line_number":673,"context_line":"                             \"compatible with host CPU. Please correct your \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_f100cf68","line":670,"range":{"start_line":670,"start_character":33,"end_line":670,"end_character":44},"updated":"2019-08-15 06:00:24.000000000","message":"Can we use self._compare_cpu? since it has more handling for error case, and you needn\u0027t to do that again","commit_id":"a8cb25e875e5a7282e2ee302dbaf643548aa2046"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"e97179107c1cbe065fb0f1d38a6dd399e1aee7c1","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                             \"model. Please correct your config and try \""},{"line_number":668,"context_line":"                             \"again.\") % {\u0027model\u0027: model})"},{"line_number":669,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":670,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":671,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":672,"context_line":"                    msg \u003d (_(\"Configured CPU model: %(model)s is not \""},{"line_number":673,"context_line":"                             \"compatible with host CPU. Please correct your \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_5d09a328","line":670,"range":{"start_line":670,"start_character":33,"end_line":670,"end_character":44},"in_reply_to":"7faddb67_f100cf68","updated":"2019-08-16 17:24:16.000000000","message":"Yes, we can. It need self._compare_cpu\u0027s param guest_cpu can be obj: vconfig.LibvirtConfigGuestCPU(default is nova.objects.VirtCPUModel and it will be converted to vconfig.LibvirtConfigGuestCPU)\n\nAlso, we should catch exception.InvalidCPUInfo in self._check_cpu_compability to show a detail exception message to help admin known where is wrong.","commit_id":"a8cb25e875e5a7282e2ee302dbaf643548aa2046"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"79df1567c6c2f47fa677721e60bd034467daa884","unresolved":false,"context_lines":[{"line_number":4049,"context_line":"            if mode is None or mode \u003d\u003d \"none\":"},{"line_number":4050,"context_line":"                return None"},{"line_number":4051,"context_line":""},{"line_number":4052,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":4053,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\")):"},{"line_number":4054,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":4055,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""},{"line_number":4056,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":4057,"context_line":"            raise exception.Invalid(msg)"},{"line_number":4058,"context_line":""},{"line_number":4059,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_bb3851d4","line":4056,"range":{"start_line":4052,"start_character":8,"end_line":4056,"end_character":76},"updated":"2019-08-26 05:38:35.000000000","message":"why we didn\u0027t move this check to the startup also?","commit_id":"1133089cc8858aa67cdd016e2320f5192bfe0855"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"9a88dc1541c7accfd543f1f8405abf76628442f8","unresolved":false,"context_lines":[{"line_number":4049,"context_line":"            if mode is None or mode \u003d\u003d \"none\":"},{"line_number":4050,"context_line":"                return None"},{"line_number":4051,"context_line":""},{"line_number":4052,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":4053,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\")):"},{"line_number":4054,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":4055,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""},{"line_number":4056,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":4057,"context_line":"            raise exception.Invalid(msg)"},{"line_number":4058,"context_line":""},{"line_number":4059,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_4835a244","line":4056,"range":{"start_line":4052,"start_character":8,"end_line":4056,"end_character":76},"in_reply_to":"7faddb67_bb3851d4","updated":"2019-08-28 09:22:39.000000000","message":"Done","commit_id":"1133089cc8858aa67cdd016e2320f5192bfe0855"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b822f508de2039d04f879892597cbb564cfa5645","unresolved":false,"context_lines":[{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if mode !\u003d \"custom\" and not models:"},{"line_number":659,"context_line":"            return"},{"line_number":660,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":661,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":662,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e734b4e1","line":659,"updated":"2019-08-28 15:53:37.000000000","message":"nit: If you\u0027ve to rework, can you add a newline between the blocks?","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"1b0173343b1dffd290f7ea7890eaf4c0e5e7a206","unresolved":false,"context_lines":[{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if mode !\u003d \"custom\" and not models:"},{"line_number":659,"context_line":"            return"},{"line_number":660,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":661,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":662,"context_line":"            raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_80f600d8","line":659,"in_reply_to":"7faddb67_e734b4e1","updated":"2019-08-29 08:10:33.000000000","message":"Done","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b822f508de2039d04f879892597cbb564cfa5645","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":665,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":666,"context_line":"            raise exception.Invalid(msg)"},{"line_number":667,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":668,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":669,"context_line":"            for model in models:"},{"line_number":670,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_873380f6","line":667,"range":{"start_line":667,"start_character":0,"end_line":667,"end_character":39},"updated":"2019-08-28 15:53:37.000000000","message":"this isn\u0027t needed (you could just add a comment) since all the other scenarios have been handled already. Can you drop and dedent the below?","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81e6c4f4edbe223974b789f071becfba86836ee6","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":665,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":666,"context_line":"            raise exception.Invalid(msg)"},{"line_number":667,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":668,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":669,"context_line":"            for model in models:"},{"line_number":670,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_fd8af617","line":667,"range":{"start_line":667,"start_character":0,"end_line":667,"end_character":39},"in_reply_to":"7faddb67_60d3c402","updated":"2019-08-29 15:21:11.000000000","message":"I meant there are four possible combinations here:\n\n1. mode !\u003d \"custom\", models unset\n2. mode \u003d\u003d \"custom\", models unset\n3. mode !\u003d \"custom\", models set\n4. mode \u003d\u003d \"custom\", models set\n\nBecause you\u0027re checking 1-3 on lines 658-666 and either returning or raising, you don\u0027t need to explicitly check for 4. It\u0027s a small thing.","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"1b0173343b1dffd290f7ea7890eaf4c0e5e7a206","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":665,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":666,"context_line":"            raise exception.Invalid(msg)"},{"line_number":667,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":668,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":669,"context_line":"            for model in models:"},{"line_number":670,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_60d3c402","line":667,"range":{"start_line":667,"start_character":0,"end_line":667,"end_character":39},"in_reply_to":"7faddb67_873380f6","updated":"2019-08-29 08:10:33.000000000","message":"This check still needed, it will check the compatibility between host CPU and configured CPU models.","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"3ef810c199c872da4179a0785f0bc77c7fc4a34f","unresolved":false,"context_lines":[{"line_number":664,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":665,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":666,"context_line":"            raise exception.Invalid(msg)"},{"line_number":667,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":668,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":669,"context_line":"            for model in models:"},{"line_number":670,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_90095c32","line":667,"range":{"start_line":667,"start_character":0,"end_line":667,"end_character":39},"in_reply_to":"7faddb67_fd8af617","updated":"2019-08-30 06:59:33.000000000","message":"Get your point, keep it to show the condition clearly :)","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b822f508de2039d04f879892597cbb564cfa5645","unresolved":false,"context_lines":[{"line_number":682,"context_line":"                             \"config and try again. %(e)s\") % {"},{"line_number":683,"context_line":"                                 \u0027model\u0027: model, \u0027e\u0027: e})"},{"line_number":684,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":685,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":686,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":687,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":688,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":689,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""},{"line_number":690,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":691,"context_line":"            raise exception.Invalid(msg)"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        # Use guest CPU model to check the compability between guest CPU and"},{"line_number":694,"context_line":"        # configured extra_flags"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_674e846f","line":691,"range":{"start_line":685,"start_character":0,"end_line":691,"end_character":40},"updated":"2019-08-28 15:53:37.000000000","message":"nit: This should probably go first since it\u0027s faster?","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"1b0173343b1dffd290f7ea7890eaf4c0e5e7a206","unresolved":false,"context_lines":[{"line_number":682,"context_line":"                             \"config and try again. %(e)s\") % {"},{"line_number":683,"context_line":"                                 \u0027model\u0027: model, \u0027e\u0027: e})"},{"line_number":684,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":685,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":686,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":687,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":688,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":689,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""},{"line_number":690,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":691,"context_line":"            raise exception.Invalid(msg)"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        # Use guest CPU model to check the compability between guest CPU and"},{"line_number":694,"context_line":"        # configured extra_flags"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_002c5048","line":691,"range":{"start_line":685,"start_character":0,"end_line":691,"end_character":40},"in_reply_to":"7faddb67_674e846f","updated":"2019-08-29 08:10:33.000000000","message":"Yes. The check of \u0027virt_type\u0027 should be placed first because of if \u0027cpu_mode!\u003dcustom\u0027 and \u0027cpu_models\u0027 not set, this method will return directly.","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b822f508de2039d04f879892597cbb564cfa5645","unresolved":false,"context_lines":[{"line_number":7599,"context_line":"            cpu.threads \u003d info[\u0027topology\u0027][\u0027threads\u0027]"},{"line_number":7600,"context_line":"            for f in info[\u0027features\u0027]:"},{"line_number":7601,"context_line":"                cpu.add_feature(vconfig.LibvirtConfigCPUFeature(f))"},{"line_number":7602,"context_line":"        else:"},{"line_number":7603,"context_line":"            cpu \u003d guest_cpu if isinstance(guest_cpu,"},{"line_number":7604,"context_line":"                    vconfig.LibvirtConfigGuestCPU) else \\"},{"line_number":7605,"context_line":"                    self._vcpu_model_to_cpu_config(guest_cpu)"},{"line_number":7606,"context_line":""},{"line_number":7607,"context_line":"        u \u003d (\"http://libvirt.org/html/libvirt-libvirt-host.html#\""},{"line_number":7608,"context_line":"             \"virCPUCompareResult\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e73914cf","line":7605,"range":{"start_line":7602,"start_character":0,"end_line":7605,"end_character":61},"updated":"2019-08-28 15:53:37.000000000","message":"How about:\n\n  elif isinstance(guest_cpu, vconfig.LibvirtConfigGuestCPU):\n      cpu \u003d guest_cpu\n  else:\n      cpu \u003d self._vcpu_model_to_cpu_config(guest_cpu)\n\nYou should also add a comment about why these cases might trigger","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"1b0173343b1dffd290f7ea7890eaf4c0e5e7a206","unresolved":false,"context_lines":[{"line_number":7599,"context_line":"            cpu.threads \u003d info[\u0027topology\u0027][\u0027threads\u0027]"},{"line_number":7600,"context_line":"            for f in info[\u0027features\u0027]:"},{"line_number":7601,"context_line":"                cpu.add_feature(vconfig.LibvirtConfigCPUFeature(f))"},{"line_number":7602,"context_line":"        else:"},{"line_number":7603,"context_line":"            cpu \u003d guest_cpu if isinstance(guest_cpu,"},{"line_number":7604,"context_line":"                    vconfig.LibvirtConfigGuestCPU) else \\"},{"line_number":7605,"context_line":"                    self._vcpu_model_to_cpu_config(guest_cpu)"},{"line_number":7606,"context_line":""},{"line_number":7607,"context_line":"        u \u003d (\"http://libvirt.org/html/libvirt-libvirt-host.html#\""},{"line_number":7608,"context_line":"             \"virCPUCompareResult\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_03fd3a07","line":7605,"range":{"start_line":7602,"start_character":0,"end_line":7605,"end_character":61},"in_reply_to":"7faddb67_e73914cf","updated":"2019-08-29 08:10:33.000000000","message":"Done","commit_id":"b5b05e1b74a631f1ea6421fbc5201b803ea80e18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81e6c4f4edbe223974b789f071becfba86836ee6","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":659,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":660,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":661,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_fd8f561f","line":658,"range":{"start_line":658,"start_character":12,"end_line":658,"end_character":13},"updated":"2019-08-29 15:21:11.000000000","message":"nit: don\u0027t think you need these?","commit_id":"1f21d4f8c1c6fa673c72925cedadd47430067cf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81e6c4f4edbe223974b789f071becfba86836ee6","unresolved":false,"context_lines":[{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":659,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":660,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":661,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":662,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_5da0ea91","line":659,"updated":"2019-08-29 15:21:11.000000000","message":"just indent this by four spaces instead","commit_id":"1f21d4f8c1c6fa673c72925cedadd47430067cf7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"81e6c4f4edbe223974b789f071becfba86836ee6","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":659,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":660,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":661,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":662,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_60109950","line":659,"range":{"start_line":658,"start_character":0,"end_line":659,"end_character":49},"updated":"2019-08-29 15:21:11.000000000","message":"nit: You can reword this to:\n\n    if (CONF.libvirt.virt_type not in (\"kvm\", \"qemu\") and\n            mode not in (None, \u0027none\u0027)):\n        msg \u003d ...","commit_id":"1f21d4f8c1c6fa673c72925cedadd47430067cf7"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"3ef810c199c872da4179a0785f0bc77c7fc4a34f","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":656,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        if ((CONF.libvirt.virt_type !\u003d \"kvm\" and"},{"line_number":659,"context_line":"             CONF.libvirt.virt_type !\u003d \"qemu\" and"},{"line_number":660,"context_line":"             mode not in [None, \u0027none\u0027])):"},{"line_number":661,"context_line":"            msg \u003d _(\"Config requested an explicit CPU model, but \""},{"line_number":662,"context_line":"                    \"the current libvirt hypervisor \u0027%s\u0027 does not \""}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_50a3e443","line":659,"range":{"start_line":658,"start_character":0,"end_line":659,"end_character":49},"in_reply_to":"7faddb67_60109950","updated":"2019-08-30 06:59:33.000000000","message":"Done","commit_id":"1f21d4f8c1c6fa673c72925cedadd47430067cf7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b1583d1a042392ea5332bb391f665a58ba675089","unresolved":false,"context_lines":[{"line_number":670,"context_line":"            raise exception.Invalid(msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        if mode !\u003d \"custom\" and models:"},{"line_number":673,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":674,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":675,"context_line":"            raise exception.Invalid(msg)"},{"line_number":676,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_6a5e2114","line":673,"range":{"start_line":673,"start_character":59,"end_line":673,"end_character":64},"updated":"2019-08-30 17:40:50.000000000","message":"nit: need a space before \"","commit_id":"107241a8fda91ce5463edd61bb16bc3adfb566b8"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"f544fbc34d4f169dec775faab433294c91e1661c","unresolved":false,"context_lines":[{"line_number":670,"context_line":"            raise exception.Invalid(msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        if mode !\u003d \"custom\" and models:"},{"line_number":673,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":674,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":675,"context_line":"            raise exception.Invalid(msg)"},{"line_number":676,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_90138301","line":673,"range":{"start_line":673,"start_character":59,"end_line":673,"end_character":64},"in_reply_to":"7faddb67_6a5e2114","updated":"2019-09-02 04:42:20.000000000","message":"Done","commit_id":"107241a8fda91ce5463edd61bb16bc3adfb566b8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b1583d1a042392ea5332bb391f665a58ba675089","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":663,"context_line":"            raise exception.Invalid(msg)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        if mode !\u003d \"custom\" and not models:"},{"line_number":666,"context_line":"            return"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":669,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":670,"context_line":"            raise exception.Invalid(msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        if mode !\u003d \"custom\" and models:"},{"line_number":673,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":674,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":675,"context_line":"            raise exception.Invalid(msg)"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":678,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":679,"context_line":"            for model in models:"},{"line_number":680,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_cad87580","line":677,"range":{"start_line":665,"start_character":0,"end_line":677,"end_character":39},"updated":"2019-08-30 17:40:50.000000000","message":"Conditions seem a little complicated.\n\nHow about just\n\n if mode !\u003d \"custom\":\n     if not models:\n         return\n     else:\n         msg \u003d _(\"The cpu_models option is not required when \"\n                 \"cpu_mode!\u003dcustom\")\n         raise exception.Invalid(msg)\n\n if not models:\n     msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")\n     raise exception.Invalid(msg)\n\n cpu \u003d vconfig.LibvirtConfigGuestCPU()\n for model in models:\n     ...","commit_id":"107241a8fda91ce5463edd61bb16bc3adfb566b8"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"f544fbc34d4f169dec775faab433294c91e1661c","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                    \"support selecting CPU models\") % CONF.libvirt.virt_type"},{"line_number":663,"context_line":"            raise exception.Invalid(msg)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        if mode !\u003d \"custom\" and not models:"},{"line_number":666,"context_line":"            return"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":669,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"},{"line_number":670,"context_line":"            raise exception.Invalid(msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        if mode !\u003d \"custom\" and models:"},{"line_number":673,"context_line":"            msg \u003d _(\"The cpu_models option is not required when\""},{"line_number":674,"context_line":"                    \"cpu_mode!\u003dcustom\")"},{"line_number":675,"context_line":"            raise exception.Invalid(msg)"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        if mode \u003d\u003d \"custom\" and models:"},{"line_number":678,"context_line":"            cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":679,"context_line":"            for model in models:"},{"line_number":680,"context_line":"                cpu.model \u003d self._get_cpu_model_mapping(model)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_d0cb3b6f","line":677,"range":{"start_line":665,"start_character":0,"end_line":677,"end_character":39},"in_reply_to":"7faddb67_cad87580","updated":"2019-09-02 04:42:20.000000000","message":"Done","commit_id":"107241a8fda91ce5463edd61bb16bc3adfb566b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":653,"context_line":"    def _check_cpu_compatibility(self):"},{"line_number":654,"context_line":"        mode \u003d CONF.libvirt.cpu_mode"},{"line_number":655,"context_line":"        models \u003d CONF.libvirt.cpu_models"},{"line_number":656,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":657,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        if (CONF.libvirt.virt_type not in (\"kvm\", \"qemu\") and"},{"line_number":660,"context_line":"                mode not in (None, \u0027none\u0027)):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_e5919447","line":657,"range":{"start_line":656,"start_character":0,"end_line":657,"end_character":48},"updated":"2019-09-05 11:40:50.000000000","message":"You don\u0027t use this until near the end of the function. Perhaps you could move it nearer its user?\n\n  for flag in set(x.lower() for x in CONF.libvirt.cpu_model_extra_flags):","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":653,"context_line":"    def _check_cpu_compatibility(self):"},{"line_number":654,"context_line":"        mode \u003d CONF.libvirt.cpu_mode"},{"line_number":655,"context_line":"        models \u003d CONF.libvirt.cpu_models"},{"line_number":656,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":657,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        if (CONF.libvirt.virt_type not in (\"kvm\", \"qemu\") and"},{"line_number":660,"context_line":"                mode not in (None, \u0027none\u0027)):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_9401d2b2","line":657,"range":{"start_line":656,"start_character":0,"end_line":657,"end_character":48},"in_reply_to":"7faddb67_e5919447","updated":"2019-09-06 06:34:01.000000000","message":"Done","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        if mode !\u003d \"custom\":"},{"line_number":667,"context_line":"            if not models:"},{"line_number":668,"context_line":"                return"},{"line_number":669,"context_line":"            else:"},{"line_number":670,"context_line":"                msg \u003d _(\"The cpu_models option is not required when \""},{"line_number":671,"context_line":"                        \"cpu_mode!\u003dcustom\")"},{"line_number":672,"context_line":"                raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_65cb6449","line":669,"range":{"start_line":669,"start_character":0,"end_line":669,"end_character":17},"updated":"2019-09-05 11:40:50.000000000","message":"nit: remove this","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        if mode !\u003d \"custom\":"},{"line_number":667,"context_line":"            if not models:"},{"line_number":668,"context_line":"                return"},{"line_number":669,"context_line":"            else:"},{"line_number":670,"context_line":"                msg \u003d _(\"The cpu_models option is not required when \""},{"line_number":671,"context_line":"                        \"cpu_mode!\u003dcustom\")"},{"line_number":672,"context_line":"                raise exception.Invalid(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_b4fe4eac","line":669,"range":{"start_line":669,"start_character":0,"end_line":669,"end_character":17},"in_reply_to":"7faddb67_65cb6449","updated":"2019-09-06 06:34:01.000000000","message":"Done","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            if not models:"},{"line_number":668,"context_line":"                return"},{"line_number":669,"context_line":"            else:"},{"line_number":670,"context_line":"                msg \u003d _(\"The cpu_models option is not required when \""},{"line_number":671,"context_line":"                        \"cpu_mode!\u003dcustom\")"},{"line_number":672,"context_line":"                raise exception.Invalid(msg)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        if not models:"},{"line_number":675,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_25d1ecf8","line":672,"range":{"start_line":670,"start_character":0,"end_line":672,"end_character":44},"updated":"2019-09-05 11:40:50.000000000","message":"...and dedent this","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            if not models:"},{"line_number":668,"context_line":"                return"},{"line_number":669,"context_line":"            else:"},{"line_number":670,"context_line":"                msg \u003d _(\"The cpu_models option is not required when \""},{"line_number":671,"context_line":"                        \"cpu_mode!\u003dcustom\")"},{"line_number":672,"context_line":"                raise exception.Invalid(msg)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        if not models:"},{"line_number":675,"context_line":"            msg \u003d _(\"The cpu_models option is required when cpu_mode\u003dcustom\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_542d9a44","line":672,"range":{"start_line":670,"start_character":0,"end_line":672,"end_character":44},"in_reply_to":"7faddb67_25d1ecf8","updated":"2019-09-06 06:34:01.000000000","message":"Done","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        # configured extra_flags"},{"line_number":698,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":699,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":700,"context_line":"        for flag in extra_flags:"},{"line_number":701,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":702,"context_line":"            try:"},{"line_number":703,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_85946037","line":700,"range":{"start_line":700,"start_character":0,"end_line":700,"end_character":32},"updated":"2019-09-05 11:40:50.000000000","message":"Perhaps\n\n  for flag in set(x.lower() for x in CONF.libvirt.cpu_model_extra_flags):","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        # configured extra_flags"},{"line_number":698,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":699,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":700,"context_line":"        for flag in extra_flags:"},{"line_number":701,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":702,"context_line":"            try:"},{"line_number":703,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_743216aa","line":700,"range":{"start_line":700,"start_character":0,"end_line":700,"end_character":32},"in_reply_to":"7faddb67_85946037","updated":"2019-09-06 06:34:01.000000000","message":"Done","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":699,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":700,"context_line":"        for flag in extra_flags:"},{"line_number":701,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":702,"context_line":"            try:"},{"line_number":703,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"},{"line_number":704,"context_line":"            except exception.InvalidCPUInfo as e:"},{"line_number":705,"context_line":"                msg \u003d (_(\"Configured extra flag: %(flag)s it not correct, or \""},{"line_number":706,"context_line":"                         \"the host CPU does not support this flag. Please \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_85ad4085","line":703,"range":{"start_line":701,"start_character":0,"end_line":703,"end_character":66},"updated":"2019-09-05 11:40:50.000000000","message":"I\u0027m wondering if this is good enough? Do we want to do any prevalidation before this to make sure e.g. this is only ASCII and doesn\u0027t contain spaces? (I assume you can\u0027t have emoji flags :))\n\nLater: Nope, it\u0027s not. If we try to print an invalid flag, we see the following:\n\n    import libvirt\n    conn \u003d libvirt.open(\u0027qemu:///system\u0027)\n    xml \u003d \"\"\"\n    \u003ccpu\u003e\n      \u003carch\u003ex86_64\u003c/arch\u003e\n      \u003cmodel\u003eSkylake-Client-IBRS\u003c/model\u003e\n      \u003cvendor\u003eIntel\u003c/vendor\u003e\n      \u003ctopology sockets\u003d\u00271\u0027 cores\u003d\u00272\u0027 threads\u003d\u00272\u0027/\u003e\n      \u003cfeature name\u003d\u0027\\U0001f600\u0027/\u003e\n    \u003c/cpu\u003e\n    \"\"\"\n    conn.compareCPU(xml)\n    libvirt: CPU Driver error : internal error: Unknown CPU feature ???\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n      File \"/usr/lib64/python3.7/site-packages/libvirt.py\", line 3692, in compareCPU\n        if ret \u003d\u003d -1: raise libvirtError (\u0027virConnectCompareCPU() failed\u0027, conn\u003dself)\n    libvirt.libvirtError: internal error: Unknown CPU feature ???\n\n(substitute the ??? with an emoji, which Gerrit comments can\u0027t handle)\n\nHowever, the \u0027_compare_cpu\u0027 flag only handles and returns for the no support case, not the unknown feature case. For the unknown feature case, it\u0027ll bubble things up as a \u0027MigrationPreCheckError\u0027 which we\u0027re not capturing here.\n\nWe need to rework the \u0027_compare_cpu\u0027 function. It shouldn\u0027t return \u0027MigrationPreCheckError\u0027 there since that doesn\u0027t make sense for startup, so we should probably raise something else and simply wrap the existing callers of \u0027_compare_cpu\u0027 to raise \u0027MigrationPreCheckError\u0027 if this new exception is raised.","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":699,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":700,"context_line":"        for flag in extra_flags:"},{"line_number":701,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":702,"context_line":"            try:"},{"line_number":703,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"},{"line_number":704,"context_line":"            except exception.InvalidCPUInfo as e:"},{"line_number":705,"context_line":"                msg \u003d (_(\"Configured extra flag: %(flag)s it not correct, or \""},{"line_number":706,"context_line":"                         \"the host CPU does not support this flag. Please \""}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_7493f650","line":703,"range":{"start_line":701,"start_character":0,"end_line":703,"end_character":66},"in_reply_to":"7faddb67_85ad4085","updated":"2019-09-06 06:34:01.000000000","message":"Libvirt v4.5.0 and qemu v2.12.0 can be reproduced.\nLibvirt v5.5.0 and qemu v4.1.0 can\u0027t reproduces this, it will return 0.\n\nThere is no easy way to solve this problem in \u0027_compare_cpu\u0027, because the error code should be \u0027libvirt.VIR_ERR_INTERNAL_ERROR\u0027, if we deal with it by matching the error code, there are may other situations that are included.\nAt the moment, we can catch this error(MigrationPreCheckError) in \u0027_check_cpu_compatibility\u0027 and throw and InvalidCPUInfo exception.","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":7574,"context_line":"    def _compare_cpu(self, guest_cpu, host_cpu_str, instance):"},{"line_number":7575,"context_line":"        \"\"\"Check the host is compatible with the requested CPU"},{"line_number":7576,"context_line":""},{"line_number":7577,"context_line":"        :param guest_cpu: nova.objects.VirtCPUModel"},{"line_number":7578,"context_line":"                          or nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU"},{"line_number":7579,"context_line":"                          or None."},{"line_number":7580,"context_line":"                          Method: \u0027_check_cpu_compatibility\u0027 will pass this"},{"line_number":7581,"context_line":"                          param as object:"},{"line_number":7582,"context_line":"                          \u0027nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2546cca8","line":7579,"range":{"start_line":7577,"start_character":0,"end_line":7579,"end_character":34},"updated":"2019-09-05 11:40:50.000000000","message":"nit: You can dedent this:\n\n  :param guest_cpu: A nova.objects.VirtCPUModel object,\n      a nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU, or None.","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":7574,"context_line":"    def _compare_cpu(self, guest_cpu, host_cpu_str, instance):"},{"line_number":7575,"context_line":"        \"\"\"Check the host is compatible with the requested CPU"},{"line_number":7576,"context_line":""},{"line_number":7577,"context_line":"        :param guest_cpu: nova.objects.VirtCPUModel"},{"line_number":7578,"context_line":"                          or nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU"},{"line_number":7579,"context_line":"                          or None."},{"line_number":7580,"context_line":"                          Method: \u0027_check_cpu_compatibility\u0027 will pass this"},{"line_number":7581,"context_line":"                          param as object:"},{"line_number":7582,"context_line":"                          \u0027nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_14272267","line":7579,"range":{"start_line":7577,"start_character":0,"end_line":7579,"end_character":34},"in_reply_to":"7faddb67_2546cca8","updated":"2019-09-06 06:34:01.000000000","message":"Done","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bfbf7a2c55bf20e4d369fb33d2b900dec06e28e0","unresolved":false,"context_lines":[{"line_number":7577,"context_line":"        :param guest_cpu: nova.objects.VirtCPUModel"},{"line_number":7578,"context_line":"                          or nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU"},{"line_number":7579,"context_line":"                          or None."},{"line_number":7580,"context_line":"                          Method: \u0027_check_cpu_compatibility\u0027 will pass this"},{"line_number":7581,"context_line":"                          param as object:"},{"line_number":7582,"context_line":"                          \u0027nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU\u0027"},{"line_number":7583,"context_line":"                          when the driver init."},{"line_number":7584,"context_line":"        :param host_cpu_str: JSON from _get_cpu_info() method"},{"line_number":7585,"context_line":""},{"line_number":7586,"context_line":"        If the \u0027guest_cpu\u0027 parameter is not None, this will be"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_e5df5409","line":7583,"range":{"start_line":7580,"start_character":0,"end_line":7583,"end_character":47},"updated":"2019-09-05 11:40:50.000000000","message":"I don\u0027t think this piece is necessary, personally. It might not always be true","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"c4c3db4a383a65d8f1b456fc9e4ba5bfbfec19d4","unresolved":false,"context_lines":[{"line_number":7577,"context_line":"        :param guest_cpu: nova.objects.VirtCPUModel"},{"line_number":7578,"context_line":"                          or nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU"},{"line_number":7579,"context_line":"                          or None."},{"line_number":7580,"context_line":"                          Method: \u0027_check_cpu_compatibility\u0027 will pass this"},{"line_number":7581,"context_line":"                          param as object:"},{"line_number":7582,"context_line":"                          \u0027nova.virt.libvirt.vconfig.LibvirtConfigGuestCPU\u0027"},{"line_number":7583,"context_line":"                          when the driver init."},{"line_number":7584,"context_line":"        :param host_cpu_str: JSON from _get_cpu_info() method"},{"line_number":7585,"context_line":""},{"line_number":7586,"context_line":"        If the \u0027guest_cpu\u0027 parameter is not None, this will be"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_d420aa4c","line":7583,"range":{"start_line":7580,"start_character":0,"end_line":7583,"end_character":47},"in_reply_to":"7faddb67_e5df5409","updated":"2019-09-06 06:34:01.000000000","message":"removed","commit_id":"9f458f02c0d2d16332d1de8754bd762286ee15f2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706e88e29012871ce7ea8b653e3705d68f437af3","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        # Use guest CPU model to check the compatibility between guest CPU and"},{"line_number":694,"context_line":"        # configured extra_flags"},{"line_number":695,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":696,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":697,"context_line":"        for flag in set(x.lower() for x in CONF.libvirt.cpu_model_extra_flags):"},{"line_number":698,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":699,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5faad753_0d053546","line":696,"updated":"2019-09-13 16:41:31.000000000","message":"I think this is wrong. Shouldn\u0027t this read:\n\n  cpu.model \u003d self._host.get_capabilities().host.cpu.model\n\nI can only reproduce in a functional test environment so maybe it\u0027s our mocks that are wrong, but I\u0027d like to double check","commit_id":"ac7a0e840904edc5e1e36a140d24321c6c36364c"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"4205b90e99d8f862d882a3836e17605ec2a6004d","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        # Use guest CPU model to check the compatibility between guest CPU and"},{"line_number":694,"context_line":"        # configured extra_flags"},{"line_number":695,"context_line":"        cpu \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":696,"context_line":"        cpu.model \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":697,"context_line":"        for flag in set(x.lower() for x in CONF.libvirt.cpu_model_extra_flags):"},{"line_number":698,"context_line":"            cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag))"},{"line_number":699,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5faad753_641f0d5b","line":696,"in_reply_to":"5faad753_0d053546","updated":"2019-09-16 03:07:48.000000000","message":"You are right, I\u0027ve fixed this [1].\n\n[1]: https://review.opendev.org/682267","commit_id":"ac7a0e840904edc5e1e36a140d24321c6c36364c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eab671a1cee3dc7446060b6fdf8ec91e111d64a1","unresolved":false,"context_lines":[{"line_number":699,"context_line":"            try:"},{"line_number":700,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"},{"line_number":701,"context_line":"            except (exception.InvalidCPUInfo,"},{"line_number":702,"context_line":"                    exception.MigrationPreCheckError) as e:"},{"line_number":703,"context_line":"                msg \u003d (_(\"Configured extra flag: %(flag)s it not correct, or \""},{"line_number":704,"context_line":"                         \"the host CPU does not support this flag. Please \""},{"line_number":705,"context_line":"                         \"correct the config and try again. %(e)s\") % {"}],"source_content_type":"text/x-python","patch_set":14,"id":"5faad753_56f3220b","line":702,"range":{"start_line":702,"start_character":30,"end_line":702,"end_character":52},"updated":"2019-09-10 07:01:55.000000000","message":"I would prefer a followup to refactor the \u0027_compute_cpu\u0027 not raise MigrationPreCheckError.","commit_id":"ac7a0e840904edc5e1e36a140d24321c6c36364c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1fff966da06996f399b367faefb1258d9002d0bb","unresolved":false,"context_lines":[{"line_number":699,"context_line":"            try:"},{"line_number":700,"context_line":"                self._compare_cpu(cpu, self._get_cpu_info(), None)"},{"line_number":701,"context_line":"            except (exception.InvalidCPUInfo,"},{"line_number":702,"context_line":"                    exception.MigrationPreCheckError) as e:"},{"line_number":703,"context_line":"                msg \u003d (_(\"Configured extra flag: %(flag)s it not correct, or \""},{"line_number":704,"context_line":"                         \"the host CPU does not support this flag. Please \""},{"line_number":705,"context_line":"                         \"correct the config and try again. %(e)s\") % {"}],"source_content_type":"text/x-python","patch_set":14,"id":"5faad753_8eecf6f3","line":702,"range":{"start_line":702,"start_character":30,"end_line":702,"end_character":52},"in_reply_to":"5faad753_56f3220b","updated":"2019-09-11 15:22:50.000000000","message":"+1","commit_id":"ac7a0e840904edc5e1e36a140d24321c6c36364c"}]}
