)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a373ba4a7a39ace5d57079090ec3fcdde5cddd32","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This change starts to extend the domain capablity parsing"},{"line_number":10,"context_line":"that was added for sev to decode the support disk buses"},{"line_number":11,"context_line":"and storage buses."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_e4b22f94","line":12,"updated":"2019-07-15 17:46:10.000000000","message":"i do other stuff in this change too like add suport for video\nmodels. so i should add that here.","commit_id":"1d61d7f77a854005bb94b6ceec1f0ff06ee952cf"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":10,"context_line":"to discover the supported storage and video models."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7faddb67_6131c6a2","line":13,"range":{"start_line":13,"start_character":48,"end_line":13,"end_character":51},"updated":"2019-08-09 11:36:40.000000000","message":"API","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":10,"context_line":"to discover the supported storage and video models."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7faddb67_a1fd7eb2","line":13,"range":{"start_line":13,"start_character":56,"end_line":13,"end_character":60},"updated":"2019-08-09 11:36:40.000000000","message":"QEMU","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7faddb67_0126d269","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":7},"updated":"2019-08-09 11:36:40.000000000","message":"KVM","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-08-20 14:35:26 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: use domain capablites to get supported device models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change extends parsing of domain capablity xml"},{"line_number":10,"context_line":"to discover the supported storage and video models."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7faddb67_9bb4d183","line":7,"range":{"start_line":7,"start_character":20,"end_line":7,"end_character":30},"updated":"2019-08-20 15:08:34.000000000","message":"capabilities","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: use domain capablites to get supported device models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change extends parsing of domain capablity xml"},{"line_number":10,"context_line":"to discover the supported storage and video models."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7faddb67_bbb74d85","line":9,"range":{"start_line":9,"start_character":38,"end_line":9,"end_character":47},"updated":"2019-08-20 15:08:34.000000000","message":"capability","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":24,"context_line":"enabled virt driver."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This change caches static driver traits in a property"},{"line_number":27,"context_line":"to avoid recaluating them every time"},{"line_number":28,"context_line":"update_provider_tree is called."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7faddb67_7bad552f","line":27,"range":{"start_line":27,"start_character":9,"end_line":27,"end_character":20},"updated":"2019-08-20 15:08:34.000000000","message":"recalculating","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_40699d22","line":14,"range":{"start_line":14,"start_character":23,"end_line":14,"end_character":27},"updated":"2019-10-30 14:54:11.000000000","message":"falls","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_1b586f56","line":14,"range":{"start_line":14,"start_character":23,"end_line":14,"end_character":27},"in_reply_to":"3fa7e38b_40699d22","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_e071a90e","line":15,"updated":"2019-10-30 14:54:11.000000000","message":".","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This change alters the behavior of _get_storage_bus_traits"},{"line_number":13,"context_line":"to prefer the data from the domain capabilities api for qemu"},{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_7b416362","line":15,"in_reply_to":"3fa7e38b_e071a90e","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"},{"line_number":19,"context_line":"models supported by this host form the libvirt domain"},{"line_number":20,"context_line":"capabilites data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_805c757d","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":11},"updated":"2019-10-30 14:54:11.000000000","message":"The repetition of \"this change\" is not necessary, especially in the commit message :)","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"and kvm virt types and fall back to generating the storage"},{"line_number":15,"context_line":"traits statically for other virt_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"},{"line_number":19,"context_line":"models supported by this host form the libvirt domain"},{"line_number":20,"context_line":"capabilites data."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_4615aee6","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":11},"in_reply_to":"3fa7e38b_805c757d","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"},{"line_number":19,"context_line":"models supported by this host form the libvirt domain"},{"line_number":20,"context_line":"capabilites data."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This change adds support for generating"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_a0c65115","line":19,"range":{"start_line":19,"start_character":30,"end_line":19,"end_character":34},"updated":"2019-10-30 14:54:11.000000000","message":"from","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This change extends the libvirt driver with a"},{"line_number":18,"context_line":"_get_video_model_traits function to generate set of video"},{"line_number":19,"context_line":"models supported by this host form the libvirt domain"},{"line_number":20,"context_line":"capabilites data."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This change adds support for generating"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fa7e38b_5b910745","line":19,"range":{"start_line":19,"start_character":30,"end_line":19,"end_character":34},"in_reply_to":"3fa7e38b_a0c65115","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"39b3b51981aeb93e20e01e9b8710036483bd094e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"and \u0027_get_vif_model_traits\u0027 functions to generate sets of video models"},{"line_number":17,"context_line":"and VIF models respectively that are supported by this host."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":24,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1fa4df85_60289de1","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":71},"updated":"2020-03-02 17:38:59.000000000","message":"I\u0027m not entirely sure this is true, Libvirt and QEMU *could* both be updated underneath Nova introducing support for new device models. We should at least document this case as requiring an n-cpu restart now.","commit_id":"492bac6048f1fb68299e39feb4f49125e7e15977"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f6698da7b0d120223cf6fab9e133a22a7a8f0049","unresolved":false,"context_lines":[{"line_number":16,"context_line":"and \u0027_get_vif_model_traits\u0027 functions to generate sets of video models"},{"line_number":17,"context_line":"and VIF models respectively that are supported by this host."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":24,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1fa4df85_cb32a9f2","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":71},"in_reply_to":"1fa4df85_60289de1","updated":"2020-03-04 17:37:53.000000000","message":"Given the other impacts this would have for us, I would think a restart of nova-compute would be sensible after any upgrade. I\u0027ve expanded this to suggest as much.","commit_id":"492bac6048f1fb68299e39feb4f49125e7e15977"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"2865027fdda15d7bba010baaf10814f734464a9d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime"},{"line_number":22,"context_line":"unless libvirt or QEMU are upgraded, in which case the user really"},{"line_number":23,"context_line":"should be restarting consumers of libvirt such as nova anyway."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":26,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1fa4df85_2201e406","line":23,"range":{"start_line":21,"start_character":0,"end_line":23,"end_character":62},"updated":"2020-03-09 15:46:40.000000000","message":"Cool thanks.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8350dc32e0de1fb92495a336ceff1ec05aa13458","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime"},{"line_number":22,"context_line":"unless libvirt or QEMU are upgraded, in which case the user really"},{"line_number":23,"context_line":"should be restarting consumers of libvirt such as nova anyway."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":26,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1fa4df85_c9d99e22","line":23,"range":{"start_line":21,"start_character":0,"end_line":23,"end_character":62},"in_reply_to":"1fa4df85_2201e406","updated":"2020-03-17 12:20:40.000000000","message":"I guess libvirt upgrade means libvirt restart which means nova-compute reconnect to libvirt. So If we want to be safe then we can re-calculate the supported models at reconnect.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed509e1d0930861aaeb2adc71b2ace6ca42a6f5c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime"},{"line_number":22,"context_line":"unless libvirt or QEMU are upgraded, in which case the user really"},{"line_number":23,"context_line":"should be restarting consumers of libvirt such as nova anyway."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":26,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1fa4df85_bceb1576","line":23,"range":{"start_line":21,"start_character":0,"end_line":23,"end_character":62},"in_reply_to":"1fa4df85_70b1508f","updated":"2020-03-19 12:49:40.000000000","message":"\u003e i think its safest to always restart the nova compute agent\n \u003e whenever libvirt is upgraded rather then try to treat this as\n \u003e mutable at runtime.\n\nAgreed.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e0d4ec167e1243800dcfcfc0545a72e582a68b7a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime"},{"line_number":22,"context_line":"unless libvirt or QEMU are upgraded, in which case the user really"},{"line_number":23,"context_line":"should be restarting consumers of libvirt such as nova anyway."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":26,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"df33271e_c9830056","line":23,"range":{"start_line":21,"start_character":0,"end_line":23,"end_character":62},"in_reply_to":"1fa4df85_bceb1576","updated":"2020-03-24 10:40:17.000000000","message":"OK. I\u0027m sold. Do we have that documented somewhere?","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d9c73bd9898ea4cbcc2741bb94fc939d59a7bc59","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Finally, we start caching the static driver traits in a property to"},{"line_number":20,"context_line":"avoid the need to recalculating them every time \u0027update_provider_tree\u0027 is"},{"line_number":21,"context_line":"called. This is okay since these things will not change during runtime"},{"line_number":22,"context_line":"unless libvirt or QEMU are upgraded, in which case the user really"},{"line_number":23,"context_line":"should be restarting consumers of libvirt such as nova anyway."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I0bdf9ccf7bf3fb1f3136c1e4267b9c99732908d5"},{"line_number":26,"context_line":"Partially-Implements: blueprint image-metadata-prefiltering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1fa4df85_70b1508f","line":23,"range":{"start_line":21,"start_character":0,"end_line":23,"end_character":62},"in_reply_to":"1fa4df85_c9d99e22","updated":"2020-03-18 18:43:13.000000000","message":"we could although that would be a sperate change as there are many places where we check the libvirt version.\n\ni think its safest to always restart the nova compute agent whenever libvirt is upgraded rather then try to treat this as mutable at runtime.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"}],"nova/tests/unit/virt/libvirt/test_config.py":[{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":3809,"context_line":"        \"\"\""},{"line_number":3810,"context_line":"        obj \u003d config.LibvirtConfigDomainCapsDevices()"},{"line_number":3811,"context_line":"        obj.parse_str(xml)"},{"line_number":3812,"context_line":"        self.assertIsNot(set(), obj.devices)"},{"line_number":3813,"context_line":"        # we only use the video and disk devices today."},{"line_number":3814,"context_line":"        device_types \u003d [config.LibvirtConfigDiskBuses,"},{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_9b37f1fe","line":3812,"updated":"2019-08-20 15:08:34.000000000","message":"Seems slightly odd to test for an implementation detail like this, but if you want to test for the object type, why not, test for what it is rather than what it isn\u0027t?  Or is there a specific reason for needing to make sure it\u0027s not a set?","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":3809,"context_line":"        \"\"\""},{"line_number":3810,"context_line":"        obj \u003d config.LibvirtConfigDomainCapsDevices()"},{"line_number":3811,"context_line":"        obj.parse_str(xml)"},{"line_number":3812,"context_line":"        self.assertIsNot(set(), obj.devices)"},{"line_number":3813,"context_line":"        # we only use the video and disk devices today."},{"line_number":3814,"context_line":"        device_types \u003d [config.LibvirtConfigDiskBuses,"},{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_1329a588","line":3812,"in_reply_to":"7faddb67_9b37f1fe","updated":"2019-08-21 01:01:10.000000000","message":"im checking it not the empty set\ni could have tested its length too.\ni might change that to make it clearer.\n\nim technically relayin on an implemation detail of python 2.7 that im not sure is required to work on other implematnions or on later version of python.\n\nill just remove this since i assert the length later.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":3813,"context_line":"        # we only use the video and disk devices today."},{"line_number":3814,"context_line":"        device_types \u003d [config.LibvirtConfigDiskBuses,"},{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"},{"line_number":3816,"context_line":"        # so we assert there are only two device typs parsed"},{"line_number":3817,"context_line":"        self.assertEqual(2, len(obj.devices))"},{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_bb6c2d07","line":3816,"range":{"start_line":3816,"start_character":49,"end_line":3816,"end_character":53},"updated":"2019-08-20 15:08:34.000000000","message":"types","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":3813,"context_line":"        # we only use the video and disk devices today."},{"line_number":3814,"context_line":"        device_types \u003d [config.LibvirtConfigDiskBuses,"},{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"},{"line_number":3816,"context_line":"        # so we assert there are only two device typs parsed"},{"line_number":3817,"context_line":"        self.assertEqual(2, len(obj.devices))"},{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_d3ef8d1a","line":3816,"range":{"start_line":3816,"start_character":49,"end_line":3816,"end_character":53},"in_reply_to":"7faddb67_bb6c2d07","updated":"2019-08-21 01:01:10.000000000","message":"Done","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"},{"line_number":3816,"context_line":"        # so we assert there are only two device typs parsed"},{"line_number":3817,"context_line":"        self.assertEqual(2, len(obj.devices))"},{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"},{"line_number":3820,"context_line":"            self.assertIn(type(dev), device_types)"},{"line_number":3821,"context_line":"        # and that the sub device are accessible directly via properties."}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_7b7235e5","line":3818,"range":{"start_line":3818,"start_character":41,"end_line":3818,"end_character":47},"updated":"2019-08-20 15:08:34.000000000","message":"devices","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":3815,"context_line":"                        config.LibvirtConfigVideoModels]"},{"line_number":3816,"context_line":"        # so we assert there are only two device typs parsed"},{"line_number":3817,"context_line":"        self.assertEqual(2, len(obj.devices))"},{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"},{"line_number":3820,"context_line":"            self.assertIn(type(dev), device_types)"},{"line_number":3821,"context_line":"        # and that the sub device are accessible directly via properties."}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_f3f2c904","line":3818,"range":{"start_line":3818,"start_character":41,"end_line":3818,"end_character":47},"in_reply_to":"7faddb67_7b7235e5","updated":"2019-08-21 01:01:10.000000000","message":"Done","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"},{"line_number":3820,"context_line":"            self.assertIn(type(dev), device_types)"},{"line_number":3821,"context_line":"        # and that the sub device are accessible directly via properties."},{"line_number":3822,"context_line":"        self.assertIsInstance(obj.disk, config.LibvirtConfigDiskBuses)"},{"line_number":3823,"context_line":"        self.assertIsInstance(obj.video, config.LibvirtConfigVideoModels)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_db1a497b","line":3821,"range":{"start_line":3821,"start_character":23,"end_line":3821,"end_character":33},"updated":"2019-08-20 15:08:34.000000000","message":"subdevices","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":3818,"context_line":"        # we then assert that the parsed device are of the correct type"},{"line_number":3819,"context_line":"        for dev in obj.devices:"},{"line_number":3820,"context_line":"            self.assertIn(type(dev), device_types)"},{"line_number":3821,"context_line":"        # and that the sub device are accessible directly via properties."},{"line_number":3822,"context_line":"        self.assertIsInstance(obj.disk, config.LibvirtConfigDiskBuses)"},{"line_number":3823,"context_line":"        self.assertIsInstance(obj.video, config.LibvirtConfigVideoModels)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_93dd9571","line":3821,"range":{"start_line":3821,"start_character":23,"end_line":3821,"end_character":33},"in_reply_to":"7faddb67_db1a497b","updated":"2019-08-21 01:01:10.000000000","message":"Done","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"}],"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":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":21769,"context_line":"                self.assertIn(trait, bus_traits)"},{"line_number":21770,"context_line":"                self.assertTrue(bus_traits[trait])"},{"line_number":21771,"context_line":"                bus_traits.pop(trait)"},{"line_number":21772,"context_line":"            self.assertTrue(all(not bus"},{"line_number":21773,"context_line":"                                for bus in bus_traits.values()))"},{"line_number":21774,"context_line":""},{"line_number":21775,"context_line":"    def test_storage_bus_traits_non_qemu_kvm(self):"},{"line_number":21776,"context_line":"        \"\"\"Test getting storage bus traits per virt type."}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_f27b1c78","line":21773,"range":{"start_line":21772,"start_character":0,"end_line":21773,"end_character":64},"updated":"2019-08-28 10:06:52.000000000","message":"nit: don\u0027t think this needs to be wrapped","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":21769,"context_line":"                self.assertIn(trait, bus_traits)"},{"line_number":21770,"context_line":"                self.assertTrue(bus_traits[trait])"},{"line_number":21771,"context_line":"                bus_traits.pop(trait)"},{"line_number":21772,"context_line":"            self.assertTrue(all(not bus"},{"line_number":21773,"context_line":"                                for bus in bus_traits.values()))"},{"line_number":21774,"context_line":""},{"line_number":21775,"context_line":"    def test_storage_bus_traits_non_qemu_kvm(self):"},{"line_number":21776,"context_line":"        \"\"\"Test getting storage bus traits per virt type."}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_3238c99d","line":21773,"range":{"start_line":21772,"start_character":0,"end_line":21773,"end_character":64},"in_reply_to":"7faddb67_3277740b","updated":"2019-08-28 20:11:02.000000000","message":"Done","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":21769,"context_line":"                self.assertIn(trait, bus_traits)"},{"line_number":21770,"context_line":"                self.assertTrue(bus_traits[trait])"},{"line_number":21771,"context_line":"                bus_traits.pop(trait)"},{"line_number":21772,"context_line":"            self.assertTrue(all(not bus"},{"line_number":21773,"context_line":"                                for bus in bus_traits.values()))"},{"line_number":21774,"context_line":""},{"line_number":21775,"context_line":"    def test_storage_bus_traits_non_qemu_kvm(self):"},{"line_number":21776,"context_line":"        \"\"\"Test getting storage bus traits per virt type."}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_3277740b","line":21773,"range":{"start_line":21772,"start_character":0,"end_line":21773,"end_character":64},"in_reply_to":"7faddb67_f27b1c78","updated":"2019-08-28 10:41:06.000000000","message":"i think it does by 1 charater or it did before i changed names but ill check","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":21800,"context_line":"                self.assertIn(trait, vif_models)"},{"line_number":21801,"context_line":"                self.assertTrue(vif_models[trait])"},{"line_number":21802,"context_line":"                vif_models.pop(trait)"},{"line_number":21803,"context_line":"            self.assertTrue(all(not model"},{"line_number":21804,"context_line":"                                for model in vif_models.values()))"},{"line_number":21805,"context_line":""},{"line_number":21806,"context_line":"    def test_cpu_traits_with_passthrough_mode(self):"},{"line_number":21807,"context_line":"        \"\"\"Test getting CPU traits when cpu_mmode is \u0027host-passthrough\u0027, traits"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_1284b8d2","line":21804,"range":{"start_line":21803,"start_character":0,"end_line":21804,"end_character":66},"updated":"2019-08-28 10:41:06.000000000","message":"this one does need to be wrapped but bus above might be short enogh not to","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":21800,"context_line":"                self.assertIn(trait, vif_models)"},{"line_number":21801,"context_line":"                self.assertTrue(vif_models[trait])"},{"line_number":21802,"context_line":"                vif_models.pop(trait)"},{"line_number":21803,"context_line":"            self.assertTrue(all(not model"},{"line_number":21804,"context_line":"                                for model in vif_models.values()))"},{"line_number":21805,"context_line":""},{"line_number":21806,"context_line":"    def test_cpu_traits_with_passthrough_mode(self):"},{"line_number":21807,"context_line":"        \"\"\"Test getting CPU traits when cpu_mmode is \u0027host-passthrough\u0027, traits"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_d23e158a","line":21804,"range":{"start_line":21803,"start_character":0,"end_line":21804,"end_character":66},"in_reply_to":"7faddb67_1284b8d2","updated":"2019-08-28 20:11:02.000000000","message":"Done","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":23231,"context_line":"    def test_video_model_traits(self):"},{"line_number":23232,"context_line":"        \"\"\"Test getting video model traits per virt type."},{"line_number":23233,"context_line":"        \"\"\""},{"line_number":23234,"context_line":"        # NOTE(sean-k-mooney): we do not have a static tables"},{"line_number":23235,"context_line":"        # of which video models are supported by each virt type"},{"line_number":23236,"context_line":"        # so just assert that traits are available for all models"},{"line_number":23237,"context_line":"        # but not if the traits are mapped to true or false."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_bb51a210","line":23234,"range":{"start_line":23234,"start_character":55,"end_line":23234,"end_character":61},"updated":"2019-10-30 14:54:11.000000000","message":"table","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":23231,"context_line":"    def test_video_model_traits(self):"},{"line_number":23232,"context_line":"        \"\"\"Test getting video model traits per virt type."},{"line_number":23233,"context_line":"        \"\"\""},{"line_number":23234,"context_line":"        # NOTE(sean-k-mooney): we do not have a static tables"},{"line_number":23235,"context_line":"        # of which video models are supported by each virt type"},{"line_number":23236,"context_line":"        # so just assert that traits are available for all models"},{"line_number":23237,"context_line":"        # but not if the traits are mapped to true or false."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_9b445f78","line":23234,"range":{"start_line":23234,"start_character":55,"end_line":23234,"end_character":61},"in_reply_to":"3fa7e38b_bb51a210","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8350dc32e0de1fb92495a336ceff1ec05aa13458","unresolved":false,"context_lines":[{"line_number":23074,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":23075,"context_line":"                          self._test_detach_mediated_devices, exc)"},{"line_number":23076,"context_line":""},{"line_number":23077,"context_line":"    def test_storage_bus_traits__qemu_kvm(self):"},{"line_number":23078,"context_line":"        \"\"\"Test getting storage bus traits per virt type."},{"line_number":23079,"context_line":"        \"\"\""},{"line_number":23080,"context_line":"        self.flags(hw_machine_type\u003d\u0027pc\u0027, group\u003d\u0027libvirt\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1fa4df85_29671254","line":23077,"range":{"start_line":23077,"start_character":31,"end_line":23077,"end_character":33},"updated":"2020-03-17 12:20:40.000000000","message":"nit: why double dash?","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ed509e1d0930861aaeb2adc71b2ace6ca42a6f5c","unresolved":false,"context_lines":[{"line_number":23074,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":23075,"context_line":"                          self._test_detach_mediated_devices, exc)"},{"line_number":23076,"context_line":""},{"line_number":23077,"context_line":"    def test_storage_bus_traits__qemu_kvm(self):"},{"line_number":23078,"context_line":"        \"\"\"Test getting storage bus traits per virt type."},{"line_number":23079,"context_line":"        \"\"\""},{"line_number":23080,"context_line":"        self.flags(hw_machine_type\u003d\u0027pc\u0027, group\u003d\u0027libvirt\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1fa4df85_3cf7255c","line":23077,"range":{"start_line":23077,"start_character":31,"end_line":23077,"end_character":33},"in_reply_to":"1fa4df85_29671254","updated":"2020-03-19 12:49:40.000000000","message":"I was using that to separate the name of the function under test from the variation, though this should have clearly been called \u0027test__get_storage_bus_traits__qemu_kvm\u0027 :)","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8350dc32e0de1fb92495a336ceff1ec05aa13458","unresolved":false,"context_lines":[{"line_number":23095,"context_line":"            self.assertEqual(len(bus_traits), len(valid_traits[0]))"},{"line_number":23096,"context_line":"            self.assertEqual(0, len(valid_traits[1]))"},{"line_number":23097,"context_line":""},{"line_number":23098,"context_line":"    def test_storage_bus_traits__non_qemu_kvm(self):"},{"line_number":23099,"context_line":"        \"\"\"Test getting storage bus traits per virt type.\"\"\""},{"line_number":23100,"context_line":"        all_traits \u003d set()"},{"line_number":23101,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1fa4df85_8961663c","line":23098,"range":{"start_line":23098,"start_character":31,"end_line":23098,"end_character":33},"updated":"2020-03-17 12:20:40.000000000","message":"at least it is consistent :)","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"5322aba365ba72f4fee9f40c28be38bef4f8af96","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if xmldoc.get(\u0027supported\u0027) \u003d\u003d \u0027yes\u0027:"},{"line_number":181,"context_line":"            self.supported \u003d True"},{"line_number":182,"context_line":"        self.models \u003d {str(node) for node in"},{"line_number":183,"context_line":"                       xmldoc.xpath(\"//enum[@name\u003d\u0027modelType\u0027]/value/text()\")}"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"class LibvirtConfigDiskBuses(LibvirtConfigObject):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_155d3746","line":183,"range":{"start_line":183,"start_character":23,"end_line":183,"end_character":78},"updated":"2019-08-01 11:39:26.000000000","message":"While I\u0027m a heavy \u0027xpath\u0027 user myself on the command-line and ad-hoc work, I see this is the first use of \u0027xpath\u0027 in config.py.\n\nI\u0027d say  we should be consistent and take the approach of parsing the child tag attributes (c.tag \u003d\u003d \"$element\" ...)","commit_id":"dcd4e47682f2187fe5a103c643c9193485def126"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if xmldoc.get(\u0027supported\u0027) \u003d\u003d \u0027yes\u0027:"},{"line_number":181,"context_line":"            self.supported \u003d True"},{"line_number":182,"context_line":"        self.models \u003d {str(node) for node in"},{"line_number":183,"context_line":"                       xmldoc.xpath(\"//enum[@name\u003d\u0027modelType\u0027]/value/text()\")}"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"class LibvirtConfigDiskBuses(LibvirtConfigObject):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_81196223","line":183,"range":{"start_line":183,"start_character":36,"end_line":183,"end_character":76},"updated":"2019-08-09 11:36:40.000000000","message":"ooh, interesting","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    def __init__(self, **kwargs):"},{"line_number":210,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).__init__("},{"line_number":211,"context_line":"            root_name\u003d\"devices\", **kwargs)"},{"line_number":212,"context_line":"        self.devices \u003d set()"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def parse_dom(self, xmldoc):"},{"line_number":215,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).parse_dom(xmldoc)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_c1a0ba94","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":28},"updated":"2019-08-09 11:36:40.000000000","message":"Why are we not just adding \u0027video\u0027 and \u0027disk\u0027 attributes? Do you need to iterate over \u0027devices\u0027 for anything outside of tests?","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8c181e80f97d47607a472ec8b804a2dc8b644218","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    def __init__(self, **kwargs):"},{"line_number":210,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).__init__("},{"line_number":211,"context_line":"            root_name\u003d\"devices\", **kwargs)"},{"line_number":212,"context_line":"        self.devices \u003d set()"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def parse_dom(self, xmldoc):"},{"line_number":215,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).parse_dom(xmldoc)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_bf03f241","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":28},"in_reply_to":"7faddb67_b5d5b5b9","updated":"2019-08-15 23:10:48.000000000","message":"I guess the question is, is there ever more than one disk or video device? If there is, your properties are wrong since they suggest there\u0027s only one device. If there is not, it seems to me like we should just get rid of the properties and add a video and disk attribute since that should be faster (you won\u0027t need to iterate through self.devices to find the device type you care about).","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    def __init__(self, **kwargs):"},{"line_number":210,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).__init__("},{"line_number":211,"context_line":"            root_name\u003d\"devices\", **kwargs)"},{"line_number":212,"context_line":"        self.devices \u003d set()"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def parse_dom(self, xmldoc):"},{"line_number":215,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).parse_dom(xmldoc)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_b5d5b5b9","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":28},"in_reply_to":"7faddb67_c1a0ba94","updated":"2019-08-09 17:17:51.000000000","message":"i could invert and have device return an interable of descrete attibutes. i did it this way since i think its slightly simpler to extent as there are other device that can be pasred but we dont used them but this just seamed simpler since its a list of device in the xml so i wanted to allow you to acess them the same way.","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class LibvirtConfigDomainCapsDevices(LibvirtConfigObject):"},{"line_number":204,"context_line":"    DEVICE_PARSERS \u003d {"},{"line_number":205,"context_line":"        \"video\": LibvirtConfigVideoModels,"},{"line_number":206,"context_line":"        \"disk\": LibvirtConfigDiskBuses,"},{"line_number":207,"context_line":"    }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_66413839","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":39},"updated":"2019-08-20 15:08:34.000000000","message":"I would prefer these classes to be called \nLibvirtConfigDomainCapsVideoModels and LibvirtConfigDomainCapsDiskBuses.  I know they are mouthfuls but they don\u0027t have to appear in many places, and this makes it crystal clear that they come from getDomainCapabilities.  The current naming makes it look like they are more generic.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"abb4e3f7245edd79189ecf1531c0f95ca553ed3a","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class LibvirtConfigDomainCapsDevices(LibvirtConfigObject):"},{"line_number":204,"context_line":"    DEVICE_PARSERS \u003d {"},{"line_number":205,"context_line":"        \"video\": LibvirtConfigVideoModels,"},{"line_number":206,"context_line":"        \"disk\": LibvirtConfigDiskBuses,"},{"line_number":207,"context_line":"    }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_ec69788b","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":39},"in_reply_to":"7faddb67_33d62151","updated":"2019-08-21 10:41:52.000000000","message":"Anyone who is using an editor without autocompletion in 2019 deserves all the pain they get ;-)","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class LibvirtConfigDomainCapsDevices(LibvirtConfigObject):"},{"line_number":204,"context_line":"    DEVICE_PARSERS \u003d {"},{"line_number":205,"context_line":"        \"video\": LibvirtConfigVideoModels,"},{"line_number":206,"context_line":"        \"disk\": LibvirtConfigDiskBuses,"},{"line_number":207,"context_line":"    }"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_33d62151","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":39},"in_reply_to":"7faddb67_66413839","updated":"2019-08-21 01:01:10.000000000","message":"im currently using an ide where refactor rename is shift+f6 so i guess i can do this. i pitty anyone without tab complete typing that however.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def __init__(self, **kwargs):"},{"line_number":212,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).__init__("},{"line_number":213,"context_line":"            root_name\u003d\"devices\", **kwargs)"},{"line_number":214,"context_line":"        self.devices \u003d set()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def parse_dom(self, xmldoc):"},{"line_number":217,"context_line":"        super(LibvirtConfigDomainCapsDevices, self).parse_dom(xmldoc)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_92b8a811","line":214,"range":{"start_line":214,"start_character":0,"end_line":214,"end_character":28},"updated":"2019-08-28 10:06:52.000000000","message":"I\u0027m still unsure why we\u0027re doing this. Couldn\u0027t you simply add \u0027video\u0027 and \u0027disk\u0027 attributes?\n\nLater: Oh, I\u0027ve asked this before and don\u0027t think I\u0027ve an answer yet?\n\n[1] https://review.opendev.org/#/c/666915/7/nova/virt/libvirt/config.py@212","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_device(self, device_type):"},{"line_number":227,"context_line":"        for device in self.devices:"},{"line_number":228,"context_line":"            if type(device) \u003d\u003d self.DEVICE_PARSERS.get(device_type):"},{"line_number":229,"context_line":"                return device"},{"line_number":230,"context_line":"        return None"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_12f4b8f0","line":228,"range":{"start_line":228,"start_character":15,"end_line":228,"end_character":68},"updated":"2019-08-28 10:06:52.000000000","message":"You shouldn\u0027t use this (I\u0027m surprised flake8 is throwing a fit). Use:\n\n  if isinstance(device, self.DEVICE_PARSERS.get(device_type)):","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_device(self, device_type):"},{"line_number":227,"context_line":"        for device in self.devices:"},{"line_number":228,"context_line":"            if type(device) \u003d\u003d self.DEVICE_PARSERS.get(device_type):"},{"line_number":229,"context_line":"                return device"},{"line_number":230,"context_line":"        return None"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_f2cebc2b","line":228,"range":{"start_line":228,"start_character":15,"end_line":228,"end_character":68},"in_reply_to":"7faddb67_12f4b8f0","updated":"2019-08-28 10:41:06.000000000","message":"flake8 does style checks. it does not check for correct use of builtins its not a static-analyser but yes i can do that too. its the same thing more or less but that is the idiomatic way","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e7a356ce91646c893ea097cdd1d20f59c77947a","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _get_device(self, device_type):"},{"line_number":227,"context_line":"        for device in self.devices:"},{"line_number":228,"context_line":"            if type(device) \u003d\u003d self.DEVICE_PARSERS.get(device_type):"},{"line_number":229,"context_line":"                return device"},{"line_number":230,"context_line":"        return None"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_d86c019f","line":228,"range":{"start_line":228,"start_character":15,"end_line":228,"end_character":68},"in_reply_to":"7faddb67_f2cebc2b","updated":"2019-08-28 12:08:40.000000000","message":"I was referring to [1].\n\n[1] https://lintlyci.github.io/Flake8Rules/rules/E721.html","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e0c2fd0a3f25bfab904c0b3857ee6ae8c5f93861","unresolved":false,"context_lines":[{"line_number":9668,"context_line":"            for arch in dom_caps:"},{"line_number":9669,"context_line":"                for machine_type in dom_caps[arch]:"},{"line_number":9670,"context_line":"                    devices \u003d dom_caps[arch][machine_type].devices"},{"line_number":9671,"context_line":"                    traits \u003d {"},{"line_number":9672,"context_line":"                        \"COMPUTE_STORAGE_BUS_{}\".format(bus).upper(): True"},{"line_number":9673,"context_line":"                        for bus in devices.disk.buses"},{"line_number":9674,"context_line":"                    }"},{"line_number":9675,"context_line":"                    all_traits.update(traits)"},{"line_number":9676,"context_line":"            unsupported_buses \u003d set("},{"line_number":9677,"context_line":"                functools.reduce(operator.iconcat,"},{"line_number":9678,"context_line":"                                 blockinfo.VALID_STORAGE_BUS.values(), []))"},{"line_number":9679,"context_line":"            for bus in unsupported_buses:"},{"line_number":9680,"context_line":"                all_traits.setdefault("},{"line_number":9681,"context_line":"                    \"COMPUTE_STORAGE_BUS_{}\".format(bus).upper(),"},{"line_number":9682,"context_line":"                    False)"},{"line_number":9683,"context_line":""},{"line_number":9684,"context_line":"            return all_traits"},{"line_number":9685,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_9ce4cc3d","line":9682,"range":{"start_line":9671,"start_character":19,"end_line":9682,"end_character":26},"updated":"2019-06-28 03:49:51.000000000","message":"i should just be concatonatin the list of valid buses here and  passing them to \n_generated_storage_bus_traits","commit_id":"3836101b48aa999613cee6d343dbfb9444e25236"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":9646,"context_line":"            \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper().replace(\u0027-\u0027, \u0027_\u0027):"},{"line_number":9647,"context_line":"                True for model in libvirt_vif.VALID_VIF_MODELS[virt_type]"},{"line_number":9648,"context_line":"        }"},{"line_number":9649,"context_line":"        all_models \u003d set("},{"line_number":9650,"context_line":"            functools.reduce("},{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_61bf86d0","line":9651,"range":{"start_line":9649,"start_character":0,"end_line":9651,"end_character":77},"updated":"2019-08-09 11:36:40.000000000","message":"Still being too clever here. List comprehension all the way","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8c181e80f97d47607a472ec8b804a2dc8b644218","unresolved":false,"context_lines":[{"line_number":9646,"context_line":"            \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper().replace(\u0027-\u0027, \u0027_\u0027):"},{"line_number":9647,"context_line":"                True for model in libvirt_vif.VALID_VIF_MODELS[virt_type]"},{"line_number":9648,"context_line":"        }"},{"line_number":9649,"context_line":"        all_models \u003d set("},{"line_number":9650,"context_line":"            functools.reduce("},{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_9ff6365d","line":9651,"range":{"start_line":9649,"start_character":0,"end_line":9651,"end_character":77},"in_reply_to":"7faddb67_35f30576","updated":"2019-08-15 23:10:48.000000000","message":"Let\u0027s agree to disagree :) I\u0027ll note that there\u0027s probably far more Python devs that can read list comprehensions than know what iconcat is doing (I\u0027d to Google it)","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":9646,"context_line":"            \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper().replace(\u0027-\u0027, \u0027_\u0027):"},{"line_number":9647,"context_line":"                True for model in libvirt_vif.VALID_VIF_MODELS[virt_type]"},{"line_number":9648,"context_line":"        }"},{"line_number":9649,"context_line":"        all_models \u003d set("},{"line_number":9650,"context_line":"            functools.reduce("},{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_35f30576","line":9651,"range":{"start_line":9649,"start_character":0,"end_line":9651,"end_character":77},"in_reply_to":"7faddb67_61bf86d0","updated":"2019-08-09 17:17:51.000000000","message":"i disagree\nthe list comprehent you wote is less readable and slower","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9646,"context_line":"            \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper().replace(\u0027-\u0027, \u0027_\u0027):"},{"line_number":9647,"context_line":"                True for model in libvirt_vif.VALID_VIF_MODELS[virt_type]"},{"line_number":9648,"context_line":"        }"},{"line_number":9649,"context_line":"        all_models \u003d set("},{"line_number":9650,"context_line":"            functools.reduce("},{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_061884d0","line":9651,"range":{"start_line":9649,"start_character":0,"end_line":9651,"end_character":77},"in_reply_to":"7faddb67_9ff6365d","updated":"2019-08-20 15:08:34.000000000","message":"I would have to google iconcat too, and probably also reduce, although I am guessing reduce is basically the same as inject in Ruby, or fold in functional programming, which makes iconcat guessable too.\n\n... *googles* ...\n\nOK I don\u0027t get why this isn\u0027t just\n\n    all_models \u003d set(libvirt_vif.VALID_VIF_MODELS.values())\n\n?","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"},{"line_number":9655,"context_line":""},{"line_number":9656,"context_line":"        return traits"},{"line_number":9657,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_c1cd1a87","line":9654,"updated":"2019-08-09 11:36:40.000000000","message":"I think we need a check to make sure these things exist in os_traits. Ditto for the rest of these","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8c181e80f97d47607a472ec8b804a2dc8b644218","unresolved":false,"context_lines":[{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"},{"line_number":9655,"context_line":""},{"line_number":9656,"context_line":"        return traits"},{"line_number":9657,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_5f9afe13","line":9654,"in_reply_to":"7faddb67_55fb2146","updated":"2019-08-15 23:10:48.000000000","message":"As with the previous patch, can we just get a UT to validate the return value of this? It\u0027s just a safety net against future silliness.","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":9651,"context_line":"                operator.iconcat, libvirt_vif.VALID_VIF_MODELS.values(), []))"},{"line_number":9652,"context_line":"        for model in all_models:"},{"line_number":9653,"context_line":"            trait \u003d \"COMPUTE_NET_VIF_MODEL_{}\".format(model).upper()"},{"line_number":9654,"context_line":"            traits.setdefault(trait.replace(\u0027-\u0027, \u0027_\u0027), False)"},{"line_number":9655,"context_line":""},{"line_number":9656,"context_line":"        return traits"},{"line_number":9657,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_55fb2146","line":9654,"in_reply_to":"7faddb67_c1cd1a87","updated":"2019-08-09 17:17:51.000000000","message":"it is very expensive to do that and i create all the traits in os-traits in a different patch and they have already been released.","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":9681,"context_line":"            valid_buses \u003d blockinfo.VALID_STORAGE_BUS.get("},{"line_number":9682,"context_line":"                CONF.libvirt.virt_type, [])"},{"line_number":9683,"context_line":"            return self._generated_storage_bus_traits(valid_buses)"},{"line_number":9684,"context_line":"        else:"},{"line_number":9685,"context_line":"            dom_caps \u003d self._host.get_domain_capabilities()"},{"line_number":9686,"context_line":"            all_traits \u003d {}"},{"line_number":9687,"context_line":"            for arch in dom_caps:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_01a9f28e","line":9684,"range":{"start_line":9684,"start_character":0,"end_line":9684,"end_character":13},"updated":"2019-08-09 11:36:40.000000000","message":"nit: You don\u0027t need this due to the early return and can therefore dedent everything below","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":9682,"context_line":"                CONF.libvirt.virt_type, [])"},{"line_number":9683,"context_line":"            return self._generated_storage_bus_traits(valid_buses)"},{"line_number":9684,"context_line":"        else:"},{"line_number":9685,"context_line":"            dom_caps \u003d self._host.get_domain_capabilities()"},{"line_number":9686,"context_line":"            all_traits \u003d {}"},{"line_number":9687,"context_line":"            for arch in dom_caps:"},{"line_number":9688,"context_line":"                for machine_type in dom_caps[arch]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_e18ff62b","line":9685,"range":{"start_line":9685,"start_character":0,"end_line":9685,"end_character":59},"updated":"2019-08-09 11:36:40.000000000","message":"I hope this is being cached","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9682,"context_line":"                CONF.libvirt.virt_type, [])"},{"line_number":9683,"context_line":"            return self._generated_storage_bus_traits(valid_buses)"},{"line_number":9684,"context_line":"        else:"},{"line_number":9685,"context_line":"            dom_caps \u003d self._host.get_domain_capabilities()"},{"line_number":9686,"context_line":"            all_traits \u003d {}"},{"line_number":9687,"context_line":"            for arch in dom_caps:"},{"line_number":9688,"context_line":"                for machine_type in dom_caps[arch]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_8668f420","line":9685,"range":{"start_line":9685,"start_character":0,"end_line":9685,"end_character":59},"in_reply_to":"7faddb67_95af592a","updated":"2019-08-20 15:08:34.000000000","message":"Sounds entirely reasonable to extend the interface in future.","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":9682,"context_line":"                CONF.libvirt.virt_type, [])"},{"line_number":9683,"context_line":"            return self._generated_storage_bus_traits(valid_buses)"},{"line_number":9684,"context_line":"        else:"},{"line_number":9685,"context_line":"            dom_caps \u003d self._host.get_domain_capabilities()"},{"line_number":9686,"context_line":"            all_traits \u003d {}"},{"line_number":9687,"context_line":"            for arch in dom_caps:"},{"line_number":9688,"context_line":"                for machine_type in dom_caps[arch]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_95af592a","line":9685,"range":{"start_line":9685,"start_character":0,"end_line":9685,"end_character":59},"in_reply_to":"7faddb67_e18ff62b","updated":"2019-08-09 17:17:51.000000000","message":"yes it is which might actully cause us problems in the long run. i am trying not to break the sev code by changing the interface but this function should really take parmaters to allow you to lookup none cached combinations.\n\nfor my use it is susficent but i think the current interface will have to be change in the long run if we ever want to use this funciton for validation in the driver.\n\nfor now however it is fine since we dont need to consider that usecase","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        # intended to be updatable directly"},{"line_number":420,"context_line":"        self.provider_tree \u003d None"},{"line_number":421,"context_line":"        # driver traits will not change during the runtime of the agent"},{"line_number":422,"context_line":"        # so caluate them once and save them."},{"line_number":423,"context_line":"        self._static_traits \u003d {}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _get_volume_drivers(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_069f24b4","line":422,"range":{"start_line":422,"start_character":13,"end_line":422,"end_character":20},"updated":"2019-08-20 15:08:34.000000000","message":"I know this is not part of this patch, but it\u0027s a good opportunity to fix a typo.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9654,"context_line":"        supported traits mapping each trait to a bool."},{"line_number":9655,"context_line":""},{"line_number":9656,"context_line":"        :param model: a dict of iterables of supported traits."},{"line_number":9657,"context_line":"        :param key: a key to project the supported values form the model."},{"line_number":9658,"context_line":"        :param prefix: the prefix to generate a valid traits."},{"line_number":9659,"context_line":"        :return: dict of string \u003d\u003e bool mapping trait \u003d\u003e supported."},{"line_number":9660,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_46de7c6a","line":9657,"range":{"start_line":9657,"start_character":58,"end_line":9657,"end_character":62},"updated":"2019-08-20 15:08:34.000000000","message":"\"from\"","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9668,"context_line":"    def _generate_traits_from_values(all_values, supported_values, prefix):"},{"line_number":9669,"context_line":"        traits \u003d {}"},{"line_number":9670,"context_line":"        for val in supported_values:"},{"line_number":9671,"context_line":"            trait \u003d \"{}_{}\".format(prefix, val).upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":9672,"context_line":"            if utils.valid_trait(trait):"},{"line_number":9673,"context_line":"                traits.setdefault(trait, True)"},{"line_number":9674,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_866f9490","line":9671,"range":{"start_line":9671,"start_character":55,"end_line":9671,"end_character":73},"updated":"2019-08-20 15:08:34.000000000","message":"Can you add a comment explaining why this replace() is necessary?  Is there any danger of it breaking backwards compatibility?","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":9668,"context_line":"    def _generate_traits_from_values(all_values, supported_values, prefix):"},{"line_number":9669,"context_line":"        traits \u003d {}"},{"line_number":9670,"context_line":"        for val in supported_values:"},{"line_number":9671,"context_line":"            trait \u003d \"{}_{}\".format(prefix, val).upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":9672,"context_line":"            if utils.valid_trait(trait):"},{"line_number":9673,"context_line":"                traits.setdefault(trait, True)"},{"line_number":9674,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_330941dc","line":9671,"range":{"start_line":9671,"start_character":55,"end_line":9671,"end_character":73},"in_reply_to":"7faddb67_866f9490","updated":"2019-08-21 01:01:10.000000000","message":"no it will not. - is not allowed in tratis only _ and\n\nthis is needed because of \n\nhttps://github.com/openstack/nova/blob/master/nova/network/model.py#L129\n\nVIF_MODEL_SPAPR_VLAN \u003d \u0027spapr-vlan\u0027\n\nthe trait for that uses the underscore so we need to normalise it.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9688,"context_line":""},{"line_number":9689,"context_line":"        :return: A dict of trait names mapped to boolean values."},{"line_number":9690,"context_line":"        \"\"\""},{"line_number":9691,"context_line":"        traits \u003d LibvirtDriver._project_traits("},{"line_number":9692,"context_line":"            libvirt_vif.SUPPORTED_VIF_MODELS, CONF.libvirt.virt_type,"},{"line_number":9693,"context_line":"            \"COMPUTE_NET_VIF_MODEL\")"},{"line_number":9694,"context_line":"        return traits"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_26ffc0ab","line":9691,"range":{"start_line":9691,"start_character":8,"end_line":9691,"end_character":14},"updated":"2019-08-20 15:08:34.000000000","message":"You can ditch the temporary variable here.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":9688,"context_line":""},{"line_number":9689,"context_line":"        :return: A dict of trait names mapped to boolean values."},{"line_number":9690,"context_line":"        \"\"\""},{"line_number":9691,"context_line":"        traits \u003d LibvirtDriver._project_traits("},{"line_number":9692,"context_line":"            libvirt_vif.SUPPORTED_VIF_MODELS, CONF.libvirt.virt_type,"},{"line_number":9693,"context_line":"            \"COMPUTE_NET_VIF_MODEL\")"},{"line_number":9694,"context_line":"        return traits"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_d3a78dbb","line":9691,"range":{"start_line":9691,"start_character":8,"end_line":9691,"end_character":14},"in_reply_to":"7faddb67_26ffc0ab","updated":"2019-08-21 01:01:10.000000000","message":"i was using it for debuggin but yes i can remove it","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9700,"context_line":""},{"line_number":9701,"context_line":"        :return: A dict of trait names mapped to boolean values."},{"line_number":9702,"context_line":"        \"\"\""},{"line_number":9703,"context_line":"        traits \u003d LibvirtDriver._project_traits("},{"line_number":9704,"context_line":"            blockinfo.SUPPORTED_STORAGE_BUSES, CONF.libvirt.virt_type,"},{"line_number":9705,"context_line":"            \"COMPUTE_STORAGE_BUS\")"},{"line_number":9706,"context_line":"        return traits"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_861d5410","line":9703,"range":{"start_line":9703,"start_character":8,"end_line":9703,"end_character":14},"updated":"2019-08-20 15:08:34.000000000","message":"You can ditch the temporary variable here too.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":9700,"context_line":""},{"line_number":9701,"context_line":"        :return: A dict of trait names mapped to boolean values."},{"line_number":9702,"context_line":"        \"\"\""},{"line_number":9703,"context_line":"        traits \u003d LibvirtDriver._project_traits("},{"line_number":9704,"context_line":"            blockinfo.SUPPORTED_STORAGE_BUSES, CONF.libvirt.virt_type,"},{"line_number":9705,"context_line":"            \"COMPUTE_STORAGE_BUS\")"},{"line_number":9706,"context_line":"        return traits"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_b379b12f","line":9703,"range":{"start_line":9703,"start_character":8,"end_line":9703,"end_character":14},"in_reply_to":"7faddb67_861d5410","updated":"2019-08-21 01:01:10.000000000","message":"in python this is free by the way its just a point to the data on the heap and we return the pointer below.\n\nfor c/c++ we would be hoping for NRVO to fire to elide the\ncopy but we dont have to care about that in python.\nill remove it anyway.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"54eee4d824b4d116444a86ba55cd30d914995768","unresolved":false,"context_lines":[{"line_number":9714,"context_line":"        supported_buses \u003d {"},{"line_number":9715,"context_line":"            bus for arch in dom_caps for machine_type in dom_caps[arch]"},{"line_number":9716,"context_line":"            for bus in dom_caps[arch][machine_type].devices.disk.buses}"},{"line_number":9717,"context_line":"        traits \u003d self._generate_traits_from_values("},{"line_number":9718,"context_line":"            all_buses, supported_buses, \"COMPUTE_STORAGE_BUS\")"},{"line_number":9719,"context_line":"        return traits"},{"line_number":9720,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_06d72425","line":9717,"range":{"start_line":9717,"start_character":8,"end_line":9717,"end_character":14},"updated":"2019-08-20 15:08:34.000000000","message":"And here.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3ee72493be6f2ae7c11ba5b8a44aa638f208e735","unresolved":false,"context_lines":[{"line_number":9714,"context_line":"        supported_buses \u003d {"},{"line_number":9715,"context_line":"            bus for arch in dom_caps for machine_type in dom_caps[arch]"},{"line_number":9716,"context_line":"            for bus in dom_caps[arch][machine_type].devices.disk.buses}"},{"line_number":9717,"context_line":"        traits \u003d self._generate_traits_from_values("},{"line_number":9718,"context_line":"            all_buses, supported_buses, \"COMPUTE_STORAGE_BUS\")"},{"line_number":9719,"context_line":"        return traits"},{"line_number":9720,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_93a3559e","line":9717,"range":{"start_line":9717,"start_character":8,"end_line":9717,"end_character":14},"in_reply_to":"7faddb67_06d72425","updated":"2019-08-21 01:01:10.000000000","message":"ya if you look at the code below you can see why i had a temp variable as i was building up the result set but now that i have factored out the common code this is not needed.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"430eba36784d36c80f2b8b08a553d361f4cf14a7","unresolved":false,"context_lines":[{"line_number":9719,"context_line":"        return traits"},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"    def _get_video_model_traits(self):"},{"line_number":9722,"context_line":"        \"\"\"Get video model traits from libvirt."},{"line_number":9723,"context_line":""},{"line_number":9724,"context_line":"        :return: A dict of trait names mapped to boolean values."},{"line_number":9725,"context_line":"        \"\"\""},{"line_number":9726,"context_line":"        dom_caps \u003d self._host.get_domain_capabilities()"},{"line_number":9727,"context_line":"        all_traits \u003d {}"},{"line_number":9728,"context_line":"        for arch in dom_caps:"},{"line_number":9729,"context_line":"            for machine_type in dom_caps[arch]:"},{"line_number":9730,"context_line":"                devices \u003d dom_caps[arch][machine_type].devices"},{"line_number":9731,"context_line":"                traits \u003d {"},{"line_number":9732,"context_line":"                    \"COMPUTE_GRAPHICS_MODEL_{}\".format(model).upper(): True"},{"line_number":9733,"context_line":"                    for model in devices.video.models"},{"line_number":9734,"context_line":"                }"},{"line_number":9735,"context_line":"                all_traits.update(traits)"},{"line_number":9736,"context_line":"                for bus in fields.VideoModel.ALL:"},{"line_number":9737,"context_line":"                    all_traits.setdefault("},{"line_number":9738,"context_line":"                        \"COMPUTE_GRAPHICS_MODEL_{}\".format(bus).upper(),"},{"line_number":9739,"context_line":"                        False)"},{"line_number":9740,"context_line":""},{"line_number":9741,"context_line":"        return all_traits"},{"line_number":9742,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_46fafcb9","line":9739,"range":{"start_line":9722,"start_character":1,"end_line":9739,"end_character":30},"updated":"2019-08-20 14:55:07.000000000","message":"i missed this. it should use teh new helper functions.","commit_id":"917ca1a3dfead2a371e0ec66378db2ccc410e4a6"},{"author":{"_account_id":2394,"name":"Adam Spiers","email":"aspiers@suse.com","username":"adam.spiers"},"change_message_id":"a1b419de27b943afc06e2574f6d43b3a6c886343","unresolved":false,"context_lines":[{"line_number":9695,"context_line":"        for val in supported_values:"},{"line_number":9696,"context_line":"            # traits are not allowed to contain hyphens so we normalise"},{"line_number":9697,"context_line":"            # them to underscore. this is need for VIF_MODEL_SPAPR_VLAN"},{"line_number":9698,"context_line":"            # but may be required for other traits in the future."},{"line_number":9699,"context_line":"            trait \u003d \"{}_{}\".format(prefix, val).upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":9700,"context_line":"            if utils.valid_trait(trait):"},{"line_number":9701,"context_line":"                traits.setdefault(trait, True)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_69a4a8a3","line":9698,"updated":"2019-08-20 17:39:55.000000000","message":"++ thanks","commit_id":"dd13533a2626acc42dee9cc09bdbc04cd147d984"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        self.provider_tree \u003d None"},{"line_number":424,"context_line":"        # driver traits will not change during the runtime of the agent"},{"line_number":425,"context_line":"        # so caluate them once and save them."},{"line_number":426,"context_line":"        self._static_traits \u003d {}"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def _get_volume_drivers(self):"},{"line_number":429,"context_line":"        driver_registry \u003d dict()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_f2fd5c6e","line":426,"range":{"start_line":426,"start_character":14,"end_line":426,"end_character":21},"updated":"2019-08-28 10:06:52.000000000","message":"femtonit: Do we need the \u0027_static\u0027 prefix? I get that there are traits coming from operator but a \u0027_traits\u0027 attribute on a virt driver seem self-explanatory","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        self.provider_tree \u003d None"},{"line_number":424,"context_line":"        # driver traits will not change during the runtime of the agent"},{"line_number":425,"context_line":"        # so caluate them once and save them."},{"line_number":426,"context_line":"        self._static_traits \u003d {}"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def _get_volume_drivers(self):"},{"line_number":429,"context_line":"        driver_registry \u003d dict()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_152342a9","line":426,"range":{"start_line":426,"start_character":14,"end_line":426,"end_character":21},"in_reply_to":"7faddb67_f2fd5c6e","updated":"2019-08-28 10:41:06.000000000","message":"am i wanted to distiguse them form traits the operator could have set on the RP but","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":6827,"context_line":""},{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_926668bb","line":6830,"range":{"start_line":6830,"start_character":0,"end_line":6830,"end_character":35},"updated":"2019-08-28 10:06:52.000000000","message":"nit:\n\n  if self._static_traits:\n      return self._static_traits\n\n  traits \u003d ...","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":6827,"context_line":""},{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_d2aaa018","line":6830,"range":{"start_line":6830,"start_character":0,"end_line":6830,"end_character":35},"in_reply_to":"7faddb67_926668bb","updated":"2019-08-28 10:41:06.000000000","message":"sure that will be the most common case too.","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":6827,"context_line":""},{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_92109d51","line":6830,"range":{"start_line":6830,"start_character":0,"end_line":6830,"end_character":35},"in_reply_to":"7faddb67_d2aaa018","updated":"2019-08-28 20:11:02.000000000","message":"Done","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"},{"line_number":6834,"context_line":"            traits.update(self._get_vif_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_7252cce0","line":6831,"range":{"start_line":6831,"start_character":21,"end_line":6831,"end_character":43},"updated":"2019-08-28 10:06:52.000000000","message":"You should probably update this to return {} altogether","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"},{"line_number":6834,"context_line":"            traits.update(self._get_vif_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_b274c4d1","line":6831,"range":{"start_line":6831,"start_character":21,"end_line":6831,"end_character":43},"in_reply_to":"7faddb67_7252cce0","updated":"2019-08-28 10:41:06.000000000","message":"ya that could be a nice change","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":6828,"context_line":"    @property"},{"line_number":6829,"context_line":"    def static_traits(self):"},{"line_number":6830,"context_line":"        if not self._static_traits:"},{"line_number":6831,"context_line":"            traits \u003d self._get_cpu_traits() or {}"},{"line_number":6832,"context_line":"            traits.update(self._get_storage_bus_traits())"},{"line_number":6833,"context_line":"            traits.update(self._get_video_model_traits())"},{"line_number":6834,"context_line":"            traits.update(self._get_vif_model_traits())"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_f209d12a","line":6831,"range":{"start_line":6831,"start_character":21,"end_line":6831,"end_character":43},"in_reply_to":"7faddb67_b274c4d1","updated":"2019-08-28 20:11:02.000000000","message":"actully i dont know if that will have any sideeffect so ill leave this for now.","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":9668,"context_line":"                           nova.privsep.fs.FS_FORMAT_EXT4,"},{"line_number":9669,"context_line":"                           nova.privsep.fs.FS_FORMAT_XFS]"},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"    @staticmethod"},{"line_number":9672,"context_line":"    def _get_vif_model_traits():"},{"line_number":9673,"context_line":"        \"\"\"Get vif model traits  based in the currently enabled"},{"line_number":9674,"context_line":"        virt_type."}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_72d88c1d","line":9671,"range":{"start_line":9671,"start_character":0,"end_line":9671,"end_character":17},"updated":"2019-08-28 10:06:52.000000000","message":"nit: Given that all the other instances of this are non-static, do you want to just drop this and reference self.virt_type (is that a thing) below? Should help people visually group things easier","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":9668,"context_line":"                           nova.privsep.fs.FS_FORMAT_EXT4,"},{"line_number":9669,"context_line":"                           nova.privsep.fs.FS_FORMAT_XFS]"},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"    @staticmethod"},{"line_number":9672,"context_line":"    def _get_vif_model_traits():"},{"line_number":9673,"context_line":"        \"\"\"Get vif model traits  based in the currently enabled"},{"line_number":9674,"context_line":"        virt_type."}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_b234b9e0","line":9671,"range":{"start_line":9671,"start_character":0,"end_line":9671,"end_character":17},"in_reply_to":"7faddb67_72d88c1d","updated":"2019-08-28 20:11:02.000000000","message":"self.virt_type is not a thing currently.\n\nwe could make it a thing but if we did i would prefer that to be a separate change that updated all usages to use the instance var instead of the config value.\n\nfor now ill leave this as a staticmethod.","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":9690,"context_line":"            blockinfo.SUPPORTED_STORAGE_BUSES, CONF.libvirt.virt_type,"},{"line_number":9691,"context_line":"            \"COMPUTE_STORAGE_BUS\")"},{"line_number":9692,"context_line":""},{"line_number":9693,"context_line":"    def _get_storage_bus_traits(self):"},{"line_number":9694,"context_line":"        if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":9695,"context_line":"            return self._generated_storage_bus_traits()"},{"line_number":9696,"context_line":"        dom_caps \u003d self._host.get_domain_capabilities()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_92be68ac","line":9693,"range":{"start_line":9693,"start_character":0,"end_line":9693,"end_character":38},"updated":"2019-08-28 10:06:52.000000000","message":"Can you add a docstring here? I\u0027m having a hard time figuring out what it\u0027s supposed to be doing. Folding \u0027_generated_storage_bus_traits\u0027 in here might make things a little easier to grok too?","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":9690,"context_line":"            blockinfo.SUPPORTED_STORAGE_BUSES, CONF.libvirt.virt_type,"},{"line_number":9691,"context_line":"            \"COMPUTE_STORAGE_BUS\")"},{"line_number":9692,"context_line":""},{"line_number":9693,"context_line":"    def _get_storage_bus_traits(self):"},{"line_number":9694,"context_line":"        if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":9695,"context_line":"            return self._generated_storage_bus_traits()"},{"line_number":9696,"context_line":"        dom_caps \u003d self._host.get_domain_capabilities()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_d21dc077","line":9693,"range":{"start_line":9693,"start_character":0,"end_line":9693,"end_character":38},"in_reply_to":"7faddb67_92be68ac","updated":"2019-08-28 10:41:06.000000000","message":"when it was longer it was nice not too do that but now that its a one liner i think i will.\n\nand yes ill add a doc string.\n\nbasically for virt types where were dont use qemu we generate the tratis statically form the dict we used to validate them later for qemu/kvm we use the data form qemu/libvirt.\n\n\noriginally i was only going to use the static data but since  the domain caps are now a thing im using there data where it makes sense too.","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":9821,"context_line":"    traits \u003d {}"},{"line_number":9822,"context_line":"    for val in supported_values:"},{"line_number":9823,"context_line":"        # traits are not allowed to contain hyphens so we normalise"},{"line_number":9824,"context_line":"        # them to underscore. this is need for VIF_MODEL_SPAPR_VLAN"},{"line_number":9825,"context_line":"        # but may be required for other traits in the future."},{"line_number":9826,"context_line":"        trait \u003d \"{}_{}\".format(prefix, val).upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":9827,"context_line":"        if utils.valid_trait(trait):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_f2579cc9","line":9824,"range":{"start_line":9824,"start_character":57,"end_line":9824,"end_character":62},"updated":"2019-08-28 10:06:52.000000000","message":"um, is this a thing or a typo?","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":9821,"context_line":"    traits \u003d {}"},{"line_number":9822,"context_line":"    for val in supported_values:"},{"line_number":9823,"context_line":"        # traits are not allowed to contain hyphens so we normalise"},{"line_number":9824,"context_line":"        # them to underscore. this is need for VIF_MODEL_SPAPR_VLAN"},{"line_number":9825,"context_line":"        # but may be required for other traits in the future."},{"line_number":9826,"context_line":"        trait \u003d \"{}_{}\".format(prefix, val).upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":9827,"context_line":"        if utils.valid_trait(trait):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_9515f23f","line":9824,"range":{"start_line":9824,"start_character":57,"end_line":9824,"end_character":62},"in_reply_to":"7faddb67_f2579cc9","updated":"2019-08-28 10:41:06.000000000","message":"its a thing.\nbut this is what i mentionion i was going to pull out into a util funciton e.g.\ndef normalise_trait(prefix,suffix):\n # traits are not allowed to contain hyphens so we normalise\n        # them to underscore. this is need for VIF_MODEL_SPAPR_VLAN\n        # but may be required for other traits in the future.\n  retrun \"{}_{}\".format(prefix, suffix).upper().replace(\u0027-\u0027, \u0027_\u0027)\n\ni forgot to do replace in the prefilter .replace(\u0027-\u0027, \u0027_\u0027)\n\ni agree it does look like a typo i woudl make :)","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":10427,"context_line":""},{"line_number":10428,"context_line":"    @staticmethod"},{"line_number":10429,"context_line":"    def _get_vif_model_traits():"},{"line_number":10430,"context_line":"        \"\"\"Get vif model traits  based in the currently enabled"},{"line_number":10431,"context_line":"        virt_type."},{"line_number":10432,"context_line":""},{"line_number":10433,"context_line":"        :return: A dict of trait names mapped to boolean values."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_007965c3","line":10430,"range":{"start_line":10430,"start_character":32,"end_line":10430,"end_character":41},"updated":"2019-10-30 14:54:11.000000000","message":"You\u0027re copying this and it\u0027s already wrong, but let\u0027s take the opportunity to fix it before you propagate. There\u0027s an extra space between traits and based, and it should be s/in/on/.","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":10427,"context_line":""},{"line_number":10428,"context_line":"    @staticmethod"},{"line_number":10429,"context_line":"    def _get_vif_model_traits():"},{"line_number":10430,"context_line":"        \"\"\"Get vif model traits  based in the currently enabled"},{"line_number":10431,"context_line":"        virt_type."},{"line_number":10432,"context_line":""},{"line_number":10433,"context_line":"        :return: A dict of trait names mapped to boolean values."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_c6299e39","line":10430,"range":{"start_line":10430,"start_character":32,"end_line":10430,"end_character":41},"in_reply_to":"3fa7e38b_007965c3","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c142d9e6b222c4f2fc6bb01a1fe12680ad0e9198","unresolved":false,"context_lines":[{"line_number":10438,"context_line":""},{"line_number":10439,"context_line":"    def _get_storage_bus_traits(self):"},{"line_number":10440,"context_line":"        \"\"\"Gets the supported storage bus traits based on the enabled"},{"line_number":10441,"context_line":"        virt_type.  For qemu and kvm this function use the information"},{"line_number":10442,"context_line":"        returned by the libvirt domain capabilities api. For other virt"},{"line_number":10443,"context_line":"        types we generate the traits based on the static information"},{"line_number":10444,"context_line":"        in the blockinfo module."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_8046b57a","line":10441,"range":{"start_line":10441,"start_character":51,"end_line":10441,"end_character":54},"updated":"2019-10-30 14:54:11.000000000","message":"uses","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"74699c955ea765dcebb0195a43b3d41f10c91cb4","unresolved":false,"context_lines":[{"line_number":10438,"context_line":""},{"line_number":10439,"context_line":"    def _get_storage_bus_traits(self):"},{"line_number":10440,"context_line":"        \"\"\"Gets the supported storage bus traits based on the enabled"},{"line_number":10441,"context_line":"        virt_type.  For qemu and kvm this function use the information"},{"line_number":10442,"context_line":"        returned by the libvirt domain capabilities api. For other virt"},{"line_number":10443,"context_line":"        types we generate the traits based on the static information"},{"line_number":10444,"context_line":"        in the blockinfo module."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_a626e269","line":10441,"range":{"start_line":10441,"start_character":51,"end_line":10441,"end_character":54},"in_reply_to":"3fa7e38b_8046b57a","updated":"2020-02-20 15:17:11.000000000","message":"Done","commit_id":"9f777aed9b5b0efe470ce6ce02f31cb2ab43271f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8350dc32e0de1fb92495a336ceff1ec05aa13458","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"1fa4df85_e9a57a48","updated":"2020-03-17 12:20:40.000000000","message":"do we have test coverage for the behavior of the static_traits property?","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e0d4ec167e1243800dcfcfc0545a72e582a68b7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"df33271e_09ccc8ba","in_reply_to":"1fa4df85_7b12915a","updated":"2020-03-24 10:40:17.000000000","message":"I would add unit tests that asserts\n* each trait gathering helpers are called and the result is the union of traits.\n* non valid traits are filtered and logged\n* second call to the property uses the caches instead of gathering the data again.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d9c73bd9898ea4cbcc2741bb94fc939d59a7bc59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"1fa4df85_7b12915a","in_reply_to":"1fa4df85_e9a57a48","updated":"2020-03-18 18:43:13.000000000","message":"i dont think so but i also dont really thing its needed.\n\nthere are test for the funcitons it calls and its othersize a pretty standard property so i think that is enough coverage.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7eff449b68e40e246cb963f4b0cec4418a5133e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"df33271e_bcbd1c6a","in_reply_to":"df33271e_09ccc8ba","updated":"2020-03-24 12:28:31.000000000","message":"Done","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8350dc32e0de1fb92495a336ceff1ec05aa13458","unresolved":false,"context_lines":[{"line_number":7322,"context_line":"        traits.update(self._get_vif_model_traits())"},{"line_number":7323,"context_line":""},{"line_number":7324,"context_line":"        _, invalid_traits \u003d ot.check_traits(traits)"},{"line_number":7325,"context_line":"        for invalid_trait in invalid_traits:"},{"line_number":7326,"context_line":"            LOG.debug(\"Trait \u0027%s\u0027 is not valid; ignorning.\", invalid_trait)"},{"line_number":7327,"context_line":"            del traits[invalid_trait]"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"        self._static_traits \u003d traits"},{"line_number":7330,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1fa4df85_c9919ef3","line":7327,"range":{"start_line":7325,"start_character":1,"end_line":7327,"end_character":37},"updated":"2020-03-17 12:20:40.000000000","message":"What was the behavior in this case before this patch?","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e0d4ec167e1243800dcfcfc0545a72e582a68b7a","unresolved":false,"context_lines":[{"line_number":7322,"context_line":"        traits.update(self._get_vif_model_traits())"},{"line_number":7323,"context_line":""},{"line_number":7324,"context_line":"        _, invalid_traits \u003d ot.check_traits(traits)"},{"line_number":7325,"context_line":"        for invalid_trait in invalid_traits:"},{"line_number":7326,"context_line":"            LOG.debug(\"Trait \u0027%s\u0027 is not valid; ignorning.\", invalid_trait)"},{"line_number":7327,"context_line":"            del traits[invalid_trait]"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"        self._static_traits \u003d traits"},{"line_number":7330,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"df33271e_c9e82018","line":7327,"range":{"start_line":7325,"start_character":1,"end_line":7327,"end_character":37},"in_reply_to":"1fa4df85_1b027d0a","updated":"2020-03-24 10:40:17.000000000","message":"OK thanks.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d9c73bd9898ea4cbcc2741bb94fc939d59a7bc59","unresolved":false,"context_lines":[{"line_number":7322,"context_line":"        traits.update(self._get_vif_model_traits())"},{"line_number":7323,"context_line":""},{"line_number":7324,"context_line":"        _, invalid_traits \u003d ot.check_traits(traits)"},{"line_number":7325,"context_line":"        for invalid_trait in invalid_traits:"},{"line_number":7326,"context_line":"            LOG.debug(\"Trait \u0027%s\u0027 is not valid; ignorning.\", invalid_trait)"},{"line_number":7327,"context_line":"            del traits[invalid_trait]"},{"line_number":7328,"context_line":""},{"line_number":7329,"context_line":"        self._static_traits \u003d traits"},{"line_number":7330,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1fa4df85_1b027d0a","line":7327,"range":{"start_line":7325,"start_character":1,"end_line":7327,"end_character":37},"in_reply_to":"1fa4df85_c9919ef3","updated":"2020-03-18 18:43:13.000000000","message":"the sotorage bus traits where previously generated form a static dict so they where know to be valid sice i added all the requred traits to os tratis already.\n\nbut now we are generating traits form data returned form libvirt so we have to check.","commit_id":"91468888a74e1bfa07a7020cc15c9cab0cb844c1"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":58,"context_line":"# virtio-net.tx_queue_size support"},{"line_number":59,"context_line":"MIN_LIBVIRT_TX_QUEUE_SIZE \u003d (3, 7, 0)"},{"line_number":60,"context_line":"MIN_QEMU_TX_QUEUE_SIZE \u003d (2, 10, 0)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"VALID_VIF_MODELS \u003d {"},{"line_number":63,"context_line":"        \u0027qemu\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":64,"context_line":"                 network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":65,"context_line":"                 network_model.VIF_MODEL_PCNET,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_41ba8ae1","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":5},"updated":"2019-08-09 11:36:40.000000000","message":"SUPPORTED?","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"# virtio-net.tx_queue_size support"},{"line_number":59,"context_line":"MIN_LIBVIRT_TX_QUEUE_SIZE \u003d (3, 7, 0)"},{"line_number":60,"context_line":"MIN_QEMU_TX_QUEUE_SIZE \u003d (2, 10, 0)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"VALID_VIF_MODELS \u003d {"},{"line_number":63,"context_line":"        \u0027qemu\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":64,"context_line":"                 network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":65,"context_line":"                 network_model.VIF_MODEL_PCNET,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_3566a52b","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":5},"in_reply_to":"7faddb67_41ba8ae1","updated":"2019-08-09 17:17:51.000000000","message":"as i said on the previous patchset i think valid is more corerct in this context.","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9515d417626ffd97f31a78d03ee6471a3104616","unresolved":false,"context_lines":[{"line_number":60,"context_line":"MIN_QEMU_TX_QUEUE_SIZE \u003d (2, 10, 0)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"VALID_VIF_MODELS \u003d {"},{"line_number":63,"context_line":"        \u0027qemu\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":64,"context_line":"                 network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":65,"context_line":"                 network_model.VIF_MODEL_PCNET,"},{"line_number":66,"context_line":"                 network_model.VIF_MODEL_RTL8139,"},{"line_number":67,"context_line":"                 network_model.VIF_MODEL_E1000,"},{"line_number":68,"context_line":"                 network_model.VIF_MODEL_LAN9118,"},{"line_number":69,"context_line":"                 network_model.VIF_MODEL_SPAPR_VLAN],"},{"line_number":70,"context_line":"        \u0027kvm\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":71,"context_line":"                network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":72,"context_line":"                network_model.VIF_MODEL_PCNET,"},{"line_number":73,"context_line":"                network_model.VIF_MODEL_RTL8139,"},{"line_number":74,"context_line":"                network_model.VIF_MODEL_E1000,"},{"line_number":75,"context_line":"                network_model.VIF_MODEL_SPAPR_VLAN],"},{"line_number":76,"context_line":"        \u0027xen\u0027: [network_model.VIF_MODEL_NETFRONT,"},{"line_number":77,"context_line":"                network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":78,"context_line":"                network_model.VIF_MODEL_PCNET,"},{"line_number":79,"context_line":"                network_model.VIF_MODEL_RTL8139,"},{"line_number":80,"context_line":"                network_model.VIF_MODEL_E1000],"},{"line_number":81,"context_line":"        \u0027lxc\u0027: [],"},{"line_number":82,"context_line":"        \u0027uml\u0027: [],"},{"line_number":83,"context_line":"        \u0027parallels\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":84,"context_line":"                      network_model.VIF_MODEL_RTL8139,"},{"line_number":85,"context_line":"                      network_model.VIF_MODEL_E1000],"},{"line_number":86,"context_line":"        }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def is_vif_model_valid_for_virt(virt_type, vif_model):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_81ee42eb","line":86,"range":{"start_line":63,"start_character":0,"end_line":86,"end_character":9},"updated":"2019-08-09 11:36:40.000000000","message":"dedent this mofo. The diff is minimal and it\u0027s the correct thing to do","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dc2ad341fb98cb3c11e61ccfa38633f62e8827b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"MIN_QEMU_TX_QUEUE_SIZE \u003d (2, 10, 0)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"VALID_VIF_MODELS \u003d {"},{"line_number":63,"context_line":"        \u0027qemu\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":64,"context_line":"                 network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":65,"context_line":"                 network_model.VIF_MODEL_PCNET,"},{"line_number":66,"context_line":"                 network_model.VIF_MODEL_RTL8139,"},{"line_number":67,"context_line":"                 network_model.VIF_MODEL_E1000,"},{"line_number":68,"context_line":"                 network_model.VIF_MODEL_LAN9118,"},{"line_number":69,"context_line":"                 network_model.VIF_MODEL_SPAPR_VLAN],"},{"line_number":70,"context_line":"        \u0027kvm\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":71,"context_line":"                network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":72,"context_line":"                network_model.VIF_MODEL_PCNET,"},{"line_number":73,"context_line":"                network_model.VIF_MODEL_RTL8139,"},{"line_number":74,"context_line":"                network_model.VIF_MODEL_E1000,"},{"line_number":75,"context_line":"                network_model.VIF_MODEL_SPAPR_VLAN],"},{"line_number":76,"context_line":"        \u0027xen\u0027: [network_model.VIF_MODEL_NETFRONT,"},{"line_number":77,"context_line":"                network_model.VIF_MODEL_NE2K_PCI,"},{"line_number":78,"context_line":"                network_model.VIF_MODEL_PCNET,"},{"line_number":79,"context_line":"                network_model.VIF_MODEL_RTL8139,"},{"line_number":80,"context_line":"                network_model.VIF_MODEL_E1000],"},{"line_number":81,"context_line":"        \u0027lxc\u0027: [],"},{"line_number":82,"context_line":"        \u0027uml\u0027: [],"},{"line_number":83,"context_line":"        \u0027parallels\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":84,"context_line":"                      network_model.VIF_MODEL_RTL8139,"},{"line_number":85,"context_line":"                      network_model.VIF_MODEL_E1000],"},{"line_number":86,"context_line":"        }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def is_vif_model_valid_for_virt(virt_type, vif_model):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_957439d2","line":86,"range":{"start_line":63,"start_character":0,"end_line":86,"end_character":9},"in_reply_to":"7faddb67_81ee42eb","updated":"2019-08-09 17:17:51.000000000","message":"sure i can do that","commit_id":"025c99f0b09c07c035dfe56f0f21e63f3c51c14a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"de0d91c898902fbcac563527413f2d5651d7c911","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \u0027parallels\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":84,"context_line":"                  network_model.VIF_MODEL_RTL8139,"},{"line_number":85,"context_line":"                  network_model.VIF_MODEL_E1000],"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def is_vif_model_valid_for_virt(virt_type, vif_model):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_b271247a","line":86,"updated":"2019-08-28 10:06:52.000000000","message":"unrelated, but the indentation of those lists makes my eyes hurt","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c68a6d35aef1d731c4d40bfd773ff97dbd91b8f3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \u0027parallels\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":84,"context_line":"                  network_model.VIF_MODEL_RTL8139,"},{"line_number":85,"context_line":"                  network_model.VIF_MODEL_E1000],"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def is_vif_model_valid_for_virt(virt_type, vif_model):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_b2d59949","line":86,"in_reply_to":"7faddb67_554e9a6e","updated":"2019-08-28 20:11:02.000000000","message":"Done","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54220ac0abf5636135b6e7f7d8be802901feb027","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \u0027parallels\u0027: [network_model.VIF_MODEL_VIRTIO,"},{"line_number":84,"context_line":"                  network_model.VIF_MODEL_RTL8139,"},{"line_number":85,"context_line":"                  network_model.VIF_MODEL_E1000],"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def is_vif_model_valid_for_virt(virt_type, vif_model):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_554e9a6e","line":86,"in_reply_to":"7faddb67_b271247a","updated":"2019-08-28 10:41:06.000000000","message":"ya\nits still valid form a pep8 point of view\n\ni could do \n\n\nSUPPORTED_VIF_MODELS \u003d {\n    \u0027qemu\u0027: [\n        network_model.VIF_MODEL_VIRTIO, network_model.VIF_MODEL_NE2K_PCI,\n        network_model.VIF_MODEL_PCNET, network_model.VIF_MODEL_RTL8139,\n        network_model.VIF_MODEL_E1000,network_model.VIF_MODEL_LAN9118,\n        network_model.VIF_MODEL_SPAPR_VLAN],\n\n...\n\nor\nSUPPORTED_VIF_MODELS \u003d {\n    \u0027qemu\u0027: [\n        network_model.VIF_MODEL_VIRTIO,\n        network_model.VIF_MODEL_NE2K_PCI,\n        network_model.VIF_MODEL_PCNET,\n        network_model.VIF_MODEL_RTL8139,\n        network_model.VIF_MODEL_E1000,\n        network_model.VIF_MODEL_LAN9118,\n        network_model.VIF_MODEL_SPAPR_VLAN],\n    \u0027kvm\u0027: [\n        network_model.VIF_MODEL_VIRTIO,\n        network_model.VIF_MODEL_NE2K_PCI,\n        network_model.VIF_MODEL_PCNET,\n        network_model.VIF_MODEL_RTL8139,\n        network_model.VIF_MODEL_E1000,\n        network_model.VIF_MODEL_SPAPR_VLAN],\n\nif that is better\n\nim not sure it fits to have multiple on one line however\nif i start the list on the next line all o fthe list will line up.\n\ni more or less ignored it but  ill fix it when i respin","commit_id":"2126b640ce093d9345a03ba5a9db88c59de59c33"}]}
