)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"7a0fb11f4a01b6eacb3c19829a187e3401c6148b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"will be the union of features of all the cpu models and host cpu when"},{"line_number":18,"context_line":"`cpu_mode` is `custom`."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change the method of generate guest cpu xml, if the `cpu_mode` is set to"},{"line_number":21,"context_line":"custom, libvirt driver will select the first CPU model in the `cpu_models`"},{"line_number":22,"context_line":"list (combined with `cpu_model_extra_flags` if it is specified)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I7ed7ca80c4b553a1a4429febac9461bad7598bac"},{"line_number":25,"context_line":"Implements: blueprint cpu-model-selection"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fdfeff1_dc50f50c","line":22,"range":{"start_line":20,"start_character":0,"end_line":22,"end_character":63},"updated":"2019-02-28 17:33:23.000000000","message":"This doesn\u0027t match the blueprint.  The expectation was to select the first CPU model in the \u0027cpu_models\u0027 list *that provides the CPU features corresponding to the CPU traits specified in the flavor/image*","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"1e21655d8142133bac7cce233dc70b21e7c7da9b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"will be the union of features of all the cpu models and host cpu when"},{"line_number":18,"context_line":"`cpu_mode` is `custom`."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change the method of generate guest cpu xml, if the `cpu_mode` is set to"},{"line_number":21,"context_line":"custom, libvirt driver will select the first CPU model in the `cpu_models`"},{"line_number":22,"context_line":"list (combined with `cpu_model_extra_flags` if it is specified)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I7ed7ca80c4b553a1a4429febac9461bad7598bac"},{"line_number":25,"context_line":"Implements: blueprint cpu-model-selection"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fdfeff1_bc84115f","line":22,"range":{"start_line":20,"start_character":0,"end_line":22,"end_character":63},"in_reply_to":"9fdfeff1_dc50f50c","updated":"2019-02-28 17:36:22.000000000","message":"Actually, I think the code is doing the right thing, it\u0027s just the commit message that needs updating.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-03-07 21:39:49 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Select cpu model from a list of cpu models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add configuration item: `cpu_model_list`, an ordered list of CPU list of CPU"},{"line_number":10,"context_line":"models the host supports. Older configuration item `cpu_model` will be deprecated."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_e8591cfe","line":8,"updated":"2019-03-07 21:06:58.000000000","message":"Please wrap body of commit message at 72 chars.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Select cpu model from a list of cpu models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add configuration item: `cpu_model_list`, an ordered list of CPU list of CPU"},{"line_number":10,"context_line":"models the host supports. Older configuration item `cpu_model` will be deprecated."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Add a precheck method when service start: check if the configuration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_c8c22086","line":9,"range":{"start_line":9,"start_character":53,"end_line":9,"end_character":64},"updated":"2019-03-07 21:06:58.000000000","message":"strike","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Select cpu model from a list of cpu models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add configuration item: `cpu_model_list`, an ordered list of CPU list of CPU"},{"line_number":10,"context_line":"models the host supports. Older configuration item `cpu_model` will be deprecated."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Add a precheck method when service start: check if the configuration"},{"line_number":13,"context_line":"`cpu_mode` and `cpu_model_list` is correct and the compatibility between"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_686d2c97","line":10,"range":{"start_line":10,"start_character":63,"end_line":10,"end_character":70},"updated":"2019-03-07 21:06:58.000000000","message":"is\n\n(it\u0027s happening here, not in a later commit)","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add configuration item: `cpu_model_list`, an ordered list of CPU list of CPU"},{"line_number":10,"context_line":"models the host supports. Older configuration item `cpu_model` will be deprecated."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Add a precheck method when service start: check if the configuration"},{"line_number":13,"context_line":"`cpu_mode` and `cpu_model_list` is correct and the compatibility between"},{"line_number":14,"context_line":"`cpu_model`, `cpu_model_extra_flags` and host cpu by using host.compare_cpu()"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_a8f8f4c3","line":12,"range":{"start_line":12,"start_character":35,"end_line":12,"end_character":40},"updated":"2019-03-07 21:06:58.000000000","message":"starts","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change the method of generate guest cpu xml, if the `cpu_mode` is set to"},{"line_number":21,"context_line":"custom, and set the trait in flavor, libvirt driver will select first"},{"line_number":22,"context_line":"meeted CPU model in the `cpu_model_list`, if no trait set, libvirt driver"},{"line_number":23,"context_line":"will select the first CPU model in the `cpu_model_list`."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I7ed7ca80c4b553a1a4429febac9461bad7598bac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_08e26804","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":6},"updated":"2019-03-07 21:06:58.000000000","message":"matching?","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"doc/source/admin/configuration/hypervisor-kvm.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":335,"context_line":"Custom"},{"line_number":336,"context_line":"------"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"If your ``nova.conf`` file contains ``cpu_mode\u003dcustom``, you can explicitly"},{"line_number":339,"context_line":"specify an ordered list of supported named models using the ``cpu_models``"},{"line_number":340,"context_line":"configuration option. It is expected that the list is ordered so that the"},{"line_number":341,"context_line":"more common and less advanced cpu models are listed earlier."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_83e3a034","line":338,"range":{"start_line":338,"start_character":0,"end_line":338,"end_character":56},"updated":"2019-03-05 10:11:25.000000000","message":"Try:\n\n  If :file:`nova.conf` contains :oslo.config:option:`libvirt.cpu_mode`\\ \u003dcustom","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":336,"context_line":"------"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"If your ``nova.conf`` file contains ``cpu_mode\u003dcustom``, you can explicitly"},{"line_number":339,"context_line":"specify an ordered list of supported named models using the ``cpu_models``"},{"line_number":340,"context_line":"configuration option. It is expected that the list is ordered so that the"},{"line_number":341,"context_line":"more common and less advanced cpu models are listed earlier."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_c3d9a884","line":339,"range":{"start_line":339,"start_character":60,"end_line":339,"end_character":74},"updated":"2019-03-05 10:11:25.000000000","message":"Use\n\n    :oslo.config:option`libvirt.cpu_models`\n\ninstead","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":340,"context_line":"configuration option. It is expected that the list is ordered so that the"},{"line_number":341,"context_line":"more common and less advanced cpu models are listed earlier."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"End user specify cpu features the required through traits, libvirt driver will"},{"line_number":344,"context_line":"select the first cpu model in the ``cpu_models`` list that can provide the"},{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_6339dca1","line":343,"range":{"start_line":343,"start_character":0,"end_line":343,"end_character":57},"updated":"2019-03-05 10:11:25.000000000","message":"An end user can specifies required CPU features through traits. When specified, the libvirt driver...\n\n(Also, do we have a document describing CPU traits? If so, we might want to link to it from here)","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":341,"context_line":"more common and less advanced cpu models are listed earlier."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"End user specify cpu features the required through traits, libvirt driver will"},{"line_number":344,"context_line":"select the first cpu model in the ``cpu_models`` list that can provide the"},{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."},{"line_number":347,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_43cff8b2","line":344,"range":{"start_line":344,"start_character":35,"end_line":344,"end_character":48},"updated":"2019-03-05 10:11:25.000000000","message":"as above","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"End user specify cpu features the required through traits, libvirt driver will"},{"line_number":344,"context_line":"select the first cpu model in the ``cpu_models`` list that can provide the"},{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"For example, if specify cpu features avx and avx2 as following:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_435db8ea","line":345,"range":{"start_line":345,"start_character":31,"end_line":345,"end_character":34},"updated":"2019-03-05 10:11:25.000000000","message":"CPU","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"End user specify cpu features the required through traits, libvirt driver will"},{"line_number":344,"context_line":"select the first cpu model in the ``cpu_models`` list that can provide the"},{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"For example, if specify cpu features avx and avx2 as following:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_835160dc","line":345,"range":{"start_line":345,"start_character":0,"end_line":345,"end_character":8},"updated":"2019-03-05 10:11:25.000000000","message":"requested","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"For example, if specify cpu features avx and avx2 as following:"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":".. code-block:: console"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_e36dcc99","line":348,"range":{"start_line":348,"start_character":37,"end_line":348,"end_character":40},"updated":"2019-03-05 10:11:25.000000000","message":"AVX (or ``avx`` - your call)","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":345,"context_line":"required feature traits. If no cpu feature traits are specified then the"},{"line_number":346,"context_line":"instance will be configured with the first cpu model in the list."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"For example, if specify cpu features avx and avx2 as following:"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":".. code-block:: console"},{"line_number":351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_235c34ec","line":348,"range":{"start_line":348,"start_character":24,"end_line":348,"end_character":27},"updated":"2019-03-05 10:11:25.000000000","message":"CPU","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":".. code-block:: console"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    # openstack flavor set FLAVOR_ID --property trait:HW_CPU_X86_AVX\u003drequired --property trait:HW_CPU_X86_AVX2\u003drequired"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"and ``cpu_models`` is configured like this:"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9fdfeff1_23119405","line":352,"range":{"start_line":352,"start_character":0,"end_line":352,"end_character":119},"updated":"2019-03-05 10:11:25.000000000","message":"Wrap these using \u0027\\\u0027.","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"If :file:`nova.conf` contains :oslo.config:option:`libvirt.cpu_mode`\\ \u003dcustom,"},{"line_number":339,"context_line":"you can explicitly specify an ordered list of supported named models using"},{"line_number":340,"context_line":"the :oslo.config:option:`libvirt.cpu_models` configuration option. It is"},{"line_number":341,"context_line":"expected that the list is ordered so that the more common and less advanced cpu"},{"line_number":342,"context_line":"models are listed earlier."},{"line_number":343,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fc1f717_7773c916","line":340,"range":{"start_line":340,"start_character":33,"end_line":340,"end_character":43},"updated":"2019-03-07 21:06:58.000000000","message":"cpu_model_list (throughout)\n\nThis is your docs build failure.","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c690d574f431964c15c8c4db802f596174af4fb1","unresolved":false,"context_lines":[{"line_number":341,"context_line":"expected that the list is ordered so that the more common and less advanced cpu"},{"line_number":342,"context_line":"models are listed earlier."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"An end user can specifies required CPU features through traits. When specified,"},{"line_number":345,"context_line":"the libvirt driver will select the first cpu model in the"},{"line_number":346,"context_line":":oslo.config:option:`libvirt.cpu_models` list that can provide the requested"},{"line_number":347,"context_line":"feature traits. If no CPU feature traits are specified then the instance will"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fc1f717_574fadbc","line":344,"range":{"start_line":344,"start_character":16,"end_line":344,"end_character":25},"updated":"2019-03-07 21:09:01.000000000","message":"specify","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c690d574f431964c15c8c4db802f596174af4fb1","unresolved":false,"context_lines":[{"line_number":347,"context_line":"feature traits. If no CPU feature traits are specified then the instance will"},{"line_number":348,"context_line":"be configured with the first cpu model in the list."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"For example, if specify CPU features ``avx`` and ``avx2`` as following:"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":".. code-block:: console"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fc1f717_f7d579ba","line":350,"range":{"start_line":350,"start_character":61,"end_line":350,"end_character":70},"updated":"2019-03-07 21:09:01.000000000","message":"follows","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c690d574f431964c15c8c4db802f596174af4fb1","unresolved":false,"context_lines":[{"line_number":347,"context_line":"feature traits. If no CPU feature traits are specified then the instance will"},{"line_number":348,"context_line":"be configured with the first cpu model in the list."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"For example, if specify CPU features ``avx`` and ``avx2`` as following:"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":".. code-block:: console"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fc1f717_d7d07dcc","line":350,"range":{"start_line":350,"start_character":16,"end_line":350,"end_character":23},"updated":"2019-03-07 21:09:01.000000000","message":"specifying","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c690d574f431964c15c8c4db802f596174af4fb1","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    cpu_mode \u003d custom"},{"line_number":363,"context_line":"    cpu_models \u003d Conroe,Penryn,Nehalem,Westmere,SandyBridge,IvyBridge,Haswell,Broadwell,Skylake-Client,Skylake-Server"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Then ``haswell``, the first cpu model supporting both ``avx`` and ``avx2`` will"},{"line_number":366,"context_line":"be chosen by libvirt."},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"In selecting the ``custom`` mode, along with a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fc1f717_97daf5e6","line":365,"updated":"2019-03-07 21:09:01.000000000","message":",","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"nova/conf/libvirt.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bc8892b46249bf9e94f9e31be8a132c40bd6792c","unresolved":false,"context_lines":[{"line_number":548,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":549,"context_line":"  will fail."},{"line_number":550,"context_line":"\"\"\"),"},{"line_number":551,"context_line":"    cfg.StrOpt(\u0027cpu_model\u0027,"},{"line_number":552,"context_line":"               help\u003d\"\"\""},{"line_number":553,"context_line":"Set the name of the libvirt CPU model the instance should use."},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_1b10914f","line":551,"updated":"2019-02-19 12:52:44.000000000","message":"Per the spec, shouldn\u0027t this be deprecated with the introduction of cpu_models?","commit_id":"ea7bc851c3cf999a8d3cb573d046492a66276c03"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"30e0eb4b1aec49c30464dd858269c0078ad2936b","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_2551dc62","line":548,"range":{"start_line":548,"start_character":17,"end_line":548,"end_character":28},"updated":"2019-03-01 08:20:24.000000000","message":"Replacing existing config attribute under operators\u0027 feet is wrong on several levels.  Not to mention the deprecation remark from Alex.\n\nAlso I don\u0027t particularly like that the newer config attribute is just a plural version (`cpu_models`) of the original (`cpu_model`).\n\nTo visually help operators, I\u0027d suggest: `cpu_model_list`.  The plural `cpu_models` would have sufficed had there not been a pre-existing singular variant.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"7cbc5147e4f637ecd683f75e7bdc580601af34ef","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_45bcea05","line":548,"range":{"start_line":548,"start_character":17,"end_line":548,"end_character":28},"in_reply_to":"9fdfeff1_2370cb08","updated":"2019-03-04 21:02:08.000000000","message":"Here we go:  Patch to fix the spec:\n\n  https://review.openstack.org/#/c/640866/\n  – cpu-model-selection: s/cpu_models/cpu_model_list/","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8338ae9f","line":548,"range":{"start_line":548,"start_character":17,"end_line":548,"end_character":28},"in_reply_to":"9fdfeff1_2551dc62","updated":"2019-03-01 23:03:22.000000000","message":"\u003e Replacing existing config attribute under operators\u0027 feet is wrong\n \u003e on several levels.  Not to mention the deprecation remark from\n \u003e Alex.\n \u003e \n \u003e Also I don\u0027t particularly like that the newer config attribute is\n \u003e just a plural version (`cpu_models`) of the original (`cpu_model`).\n \u003e \n \u003e To visually help operators, I\u0027d suggest: `cpu_model_list`.  The\n \u003e plural `cpu_models` would have sufficed had there not been a\n \u003e pre-existing singular variant.\n\nWe\u0027d better name it based on the spec,, otherwise it might cause some confusion, other parts agree with you and alex.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dcc62cf28e94a1aa7ef6d5b328abeace2b556e62","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_2370cb08","line":548,"range":{"start_line":548,"start_character":17,"end_line":548,"end_character":28},"in_reply_to":"9fdfeff1_36fd6c3b","updated":"2019-03-04 14:03:35.000000000","message":"I like Kashyap suggestion at here, it is really hard to distinguish cpu_model and cpu_models when cpu_model isn\u0027t removed. Sorry for we didn\u0027t find that in the spec review.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"889ab9a84f3230e8ebbdaa6b03e67111a24cbf9f","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_36fd6c3b","line":548,"range":{"start_line":548,"start_character":17,"end_line":548,"end_character":28},"in_reply_to":"9fdfeff1_8338ae9f","updated":"2019-03-04 11:09:37.000000000","message":"IMHO, we can always update the spec (and it is encouraged to do so when it diverges from implementation), and this is a useful \u0027cosmetic\u0027 change that will reduce confusion and mistakes.\n\nUnfortunately, I haven\u0027t stayed on top of the spec when was it in review.  Otherwise, I would have mentioned it at that time.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"},{"line_number":552,"context_line":"earlier."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"Possible values:"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_e1bbc90b","line":552,"range":{"start_line":548,"start_character":4,"end_line":552,"end_character":8},"updated":"2019-03-01 06:30:59.000000000","message":"We should deprecated the existing configure option first. And new option for cpu_models. And the old cpu_model should still work when new cpu_models is unset.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"},{"line_number":552,"context_line":"earlier."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"Possible values:"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_839c2ec0","line":552,"range":{"start_line":548,"start_character":4,"end_line":552,"end_character":8},"in_reply_to":"9fdfeff1_a12b81e8","updated":"2019-03-01 23:03:22.000000000","message":"\u003e There is deprecated attribute for cfg.ListOpt, you can checkout the\n \u003e oslo.config document.\n\nI\u0027m not sure it\u0027s deprecated because I didn\u0027t see the relevant information on the document :-)","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a13e9c0a0b9171ced2f83518d434c0966e185c22","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_models\u0027,"},{"line_number":549,"context_line":"                help\u003d\"\"\""},{"line_number":550,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":551,"context_line":"is ordered so that the more common and less advanced CPU models are listed"},{"line_number":552,"context_line":"earlier."},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"Possible values:"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_a12b81e8","line":552,"range":{"start_line":548,"start_character":4,"end_line":552,"end_character":8},"in_reply_to":"9fdfeff1_e1bbc90b","updated":"2019-03-01 06:32:28.000000000","message":"There is deprecated attribute for cfg.ListOpt, you can checkout the oslo.config document.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.StrOpt(\u0027cpu_model\u0027,"},{"line_number":549,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":550,"context_line":"               deprecated_reason\u003d\"\"\""},{"line_number":551,"context_line":"Use cpu_models instead of cpu_model."}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_e3914c9c","line":548,"range":{"start_line":548,"start_character":16,"end_line":548,"end_character":25},"updated":"2019-03-05 10:11:25.000000000","message":"Rename this to \u0027cpu_models\u0027","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.StrOpt(\u0027cpu_model\u0027,"},{"line_number":549,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":550,"context_line":"               deprecated_reason\u003d\"\"\""},{"line_number":551,"context_line":"Use cpu_models instead of cpu_model."}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_a3b26448","line":548,"range":{"start_line":548,"start_character":8,"end_line":548,"end_character":14},"updated":"2019-03-05 10:11:25.000000000","message":"You can switch this to ListOpt","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.StrOpt(\u0027cpu_model\u0027,"},{"line_number":549,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":550,"context_line":"               deprecated_reason\u003d\"\"\""},{"line_number":551,"context_line":"Use cpu_models instead of cpu_model."},{"line_number":552,"context_line":"\"\"\","},{"line_number":553,"context_line":"               help\u003d\"\"\""},{"line_number":554,"context_line":"Set the name of the libvirt CPU model the instance should use."},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_2380b446","line":552,"range":{"start_line":549,"start_character":0,"end_line":552,"end_character":4},"updated":"2019-03-05 10:11:25.000000000","message":"And set the following attributes instead of these\n\n    deprecated_name\u003d\u0027cpu_model\u0027,\n    bounds \u003d False,\n\nThe latter means square brackets are not necessary [1]. That itself might not even be necessary (test).\n\n[1] https://docs.openstack.org/oslo.config/ocata/opts.html#oslo_config.cfg.ListOpt","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4bc173bee641983db1b1dfede6dc1d5b5929f121","unresolved":false,"context_lines":[{"line_number":585,"context_line":"  would result in an error and the instance launch will fail."},{"line_number":586,"context_line":"* ``virt_type``: Only the virtualization types ``kvm`` and ``qemu`` use this."},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"NOTE: Be careful to only specify models which can be fully supported in"},{"line_number":589,"context_line":"hardware. If specify models with CPU features that are emulated by qemu, it"},{"line_number":590,"context_line":"could result in performance degrade."},{"line_number":591,"context_line":"\"\"\"),"},{"line_number":592,"context_line":"    cfg.ListOpt("},{"line_number":593,"context_line":"        \u0027cpu_model_extra_flags\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_c31e880c","line":590,"range":{"start_line":588,"start_character":0,"end_line":590,"end_character":36},"updated":"2019-03-05 10:11:25.000000000","message":"You should keep this if/when you do the above","commit_id":"24534d226d71f89052621dcdffa1fe6e2f35c0ba"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":542,"context_line":"Related options:"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"* ``cpu_model_list``: This should be set ONLY when ``cpu_mode`` is set to"},{"line_number":545,"context_line":"  ``custom``. Otherwise, it would result in an error and the instance launch"},{"line_number":546,"context_line":"  will fail."},{"line_number":547,"context_line":"\"\"\"),"},{"line_number":548,"context_line":"    cfg.ListOpt(\u0027cpu_model_list\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_48bdd0b5","line":545,"range":{"start_line":545,"start_character":28,"end_line":545,"end_character":33},"updated":"2019-03-07 21:06:58.000000000","message":"will","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                deprecated_name\u003d\u0027cpu_model\u0027,"},{"line_number":550,"context_line":"                bounds \u003d False,"},{"line_number":551,"context_line":"                default\u003d[],"},{"line_number":552,"context_line":"                help\u003d\"\"\""},{"line_number":553,"context_line":"An ordered list of CPU models the host supports. It is expected that the list"},{"line_number":554,"context_line":"is ordered so that the more common and less advanced CPU models are listed"},{"line_number":555,"context_line":"earlier."},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"Possible values:"},{"line_number":558,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_e8b11ce3","line":555,"range":{"start_line":552,"start_character":24,"end_line":555,"end_character":8},"updated":"2019-03-07 21:06:58.000000000","message":"✔","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":566,"context_line":"* ``virt_type``: Only the virtualization types ``kvm`` and ``qemu`` use this."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"NOTE: Be careful to only specify models which can be fully supported in"},{"line_number":569,"context_line":"hardware. If specify models with CPU features that are emulated by qemu, it"},{"line_number":570,"context_line":"could result in performance degrade."},{"line_number":571,"context_line":"\"\"\"),"},{"line_number":572,"context_line":"    cfg.ListOpt("}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_08eca8c5","line":569,"range":{"start_line":569,"start_character":71,"end_line":569,"end_character":75},"updated":"2019-03-07 21:06:58.000000000","message":"...\n\nstrike","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":566,"context_line":"* ``virt_type``: Only the virtualization types ``kvm`` and ``qemu`` use this."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"NOTE: Be careful to only specify models which can be fully supported in"},{"line_number":569,"context_line":"hardware. If specify models with CPU features that are emulated by qemu, it"},{"line_number":570,"context_line":"could result in performance degrade."},{"line_number":571,"context_line":"\"\"\"),"},{"line_number":572,"context_line":"    cfg.ListOpt("}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_88c2d832","line":569,"range":{"start_line":569,"start_character":10,"end_line":569,"end_character":20},"updated":"2019-03-07 21:06:58.000000000","message":"Specifying\n\n...","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    def test_check_cpu_model_list(self):"},{"line_number":1222,"context_line":"        self.flags(cpu_mode\u003d\"custom\","},{"line_number":1223,"context_line":"                  cpu_model_list\u003d\"Penryn\","},{"line_number":1224,"context_line":"                  group\u003d\"libvirt\")"},{"line_number":1225,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":1226,"context_line":"        self.assertIsNone(conn._check_cpu_models())"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_d7b15de3","line":1223,"range":{"start_line":1223,"start_character":33,"end_line":1223,"end_character":41},"updated":"2019-03-07 21:06:58.000000000","message":"This should be [\u0027Penryn\u0027] (i.e. a list), shouldn\u0027t it?","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"    def test_check_cpu_model_list_other_cpu_mode(self):"},{"line_number":1238,"context_line":"        self.flags("},{"line_number":1239,"context_line":"            cpu_mode\u003d\"host-model\","},{"line_number":1240,"context_line":"            cpu_model_list\u003d\"Penryn\","},{"line_number":1241,"context_line":"            group\u003d\"libvirt\")"},{"line_number":1242,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":1243,"context_line":"        self.assertRaises(exception.Invalid,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_f7b6d9d9","line":1240,"range":{"start_line":1240,"start_character":27,"end_line":1240,"end_character":35},"updated":"2019-03-07 21:06:58.000000000","message":"ditto","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6702,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(self.test_image_meta)"},{"line_number":6703,"context_line":""},{"line_number":6704,"context_line":"        self.flags(cpu_mode\u003d\"custom\","},{"line_number":6705,"context_line":"                   cpu_model_list\u003d\"Penryn\","},{"line_number":6706,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":6707,"context_line":"        disk_info \u003d blockinfo.get_disk_info(CONF.libvirt.virt_type,"},{"line_number":6708,"context_line":"                                            instance_ref,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_77c2e935","line":6705,"range":{"start_line":6705,"start_character":34,"end_line":6705,"end_character":42},"updated":"2019-03-07 21:06:58.000000000","message":"ditto","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6748,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(self.test_image_meta)"},{"line_number":6749,"context_line":""},{"line_number":6750,"context_line":"        self.flags(cpu_mode\u003d\"custom\","},{"line_number":6751,"context_line":"                   cpu_model_list\u003d\"IvyBridge\","},{"line_number":6752,"context_line":"                   cpu_model_extra_flags\u003d\"pcid\","},{"line_number":6753,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":6754,"context_line":"        disk_info \u003d blockinfo.get_disk_info(CONF.libvirt.virt_type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_37e221d7","line":6751,"range":{"start_line":6751,"start_character":34,"end_line":6751,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"Likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6775,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(self.test_image_meta)"},{"line_number":6776,"context_line":""},{"line_number":6777,"context_line":"        self.flags(cpu_mode\u003d\"custom\","},{"line_number":6778,"context_line":"                   cpu_model_list\u003d\"IvyBridge\","},{"line_number":6779,"context_line":"                   cpu_model_extra_flags\u003d\"PCID\","},{"line_number":6780,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":6781,"context_line":"        disk_info \u003d blockinfo.get_disk_info(CONF.libvirt.virt_type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_d7e63de9","line":6778,"range":{"start_line":6778,"start_character":34,"end_line":6778,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6804,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict(self.test_image_meta)"},{"line_number":6805,"context_line":""},{"line_number":6806,"context_line":"        self.flags(cpu_mode\u003d\"custom\","},{"line_number":6807,"context_line":"                   cpu_model_list\u003d\"IvyBridge\","},{"line_number":6808,"context_line":"                   cpu_model_extra_flags\u003d[\u0027pcid\u0027, \u0027vmx\u0027],"},{"line_number":6809,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":6810,"context_line":"        disk_info \u003d blockinfo.get_disk_info(CONF.libvirt.virt_type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_97d0b5f9","line":6807,"range":{"start_line":6807,"start_character":34,"end_line":6807,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":6839,"context_line":"        instance_ref[\u0027flavor\u0027].extra_specs \u003d extra_specs"},{"line_number":6840,"context_line":""},{"line_number":6841,"context_line":"        self.flags(cpu_mode\u003d\u0027custom\u0027,"},{"line_number":6842,"context_line":"                   cpu_model_list\u003d\u0027IvyBridge\u0027,"},{"line_number":6843,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":6844,"context_line":"        disk_info \u003d blockinfo.get_disk_info(CONF.libvirt.virt_type,"},{"line_number":6845,"context_line":"                                            instance_ref,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_b7cdb15e","line":6842,"range":{"start_line":6842,"start_character":34,"end_line":6842,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":20956,"context_line":"        _fake_broadwell_cpu_features."},{"line_number":20957,"context_line":"        \"\"\""},{"line_number":20958,"context_line":"        self.flags(cpu_mode\u003d\u0027custom\u0027,"},{"line_number":20959,"context_line":"                   cpu_model_list\u003d\u0027Broadwell-noTSX\u0027,"},{"line_number":20960,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":20961,"context_line":"        mock_baseline.return_value \u003d _fake_broadwell_cpu_feature"},{"line_number":20962,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_178fe523","line":20959,"range":{"start_line":20959,"start_character":34,"end_line":20959,"end_character":51},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":21044,"context_line":"        the feature, only kvm and qemu supports reporting CPU traits."},{"line_number":21045,"context_line":"        \"\"\""},{"line_number":21046,"context_line":"        self.flags(cpu_mode\u003d\u0027custom\u0027,"},{"line_number":21047,"context_line":"                   cpu_model_list\u003d\u0027IvyBridge\u0027,"},{"line_number":21048,"context_line":"                   virt_type\u003d\u0027lxc\u0027,"},{"line_number":21049,"context_line":"                   group\u003d\u0027libvirt\u0027"},{"line_number":21050,"context_line":"                   )"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_b79ff14e","line":21047,"range":{"start_line":21047,"start_character":34,"end_line":21047,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":21084,"context_line":"        \"\"\"Test if extra flags are accounted when cpu_mode is set to custom."},{"line_number":21085,"context_line":"        \"\"\""},{"line_number":21086,"context_line":"        self.flags(cpu_mode\u003d\u0027custom\u0027,"},{"line_number":21087,"context_line":"                   cpu_model_list\u003d\u0027IvyBridge\u0027,"},{"line_number":21088,"context_line":"                   cpu_model_extra_flags\u003d\u0027PCID\u0027,"},{"line_number":21089,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":21090,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_d7ff1d65","line":21087,"range":{"start_line":21087,"start_character":34,"end_line":21087,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"likewise","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"c7f02675bb584a7adb719ae6cad2ab165dfac768","unresolved":false,"context_lines":[{"line_number":577,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if mode \u003d\u003d \"custom\" and models is None:"},{"line_number":580,"context_line":"            msg \u003d _(\"Config requested custom CPU models, but no \""},{"line_number":581,"context_line":"                    \"CPU models was provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models is not None:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU models name should not be set when a \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_889bfdc6","line":581,"range":{"start_line":580,"start_character":57,"end_line":581,"end_character":44},"updated":"2019-03-01 08:57:35.000000000","message":"Suggest: \"but no model names were provided\"","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"c7f02675bb584a7adb719ae6cad2ab165dfac768","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    \"CPU models was provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models is not None:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU models name should not be set when a \""},{"line_number":585,"context_line":"                    \"host CPU model is requested\")"},{"line_number":586,"context_line":"            raise exception.Invalid(msg)"},{"line_number":587,"context_line":"        elif mode \u003d\u003d \"custom\" and models is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_687d796b","line":584,"range":{"start_line":584,"start_character":21,"end_line":584,"end_character":36},"updated":"2019-03-01 08:57:35.000000000","message":"Suggest: \"CPU model names\"","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"c7f02675bb584a7adb719ae6cad2ab165dfac768","unresolved":false,"context_lines":[{"line_number":592,"context_line":"                cpu.model \u003d model"},{"line_number":593,"context_line":"                ret \u003d self._host.compare_cpu(cpu.to_xml())"},{"line_number":594,"context_line":"                if ret \u003c\u003d 0:"},{"line_number":595,"context_line":"                    msg \u003d _(\"Extra flags %(extra_flags)s is not a subset of \""},{"line_number":596,"context_line":"                            \"cpu model\u0027s features: %(cpu_model)s, or the cpu \""},{"line_number":597,"context_line":"                            \"model features: %(cpu_model)s is not a subset of \""},{"line_number":598,"context_line":"                            \"guest cpu.\") % {\u0027extra_flags\u0027: str(extra_flags),"},{"line_number":599,"context_line":"                            \u0027cpu_model\u0027: model}"},{"line_number":600,"context_line":"                    raise exception.InvalidCPUInfo(msg)"},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_c846e550","line":598,"range":{"start_line":595,"start_character":27,"end_line":598,"end_character":41},"updated":"2019-03-01 08:57:35.000000000","message":"Suggest:\n\n  (\"Extra flags %(extra_flags)s are not a subset of \n  CPU model\u0027s features: %(cpu_model)s, or the CPU\n  model\u0027s features: %(cpu_model)s are not a subset of \n  the guest CPU.\")","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":3915,"context_line":""},{"line_number":3916,"context_line":"        # compare flavor trait and cpu models, select the first meeted model"},{"line_number":3917,"context_line":"        extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {}) if flavor else {}"},{"line_number":3918,"context_line":"        flags \u003d libvirt_utils.get_flags_by_flavor_specs(extra_specs)"},{"line_number":3919,"context_line":"        if flags and mode \u003d\u003d \"custom\":"},{"line_number":3920,"context_line":"            for model in models:"},{"line_number":3921,"context_line":"                if libvirt_utils.compare_flags(model, flags):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_61fcb971","line":3918,"range":{"start_line":3918,"start_character":8,"end_line":3918,"end_character":68},"updated":"2019-03-01 06:30:59.000000000","message":"I don\u0027t we should get traits from flavor directly, since you have to parse those extra spec again. We should already parse those traits into request_spec object.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":3915,"context_line":""},{"line_number":3916,"context_line":"        # compare flavor trait and cpu models, select the first meeted model"},{"line_number":3917,"context_line":"        extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {}) if flavor else {}"},{"line_number":3918,"context_line":"        flags \u003d libvirt_utils.get_flags_by_flavor_specs(extra_specs)"},{"line_number":3919,"context_line":"        if flags and mode \u003d\u003d \"custom\":"},{"line_number":3920,"context_line":"            for model in models:"},{"line_number":3921,"context_line":"                if libvirt_utils.compare_flags(model, flags):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_1810a959","line":3918,"range":{"start_line":3918,"start_character":8,"end_line":3918,"end_character":68},"in_reply_to":"9fdfeff1_61fcb971","updated":"2019-03-01 23:03:22.000000000","message":"\u003e I don\u0027t we should get traits from flavor directly, since you have\n \u003e to parse those extra spec again. We should already parse those\n \u003e traits into request_spec object.\n\nI\u0027m not sure trait can parsed into request_spec directly, we could use scheduler.utils.ResourceRequest to parse flavor extra spec, and can maintain good compatibility with \u0027trait[N]\u0027","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":9088,"context_line":"            # For custom mode, iter cpu models"},{"line_number":9089,"context_line":"            caps.host.cpu.features \u003d set()"},{"line_number":9090,"context_line":"            # Account for features in cpu_model_extra_flags conf"},{"line_number":9091,"context_line":"            for f in cpu.features:"},{"line_number":9092,"context_line":"                caps.host.cpu.add_feature("},{"line_number":9093,"context_line":"                    vconfig.LibvirtConfigCPUFeature(name\u003df.name))"},{"line_number":9094,"context_line":"            # Account for features in cpu_models list"},{"line_number":9095,"context_line":"            for cpu_model in CONF.libvirt.cpu_models:"},{"line_number":9096,"context_line":"                caps.host.cpu.model \u003d cpu_model"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_21955140","line":9093,"range":{"start_line":9091,"start_character":12,"end_line":9093,"end_character":65},"updated":"2019-03-01 06:30:59.000000000","message":"so we needn\u0027t this, since the loop in the next line will include those feature also?","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":9088,"context_line":"            # For custom mode, iter cpu models"},{"line_number":9089,"context_line":"            caps.host.cpu.features \u003d set()"},{"line_number":9090,"context_line":"            # Account for features in cpu_model_extra_flags conf"},{"line_number":9091,"context_line":"            for f in cpu.features:"},{"line_number":9092,"context_line":"                caps.host.cpu.add_feature("},{"line_number":9093,"context_line":"                    vconfig.LibvirtConfigCPUFeature(name\u003df.name))"},{"line_number":9094,"context_line":"            # Account for features in cpu_models list"},{"line_number":9095,"context_line":"            for cpu_model in CONF.libvirt.cpu_models:"},{"line_number":9096,"context_line":"                caps.host.cpu.model \u003d cpu_model"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_b8007d04","line":9093,"range":{"start_line":9091,"start_character":12,"end_line":9093,"end_character":65},"in_reply_to":"9fdfeff1_21955140","updated":"2019-03-01 23:03:22.000000000","message":"\u003e so we needn\u0027t this, since the loop in the next line will include\n \u003e those feature also?\n\nyes, extra flags can add after cpu models loop done","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":9095,"context_line":"            for cpu_model in CONF.libvirt.cpu_models:"},{"line_number":9096,"context_line":"                caps.host.cpu.model \u003d cpu_model"},{"line_number":9097,"context_line":"                features +\u003d self._get_cpu_feature(caps)"},{"line_number":9098,"context_line":"            features \u003d list(set(features))"},{"line_number":9099,"context_line":""},{"line_number":9100,"context_line":"        return libvirt_utils.cpu_features_to_traits(features)"},{"line_number":9101,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_c1bfa5cd","line":9098,"range":{"start_line":9098,"start_character":23,"end_line":9098,"end_character":42},"updated":"2019-03-01 06:30:59.000000000","message":"we can make `features` as set() in the beginning. and you needn\u0027t convert the features back to list","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":577,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":580,"context_line":"            msg \u003d _(\"Config requested custom CPU models, but no \""},{"line_number":581,"context_line":"                    \"model names were provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU model names should not be set when a \""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_28c72415","line":581,"range":{"start_line":580,"start_character":21,"end_line":581,"end_character":46},"updated":"2019-03-07 21:06:58.000000000","message":"Perhaps clearer to say, \"The cpu_model_list option is required when cpu_mode\u003dcustom.\"","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"07d0afbf0d2af8ef0f5fb1dbdb1dcbbc7f6d638c","unresolved":false,"context_lines":[{"line_number":577,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if mode \u003d\u003d \"custom\" and not models:"},{"line_number":580,"context_line":"            msg \u003d _(\"Config requested custom CPU models, but no \""},{"line_number":581,"context_line":"                    \"model names were provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU model names should not be set when a \""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_dd02ce09","line":581,"range":{"start_line":580,"start_character":21,"end_line":581,"end_character":46},"in_reply_to":"5fc1f717_28c72415","updated":"2019-03-22 15:56:18.000000000","message":"Yeah, that\u0027s better.  It gives an actionable hint.\n\nNit: Do we want to use literals:\n\n   \"The `cpu_model_list` option is required when `cpu_mode\u003dcustom`\"","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    \"model names were provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU model names should not be set when a \""},{"line_number":585,"context_line":"                    \"host CPU model is requested\")"},{"line_number":586,"context_line":"            raise exception.Invalid(msg)"},{"line_number":587,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":588,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_08d6e8c6","line":585,"range":{"start_line":584,"start_character":20,"end_line":585,"end_character":49},"updated":"2019-03-07 21:06:58.000000000","message":"Similarly.","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"07d0afbf0d2af8ef0f5fb1dbdb1dcbbc7f6d638c","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    \"model names were provided\")"},{"line_number":582,"context_line":"            raise exception.Invalid(msg)"},{"line_number":583,"context_line":"        elif mode !\u003d \"custom\" and models:"},{"line_number":584,"context_line":"            msg \u003d _(\"CPU model names should not be set when a \""},{"line_number":585,"context_line":"                    \"host CPU model is requested\")"},{"line_number":586,"context_line":"            raise exception.Invalid(msg)"},{"line_number":587,"context_line":"        elif mode \u003d\u003d \"custom\" and models:"},{"line_number":588,"context_line":"            cpu \u003d vconfig.LibvirtConfigCPU()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_5d657ee0","line":585,"range":{"start_line":584,"start_character":20,"end_line":585,"end_character":49},"in_reply_to":"5fc1f717_08d6e8c6","updated":"2019-03-22 15:56:18.000000000","message":"The existing message is fine as-is, but ... if we\u0027re going with your prior suggestion, for consistency\u0027s sake it should be:\n\n    \"The `cpu_mode_list` option is not required when `cpu_mode\u003dhost-model`\"","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3914,"context_line":"        cpu.mode \u003d mode"},{"line_number":3915,"context_line":"        cpu.model \u003d models[0] if models else None"},{"line_number":3916,"context_line":""},{"line_number":3917,"context_line":"        # compare flavor trait and cpu models, select the first meeted model"},{"line_number":3918,"context_line":"        extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {}) if flavor else {}"},{"line_number":3919,"context_line":"        flags \u003d libvirt_utils.get_flags_by_flavor_specs(extra_specs)"},{"line_number":3920,"context_line":"        if flags and mode \u003d\u003d \"custom\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_887df8b2","line":3917,"range":{"start_line":3917,"start_character":64,"end_line":3917,"end_character":70},"updated":"2019-03-07 21:06:58.000000000","message":"matching? suitable?","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3920,"context_line":"        if flags and mode \u003d\u003d \"custom\":"},{"line_number":3921,"context_line":"            for model in models:"},{"line_number":3922,"context_line":"                if self._compare_flags(model, flags):"},{"line_number":3923,"context_line":"                    cpu.model \u003d model"},{"line_number":3924,"context_line":"                    break"},{"line_number":3925,"context_line":""},{"line_number":3926,"context_line":"        LOG.debug(\"CPU mode \u0027%(mode)s\u0027 model \u0027%(model)s\u0027 was chosen, \""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_eb56f606","line":3923,"range":{"start_line":3923,"start_character":20,"end_line":3923,"end_character":37},"updated":"2019-03-07 21:06:58.000000000","message":"hm, I think this could be cleaner if refactored to put the whole loop into the helper method, which would accept the cpu var and flags as params.","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3914,"context_line":"        cpu.mode \u003d mode"},{"line_number":3915,"context_line":"        cpu.model \u003d models[0] if models else None"},{"line_number":3916,"context_line":""},{"line_number":3917,"context_line":"        # compare flavor trait and cpu models, select the first meeted model"},{"line_number":3918,"context_line":"        extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {}) if flavor else {}"},{"line_number":3919,"context_line":"        flags \u003d libvirt_utils.get_flags_by_flavor_specs(extra_specs)"},{"line_number":3920,"context_line":"        if flags and mode \u003d\u003d \"custom\":"},{"line_number":3921,"context_line":"            for model in models:"},{"line_number":3922,"context_line":"                if self._compare_flags(model, flags):"},{"line_number":3923,"context_line":"                    cpu.model \u003d model"},{"line_number":3924,"context_line":"                    break"},{"line_number":3925,"context_line":""},{"line_number":3926,"context_line":"        LOG.debug(\"CPU mode \u0027%(mode)s\u0027 model \u0027%(model)s\u0027 was chosen, \""},{"line_number":3927,"context_line":"                  \"with extra flags: \u0027%(extra_flags)s\u0027\","}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2863a41c","line":3924,"range":{"start_line":3917,"start_character":0,"end_line":3924,"end_character":25},"updated":"2019-03-07 21:06:58.000000000","message":"IMO this would be clearer as:\n\n if flavor:\n     # compare flavor trait ...\n     extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {})\n     ...","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3922,"context_line":"                if self._compare_flags(model, flags):"},{"line_number":3923,"context_line":"                    cpu.model \u003d model"},{"line_number":3924,"context_line":"                    break"},{"line_number":3925,"context_line":""},{"line_number":3926,"context_line":"        LOG.debug(\"CPU mode \u0027%(mode)s\u0027 model \u0027%(model)s\u0027 was chosen, \""},{"line_number":3927,"context_line":"                  \"with extra flags: \u0027%(extra_flags)s\u0027\","},{"line_number":3928,"context_line":"                  {\u0027mode\u0027: mode,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2b84fe5d","line":3925,"updated":"2019-03-07 21:06:58.000000000","message":"I think you\u0027re missing an error case here: if no models match, you\u0027ll proceed with models[0] (which isn\u0027t a match because you excluded it above).\n\nSince you checked the features against the models at init_host, I assume this could only happen if the flavor itself has an invalid combination of required traits (i.e. mutually exclusive features from different supported models).","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3923,"context_line":"                    cpu.model \u003d model"},{"line_number":3924,"context_line":"                    break"},{"line_number":3925,"context_line":""},{"line_number":3926,"context_line":"        LOG.debug(\"CPU mode \u0027%(mode)s\u0027 model \u0027%(model)s\u0027 was chosen, \""},{"line_number":3927,"context_line":"                  \"with extra flags: \u0027%(extra_flags)s\u0027\","},{"line_number":3928,"context_line":"                  {\u0027mode\u0027: mode,"},{"line_number":3929,"context_line":"                   \u0027model\u0027: (cpu.model or \"\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_8b18921d","line":3926,"updated":"2019-03-07 21:06:58.000000000","message":"So to summarize, suggest refactor:\n\n cpu \u003d vconfig.LibvirtConfigGuestCPU()\n cpu.mode \u003d mode\n cpu.model \u003d models[0] if models else None\n\n if flavor and mode \u003d\u003d \"custom\":\n     # compare flavor ...\n     extra_specs \u003d ...\n     flags \u003d ...\n     if flags:\n         self._set_model(cpu, models, flags)\n\n...\n\n def _set_model(self, cpu, models, flags):\n     cpu.arch \u003d self._host.get_capabilities().host.cpu.arch\n     features \u003d self._get_cpu_feature(cpu)\n     for model in models:\n         if flags.issubset(features):\n             # Got a match\n             cpu.model \u003d model\n             return\n     # No match\n     raise Invalid...","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3949,"context_line":"        cpu.model \u003d model"},{"line_number":3950,"context_line":"        cpu.arch \u003d self._host.get_capabilities().host.cpu.arch"},{"line_number":3951,"context_line":"        features \u003d self._get_cpu_feature(cpu)"},{"line_number":3952,"context_line":"        if flags.issubset(features):"},{"line_number":3953,"context_line":"            return True"},{"line_number":3954,"context_line":"        return False"},{"line_number":3955,"context_line":""},{"line_number":3956,"context_line":"    def _get_guest_cpu_config(self, flavor, image_meta,"},{"line_number":3957,"context_line":"                              guest_cpu_numa_config, instance_numa_topology):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2831640c","line":3954,"range":{"start_line":3952,"start_character":0,"end_line":3954,"end_character":20},"updated":"2019-03-07 21:06:58.000000000","message":"or\n\n return flags.issubset(features)","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":9067,"context_line":"        CPU features."},{"line_number":9068,"context_line":"        2. if mode is None, choose a default CPU model based on CPU"},{"line_number":9069,"context_line":"        architecture."},{"line_number":9070,"context_line":"        3. if mode is \u0027custom\u0027, use cpu_model to generate CPU features."},{"line_number":9071,"context_line":"        The code also accounts for cpu_model_extra_flags configuration when"},{"line_number":9072,"context_line":"        cpu_mode is \u0027host-model\u0027, \u0027host-passthrough\u0027 or \u0027custom\u0027, this"},{"line_number":9073,"context_line":"        ensures user specified CPU feature flags to be included."}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_fc3f9ed3","line":9070,"range":{"start_line":9070,"start_character":36,"end_line":9070,"end_character":45},"updated":"2019-03-07 21:06:58.000000000","message":"cpu_model_list","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":9109,"context_line":""},{"line_number":9110,"context_line":"        return libvirt_utils.cpu_features_to_traits(features)"},{"line_number":9111,"context_line":""},{"line_number":9112,"context_line":"    def _get_cpu_feature(self, cpu):"},{"line_number":9113,"context_line":"        xml_str \u003d cpu.to_xml()"},{"line_number":9114,"context_line":"        LOG.debug(\"Libvirt baseline CPU %s\", xml_str)"},{"line_number":9115,"context_line":"        # TODO(lei-zh): baselineCPU is not supported on all platforms."}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_7747494d","line":9112,"range":{"start_line":9112,"start_character":8,"end_line":9112,"end_character":24},"updated":"2019-03-07 21:06:58.000000000","message":"method name should be plural (_get_cpu_features) since it\u0027s returning a set","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027xop\u0027: os_traits.HW_CPU_X86_XOP"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Mapping used to convert libvirt cpu model to cpu features, for more details,"},{"line_number":85,"context_line":"# see https://github.com/libvirt/libvirt/tree/master/src/cpu_map."},{"line_number":86,"context_line":"CPU_MODEL_MAPPING \u003d {"},{"line_number":87,"context_line":"    \u0027Skylake-Server-IBRS\u0027: [\u00273dnowprefetch\u0027, \u0027abm\u0027, \u0027adx\u0027, \u0027aes\u0027, \u0027apic\u0027,"},{"line_number":88,"context_line":"        \u0027arat\u0027, \u0027avx\u0027, \u0027avx2\u0027, \u0027avx512bw\u0027, \u0027avx512cd\u0027, \u0027avx512dq\u0027, \u0027avx512f\u0027,"},{"line_number":89,"context_line":"        \u0027avx512vl\u0027, \u0027bmi1\u0027, \u0027bmi2\u0027, \u0027clflush\u0027, \u0027clwb\u0027, \u0027cmov\u0027, \u0027cx16\u0027, \u0027cx8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_41f5f581","line":86,"range":{"start_line":84,"start_character":1,"end_line":86,"end_character":21},"updated":"2019-03-01 06:30:59.000000000","message":"I think we can get those value by the baseline libvirt API, you needn\u0027t do copy of those mapping at here, that will be a trouble in the future we have to sync it always.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027xop\u0027: os_traits.HW_CPU_X86_XOP"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Mapping used to convert libvirt cpu model to cpu features, for more details,"},{"line_number":85,"context_line":"# see https://github.com/libvirt/libvirt/tree/master/src/cpu_map."},{"line_number":86,"context_line":"CPU_MODEL_MAPPING \u003d {"},{"line_number":87,"context_line":"    \u0027Skylake-Server-IBRS\u0027: [\u00273dnowprefetch\u0027, \u0027abm\u0027, \u0027adx\u0027, \u0027aes\u0027, \u0027apic\u0027,"},{"line_number":88,"context_line":"        \u0027arat\u0027, \u0027avx\u0027, \u0027avx2\u0027, \u0027avx512bw\u0027, \u0027avx512cd\u0027, \u0027avx512dq\u0027, \u0027avx512f\u0027,"},{"line_number":89,"context_line":"        \u0027avx512vl\u0027, \u0027bmi1\u0027, \u0027bmi2\u0027, \u0027clflush\u0027, \u0027clwb\u0027, \u0027cmov\u0027, \u0027cx16\u0027, \u0027cx8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_03635edf","line":86,"range":{"start_line":84,"start_character":1,"end_line":86,"end_character":21},"in_reply_to":"9fdfeff1_08f94dc6","updated":"2019-03-01 23:03:22.000000000","message":"\u003e Yes, this is not effective.  It duplicates libvirt\u0027s work, and not\n \u003e to mention will quickly get out of sync.  And yes, we should\n \u003e existing libvirt APIs wrappers in Nova, baselineCPU().\n \u003e \n \u003e In addition, see this work item that I noted (which proposes to\n \u003e introduce newer libvirt CPU modelling APIs):\n \u003e \n \u003e https://blueprints.launchpad.net/nova/+spec/cpu-selection-with-hypervisor-consideration\n\nok, i will continue to follow up on the progress of the new api :-)","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027xop\u0027: os_traits.HW_CPU_X86_XOP"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Mapping used to convert libvirt cpu model to cpu features, for more details,"},{"line_number":85,"context_line":"# see https://github.com/libvirt/libvirt/tree/master/src/cpu_map."},{"line_number":86,"context_line":"CPU_MODEL_MAPPING \u003d {"},{"line_number":87,"context_line":"    \u0027Skylake-Server-IBRS\u0027: [\u00273dnowprefetch\u0027, \u0027abm\u0027, \u0027adx\u0027, \u0027aes\u0027, \u0027apic\u0027,"},{"line_number":88,"context_line":"        \u0027arat\u0027, \u0027avx\u0027, \u0027avx2\u0027, \u0027avx512bw\u0027, \u0027avx512cd\u0027, \u0027avx512dq\u0027, \u0027avx512f\u0027,"},{"line_number":89,"context_line":"        \u0027avx512vl\u0027, \u0027bmi1\u0027, \u0027bmi2\u0027, \u0027clflush\u0027, \u0027clwb\u0027, \u0027cmov\u0027, \u0027cx16\u0027, \u0027cx8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_63490a65","line":86,"range":{"start_line":84,"start_character":1,"end_line":86,"end_character":21},"in_reply_to":"9fdfeff1_41f5f581","updated":"2019-03-01 23:03:22.000000000","message":"\u003e I think we can get those value by the baseline libvirt API, you\n \u003e needn\u0027t do copy of those mapping at here, that will be a trouble in\n \u003e the future we have to sync it always.\n\nyes, now it will use baselinecpu to get features of cpu model.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"155ec2e4743167fdd6a0fdf263c3d741cd994a37","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027xop\u0027: os_traits.HW_CPU_X86_XOP"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Mapping used to convert libvirt cpu model to cpu features, for more details,"},{"line_number":85,"context_line":"# see https://github.com/libvirt/libvirt/tree/master/src/cpu_map."},{"line_number":86,"context_line":"CPU_MODEL_MAPPING \u003d {"},{"line_number":87,"context_line":"    \u0027Skylake-Server-IBRS\u0027: [\u00273dnowprefetch\u0027, \u0027abm\u0027, \u0027adx\u0027, \u0027aes\u0027, \u0027apic\u0027,"},{"line_number":88,"context_line":"        \u0027arat\u0027, \u0027avx\u0027, \u0027avx2\u0027, \u0027avx512bw\u0027, \u0027avx512cd\u0027, \u0027avx512dq\u0027, \u0027avx512f\u0027,"},{"line_number":89,"context_line":"        \u0027avx512vl\u0027, \u0027bmi1\u0027, \u0027bmi2\u0027, \u0027clflush\u0027, \u0027clwb\u0027, \u0027cmov\u0027, \u0027cx16\u0027, \u0027cx8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_08f94dc6","line":86,"range":{"start_line":84,"start_character":1,"end_line":86,"end_character":21},"in_reply_to":"9fdfeff1_41f5f581","updated":"2019-03-01 09:16:20.000000000","message":"Yes, this is not effective.  It duplicates libvirt\u0027s work, and not to mention will quickly get out of sync.  And yes, we should existing libvirt APIs wrappers in Nova, baselineCPU().\n\nIn addition, see this work item that I noted (which proposes to introduce newer libvirt CPU modelling APIs):\n\nhttps://blueprints.launchpad.net/nova/+spec/cpu-selection-with-hypervisor-consideration","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"880b58a8d604871c8d78ab2abf763c4cb8a1826b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027xop\u0027: os_traits.HW_CPU_X86_XOP"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"# Mapping used to convert libvirt cpu model to cpu features, for more details,"},{"line_number":85,"context_line":"# see https://github.com/libvirt/libvirt/tree/master/src/cpu_map."},{"line_number":86,"context_line":"CPU_MODEL_MAPPING \u003d {"},{"line_number":87,"context_line":"    \u0027Skylake-Server-IBRS\u0027: [\u00273dnowprefetch\u0027, \u0027abm\u0027, \u0027adx\u0027, \u0027aes\u0027, \u0027apic\u0027,"},{"line_number":88,"context_line":"        \u0027arat\u0027, \u0027avx\u0027, \u0027avx2\u0027, \u0027avx512bw\u0027, \u0027avx512cd\u0027, \u0027avx512dq\u0027, \u0027avx512f\u0027,"},{"line_number":89,"context_line":"        \u0027avx512vl\u0027, \u0027bmi1\u0027, \u0027bmi2\u0027, \u0027clflush\u0027, \u0027clwb\u0027, \u0027cmov\u0027, \u0027cx16\u0027, \u0027cx8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_36ab2c1f","line":86,"range":{"start_line":84,"start_character":1,"end_line":86,"end_character":21},"in_reply_to":"9fdfeff1_63490a65","updated":"2019-03-04 11:11:20.000000000","message":"Thanks, for now using the baselineCPU() API, which Nova already supports, is a good start.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"66d533612fa232e5f70e492f2a8320bcf60a1c98","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        CPU_TRAITS_MAPPING.values(), CPU_TRAITS_MAPPING.keys()"},{"line_number":828,"context_line":"    ))"},{"line_number":829,"context_line":"    for k, v in extra_specs.items():"},{"line_number":830,"context_line":"        trait_key \u003d k.replace(\u0027trait:\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"        if v \u003d\u003d \u0027required\u0027 and trait_key in TRAITS_CPU_MAPPING.keys():"},{"line_number":832,"context_line":"            flags.add(TRAITS_CPU_MAPPING.get(trait_key))"},{"line_number":833,"context_line":"    return flags"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_01d28dfd","line":830,"range":{"start_line":830,"start_character":8,"end_line":830,"end_character":43},"updated":"2019-03-01 06:30:59.000000000","message":"Since this feature http://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/granular-resource-requests.html\n\nWe may have extra spec start with \u0027trait[N]\u0027.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":27614,"name":"ya.wang","email":"me@littleya.com","username":"ya.wang"},"change_message_id":"2bd5ef3bc1bde69fd737c8559d5f6851c4461ea1","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        CPU_TRAITS_MAPPING.values(), CPU_TRAITS_MAPPING.keys()"},{"line_number":828,"context_line":"    ))"},{"line_number":829,"context_line":"    for k, v in extra_specs.items():"},{"line_number":830,"context_line":"        trait_key \u003d k.replace(\u0027trait:\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"        if v \u003d\u003d \u0027required\u0027 and trait_key in TRAITS_CPU_MAPPING.keys():"},{"line_number":832,"context_line":"            flags.add(TRAITS_CPU_MAPPING.get(trait_key))"},{"line_number":833,"context_line":"    return flags"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_c343163f","line":830,"range":{"start_line":830,"start_character":8,"end_line":830,"end_character":43},"in_reply_to":"9fdfeff1_01d28dfd","updated":"2019-03-01 23:03:22.000000000","message":"\u003e Since this feature http://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/granular-resource-requests.html\n \u003e \n \u003e We may have extra spec start with \u0027trait[N]\u0027.\n\nnow it\u0027s using scheduler.utils.ResourceRequest to parse extra specs.","commit_id":"d525b4431b34756e84f50da1af441e2502b83510"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    traits \u003d set()"},{"line_number":554,"context_line":"    resource_request \u003d scheduler_utils.ResourceRequest.from_extra_specs("},{"line_number":555,"context_line":"        extra_specs)"},{"line_number":556,"context_line":"    for rr in resource_request._rg_by_id.values():"},{"line_number":557,"context_line":"        traits \u003d traits.union(rr.required_traits)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    TRAITS_CPU_MAPPING \u003d dict(zip("},{"line_number":560,"context_line":"        CPU_TRAITS_MAPPING.values(), CPU_TRAITS_MAPPING.keys()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_487e30e5","line":557,"range":{"start_line":556,"start_character":0,"end_line":557,"end_character":49},"updated":"2019-03-07 21:06:58.000000000","message":"-1 to accessing a private method of ResourceRequest. Suggest moving this block to a new ResourceRequest.get_all_traits() instance method.","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":556,"context_line":"    for rr in resource_request._rg_by_id.values():"},{"line_number":557,"context_line":"        traits \u003d traits.union(rr.required_traits)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    TRAITS_CPU_MAPPING \u003d dict(zip("},{"line_number":560,"context_line":"        CPU_TRAITS_MAPPING.values(), CPU_TRAITS_MAPPING.keys()"},{"line_number":561,"context_line":"    ))"},{"line_number":562,"context_line":"    flags \u003d [TRAITS_CPU_MAPPING[t] for t in traits if t in TRAITS_CPU_MAPPING]"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    return set(flags)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_481950d5","line":561,"range":{"start_line":559,"start_character":0,"end_line":561,"end_character":6},"updated":"2019-03-07 21:06:58.000000000","message":"Why not put this at the module level after the definition of CPU_TRAITS_MAPPING, so it doesn\u0027t have to be recomputed every time?","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}],"releasenotes/notes/libvirt-cpu-model-selection-b257e462a4e8e05a.yaml":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":3,"context_line":"features:"},{"line_number":4,"context_line":"  - |"},{"line_number":5,"context_line":"    Add new configuration item: ``[libvirt] cpu_model_list``, an ordered list"},{"line_number":6,"context_line":"    of CPU list of CPU models the host supports. If ``[libvirt] cpu_mode`` is"},{"line_number":7,"context_line":"    set to ``custom``, libvirt driver will select the first CPU model in the"},{"line_number":8,"context_line":"    ``cpu_model_list`` list that can provide the required feature traits."},{"line_number":9,"context_line":"deprecations:"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5fc1f717_c8cc608b","line":6,"range":{"start_line":6,"start_character":11,"end_line":6,"end_character":22},"updated":"2019-03-07 21:06:58.000000000","message":"strike","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  - |"},{"line_number":5,"context_line":"    Add new configuration item: ``[libvirt] cpu_model_list``, an ordered list"},{"line_number":6,"context_line":"    of CPU list of CPU models the host supports. If ``[libvirt] cpu_mode`` is"},{"line_number":7,"context_line":"    set to ``custom``, libvirt driver will select the first CPU model in the"},{"line_number":8,"context_line":"    ``cpu_model_list`` list that can provide the required feature traits."},{"line_number":9,"context_line":"deprecations:"},{"line_number":10,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5fc1f717_48a630c4","line":7,"range":{"start_line":7,"start_character":23,"end_line":7,"end_character":37},"updated":"2019-03-07 21:06:58.000000000","message":"the libvirt driver","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"924d3525d85ee0ca3bc279a7cc527c1b8722ec12","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``cpu_model_list`` list that can provide the required feature traits."},{"line_number":9,"context_line":"deprecations:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    It is now deprecated to use ``[libvirt] cpu_model``. The current value is"},{"line_number":12,"context_line":"    ``[libvirt] cpu_model_list``."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5fc1f717_28b884c6","line":12,"range":{"start_line":11,"start_character":4,"end_line":12,"end_character":33},"updated":"2019-03-07 21:06:58.000000000","message":"Suggest reword:\n\nThe ``[libvirt] cpu_model`` option is deprecated and will be removed in a future release. The ``[libvirt] cpu_model_list`` option should be used instead.","commit_id":"0d1b4bafc4521b12a1892a9685054ed037227126"}]}
