)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":15,"context_line":"MIG-backed VF passthrough will need a separate filter adjustment."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1987380"},{"line_number":18,"context_line":"Generated-By: claude-code"},{"line_number":19,"context_line":"Change-Id: I2d7d8590ac6dde62b82cffdaf1dcfb51c3c4c3b1"},{"line_number":20,"context_line":"Signed-off-by: Bohdan Dobrelia \u003cbdobreli@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"50eb037a_c53e7219","line":18,"updated":"2026-03-03 11:57:20.000000000","message":"nit: if you recall the model you used its nice to inlcude that although not strcitly requried\n\ni.e. `Generated-By: claude-code sonnet 2.6` or what ever you used.\n\nthis is a littel more relevnet for tools like cursor where there are many models it could be.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":15,"context_line":"MIG-backed VF passthrough will need a separate filter adjustment."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1987380"},{"line_number":18,"context_line":"Generated-By: claude-code"},{"line_number":19,"context_line":"Change-Id: I2d7d8590ac6dde62b82cffdaf1dcfb51c3c4c3b1"},{"line_number":20,"context_line":"Signed-off-by: Bohdan Dobrelia \u003cbdobreli@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5cd0ee2b_6cccd728","line":18,"in_reply_to":"50eb037a_c53e7219","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":true,"context_lines":[{"line_number":20,"context_line":"handle it gracefully before filtering it out. We can\u0027t fix it this"},{"line_number":21,"context_line":"time, but we should prevent this type of errors during upgrades."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Nova has a protection for this for the pci tracker, if you remove a"},{"line_number":24,"context_line":"device form the devspec. In Nova func tests of that protection, the"},{"line_number":25,"context_line":"placement-fixture from Placement provides a placement API backed by"},{"line_number":26,"context_line":"sqlite DB. Testing this the same way in Cyborg depends on how Cyborg"},{"line_number":27,"context_line":"handles removal of placement RPs and deployables in general. Because"},{"line_number":28,"context_line":"we don\u0027t have that testing in Cyborg yet, put the fix behind a config"},{"line_number":29,"context_line":"option for now to keep it opted out by default."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Closes-Bug: #1987380"},{"line_number":32,"context_line":"Generated-By: Cursor Agent (Claude 4.6 Opus)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"8a895eb5_b57b781e","line":29,"range":{"start_line":23,"start_character":0,"end_line":29,"end_character":47},"updated":"2026-03-03 16:15:03.000000000","message":"```suggestion\nNova has a protection for this for the pci tracker, however Cyborg\nhandles removal of placement RPs and deployables in general differently.\nTo prevent issues on upgrade, until partity can be build put the fix\nbehind a config  option for now to keep it opted out by default.\n```","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"daa73afce857dab243347ad1d8ade6a86a043640","unresolved":false,"context_lines":[{"line_number":20,"context_line":"handle it gracefully before filtering it out. We can\u0027t fix it this"},{"line_number":21,"context_line":"time, but we should prevent this type of errors during upgrades."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Nova has a protection for this for the pci tracker, if you remove a"},{"line_number":24,"context_line":"device form the devspec. In Nova func tests of that protection, the"},{"line_number":25,"context_line":"placement-fixture from Placement provides a placement API backed by"},{"line_number":26,"context_line":"sqlite DB. Testing this the same way in Cyborg depends on how Cyborg"},{"line_number":27,"context_line":"handles removal of placement RPs and deployables in general. Because"},{"line_number":28,"context_line":"we don\u0027t have that testing in Cyborg yet, put the fix behind a config"},{"line_number":29,"context_line":"option for now to keep it opted out by default."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Closes-Bug: #1987380"},{"line_number":32,"context_line":"Generated-By: Cursor Agent (Claude 4.6 Opus)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ad1867c1_92050884","line":29,"range":{"start_line":23,"start_character":0,"end_line":29,"end_character":47},"in_reply_to":"8a895eb5_b57b781e","updated":"2026-03-03 16:47:54.000000000","message":"Done","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"af9c6c7f_edc50841","updated":"2026-03-03 11:57:20.000000000","message":"some minor nits inline\ncan you create a release note using the reno tool\ni think this is imporant enough to desrve a fixes release note.\n\nthere is one other thing we need to condier before proceedign with this.\nwe need to under stand what the behvior is if there is currently an disntance with an allcoation against this incorrectly reported deployable.\n\nin nova howe we have dealt with somethign similar in the past is to keep the offending resouce in the db/placement until the vm that is consumign it is moved/deleted.\n\nso we shoudl test that behvior and docuemetn it in the release note.\n\nwhat we need to avoid is fixign this bug but causing a outage by breaking some other aspect of the managableiyt of the cyborg resource on the host.\n\nover all the fix itself looks correct.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"61337d50540be36039928308dac2f715844aaeab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"43495082_a2e9a25c","in_reply_to":"af9c6c7f_edc50841","updated":"2026-03-03 15:26:58.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bc7f6758_8903eaa7","updated":"2026-03-03 16:15:03.000000000","message":"some minor issues in line but this is much better thanks","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"}],"cyborg/accelerator/drivers/gpu/nvidia/sysinfo.py":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    return pgpu_type_mapping.get(device_address)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def _is_vf(pci_address):"},{"line_number":234,"context_line":"    \"\"\"Check if a PCI device is a Virtual Function (VF)."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    A VF has a \u0027physfn\u0027 symlink in its sysfs directory pointing to its"}],"source_content_type":"text/x-python","patch_set":1,"id":"e71ecb46_3880190c","line":233,"in_reply_to":"057d3bad_bdc35e8f","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f0a45f0752a43f012bbc241aec15a27feb19bb15","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    return pgpu_type_mapping.get(device_address)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def _is_vf(pci_address):"},{"line_number":234,"context_line":"    \"\"\"Check if a PCI device is a Virtual Function (VF)."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    A VF has a \u0027physfn\u0027 symlink in its sysfs directory pointing to its"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c02a2ef_d4048454","line":233,"in_reply_to":"acd6fcd7_d914524b","updated":"2026-03-03 12:06:51.000000000","message":"actully on this this shoudl move into the base pci driver eventually \n\nand the nvidia driver should be refactored to delegate teh discovery of the device and vf checks to it.\n\nthis is out of scope fo this simple bug fix","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f0a45f0752a43f012bbc241aec15a27feb19bb15","unresolved":true,"context_lines":[{"line_number":230,"context_line":"    return pgpu_type_mapping.get(device_address)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def _is_vf(pci_address):"},{"line_number":234,"context_line":"    \"\"\"Check if a PCI device is a Virtual Function (VF)."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    A VF has a \u0027physfn\u0027 symlink in its sysfs directory pointing to its"}],"source_content_type":"text/x-python","patch_set":1,"id":"057d3bad_bdc35e8f","line":233,"in_reply_to":"de11c826_918c5153","updated":"2026-03-03 12:06:51.000000000","message":"actully on this point we shoudl probaly just yank this tiny module we created for nova\n\nhttps://github.com/openstack/nova/blob/master/nova/filesystem.py\n\nlets move that into a common place in cyborg\nwe coudl expand it to have path exist fucntion.\n\nthat not strictly needed in this patch but its somethign i was condiering doing as part fo hardening/clening up the code base later.\nrefactoring all sys access is out of scope of this bug fix bug valid for future work.\n\nin this specific canse the retry_if_busy decorator might be useful but\n\ni think the minimal change may be to catch the OSError and return False with a warning level log.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":237,"context_line":"    parent PF (Physical Function)."},{"line_number":238,"context_line":"    \"\"\""},{"line_number":239,"context_line":"    physfn_path \u003d \u0027/sys/bus/pci/devices/%s/physfn\u0027 % pci_address"},{"line_number":240,"context_line":"    return os.path.exists(physfn_path)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def _discover_gpus(vendor_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b268ace_a7d61166","line":240,"updated":"2026-03-03 11:57:20.000000000","message":"this is a valid approach.\n\nthe other obvious alternative would be to check the capablites reqproed by lspci\n\nthis si very similar to the approch we take in os-vif and avoid the overhead of a process exec https://github.com/openstack/os-vif/blob/master/vif_plug_ovs/linux_net.py\n\nso +1","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    parent PF (Physical Function)."},{"line_number":238,"context_line":"    \"\"\""},{"line_number":239,"context_line":"    physfn_path \u003d \u0027/sys/bus/pci/devices/%s/physfn\u0027 % pci_address"},{"line_number":240,"context_line":"    return os.path.exists(physfn_path)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def _discover_gpus(vendor_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a9fd303e_b9a47caf","line":240,"in_reply_to":"5b268ace_a7d61166","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        m \u003d gpu_utils.GPU_INFO_PATTERN.match(gpu)"},{"line_number":255,"context_line":"        if m:"},{"line_number":256,"context_line":"            gpu_dict \u003d m.groupdict()"},{"line_number":257,"context_line":"            # NOTE(lp1987380): Filter out SR-IOV VF devices. Cards like the"},{"line_number":258,"context_line":"            # A100 expose VFs when virtualized, but the NVIDIA driver should"},{"line_number":259,"context_line":"            # only report PFs or mediated devices. VFs should not be reported"},{"line_number":260,"context_line":"            # until vfio-variant-driver becomes tested on supported OS"}],"source_content_type":"text/x-python","patch_set":1,"id":"817489e4_7c71e958","line":257,"in_reply_to":"459ebf60_560afdb9","updated":"2026-03-03 11:57:20.000000000","message":"the standard format is `# NOTE(author name): ...`\n\nor jsut \n\n\n```suggestion\n            # Related bug 1987380. Filter out SR-IOV VF devices. Cards like the\n```\ni.e. dont use the NOTE/TODO/FIXME format at all and just leave a code comment","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        m \u003d gpu_utils.GPU_INFO_PATTERN.match(gpu)"},{"line_number":255,"context_line":"        if m:"},{"line_number":256,"context_line":"            gpu_dict \u003d m.groupdict()"},{"line_number":257,"context_line":"            # NOTE(lp1987380): Filter out SR-IOV VF devices. Cards like the"},{"line_number":258,"context_line":"            # A100 expose VFs when virtualized, but the NVIDIA driver should"},{"line_number":259,"context_line":"            # only report PFs or mediated devices. VFs should not be reported"},{"line_number":260,"context_line":"            # until vfio-variant-driver becomes tested on supported OS"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e1d3c86_956b4526","line":257,"in_reply_to":"817489e4_7c71e958","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"647744bf6c4af9572996e4b9a972afb981d54add","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            if CONF.gpu_devices.filter_sriov_vfs:"},{"line_number":277,"context_line":"                try:"},{"line_number":278,"context_line":"                    is_vf \u003d _is_vf(gpu_dict[\"devices\"])"},{"line_number":279,"context_line":"                except Exception:"},{"line_number":280,"context_line":"                    LOG.warning("},{"line_number":281,"context_line":"                        \u0027Unable to determine VF status for \u0027"},{"line_number":282,"context_line":"                        \u0027device %s, assuming it is not a VF.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5980f947_b75d694d","line":279,"in_reply_to":"5652c4f8_86530f7b","updated":"2026-03-05 11:52:07.000000000","message":"Acknowledged","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b9b92e1810193d3627d2a7ba8546e1583b974889","unresolved":true,"context_lines":[{"line_number":276,"context_line":"            if CONF.gpu_devices.filter_sriov_vfs:"},{"line_number":277,"context_line":"                try:"},{"line_number":278,"context_line":"                    is_vf \u003d _is_vf(gpu_dict[\"devices\"])"},{"line_number":279,"context_line":"                except Exception:"},{"line_number":280,"context_line":"                    LOG.warning("},{"line_number":281,"context_line":"                        \u0027Unable to determine VF status for \u0027"},{"line_number":282,"context_line":"                        \u0027device %s, assuming it is not a VF.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5652c4f8_86530f7b","line":279,"in_reply_to":"9fe7633f_51e9f2db","updated":"2026-03-05 11:15:50.000000000","message":"so this should nolonger raise since you are now handeling that internally in _is_vif\n\nif you need to respin we could remove the try excpet safely now","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b9b92e1810193d3627d2a7ba8546e1583b974889","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                        \u0027device %s, assuming it is not a VF.\u0027,"},{"line_number":283,"context_line":"                        gpu_dict[\"devices\"])"},{"line_number":284,"context_line":"                    is_vf \u003d False"},{"line_number":285,"context_line":"                if is_vf:"},{"line_number":286,"context_line":"                    LOG.info("},{"line_number":287,"context_line":"                        \u0027Skipping VF device %s, only PFs and\u0027"},{"line_number":288,"context_line":"                        \u0027 mediated devices are reported.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"76fc58cc_9012f34e","line":285,"in_reply_to":"0e4df834_37249431","updated":"2026-03-05 11:15:50.000000000","message":"we could go either way, i could see this beign a little noisy but info is not unresonable so im ok with this for now","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b9b92e1810193d3627d2a7ba8546e1583b974889","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    is_vf \u003d False"},{"line_number":285,"context_line":"                if is_vf:"},{"line_number":286,"context_line":"                    LOG.info("},{"line_number":287,"context_line":"                        \u0027Skipping VF device %s, only PFs and\u0027"},{"line_number":288,"context_line":"                        \u0027 mediated devices are reported.\u0027,"},{"line_number":289,"context_line":"                        gpu_dict[\"devices\"])"},{"line_number":290,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"fb91771b_a34ba5f4","line":287,"in_reply_to":"ff7d113d_581f124c","updated":"2026-03-05 11:15:50.000000000","message":"no AIs just can count\n\nand this is a know false positive that i have yet to teach it about.","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"}],"cyborg/conf/devices.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":true,"context_lines":[{"line_number":60,"context_line":"equivalent to Nova\u0027s PCI tracker (which defers removal of allocated"},{"line_number":61,"context_line":"devices until the owning instance is deleted)."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Once Cyborg gains functional tests that verify safe removal of"},{"line_number":64,"context_line":"Placement resource providers and deployables during upgrades (similar"},{"line_number":65,"context_line":"to Nova\u0027s test_pci_in_placement tests backed by the Placement sqlite"},{"line_number":66,"context_line":"fixture), this option can be changed to default to True."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"VFs should not be reported until the vfio-variant-driver becomes tested"},{"line_number":69,"context_line":"on supported OS versions."}],"source_content_type":"text/x-python","patch_set":3,"id":"57530639_ab5b6e8a","line":66,"range":{"start_line":63,"start_character":0,"end_line":66,"end_character":56},"updated":"2026-03-03 16:15:03.000000000","message":"this shoudl likely be a comment not part of the help text\n\nits not somethign that a operator need to be aware of its context for developers","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"daa73afce857dab243347ad1d8ade6a86a043640","unresolved":false,"context_lines":[{"line_number":60,"context_line":"equivalent to Nova\u0027s PCI tracker (which defers removal of allocated"},{"line_number":61,"context_line":"devices until the owning instance is deleted)."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Once Cyborg gains functional tests that verify safe removal of"},{"line_number":64,"context_line":"Placement resource providers and deployables during upgrades (similar"},{"line_number":65,"context_line":"to Nova\u0027s test_pci_in_placement tests backed by the Placement sqlite"},{"line_number":66,"context_line":"fixture), this option can be changed to default to True."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"VFs should not be reported until the vfio-variant-driver becomes tested"},{"line_number":69,"context_line":"on supported OS versions."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5e2ef0_0baa2c63","line":66,"range":{"start_line":63,"start_character":0,"end_line":66,"end_character":56},"in_reply_to":"57530639_ab5b6e8a","updated":"2026-03-03 16:47:54.000000000","message":"Done","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":true,"context_lines":[{"line_number":65,"context_line":"to Nova\u0027s test_pci_in_placement tests backed by the Placement sqlite"},{"line_number":66,"context_line":"fixture), this option can be changed to default to True."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"VFs should not be reported until the vfio-variant-driver becomes tested"},{"line_number":69,"context_line":"on supported OS versions."},{"line_number":70,"context_line":"\"\"\"),"},{"line_number":71,"context_line":"    cfg.ListOpt(\u0027enabled_vgpu_types\u0027,"},{"line_number":72,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":3,"id":"d4c290bf_31b56d28","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":25},"updated":"2026-03-03 16:15:03.000000000","message":"so this is actually not the requirement\n\nto support the vf we need to modify nova and cyborg to pass managed\u003dfalse\nfor the attachment handel and propagate that in the libvirt xml\n\nwithout that it unsafe to assigne a mig vf directly to a guest.\n\nwe do not supprot MIG without vfio-mediated device today in cyborg so this will be adressed as aprt of that\n\nthis has nothitng to do with thet testing in the os.\nthere is a direct tecnial blocker in teh code that need to be adressed before cybrog can supprot this.","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"daa73afce857dab243347ad1d8ade6a86a043640","unresolved":false,"context_lines":[{"line_number":65,"context_line":"to Nova\u0027s test_pci_in_placement tests backed by the Placement sqlite"},{"line_number":66,"context_line":"fixture), this option can be changed to default to True."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"VFs should not be reported until the vfio-variant-driver becomes tested"},{"line_number":69,"context_line":"on supported OS versions."},{"line_number":70,"context_line":"\"\"\"),"},{"line_number":71,"context_line":"    cfg.ListOpt(\u0027enabled_vgpu_types\u0027,"},{"line_number":72,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":3,"id":"9681fc72_756db025","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":25},"in_reply_to":"d4c290bf_31b56d28","updated":"2026-03-03 16:47:54.000000000","message":"Done","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b9b92e1810193d3627d2a7ba8546e1583b974889","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    # TODO(bogdando): After Cyborg ensures the safe removal of Placement"},{"line_number":47,"context_line":"    # resource providers and deployables during upgrades and that can be tested"},{"line_number":48,"context_line":"    # similar to Nova\u0027s test_pci_in_placement backed by the Placement"},{"line_number":49,"context_line":"    # sqlite fixture, change this option\u0027s default to True."},{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027filter_sriov_vfs\u0027,"},{"line_number":51,"context_line":"                default\u003dFalse,"},{"line_number":52,"context_line":"                help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"b6843ab9_f85b18b6","line":49,"updated":"2026-03-05 11:15:50.000000000","message":"we will proably also deprecate it at that point since long term that should be the only value\n\nif we are adding mig vf support that may or may not be in this driver.","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"}],"cyborg/tests/unit/accelerator/drivers/gpu/test_utils.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":238,"context_line":"                         gpu_attach_handle_list[0].as_dict())"},{"line_number":239,"context_line":"        self.assertEqual(attribute_list, attribute_actual_data)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.nvidia.sysinfo._is_vf\u0027)"},{"line_number":242,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":243,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":244,"context_line":"                                              mock_is_vf):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc3fe099_9d68ab69","line":241,"in_reply_to":"66c16433_6495f697","updated":"2026-03-03 11:57:20.000000000","message":"\u003e **Recommendation**:\n\u003e Consider adding an additional test that mocks os.path.exists directly with the expected \u0027/sys/bus/pci/devices/0000:3b:00.4/physfn\u0027 path to verify the implementation. The current test mocks _is_vf itself, which is acceptable but provides less coverage of the actual implementation.\n\n\nso it would be incorrect to reach through and mock exits in this test case but yes there shoudl be a sepreate unit test just for the _is_vf function that does mock the exists function.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                         gpu_attach_handle_list[0].as_dict())"},{"line_number":239,"context_line":"        self.assertEqual(attribute_list, attribute_actual_data)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.nvidia.sysinfo._is_vf\u0027)"},{"line_number":242,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":243,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":244,"context_line":"                                              mock_is_vf):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c4b01c1_1e44ef2c","line":241,"in_reply_to":"fc3fe099_9d68ab69","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":242,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":243,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":244,"context_line":"                                              mock_is_vf):"},{"line_number":245,"context_line":"        \"\"\"Test that VF devices are filtered out (LP#1987380).\"\"\""},{"line_number":246,"context_line":"        mock_devices_for_vendor.return_value \u003d ["},{"line_number":247,"context_line":"            NVIDIA_A100_PF_INFO, NVIDIA_A100_VF_INFO]"},{"line_number":248,"context_line":"        mock_is_vf.side_effect \u003d lambda addr: addr \u003d\u003d \u00270000:3b:00.4\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab339fd_231c6528","line":245,"range":{"start_line":245,"start_character":49,"end_line":245,"end_character":61},"updated":"2026-03-03 11:57:20.000000000","message":"we shoudl not use a lp prefix.\n\n\nif your referencign the butstream bug just do `1987380` or `#1987380` as we do in the commit message.\n\nthirdparty i.e. down stream issue tracker are never referenced in the code or commtis so thre isnt really any ambiguraity of which issue thracker such refences are for.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"beb39b39f1a4a3a61f6bc11674641b7fc6e724ff","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":243,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":244,"context_line":"                                              mock_is_vf):"},{"line_number":245,"context_line":"        \"\"\"Test that VF devices are filtered out (LP#1987380).\"\"\""},{"line_number":246,"context_line":"        mock_devices_for_vendor.return_value \u003d ["},{"line_number":247,"context_line":"            NVIDIA_A100_PF_INFO, NVIDIA_A100_VF_INFO]"},{"line_number":248,"context_line":"        mock_is_vf.side_effect \u003d lambda addr: addr \u003d\u003d \u00270000:3b:00.4\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"59367882_e9c06285","line":245,"range":{"start_line":245,"start_character":49,"end_line":245,"end_character":61},"in_reply_to":"dab339fd_231c6528","updated":"2026-03-03 15:26:42.000000000","message":"Done","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4e8f9dd2bd0201abe1c717a6afaac7df25d716d7","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        self.assertEqual(1, len(gpu_list))"},{"line_number":255,"context_line":"        gpu_dict \u003d gpu_list[0].as_dict()"},{"line_number":256,"context_line":"        dep_name \u003d gpu_dict[\u0027deployable_list\u0027][0].as_dict()[\u0027name\u0027]"},{"line_number":257,"context_line":"        self.assertIn(\u00270000:3b:00.0\u0027, dep_name)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"def multi_mock_open(*file_contents):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dc0a21ff_c5996637","line":257,"updated":"2026-03-03 11:57:20.000000000","message":"+1 this all looks in order\n\nwe have not adopted this convetnio yet but it genreally perferable to fix bugs in 2 commtis\n\nthe first commit just add a test to assert the current broken behavior i.e\nthis test woudl assert that tehre are 2 itmes in the list witha FIXME comment\nthe second commit in the chain then fixes the bug and updates the test.\n\nthat does 2 things.\nfirst it proves teh regression test actully repoduces the bug and will prevent future regressions\nsecond it makes it very clear that your fix si actully adressing the reported problem adn makes the review eiaser.\n\nyou do not need to respin in this case but that is a convetnion form nova that i woudl like to adopt in the future.\nbefore i start enforcign that however i will update teh contributor docs to describe that and provide an example and rational so its discoverable.","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        self.assertEqual(1, len(gpu_list))"},{"line_number":255,"context_line":"        gpu_dict \u003d gpu_list[0].as_dict()"},{"line_number":256,"context_line":"        dep_name \u003d gpu_dict[\u0027deployable_list\u0027][0].as_dict()[\u0027name\u0027]"},{"line_number":257,"context_line":"        self.assertIn(\u00270000:3b:00.0\u0027, dep_name)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"def multi_mock_open(*file_contents):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0ec9e4cf_a3793bf3","line":257,"in_reply_to":"dc0a21ff_c5996637","updated":"2026-03-03 16:15:03.000000000","message":"Acknowledged","commit_id":"6d513f7303f20af6d84451e1aa1a5a5ef20b648c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"dd2a533b5d75d755ce585b99b8740b9405abab0e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":245,"context_line":"                                              mock_is_vf):"},{"line_number":246,"context_line":"        \"\"\"Test that VF devices are filtered when filter_sp_vfs\u003dTrue.\"\"\""},{"line_number":247,"context_line":"        mock_devices_for_vendor.return_value \u003d ["},{"line_number":248,"context_line":"            NVIDIA_A100_PF_INFO + \u0027\\n\u0027 + NVIDIA_A100_VF_INFO]"},{"line_number":249,"context_line":"        mock_is_vf.side_effect \u003d lambda addr: addr \u003d\u003d \u00270000:3b:00.4\u0027"},{"line_number":250,"context_line":"        self.set_defaults(host\u003d\u0027host-192-168-32-195\u0027, debug\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc27c155_d4d95d63","line":247,"updated":"2026-03-03 16:09:56.000000000","message":"The existing mock pattern is correct for the actual data flow. Here\u0027s why:\nprocessutils.execute returns (stdout, stderr) — a tuple of strings. And get_pci_devices() does:\n\n   cyborg/accelerator/drivers/gpu/utils.py lines 69-69\n\n      lspci_out \u003d lspci_privileged()[0].split(\u0027\\n\u0027)","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b9b92e1810193d3627d2a7ba8546e1583b974889","unresolved":true,"context_lines":[{"line_number":242,"context_line":"                         gpu_attach_handle_list[0].as_dict())"},{"line_number":243,"context_line":"        self.assertEqual(attribute_list, attribute_actual_data)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.nvidia.sysinfo._is_vf\u0027)"},{"line_number":246,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":247,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":248,"context_line":"                                              mock_is_vf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"d5ae1126_79f83809","line":245,"in_reply_to":"236616ca_63269693","updated":"2026-03-05 11:15:50.000000000","message":"i have a patch in my linting seriese that adresses teh autospefc issues so ill just adress this there when i rebase that","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"647744bf6c4af9572996e4b9a972afb981d54add","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                         gpu_attach_handle_list[0].as_dict())"},{"line_number":243,"context_line":"        self.assertEqual(attribute_list, attribute_actual_data)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.nvidia.sysinfo._is_vf\u0027)"},{"line_number":246,"context_line":"    @mock.patch(\u0027cyborg.accelerator.drivers.gpu.utils.lspci_privileged\u0027)"},{"line_number":247,"context_line":"    def test_discover_gpus_filters_vf_devices(self, mock_devices_for_vendor,"},{"line_number":248,"context_line":"                                              mock_is_vf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c4beaf64_18a28200","line":245,"in_reply_to":"d5ae1126_79f83809","updated":"2026-03-05 11:52:07.000000000","message":"Acknowledged","commit_id":"a02f1a37f81eb34c28bf79f6ea2d4522b741567f"}],"releasenotes/notes/filter-nvidia-gpu-sriov-vfs-3258d05ad5cd4de0.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"030c86b23ced66f83cdeca9cf4473e4d8ac7935d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    allocations before enabling this option. Cyborg does not yet have"},{"line_number":13,"context_line":"    upgrade-safe deferred-removal logic equivalent to Nova\u0027s PCI tracker,"},{"line_number":14,"context_line":"    so proper handling of in-use VFs during upgrades will be addressed in a"},{"line_number":15,"context_line":"    future release."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"b8a87877_2e193e8c","line":15,"updated":"2026-03-03 16:15:03.000000000","message":"+1","commit_id":"a7406ecf7c3b8e780814b225f7c228ea5de1d052"}]}
