)]}'
{"doc/source/admin/virtual-gpu.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[{"line_number":328,"context_line":"    [mdev_mlx5_core-local]"},{"line_number":329,"context_line":"    device_addresses \u003d 0000:86:00.0"},{"line_number":330,"context_line":"    mdev_class\u003dMLX5"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Here, this would mean that the `0000:86:00.0` PCI device would create"},{"line_number":334,"context_line":"inventories with a specific resource class named ``CUSTOM_MLX5`` with the other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7c5810f6_726871df","line":331,"updated":"2021-08-03 14:13:44.000000000","message":"do we allow that multiple mdev types are using the same mdev_class?","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":true,"context_lines":[{"line_number":328,"context_line":"    [mdev_mlx5_core-local]"},{"line_number":329,"context_line":"    device_addresses \u003d 0000:86:00.0"},{"line_number":330,"context_line":"    mdev_class\u003dMLX5"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Here, this would mean that the `0000:86:00.0` PCI device would create"},{"line_number":334,"context_line":"inventories with a specific resource class named ``CUSTOM_MLX5`` with the other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"aed24464_3eeda70c","line":331,"in_reply_to":"7c5810f6_726871df","updated":"2021-08-04 09:59:58.000000000","message":"Yes. For example, nvidia-11 and nvidia-11 are two groups but they use the same mdev class.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65431347121db44cf346d4d42085c9d35a486ef2","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    [mdev_mlx5_core-local]"},{"line_number":329,"context_line":"    device_addresses \u003d 0000:86:00.0"},{"line_number":330,"context_line":"    mdev_class\u003dMLX5"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Here, this would mean that the `0000:86:00.0` PCI device would create"},{"line_number":334,"context_line":"inventories with a specific resource class named ``CUSTOM_MLX5`` with the other"}],"source_content_type":"text/x-rst","patch_set":9,"id":"13afb0ca_4ea52224","line":331,"in_reply_to":"aed24464_3eeda70c","updated":"2021-08-05 07:39:55.000000000","message":"Ack","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Attaching virtual GPU devices or mediated devices to guests"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"50acc7af_00b46bd1","line":3,"updated":"2021-08-06 14:37:50.000000000","message":"This should be its own document with links between the two","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c681667a2cc813709178dcc60af37d5d1f1f058","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Attaching virtual GPU devices or mediated devices to guests"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"2f622541_5532d822","line":3,"in_reply_to":"50acc7af_00b46bd1","updated":"2021-08-06 15:19:15.000000000","message":"Will be done in a FUP.","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":10,"context_line":"The virtual GPU feature in Nova allows a deployment to provide specific GPU"},{"line_number":11,"context_line":"types for instances using physical GPUs that can provide virtual devices."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since 21.0.0 we also support stateless generic mdev-supporting devices that"},{"line_number":14,"context_line":"aren\u0027t explicitly GPUs but any kind of hardware that use `VFIO-mdev`_ kernel"},{"line_number":15,"context_line":"framework."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"c97adb3f_a711256e","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":8},"updated":"2021-08-06 14:37:50.000000000","message":"24","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since 21.0.0 we also support stateless generic mdev-supporting devices that"},{"line_number":14,"context_line":"aren\u0027t explicitly GPUs but any kind of hardware that use `VFIO-mdev`_ kernel"},{"line_number":15,"context_line":"framework."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For example, a single `Intel GVT-g`_  or a `NVIDIA GRID vGPU`_ physical"},{"line_number":18,"context_line":"Graphics Processing Unit (pGPU) can be virtualized as multiple virtual Graphics"}],"source_content_type":"text/x-rst","patch_set":13,"id":"2324c5cd_8cfc2e20","line":15,"updated":"2021-08-06 14:37:50.000000000","message":"nit:\n\n  .. versionadded:: Xena (24.0.0)","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":31,"context_line":"           - a mdev-capable device is the physical device that supports"},{"line_number":32,"context_line":"             `VFIO-mdev`_ (for example a physical GPU, pGPU)"},{"line_number":33,"context_line":"           - a mediated device is the virtual device created with the right"},{"line_number":34,"context_line":"             mdev type (eg. a virtual GPU, vGPU)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"To enable virtual GPUs or generic mediated devices, follow the steps below:"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"0f66f738_8fcb8e64","line":34,"updated":"2021-08-06 14:37:50.000000000","message":"style nit: indentation here is a bit off. Could we do\n\n  .. note::\n\n      Through this document, we will use the following terms:\n\n      Mediated device (mdev)\n        A mediated device is the virtual device created with the right\n        mdev type (eg. a virtual GPU, vGPU).\n\n      mdev type\n        An mdev type is the type of virtual mediated device we will use\n\n      mdev-capable device\n        An mdev-capable device is the physical device that supports\n        `VFIO-mdev`_ (for example a physical GPU, pGPU)","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c681667a2cc813709178dcc60af37d5d1f1f058","unresolved":false,"context_lines":[{"line_number":31,"context_line":"           - a mdev-capable device is the physical device that supports"},{"line_number":32,"context_line":"             `VFIO-mdev`_ (for example a physical GPU, pGPU)"},{"line_number":33,"context_line":"           - a mediated device is the virtual device created with the right"},{"line_number":34,"context_line":"             mdev type (eg. a virtual GPU, vGPU)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"To enable virtual GPUs or generic mediated devices, follow the steps below:"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9235abfe_ea0ccb12","line":34,"in_reply_to":"0f66f738_8fcb8e64","updated":"2021-08-06 15:19:15.000000000","message":"Ack","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"}],"nova/conf/devices.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c557eb79cea45fadb656e9c6bb1c2567f040f575","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        # Register the \u0027[mdev_$(MDEV_TYPE)]/mdev_class\u0027 opts"},{"line_number":82,"context_line":"        class_opt \u003d cfg.StrOpt(\u0027mdev_class\u0027,"},{"line_number":83,"context_line":"                               default\u003d\u0027vgpu\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[a-zA-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage.\u0027)"},{"line_number":87,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"677d3c87_469d5d7e","line":84,"range":{"start_line":84,"start_character":41,"end_line":84,"end_character":44},"updated":"2021-07-29 17:50:52.000000000","message":"drop this","commit_id":"48a7918c16348e022c6ed6a7e55daef2a2dad219"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"61ce05e078c2dda49b21d0a345412989420d54cc","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # Register the \u0027[mdev_$(MDEV_TYPE)]/mdev_class\u0027 opts"},{"line_number":82,"context_line":"        class_opt \u003d cfg.StrOpt(\u0027mdev_class\u0027,"},{"line_number":83,"context_line":"                               default\u003d\u0027vgpu\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[a-zA-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage.\u0027)"},{"line_number":87,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"019ec5de_cb888c43","line":84,"range":{"start_line":84,"start_character":41,"end_line":84,"end_character":44},"in_reply_to":"677d3c87_469d5d7e","updated":"2021-07-30 10:59:38.000000000","message":"Ack","commit_id":"48a7918c16348e022c6ed6a7e55daef2a2dad219"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                               default\u003d\u0027VGPU\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage.\u0027)"},{"line_number":87,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"a0eb1d5b_d5367035","line":86,"range":{"start_line":86,"start_character":37,"end_line":86,"end_character":72},"updated":"2021-08-03 14:13:44.000000000","message":"...used to differentiate between device types during resource inventory and allocation management.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                               default\u003d\u0027VGPU\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage.\u0027)"},{"line_number":87,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"89892580_e0fdc5e8","line":86,"range":{"start_line":86,"start_character":37,"end_line":86,"end_character":72},"in_reply_to":"a0eb1d5b_d5367035","updated":"2021-08-04 09:59:58.000000000","message":"Ack","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        conf.register_opt(opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Register the \u0027[mdev_$(MDEV_TYPE)]/mdev_class\u0027 opts"},{"line_number":82,"context_line":"        class_opt \u003d cfg.StrOpt(\u0027mdev_class\u0027,"},{"line_number":83,"context_line":"                               default\u003d\u0027VGPU\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"}],"source_content_type":"text/x-python","patch_set":13,"id":"4468cfb5_cc51dcf3","line":82,"updated":"2021-08-06 14:37:50.000000000","message":"style nit: Can we drop these down a line?\n\n  class_opt \u003d cfg.StrOpt(\n      \u0027mdev_class\u0027,\n      ...)","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c681667a2cc813709178dcc60af37d5d1f1f058","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        conf.register_opt(opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Register the \u0027[mdev_$(MDEV_TYPE)]/mdev_class\u0027 opts"},{"line_number":82,"context_line":"        class_opt \u003d cfg.StrOpt(\u0027mdev_class\u0027,"},{"line_number":83,"context_line":"                               default\u003d\u0027VGPU\u0027,"},{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1335d674_8d4825c5","line":82,"in_reply_to":"4468cfb5_cc51dcf3","updated":"2021-08-06 15:19:15.000000000","message":"Ack","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage used \u0027"},{"line_number":87,"context_line":"                                     \u0027to differentiate between device types.\u0027)"},{"line_number":88,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"01742330_5533cdaf","line":87,"updated":"2021-08-06 14:37:50.000000000","message":"Anything !\u003d VGPU will be prefixed with CUSTOM_, right? You should call that out.\n\n  help\u003d(\n      \u0027Class of mediated device to manage used to \u0027\n      \u0027differentiate between device types. Only VGPU and custom \u0027\n      \u0027resource classes are supported.\u0027\n  ),\n\nYou could also improve the regex to force people to specify \u0027CUSTOM_\u0027","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c681667a2cc813709178dcc60af37d5d1f1f058","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                               regex\u003dr\u0027^[A-Z0-9_]+$\u0027,"},{"line_number":85,"context_line":"                               max_length\u003d248,"},{"line_number":86,"context_line":"                               help\u003d\u0027Class of mediated device to manage used \u0027"},{"line_number":87,"context_line":"                                     \u0027to differentiate between device types.\u0027)"},{"line_number":88,"context_line":"        conf.register_opt(class_opt, group\u003d\u0027mdev_%s\u0027 % mdev_type)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"c1ab8217_9652902c","line":87,"in_reply_to":"01742330_5533cdaf","updated":"2021-08-06 15:19:15.000000000","message":"Ack","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"}],"nova/tests/functional/libvirt/test_vgpu.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        pgpu2_pci_addr \u003d self.libvirt2pci_address(fakelibvirt.PGPU2_PCI_ADDR)"},{"line_number":419,"context_line":"        self.flags(device_addresses\u003d[pgpu1_pci_addr], group\u003d\u0027mdev_nvidia-11\u0027)"},{"line_number":420,"context_line":"        self.flags(device_addresses\u003d[pgpu2_pci_addr], group\u003d\u0027mdev_nvidia-12\u0027)"},{"line_number":421,"context_line":"        self.flags(mdev_class\u003d\u0027NOTVGPU\u0027, group\u003d\u0027mdev_nvidia-11\u0027)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.compute1 \u003d self.start_compute(\u0027host1\u0027)"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"d6ee36cd_60bcfa3d","line":421,"updated":"2021-08-03 14:13:44.000000000","message":"can we use a non gpu related device type name for the group that defines a NOTVGPU device class? This is now a bit confusing as my mind associates nvidia with GPU but the class name suggest not GPUs.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        pgpu2_pci_addr \u003d self.libvirt2pci_address(fakelibvirt.PGPU2_PCI_ADDR)"},{"line_number":419,"context_line":"        self.flags(device_addresses\u003d[pgpu1_pci_addr], group\u003d\u0027mdev_nvidia-11\u0027)"},{"line_number":420,"context_line":"        self.flags(device_addresses\u003d[pgpu2_pci_addr], group\u003d\u0027mdev_nvidia-12\u0027)"},{"line_number":421,"context_line":"        self.flags(mdev_class\u003d\u0027NOTVGPU\u0027, group\u003d\u0027mdev_nvidia-11\u0027)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.compute1 \u003d self.start_compute(\u0027host1\u0027)"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3101e8d6_920262b9","line":421,"in_reply_to":"d6ee36cd_60bcfa3d","updated":"2021-08-04 09:59:58.000000000","message":"Good point. I was just lazy.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[{"line_number":447,"context_line":"            \u0027/resource_providers?name\u003d\u0027 + expected_pgpu2_rp_name).body["},{"line_number":448,"context_line":"            \u0027resource_providers\u0027]"},{"line_number":449,"context_line":"        # See, Placement API returned no RP for this name as it doesn\u0027t exist."},{"line_number":450,"context_line":"        self.assertEqual([], pgpu2_rp)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_create_servers_with_different_mdev_classes(self):"},{"line_number":453,"context_line":"        # Regenerate the PCI addresses so both pGPUs now support nvidia-12"}],"source_content_type":"text/x-python","patch_set":9,"id":"16a55b6a_504b4d25","line":450,"updated":"2021-08-03 14:13:44.000000000","message":"You should check that there is a CUSTOM_NOTVGPU resource allocation on the child RP on host1 associated with the instance as the consumer.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":false,"context_lines":[{"line_number":447,"context_line":"            \u0027/resource_providers?name\u003d\u0027 + expected_pgpu2_rp_name).body["},{"line_number":448,"context_line":"            \u0027resource_providers\u0027]"},{"line_number":449,"context_line":"        # See, Placement API returned no RP for this name as it doesn\u0027t exist."},{"line_number":450,"context_line":"        self.assertEqual([], pgpu2_rp)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_create_servers_with_different_mdev_classes(self):"},{"line_number":453,"context_line":"        # Regenerate the PCI addresses so both pGPUs now support nvidia-12"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f7f842e_d5e1ce93","line":450,"in_reply_to":"16a55b6a_504b4d25","updated":"2021-08-04 09:59:58.000000000","message":"Ack","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"            # We can be deterministic : since we asked for a specific resource"},{"line_number":502,"context_line":"            # class, we know which pGPU we landed."},{"line_number":503,"context_line":"            self.assertEqual(expected[mdev_rc], mdev_info[\u0027parent\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"cdeecaf7_494e5da7","line":503,"updated":"2021-08-03 14:13:44.000000000","message":"ditto, resource allocation can be checked too.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":false,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"            # We can be deterministic : since we asked for a specific resource"},{"line_number":502,"context_line":"            # class, we know which pGPU we landed."},{"line_number":503,"context_line":"            self.assertEqual(expected[mdev_rc], mdev_info[\u0027parent\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"a2000097_16ab419b","line":503,"in_reply_to":"cdeecaf7_494e5da7","updated":"2021-08-04 09:59:58.000000000","message":"Ack","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d3a65b5737b28471d7ad385fbd7a30848d0dd7a1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4ca2f3f0_efeeae1c","line":504,"updated":"2021-08-03 14:13:44.000000000","message":"Do I understand correctly that not just create but also move operations are supported? Are those operations covered with VGPU config?","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dc1a3e47332fe609a948fc6b9da9b97f9276b522","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"28e39f82_533e8fb2","line":504,"in_reply_to":"4ca2f3f0_efeeae1c","updated":"2021-08-04 09:59:58.000000000","message":"They should be supported, yes, but I\u0027ll add some tests for them.","commit_id":"0d80462245fd6364ea4fd5dbb5bdbc4c499f4a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65431347121db44cf346d4d42085c9d35a486ef2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"1e79c6b2_bd20ba53","line":553,"updated":"2021-08-05 07:39:55.000000000","message":"Nice test coverage! Thanks.","commit_id":"2b76f800b5a594805ca4155547afb7fd7ce37655"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"678daf15d28ac4eec7bb8c28d6dc53745d7299c5","unresolved":true,"context_lines":[{"line_number":58,"context_line":"            \u0027nova.privsep.libvirt.create_mdev\u0027,"},{"line_number":59,"context_line":"            side_effect\u003dself._create_mdev))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        # for the sake of resizing, we need to patch the two methods below"},{"line_number":62,"context_line":"        self.useFixture(fixtures.MockPatch("},{"line_number":63,"context_line":"            \u0027nova.virt.libvirt.LibvirtDriver._get_instance_disk_info\u0027,"},{"line_number":64,"context_line":"             return_value\u003d[]))"},{"line_number":65,"context_line":"        self.useFixture(fixtures.MockPatch(\u0027os.rename\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":68,"context_line":"        self.policy.set_rules({"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a2c1705_958ee0d7","line":65,"range":{"start_line":61,"start_character":0,"end_line":65,"end_character":56},"updated":"2021-09-01 09:38:58.000000000","message":"nit - I\u0027d prefer to see generic things like this in base.ServersTestBase.","commit_id":"9be996c696e91e82d11d81db72ffb4cc151598b6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"678daf15d28ac4eec7bb8c28d6dc53745d7299c5","unresolved":true,"context_lines":[{"line_number":64,"context_line":"             return_value\u003d[]))"},{"line_number":65,"context_line":"        self.useFixture(fixtures.MockPatch(\u0027os.rename\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        # Allow non-admins to see instance action events."},{"line_number":68,"context_line":"        self.policy.set_rules({"},{"line_number":69,"context_line":"            \u0027os_compute_api:os-instance-actions:events\u0027: \u0027rule:admin_or_owner\u0027"},{"line_number":70,"context_line":"        }, overwrite\u003dFalse)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # NOTE(sbauza): Since the fake create_mdev doesn\u0027t know which compute"},{"line_number":73,"context_line":"        # was called, we need to look at a value that can be provided just"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff4138fb_f7d17476","line":70,"range":{"start_line":67,"start_character":0,"end_line":70,"end_character":27},"updated":"2021-09-01 09:38:58.000000000","message":"nit - You don\u0027t need this anymore as ADMIN_API\u003dTrue is set above.","commit_id":"9be996c696e91e82d11d81db72ffb4cc151598b6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"678daf15d28ac4eec7bb8c28d6dc53745d7299c5","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        self.assertEqual([], compute.driver._get_mediated_devices())"},{"line_number":134,"context_line":"        return compute"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _confirm_resize(self, server, host\u003d\u0027host1\u0027):"},{"line_number":137,"context_line":"        # NOTE(sbauza): Unfortunately, _cleanup_resize() in libvirt checks the"},{"line_number":138,"context_line":"        # host option to know the source hostname but given we have a global"},{"line_number":139,"context_line":"        # CONF, the value will be the hostname of the last compute service that"},{"line_number":140,"context_line":"        # was created, so we need to change it here."},{"line_number":141,"context_line":"        # TODO(sbauza): Remove the below once we stop using CONF.host in"},{"line_number":142,"context_line":"        # libvirt and rather looking at the compute host value."},{"line_number":143,"context_line":"        orig_host \u003d CONF.host"},{"line_number":144,"context_line":"        self.flags(host\u003dhost)"},{"line_number":145,"context_line":"        super(VGPUTestBase, self)._confirm_resize(server)"},{"line_number":146,"context_line":"        self.flags(host\u003dorig_host)"},{"line_number":147,"context_line":"        self._wait_for_state_change(server, \u0027ACTIVE\u0027)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def assert_mdev_usage(self, compute, expected_amount, instance\u003dNone,"},{"line_number":150,"context_line":"                          expected_rc\u003dorc.VGPU, expected_rp_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"2fea11cd_030942e9","line":147,"range":{"start_line":136,"start_character":0,"end_line":147,"end_character":53},"updated":"2021-09-01 09:38:58.000000000","message":"nit - Again I\u0027d like to see this moved to base.ServersTestBase in the future. Looks like it\u0027s already duplicated a few times in the libvirt tests.","commit_id":"9be996c696e91e82d11d81db72ffb4cc151598b6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"678daf15d28ac4eec7bb8c28d6dc53745d7299c5","unresolved":true,"context_lines":[{"line_number":152,"context_line":"           specific instance."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"           :param compute: the internal compute object"},{"line_number":155,"context_line":"           :param expected_amount: the expected amount of allocations"},{"line_number":156,"context_line":"           :param instance: if not None, a specific Instance to lookup instead"},{"line_number":157,"context_line":"                            of the whole compute allocations."},{"line_number":158,"context_line":"           :param expected_rc: the expected resource class"}],"source_content_type":"text/x-python","patch_set":16,"id":"3d203013_aceff237","line":155,"range":{"start_line":155,"start_character":27,"end_line":155,"end_character":33},"updated":"2021-09-01 09:38:58.000000000","message":"supernit - this might just be me but I think expected_allocations is better, amount made me think this was the amount available on the compute still.","commit_id":"9be996c696e91e82d11d81db72ffb4cc151598b6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"678daf15d28ac4eec7bb8c28d6dc53745d7299c5","unresolved":true,"context_lines":[{"line_number":451,"context_line":"                   group\u003d\u0027mdev_nvidia-12\u0027)"},{"line_number":452,"context_line":"        self.flags(mdev_class\u003d\u0027CUSTOM_NOTVGPU\u0027, group\u003d\u0027mdev_mlx5_core\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        self.compute1 \u003d self.start_compute(\u0027host1\u0027)"},{"line_number":455,"context_line":"        # Regenerate the PCI addresses so they can support both mlx5 and"},{"line_number":456,"context_line":"        # nvidia-12 types"},{"line_number":457,"context_line":"        connection \u003d self.computes["},{"line_number":458,"context_line":"            self.compute1.host].driver._host.get_connection()"},{"line_number":459,"context_line":"        connection.pci_info \u003d fakelibvirt.HostPCIDevicesInfo("},{"line_number":460,"context_line":"            num_pci\u003d0, num_pfs\u003d0, num_vfs\u003d0, num_mdevcap\u003d2,"},{"line_number":461,"context_line":"            generic_types\u003dTrue)"},{"line_number":462,"context_line":"        # Make a restart to update the Resource Providers"},{"line_number":463,"context_line":"        self.compute1 \u003d self.restart_compute_service(self.compute1)"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"043a0357_452297d7","line":461,"range":{"start_line":454,"start_character":0,"end_line":461,"end_character":31},"updated":"2021-09-01 09:38:58.000000000","message":"nit - start_compute takes pci_info as a kwarg, is there a reason not to pass it in at startup?","commit_id":"9be996c696e91e82d11d81db72ffb4cc151598b6"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bab42f6be0575be287933936579df9ca388dabd3","unresolved":true,"context_lines":[{"line_number":25291,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027nvidia-11\u0027,"},{"line_number":25292,"context_line":"                          \u00270000:85:00.0\u0027: \u0027nvidia-12\u0027}, drvr.pgpu_type_mapping)"},{"line_number":25293,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027VGPU\u0027,"},{"line_number":25294,"context_line":"                          \u00270000:85:00.0\u0027: \u0027NOTVGPU\u0027},"},{"line_number":25295,"context_line":"                          drvr.mdev_class_mapping)"},{"line_number":25296,"context_line":"        self.assertEqual(set([orc.VGPU, \u0027NOTVGPU\u0027]), drvr.mdev_classes)"},{"line_number":25297,"context_line":"        mock_warning.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":13,"id":"e7616e7c_cf7c674f","line":25294,"range":{"start_line":25294,"start_character":43,"end_line":25294,"end_character":50},"updated":"2021-08-06 14:37:50.000000000","message":"This isn\u0027t a legal custom resource class","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e2260b0eb8ae302ac39043f8af03afa62c4c6242","unresolved":false,"context_lines":[{"line_number":25291,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027nvidia-11\u0027,"},{"line_number":25292,"context_line":"                          \u00270000:85:00.0\u0027: \u0027nvidia-12\u0027}, drvr.pgpu_type_mapping)"},{"line_number":25293,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027VGPU\u0027,"},{"line_number":25294,"context_line":"                          \u00270000:85:00.0\u0027: \u0027NOTVGPU\u0027},"},{"line_number":25295,"context_line":"                          drvr.mdev_class_mapping)"},{"line_number":25296,"context_line":"        self.assertEqual(set([orc.VGPU, \u0027NOTVGPU\u0027]), drvr.mdev_classes)"},{"line_number":25297,"context_line":"        mock_warning.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ed052611_63b97d87","line":25294,"range":{"start_line":25294,"start_character":43,"end_line":25294,"end_character":50},"in_reply_to":"4d4633fa_3f39f230","updated":"2021-08-06 16:13:08.000000000","message":"Done","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c681667a2cc813709178dcc60af37d5d1f1f058","unresolved":true,"context_lines":[{"line_number":25291,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027nvidia-11\u0027,"},{"line_number":25292,"context_line":"                          \u00270000:85:00.0\u0027: \u0027nvidia-12\u0027}, drvr.pgpu_type_mapping)"},{"line_number":25293,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027VGPU\u0027,"},{"line_number":25294,"context_line":"                          \u00270000:85:00.0\u0027: \u0027NOTVGPU\u0027},"},{"line_number":25295,"context_line":"                          drvr.mdev_class_mapping)"},{"line_number":25296,"context_line":"        self.assertEqual(set([orc.VGPU, \u0027NOTVGPU\u0027]), drvr.mdev_classes)"},{"line_number":25297,"context_line":"        mock_warning.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff171fbc_6a5d4876","line":25294,"range":{"start_line":25294,"start_character":43,"end_line":25294,"end_character":50},"in_reply_to":"e7616e7c_cf7c674f","updated":"2021-08-06 15:19:15.000000000","message":"this is not a resource class, this is a mdev class that we persist in the object but when using the helper method, we eventually get CUSTOM_NOTVGPU","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8fdfc421189e13c165483d0a1357e0d38888f719","unresolved":true,"context_lines":[{"line_number":25291,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027nvidia-11\u0027,"},{"line_number":25292,"context_line":"                          \u00270000:85:00.0\u0027: \u0027nvidia-12\u0027}, drvr.pgpu_type_mapping)"},{"line_number":25293,"context_line":"        self.assertEqual({\u00270000:84:00.0\u0027: \u0027VGPU\u0027,"},{"line_number":25294,"context_line":"                          \u00270000:85:00.0\u0027: \u0027NOTVGPU\u0027},"},{"line_number":25295,"context_line":"                          drvr.mdev_class_mapping)"},{"line_number":25296,"context_line":"        self.assertEqual(set([orc.VGPU, \u0027NOTVGPU\u0027]), drvr.mdev_classes)"},{"line_number":25297,"context_line":"        mock_warning.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":13,"id":"4d4633fa_3f39f230","line":25294,"range":{"start_line":25294,"start_character":43,"end_line":25294,"end_character":50},"in_reply_to":"ff171fbc_6a5d4876","updated":"2021-08-06 15:21:25.000000000","message":"Ah, okay. That wasn\u0027t clear to me. I wonder if it would make sense to just store the resource class or is this mdev class used for something other than identification?","commit_id":"8897f298077f7bdd7bb21df931ec30cec69abb0b"}]}
