)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Configure multiple vGPU types"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As we need the operator to say which PCI devices for each vGPU type,"},{"line_number":10,"context_line":"that change will make sure that nova.conf will support that."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For the moment, we don\u0027t use yet the new options, it will be done"},{"line_number":13,"context_line":"in the next change."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_6d469d52","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":60},"updated":"2018-04-27 19:03:31.000000000","message":"The above sentence is awkward. How about just this?\n\n This patch adds new CONF options for libvirt to determine\n supported vGPU types.","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"94ee7b602d4fe659613dc438deaaa1060b950c14","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"For the moment, we don\u0027t use yet the new options, it will be done"},{"line_number":13,"context_line":"in the next change."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially-Implements: blueprint vgpu-rocky"},{"line_number":16,"context_line":"Change-Id: I4681931a6fdd2bfc52b9d5729f84c3994f650fc9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_40129f64","line":14,"updated":"2018-04-26 16:18:29.000000000","message":"Note I\u0027m not providing a reno file for that, given we don\u0027t use the options yet.","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f4034c64fe128c99dae89fde12c3bee13f9a82bf","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in the next changes. Given that, I won\u0027t provide a reno file until"},{"line_number":17,"context_line":"we directly support multiple types."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partially-Implements: blueprint vgpu-rocky"},{"line_number":20,"context_line":"Change-Id: I4681931a6fdd2bfc52b9d5729f84c3994f650fc9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_978edfd4","line":19,"range":{"start_line":19,"start_character":32,"end_line":19,"end_character":42},"updated":"2018-12-10 23:03:17.000000000","message":"This needs to refer to vgpu-stein now.","commit_id":"b17ae0aa3b56e81b2a7f5ec9089e6861e67ac47f"}],"nova/conf/devices.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Some pGPUs (e.g. NVIDIA GRID K1) support different vGPU types. User can use"},{"line_number":26,"context_line":"this option to specify a list of enabled vGPU types that may be assigned to a"},{"line_number":27,"context_line":"guest instance. An example is as the following:"},{"line_number":28,"context_line":"    [devices]"},{"line_number":29,"context_line":"    enabled_vgpu_types \u003d GRID K100,Intel GVT-g,MxGPU.2,nvidia-11"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_c826c4bb","line":27,"range":{"start_line":27,"start_character":46,"end_line":27,"end_character":47},"updated":"2018-04-27 10:10:53.000000000","message":"s/:/::/","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    [devices]"},{"line_number":29,"context_line":"    enabled_vgpu_types \u003d GRID K100,Intel GVT-g,MxGPU.2,nvidia-11"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Depending on the virt driver :"},{"line_number":32,"context_line":"- for Xen, please note that Nova only supports a single type in the"},{"line_number":33,"context_line":"Queens release. If more than one vGPU type is specified (as a comma-separated"},{"line_number":34,"context_line":"list), only the first one will be used."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_2818a073","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":30},"updated":"2018-04-27 10:10:53.000000000","message":"New line after this. Also, remove the space before the colon","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Depending on the virt driver :"},{"line_number":32,"context_line":"- for Xen, please note that Nova only supports a single type in the"},{"line_number":33,"context_line":"Queens release. If more than one vGPU type is specified (as a comma-separated"},{"line_number":34,"context_line":"list), only the first one will be used."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- for libvirt, if you provide multiple vGPU types, then you also need to"},{"line_number":37,"context_line":"say which PCI devices will use each of the vGPU types by passing a config"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_a80cb03b","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":39},"updated":"2018-04-27 10:10:53.000000000","message":"These should be indented, as noted below","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":42,"context_line":"     physical_devs \u003d 0000:84:00.0,0000:85:00.0"},{"line_number":43,"context_line":"     [gpu_nvidia-12]"},{"line_number":44,"context_line":"     physical_devs \u003d 0000:86:00.0"},{"line_number":45,"context_line":"If you miss to provide PCI addresses for each section, an"},{"line_number":46,"context_line":"InvalidLibvirtGPUConfig exception will be raised."},{"line_number":47,"context_line":"If you provide mutiple times the same PCI address, an InvalidLibvirtGPUConfig"},{"line_number":48,"context_line":"exception will be raised."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_ed738db0","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":22},"updated":"2018-04-27 19:03:31.000000000","message":"\"If you fail to provide PCI addresses\"","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     physical_devs \u003d 0000:86:00.0"},{"line_number":45,"context_line":"If you miss to provide PCI addresses for each section, an"},{"line_number":46,"context_line":"InvalidLibvirtGPUConfig exception will be raised."},{"line_number":47,"context_line":"If you provide mutiple times the same PCI address, an InvalidLibvirtGPUConfig"},{"line_number":48,"context_line":"exception will be raised."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Related options:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_4d62b9da","line":47,"range":{"start_line":47,"start_character":7,"end_line":47,"end_character":49},"updated":"2018-04-27 19:03:31.000000000","message":"\"If you repeat the same PCI address, an InvalidLibvirtGPUConfig...\"","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Queens release. If more than one vGPU type is specified (as a comma-separated"},{"line_number":34,"context_line":"list), only the first one will be used."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- for libvirt, if you provide multiple vGPU types, then you also need to"},{"line_number":37,"context_line":"say which PCI devices will use each of the vGPU types by passing a config"},{"line_number":38,"context_line":"option for each type, like for:"},{"line_number":39,"context_line":"     [devices]"},{"line_number":40,"context_line":"     enabled_vgpu_types \u003d nvidia-11,nvidia-12"},{"line_number":41,"context_line":"     [gpu_nvidia-11]"},{"line_number":42,"context_line":"     physical_devs \u003d 0000:84:00.0,0000:85:00.0"},{"line_number":43,"context_line":"     [gpu_nvidia-12]"},{"line_number":44,"context_line":"     physical_devs \u003d 0000:86:00.0"},{"line_number":45,"context_line":"If you miss to provide PCI addresses for each section, an"},{"line_number":46,"context_line":"InvalidLibvirtGPUConfig exception will be raised."},{"line_number":47,"context_line":"If you provide mutiple times the same PCI address, an InvalidLibvirtGPUConfig"},{"line_number":48,"context_line":"exception will be raised."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Related options:"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_88076c19","line":48,"range":{"start_line":36,"start_character":0,"end_line":48,"end_character":25},"updated":"2018-04-27 10:10:53.000000000","message":"This isn\u0027t valid rST:\n\n- All lines in a bullet point need to be indented at the same level, eg.\n\n    - A bullet point that\n      continues down here\n\nYou need a new line before and after indented blocks. Also, if you want it to appear as literal text (which you do), you need to precede it with a double colon \u0027::\u0027 instead of a single colon \u0027:\u0027.\n\nI wouldn\u0027t say what type of exception will be raised (because this can change) but rather just say \"an exception will be raised\".","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Related options:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* [gpu_*]/physical_devs"},{"line_number":53,"context_line":"\"\"\")"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_8820cc9d","line":52,"range":{"start_line":52,"start_character":2,"end_line":52,"end_character":23},"updated":"2018-04-27 10:10:53.000000000","message":"``literal``","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"029ae40dde449bfbc8ebde2e5f4463a9c2fb3ac3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"     [gpu_nvidia-11]"},{"line_number":42,"context_line":"     device_addresses \u003d 0000:84:00.0,0000:85:00.0"},{"line_number":43,"context_line":"     [gpu_nvidia-12]"},{"line_number":44,"context_line":"     device_addresses \u003d 0000:86:00.0"},{"line_number":45,"context_line":"If you fail to provide PCI addresses for each section, an"},{"line_number":46,"context_line":"InvalidLibvirtGPUConfig exception will be raised."},{"line_number":47,"context_line":"If you repeat the same PCI address, an InvalidLibvirtGPUConfig"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ecd81425","line":44,"updated":"2018-07-16 19:56:16.000000000","message":"We should clarify what happens wrt the gpu_* section when you specify only one type.  It took me several reads through this patch and the top one [1] to figure out that it\u0027s:\n\n- If you omit the gpu_* section, all devices are allowed, and all use the same type.\n- If you include the gpu_* section, it acts as a whitelist, i.e. you specify all and only the devices you want to be allowed to use for VGPUs (of the specified type).\n\n[1] https://review.openstack.org/#/c/564215/","commit_id":"b17ae0aa3b56e81b2a7f5ec9089e6861e67ac47f"}],"nova/conf/libvirt.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1165,"context_line":"# hence not registered below."},{"line_number":1166,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1167,"context_line":"    cfg.ListOpt(\u0027physical_devs\u0027,"},{"line_number":1168,"context_line":"                default\u003d[],"},{"line_number":1169,"context_line":"                help\u003d\"\"\""},{"line_number":1170,"context_line":"List of physical PCI devices to associate for a specific GPU type."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_cda32900","line":1167,"range":{"start_line":1167,"start_character":17,"end_line":1167,"end_character":30},"updated":"2018-04-27 19:03:31.000000000","message":"Can we call this CONF option \"device_addresses\" please, to properly indicate what is expected to be stored in it.","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1165,"context_line":"# hence not registered below."},{"line_number":1166,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1167,"context_line":"    cfg.ListOpt(\u0027physical_devs\u0027,"},{"line_number":1168,"context_line":"                default\u003d[],"},{"line_number":1169,"context_line":"                help\u003d\"\"\""},{"line_number":1170,"context_line":"List of physical PCI devices to associate for a specific GPU type."},{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"The GPU type to associate with the PCI devices has to be the section name"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_285f400f","line":1169,"range":{"start_line":1166,"start_character":0,"end_line":1169,"end_character":24},"updated":"2018-04-27 10:10:53.000000000","message":"Why is this in the libvirt group. Yes, only libvirt supports this right now, but couldn\u0027t we conceivably extend support to other drivers? If not, the reason why should be in the commit message","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"    cfg.ListOpt(\u0027physical_devs\u0027,"},{"line_number":1168,"context_line":"                default\u003d[],"},{"line_number":1169,"context_line":"                help\u003d\"\"\""},{"line_number":1170,"context_line":"List of physical PCI devices to associate for a specific GPU type."},{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"The GPU type to associate with the PCI devices has to be the section name"},{"line_number":1173,"context_line":"prefixed by \u0027gpu_\u0027."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_4db7193c","line":1170,"range":{"start_line":1170,"start_character":8,"end_line":1170,"end_character":29},"updated":"2018-04-27 19:03:31.000000000","message":"list of physical PCI device *addresses*\n\n\"to associate with a specific GPU type\"","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"List of physical PCI devices to associate for a specific GPU type."},{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"The GPU type to associate with the PCI devices has to be the section name"},{"line_number":1173,"context_line":"prefixed by \u0027gpu_\u0027."},{"line_number":1174,"context_line":"Eg. for \u0027nvidia-11\u0027, you have to declare [gpu_nvidia-11]/physical_devs."},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"Each GPU type also has to be declared in [devices]/enabled_vgpu_types."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_483f14b5","line":1173,"range":{"start_line":1173,"start_character":12,"end_line":1173,"end_character":18},"updated":"2018-04-27 10:10:53.000000000","message":"``literal``","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"The GPU type to associate with the PCI devices has to be the section name"},{"line_number":1173,"context_line":"prefixed by \u0027gpu_\u0027."},{"line_number":1174,"context_line":"Eg. for \u0027nvidia-11\u0027, you have to declare [gpu_nvidia-11]/physical_devs."},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"Each GPU type also has to be declared in [devices]/enabled_vgpu_types."},{"line_number":1177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_88552cfd","line":1174,"range":{"start_line":1174,"start_character":41,"end_line":1174,"end_character":70},"updated":"2018-04-27 10:10:53.000000000","message":"``literal``","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"List of physical PCI devices to associate for a specific GPU type."},{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"The GPU type to associate with the PCI devices has to be the section name"},{"line_number":1173,"context_line":"prefixed by \u0027gpu_\u0027."},{"line_number":1174,"context_line":"Eg. for \u0027nvidia-11\u0027, you have to declare [gpu_nvidia-11]/physical_devs."},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"Each GPU type also has to be declared in [devices]/enabled_vgpu_types."},{"line_number":1177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_c874849f","line":1174,"range":{"start_line":1173,"start_character":18,"end_line":1174,"end_character":3},"updated":"2018-04-27 10:10:53.000000000","message":"nit: Remove the newline here, e.g.\n\n  prefixed by ``gpu_``. For example, for ``nvidia-11``, you\n  would declare","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1173,"context_line":"prefixed by \u0027gpu_\u0027."},{"line_number":1174,"context_line":"Eg. for \u0027nvidia-11\u0027, you have to declare [gpu_nvidia-11]/physical_devs."},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"Each GPU type also has to be declared in [devices]/enabled_vgpu_types."},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"Related options:"},{"line_number":1179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_e850680d","line":1176,"range":{"start_line":1176,"start_character":41,"end_line":1176,"end_character":69},"updated":"2018-04-27 10:10:53.000000000","message":"``literal``","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"Related options:"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"* [devices]/enabled_vgpu_types"},{"line_number":1181,"context_line":"\"\"\""},{"line_number":1182,"context_line":"                )"},{"line_number":1183,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_283180ed","line":1180,"range":{"start_line":1180,"start_character":2,"end_line":1180,"end_character":30},"updated":"2018-04-27 10:10:53.000000000","message":"``literal``","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"Related options:"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"* [devices]/enabled_vgpu_types"},{"line_number":1181,"context_line":"\"\"\""},{"line_number":1182,"context_line":"                )"},{"line_number":1183,"context_line":"]"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_0834bcdd","line":1182,"range":{"start_line":1181,"start_character":3,"end_line":1182,"end_character":16},"updated":"2018-04-27 10:10:53.000000000","message":"drop this whitespace","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"]"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1182,"context_line":"# hence not registered below."},{"line_number":1183,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1184,"context_line":"    cfg.ListOpt(\u0027device_addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_6b56f3d0","line":1181,"range":{"start_line":1181,"start_character":16,"end_line":1181,"end_character":21},"updated":"2018-05-29 23:08:14.000000000","message":"These","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"]"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1182,"context_line":"# hence not registered below."},{"line_number":1183,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1184,"context_line":"    cfg.ListOpt(\u0027device_addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_ffa6a10d","line":1181,"range":{"start_line":1181,"start_character":16,"end_line":1181,"end_character":21},"in_reply_to":"5f7c97a3_6b56f3d0","updated":"2018-06-19 16:09:45.000000000","message":"Done","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1182,"context_line":"# hence not registered below."},{"line_number":1183,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1184,"context_line":"    cfg.ListOpt(\u0027device_addresses\u0027,"},{"line_number":1185,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_2bf9dbc6","line":1182,"range":{"start_line":1182,"start_character":8,"end_line":1182,"end_character":22},"updated":"2018-05-29 23:08:14.000000000","message":"This doesn\u0027t show up in the generated config docs.  Guess we\u0027ve gotta live with that, eh?","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"# NOTE(sbauza): Those options are dynamically registered by libvirt.init_host()"},{"line_number":1182,"context_line":"# hence not registered below."},{"line_number":1183,"context_line":"vgpu_types_mapping_opts \u003d ["},{"line_number":1184,"context_line":"    cfg.ListOpt(\u0027device_addresses\u0027,"},{"line_number":1185,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_5f98f5ca","line":1182,"range":{"start_line":1182,"start_character":8,"end_line":1182,"end_character":22},"in_reply_to":"5f7c97a3_2bf9dbc6","updated":"2018-06-19 16:09:45.000000000","message":"Yup, that\u0027s fine.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"029ae40dde449bfbc8ebde2e5f4463a9c2fb3ac3","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                help\u003d\"\"\""},{"line_number":1216,"context_line":"List of physical PCI addresses to associate with a specific GPU type."},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"The GPU type to associate with the PCI devices has to be the section name"},{"line_number":1219,"context_line":"prefixed by ``gpu_``. For example, for \u0027nvidia-11\u0027, you would declare"},{"line_number":1220,"context_line":"``[gpu_nvidia-11]/device_addresses``."},{"line_number":1221,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_0cd23034","line":1218,"range":{"start_line":1218,"start_character":0,"end_line":1218,"end_character":72},"updated":"2018-07-16 19:56:16.000000000","message":"I would reverse this:\n\nThe section name must be the GPU type with which the listed devices are to be associated, prefixed with ``gpu_``.","commit_id":"b17ae0aa3b56e81b2a7f5ec9089e6861e67ac47f"}],"nova/exception.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":2243,"context_line":"    msg_fmt \u003d _(\"Virt driver is not ready.\")"},{"line_number":2244,"context_line":""},{"line_number":2245,"context_line":""},{"line_number":2246,"context_line":"class InvalidLibvirtGPUConfig(Invalid):"},{"line_number":2247,"context_line":"    msg_fmt \u003d _(\"Invalid configuration for section %(group)s \""},{"line_number":2248,"context_line":"                \"due to %(reason)s.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_28b42035","line":2248,"range":{"start_line":2246,"start_character":0,"end_line":2248,"end_character":37},"updated":"2018-04-27 10:10:53.000000000","message":"I wonder if this should be more generic, given that I\u0027m going to be raising a similar error message. Perhaps we could/should reuse one of oslo.config\u0027s exceptions?","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":2243,"context_line":"    msg_fmt \u003d _(\"Virt driver is not ready.\")"},{"line_number":2244,"context_line":""},{"line_number":2245,"context_line":""},{"line_number":2246,"context_line":"class InvalidLibvirtGPUConfig(Invalid):"},{"line_number":2247,"context_line":"    msg_fmt \u003d _(\"Invalid configuration for section %(group)s \""},{"line_number":2248,"context_line":"                \"due to %(reason)s.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_23f68991","line":2248,"range":{"start_line":2246,"start_character":0,"end_line":2248,"end_character":37},"in_reply_to":"9f6a8fd7_28b42035","updated":"2018-06-19 16:09:45.000000000","message":"I think we need to be explicit here because people would wonder what was the problem.","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":19848,"context_line":"        exc \u003d test.TestingException()"},{"line_number":19849,"context_line":""},{"line_number":19850,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":19851,"context_line":"                          self._test_detach_mediated_devices, exc)"},{"line_number":19852,"context_line":""},{"line_number":19853,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":19854,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_ebc5235d","line":19851,"updated":"2018-05-29 23:08:14.000000000","message":"note to self: legacy path (one entry in enabled_vgpu_types, no [gpu_\u003cthat_type\u003e]/device_addresses entry) is tested in test_get_vgpu_total and others.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":19850,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":19851,"context_line":"                          self._test_detach_mediated_devices, exc)"},{"line_number":19852,"context_line":""},{"line_number":19853,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":19854,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":19855,"context_line":"                            libvirt_driver.MIN_LIBVIRT_MDEV_SUPPORT))"},{"line_number":19856,"context_line":"    def test_configure_gpu_mapping_on_init_host_for_single_type("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_8bb7cff5","line":19853,"updated":"2018-05-29 23:08:14.000000000","message":"Missing a success case for multiple types.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":19850,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":19851,"context_line":"                          self._test_detach_mediated_devices, exc)"},{"line_number":19852,"context_line":""},{"line_number":19853,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027,"},{"line_number":19854,"context_line":"                       return_value\u003dversionutils.convert_version_to_int("},{"line_number":19855,"context_line":"                            libvirt_driver.MIN_LIBVIRT_MDEV_SUPPORT))"},{"line_number":19856,"context_line":"    def test_configure_gpu_mapping_on_init_host_for_single_type("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_630f53e0","line":19853,"in_reply_to":"5f7c97a3_8bb7cff5","updated":"2018-06-19 16:09:45.000000000","message":"Done","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"            CONF.register_opts(nova.conf.libvirt.vgpu_types_mapping_opts,"},{"line_number":585,"context_line":"                               group\u003dgroup_name)"},{"line_number":586,"context_line":"            # For upgrade reasons, only check that for multiple types"},{"line_number":587,"context_line":"            # TODO(sbauza): Remove that conditional by Stein"},{"line_number":588,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":589,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":590,"context_line":"                addresses \u003d getattr(CONF, group_name).physical_devs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_68d8d87e","line":587,"range":{"start_line":587,"start_character":52,"end_line":587,"end_character":54},"updated":"2018-04-27 10:10:53.000000000","message":"s/by/in/","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"            CONF.register_opts(nova.conf.libvirt.vgpu_types_mapping_opts,"},{"line_number":585,"context_line":"                               group\u003dgroup_name)"},{"line_number":586,"context_line":"            # For upgrade reasons, only check that for multiple types"},{"line_number":587,"context_line":"            # TODO(sbauza): Remove that conditional by Stein"},{"line_number":588,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":589,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":590,"context_line":"                addresses \u003d getattr(CONF, group_name).physical_devs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_88f1ac04","line":587,"range":{"start_line":587,"start_character":35,"end_line":587,"end_character":39},"updated":"2018-04-27 10:10:53.000000000","message":"s/that/this/","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"12a34061879bd0a5a5ff06c509f678107c9097c6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            # TODO(sbauza): Remove that conditional by Stein"},{"line_number":588,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":589,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":590,"context_line":"                addresses \u003d getattr(CONF, group_name).physical_devs"},{"line_number":591,"context_line":"                if not addresses:"},{"line_number":592,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":593,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027devices missing in section\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_68469824","line":590,"range":{"start_line":590,"start_character":16,"end_line":590,"end_character":67},"updated":"2018-04-27 10:10:53.000000000","message":"This worked? I recall seeing \"group does not exist\" exceptions when I tried to actually use this in a running environment, but maybe I was doing something else","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca5f3564c0b3b615559757d310c8596cd7d867e4","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            # TODO(sbauza): Remove that conditional by Stein"},{"line_number":588,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":589,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":590,"context_line":"                addresses \u003d getattr(CONF, group_name).physical_devs"},{"line_number":591,"context_line":"                if not addresses:"},{"line_number":592,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":593,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027devices missing in section\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_ad6fd590","line":590,"range":{"start_line":590,"start_character":16,"end_line":590,"end_character":67},"in_reply_to":"9f6a8fd7_68469824","updated":"2018-04-27 19:03:31.000000000","message":"At a minimum, the above code should be checking to see if the group exists. So, do this instead:\n\n group \u003d getattr(CONF, group_name)\n if not group:\n     raise ...\n\n addresses \u003d group.physical_devs\n ...","commit_id":"80b00489c590f7c06fcc4ded5e16913a41829ae6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":564,"context_line":"            CONF.register_opts(nova.conf.libvirt.vgpu_types_mapping_opts,"},{"line_number":565,"context_line":"                               group\u003dgroup_name)"},{"line_number":566,"context_line":"            # For upgrade reasons, only check that for multiple types"},{"line_number":567,"context_line":"            # TODO(sbauza): Remove this conditional in Stein"},{"line_number":568,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":569,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":570,"context_line":"                group \u003d getattr(CONF, group_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_cbd86754","line":567,"range":{"start_line":567,"start_character":28,"end_line":567,"end_character":60},"updated":"2018-05-29 23:08:14.000000000","message":"I.e. you\u0027re going to require addresses even if only one type?  So this does the job of a whitelist?","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":564,"context_line":"            CONF.register_opts(nova.conf.libvirt.vgpu_types_mapping_opts,"},{"line_number":565,"context_line":"                               group\u003dgroup_name)"},{"line_number":566,"context_line":"            # For upgrade reasons, only check that for multiple types"},{"line_number":567,"context_line":"            # TODO(sbauza): Remove this conditional in Stein"},{"line_number":568,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":569,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":570,"context_line":"                group \u003d getattr(CONF, group_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_e3136300","line":567,"range":{"start_line":567,"start_character":28,"end_line":567,"end_character":60},"in_reply_to":"5f7c97a3_cbd86754","updated":"2018-06-19 16:09:45.000000000","message":"Mmm, actually you\u0027re right. If operators only want one type, they shouldn\u0027t needing to say which devices.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                group \u003d getattr(CONF, group_name)"},{"line_number":571,"context_line":"                if not group:"},{"line_number":572,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":573,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027missing section\u0027)"},{"line_number":574,"context_line":"                addresses \u003d group.device_addresses"},{"line_number":575,"context_line":"                if not addresses:"},{"line_number":576,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_6bd91354","line":573,"range":{"start_line":573,"start_character":42,"end_line":573,"end_character":66},"updated":"2018-05-29 23:08:14.000000000","message":"Message construction like this is bad when the message is translated (as it is in this case).  You\u0027ll need to create separate exception classes for each of these cases so the reason can be translated along with the message itself.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                group \u003d getattr(CONF, group_name)"},{"line_number":571,"context_line":"                if not group:"},{"line_number":572,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":573,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027missing section\u0027)"},{"line_number":574,"context_line":"                addresses \u003d group.device_addresses"},{"line_number":575,"context_line":"                if not addresses:"},{"line_number":576,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_c3742739","line":573,"range":{"start_line":573,"start_character":42,"end_line":573,"end_character":66},"in_reply_to":"5f7c97a3_6bd91354","updated":"2018-06-19 16:09:45.000000000","message":"We have a lot of exceptions providing reasons. I don\u0027t think it\u0027s a translation problem.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027missing section\u0027)"},{"line_number":574,"context_line":"                addresses \u003d group.device_addresses"},{"line_number":575,"context_line":"                if not addresses:"},{"line_number":576,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":577,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027devices missing in section\u0027)"},{"line_number":578,"context_line":"                for address in addresses:"},{"line_number":579,"context_line":"                    if address in known_addresses:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_abbc0bdc","line":576,"range":{"start_line":576,"start_character":36,"end_line":576,"end_character":59},"updated":"2018-05-29 23:08:14.000000000","message":"I would also suggest including enough information in the messages that the admin knows how to fix the problem.  E.g. the section name should be included in all of these...","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027missing section\u0027)"},{"line_number":574,"context_line":"                addresses \u003d group.device_addresses"},{"line_number":575,"context_line":"                if not addresses:"},{"line_number":576,"context_line":"                    raise exception.InvalidLibvirtGPUConfig("},{"line_number":577,"context_line":"                        group\u003dgroup_name, reason\u003d\u0027devices missing in section\u0027)"},{"line_number":578,"context_line":"                for address in addresses:"},{"line_number":579,"context_line":"                    if address in known_addresses:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_6384330c","line":576,"range":{"start_line":576,"start_character":36,"end_line":576,"end_character":59},"in_reply_to":"5f7c97a3_abbc0bdc","updated":"2018-06-19 16:09:45.000000000","message":"I\u0027m passing the section/group name in L577","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"066f48cc681e4a96d9939f9ab6c4cec29d154dd3","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                    if address in known_addresses:"},{"line_number":580,"context_line":"                        # Each PCI device should only support one type"},{"line_number":581,"context_line":"                        raise exception.InvalidLibvirtGPUConfig("},{"line_number":582,"context_line":"                            group\u003dgroup_name, reason\u003d\u0027duplicate devices\u0027)"},{"line_number":583,"context_line":"                    else:"},{"line_number":584,"context_line":"                        known_addresses.add(address)"},{"line_number":585,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_cbc14756","line":582,"range":{"start_line":582,"start_character":54,"end_line":582,"end_character":71},"updated":"2018-05-29 23:08:14.000000000","message":"...and include which device(s) are duplicated in this one.","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ed1836beaf826c433c6042cc1c46c0292191748","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                    if address in known_addresses:"},{"line_number":580,"context_line":"                        # Each PCI device should only support one type"},{"line_number":581,"context_line":"                        raise exception.InvalidLibvirtGPUConfig("},{"line_number":582,"context_line":"                            group\u003dgroup_name, reason\u003d\u0027duplicate devices\u0027)"},{"line_number":583,"context_line":"                    else:"},{"line_number":584,"context_line":"                        known_addresses.add(address)"},{"line_number":585,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_e3d283fd","line":582,"range":{"start_line":582,"start_character":54,"end_line":582,"end_character":71},"in_reply_to":"5f7c97a3_cbc14756","updated":"2018-06-19 16:09:45.000000000","message":"Done","commit_id":"4ea4d3c3590b2e8fbb6ce1f05714554bae1901c8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"029ae40dde449bfbc8ebde2e5f4463a9c2fb3ac3","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            group_name \u003d \u0027gpu_%s\u0027 % requested_type"},{"line_number":566,"context_line":"            CONF.register_opts(nova.conf.libvirt.vgpu_types_mapping_opts,"},{"line_number":567,"context_line":"                               group\u003dgroup_name)"},{"line_number":568,"context_line":"            # NOTE(sbauza): Only ask for devices if more than one type be set"},{"line_number":569,"context_line":"            if len(CONF.devices.enabled_vgpu_types) \u003e 1:"},{"line_number":570,"context_line":"                # Make sure we have PCI devices for each vGPU type"},{"line_number":571,"context_line":"                group \u003d getattr(CONF, group_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_2cefecb1","line":568,"range":{"start_line":568,"start_character":71,"end_line":568,"end_character":73},"updated":"2018-07-16 19:56:16.000000000","message":"is","commit_id":"b17ae0aa3b56e81b2a7f5ec9089e6861e67ac47f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"029ae40dde449bfbc8ebde2e5f4463a9c2fb3ac3","unresolved":false,"context_lines":[{"line_number":582,"context_line":"                        raise exception.InvalidLibvirtGPUConfig("},{"line_number":583,"context_line":"                            group\u003dgroup_name,"},{"line_number":584,"context_line":"                            reason\u003d\u0027duplicate device %s\u0027 % address)"},{"line_number":585,"context_line":"                    else:"},{"line_number":586,"context_line":"                        known_addresses.add(address)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_6c3ac435","line":585,"range":{"start_line":585,"start_character":20,"end_line":585,"end_character":24},"updated":"2018-07-16 19:56:16.000000000","message":"nit: redundant","commit_id":"b17ae0aa3b56e81b2a7f5ec9089e6861e67ac47f"}]}
