)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d3ee9fb5_f06cba32","updated":"2022-04-20 08:00:45.000000000","message":"I\u0027m fine with merging this change, given the pressure. But I\u0027d really want to see this code cleaned up asap.","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1e7f86c92971cc7f38b86ddb56c2b619686ca44a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"10bb0e74_df126115","updated":"2022-04-20 08:10:09.000000000","message":"test is still ongoing for this\nlet\u0027s hold for the time being","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"76e3ad42474d01d9e3b2d0247747a080033b912b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"db84e337_25283239","updated":"2022-04-26 10:10:17.000000000","message":"Left some comments on https://review.opendev.org/c/openstack/ironic-python-agent/+/837784, please apply them here too.","commit_id":"8c6c6b74061a59f9a4359e2a2304dcc2e54a4255"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"856ed0e4df6fe6a67ad42d31bd0b8527e29a0908","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"78fb3d58_e2ec449a","updated":"2022-04-26 10:18:17.000000000","message":"removing my vote for now as I just pushed the latest review","commit_id":"e93e4a347daecad074d8b3f1fe7b630871d3d7f6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"89a9608b_f20b027c","updated":"2022-04-27 16:55:22.000000000","message":"Continuing here the conversation that I accidentally started in the backport https://review.opendev.org/c/openstack/ironic-python-agent/+/837784","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bd9971de88ea1445c883d4865e33ec698d0b4850","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"6d18a21a_b285b4cf","updated":"2022-05-18 10:08:43.000000000","message":"recheck","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"7126a220378edc750a2c65edbf1acd21fc4c16db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"94360157_f60aced5","updated":"2022-05-18 12:08:22.000000000","message":"The unit tests are fine after the rebase, +W","commit_id":"b88817e57bf91184d6502e576e939ea2027e1c74"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"bed151b84be747b8df3661d8602ff5516b20bea7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fffe88cd_fdfb3691","updated":"2022-05-18 16:37:07.000000000","message":"recheck","commit_id":"b88817e57bf91184d6502e576e939ea2027e1c74"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d7d9ef3aea6bfe8494ca9cedd9ff4179bf8cc100","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a953b576_43973a8e","updated":"2022-05-19 10:57:02.000000000","message":"Could use a follow up to address all outstanding comments from previous patchsets.","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d2fbfd88bd61ccf6471ce9e8a6b5d7b7c70695db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"7e8027fb_b9b0d571","updated":"2022-05-19 23:26:40.000000000","message":"recheck","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"9e909ec5c335340159ac8fc51a2de5c377d9d6d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b5b66c16_23cf8a49","updated":"2022-05-19 21:46:46.000000000","message":"recheck","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"6c60ed18ae4730ccd91028f9380b1017e54b6236","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b509784f_0cf3bc36","updated":"2022-05-20 02:13:43.000000000","message":"recheck (╯°□°)╯︵ ┻━┻","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"66e7c2f7624a8e45a687a0a369f9e4933aaa9e44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"f13a631b_cfd72aed","updated":"2022-05-19 15:46:03.000000000","message":"resolve looks like neutron dhcp didn\u0027t get updated quite in time.","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"9e909ec5c335340159ac8fc51a2de5c377d9d6d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"aa7fcfe0_85080c1e","in_reply_to":"a953b576_43973a8e","updated":"2022-05-19 21:46:46.000000000","message":"Agree, I\u0027m trying to get this so we can start backporting","commit_id":"014d37743a3b5694e0e2a3cabfafe885417172d5"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ae78a7a139e4c59c4488a4eac56381144853e489","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":200,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":201,"context_line":"        MULTIPATH_DETECTED \u003d True"},{"line_number":202,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":203,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":204,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"},{"line_number":205,"context_line":"        MULTIPATH_DETECTED \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"747afc32_44db79ce","line":202,"updated":"2022-04-08 07:42:55.000000000","message":"I think it will be FileNotFoundError, not ProcessExecutionError","commit_id":"e0a7f854d1a955cc36bedfb015316ad22c65d677"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e395f6b3988184467c24c8d4d338da3419ead905","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":200,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":201,"context_line":"        MULTIPATH_DETECTED \u003d True"},{"line_number":202,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":203,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":204,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"},{"line_number":205,"context_line":"        MULTIPATH_DETECTED \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"8dd26e3f_79d6ee2f","line":202,"in_reply_to":"747afc32_44db79ce","updated":"2022-04-08 13:26:21.000000000","message":"Yeah, going to update this based on the logs results","commit_id":"e0a7f854d1a955cc36bedfb015316ad22c65d677"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ae78a7a139e4c59c4488a4eac56381144853e489","unresolved":true,"context_lines":[{"line_number":220,"context_line":"        # size\u003d56G features\u003d\u00271 retain_attached_hw_handler\u0027 hwhandler\u003d\u00270\u0027 wp\u003drw"},{"line_number":221,"context_line":"        # `-+- policy\u003d\u0027service-time 0\u0027 prio\u003d1 status\u003dactive"},{"line_number":222,"context_line":"        #   `- 0:0:0:0 sda 8:0  active ready running"},{"line_number":223,"context_line":"        lines \u003d out.splitlines()"},{"line_number":224,"context_line":"        mpath_device \u003d lines[0].split(\u0027 \u0027)[1]"},{"line_number":225,"context_line":"        # give back something like dm-0 so we can log it."},{"line_number":226,"context_line":"        return mpath_device"}],"source_content_type":"text/x-python","patch_set":1,"id":"fcdb8bbd_def6f9a9","line":223,"updated":"2022-04-08 07:42:55.000000000","message":"nit: move out of the try block","commit_id":"e0a7f854d1a955cc36bedfb015316ad22c65d677"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e395f6b3988184467c24c8d4d338da3419ead905","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        # size\u003d56G features\u003d\u00271 retain_attached_hw_handler\u0027 hwhandler\u003d\u00270\u0027 wp\u003drw"},{"line_number":221,"context_line":"        # `-+- policy\u003d\u0027service-time 0\u0027 prio\u003d1 status\u003dactive"},{"line_number":222,"context_line":"        #   `- 0:0:0:0 sda 8:0  active ready running"},{"line_number":223,"context_line":"        lines \u003d out.splitlines()"},{"line_number":224,"context_line":"        mpath_device \u003d lines[0].split(\u0027 \u0027)[1]"},{"line_number":225,"context_line":"        # give back something like dm-0 so we can log it."},{"line_number":226,"context_line":"        return mpath_device"}],"source_content_type":"text/x-python","patch_set":1,"id":"f783e108_47b80084","line":223,"in_reply_to":"fcdb8bbd_def6f9a9","updated":"2022-04-08 13:26:21.000000000","message":"Ack","commit_id":"e0a7f854d1a955cc36bedfb015316ad22c65d677"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6fce4d3787d3bba2b5475c92d02d9ca09a0b1428","unresolved":true,"context_lines":[{"line_number":439,"context_line":"    :param ignore_floppy: Ignore floppy disk devices in the block device"},{"line_number":440,"context_line":"                          list. By default, these devices are filtered out."},{"line_number":441,"context_line":"    :param ignore_empty: Whether to ignore disks with size equal 0."},{"line_number":442,"context_line":"    :param ignore_multipath: wheter to ignore multipath devices"},{"line_number":443,"context_line":"    :return: A list of BlockDevices"},{"line_number":444,"context_line":"    \"\"\""},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"47153853_9fad365e","line":442,"range":{"start_line":442,"start_character":28,"end_line":442,"end_character":29},"updated":"2022-04-08 16:30:35.000000000","message":"Whether 😊","commit_id":"0c38fd9d515ce35752a5f96439f4b23778e6c078"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f441034545bd06b1aeebe32038ed5283907fc442","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    :param ignore_floppy: Ignore floppy disk devices in the block device"},{"line_number":440,"context_line":"                          list. By default, these devices are filtered out."},{"line_number":441,"context_line":"    :param ignore_empty: Whether to ignore disks with size equal 0."},{"line_number":442,"context_line":"    :param ignore_multipath: wheter to ignore multipath devices"},{"line_number":443,"context_line":"    :return: A list of BlockDevices"},{"line_number":444,"context_line":"    \"\"\""},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"06a069f3_623559c9","line":442,"range":{"start_line":442,"start_character":28,"end_line":442,"end_character":29},"in_reply_to":"47153853_9fad365e","updated":"2022-04-20 12:58:23.000000000","message":"Done","commit_id":"0c38fd9d515ce35752a5f96439f4b23778e6c078"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"9775737882f96cd46b0a78b38be1bf4fbb9e5957","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    :param ignore_floppy: Ignore floppy disk devices in the block device"},{"line_number":440,"context_line":"                          list. By default, these devices are filtered out."},{"line_number":441,"context_line":"    :param ignore_empty: Whether to ignore disks with size equal 0."},{"line_number":442,"context_line":"    :param ignore_multipath: wheter to ignore multipath devices"},{"line_number":443,"context_line":"    :return: A list of BlockDevices"},{"line_number":444,"context_line":"    \"\"\""},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"06bb6d24_55bae922","line":442,"range":{"start_line":442,"start_character":28,"end_line":442,"end_character":29},"in_reply_to":"47153853_9fad365e","updated":"2022-04-20 12:17:35.000000000","message":"Done","commit_id":"0c38fd9d515ce35752a5f96439f4b23778e6c078"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f441034545bd06b1aeebe32038ed5283907fc442","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            continue"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        if ignore_multipath and _is_multipath_enabled():"},{"line_number":510,"context_line":"            if _is_multipath_device(device):"},{"line_number":511,"context_line":"                # Net result, if /dev/sda is supporting multipath"},{"line_number":512,"context_line":"                # then we ignore it. We end up considering the dm device"},{"line_number":513,"context_line":"                # as a result"}],"source_content_type":"text/x-python","patch_set":2,"id":"26325eb1_ba12581c","line":510,"range":{"start_line":510,"start_character":0,"end_line":510,"end_character":44},"updated":"2022-04-20 12:58:23.000000000","message":"this is wrong, it should be device.kname appended to \"/dev/\"\n\n\n call(\u0027multipath\u0027, \u0027-ll\u0027, {\u0027KNAME\u0027: \u0027sda\u0027, \u0027MODEL\u0027: \u0027TinyUSB Drive\u0027, \u0027SIZE\u0027: \u00273116853504\u0027, \u0027ROTA\u0027: \u00270\u0027, \u0027TYPE\u0027: \u0027disk\u0027, \u0027UUID\u0027: \u0027F531-BDC3\u0027, \u0027PARTUUID\u0027: \u0027\u0027}),","commit_id":"0c38fd9d515ce35752a5f96439f4b23778e6c078"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f441034545bd06b1aeebe32038ed5283907fc442","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                        {\u0027device\u0027: kname,"},{"line_number":526,"context_line":"                         \u0027mpath_dev\u0027: known_dev})"},{"line_number":527,"context_line":"                    continue"},{"line_number":528,"context_line":"            is_mpath \u003d _is_multipath_device(device)"},{"line_number":529,"context_line":"            # NOTE(TheJulia): Downside of multipath, if mpath is present"},{"line_number":530,"context_line":"            if is_mpath:"},{"line_number":531,"context_line":"                mpath_devices.append(kname)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5765c00a_55801cef","line":528,"updated":"2022-04-20 12:58:23.000000000","message":"same as above.","commit_id":"0c38fd9d515ce35752a5f96439f4b23778e6c078"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":481,"context_line":"                    \"TYPE did not match. Wanted: %(block_type)s but found: \""},{"line_number":482,"context_line":"                    \"%(line)s\", {\u0027block_type\u0027: block_type, \u0027line\u0027: line})"},{"line_number":483,"context_line":"                continue"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":486,"context_line":"        missing \u003d set(columns) - set(device)"},{"line_number":487,"context_line":"        if missing:"}],"source_content_type":"text/x-python","patch_set":5,"id":"461f6aab_24db1854","side":"PARENT","line":484,"updated":"2022-04-20 08:00:45.000000000","message":"nit: unrelated","commit_id":"f9a7871ea0bca6aba7c6730fa773565e4875e50a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        # Not all /dev entries are pointed to from /dev/disk/by-path"},{"line_number":538,"context_line":"        by_path_name \u003d by_path_mapping.get(name)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        devices.append(BlockDevice(name\u003dname,"},{"line_number":541,"context_line":"                                   model\u003ddevice[\u0027MODEL\u0027],"},{"line_number":542,"context_line":"                                   size\u003dint(device[\u0027SIZE\u0027] or 0),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fdb7c3b_4ce3210d","side":"PARENT","line":539,"updated":"2022-04-20 08:00:45.000000000","message":"ditto","commit_id":"f9a7871ea0bca6aba7c6730fa773565e4875e50a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":194,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":195,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":196,"context_line":"        detected \u003d True"},{"line_number":197,"context_line":"    except FileNotFoundError as e:"},{"line_number":198,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":199,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"97978655_d87dcc99","line":196,"updated":"2022-04-20 08:00:45.000000000","message":"nit: just return True","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":194,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":195,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":196,"context_line":"        detected \u003d True"},{"line_number":197,"context_line":"    except FileNotFoundError as e:"},{"line_number":198,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":199,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"0bd0672a_96b1b6ff","line":196,"in_reply_to":"97978655_d87dcc99","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":197,"context_line":"    except FileNotFoundError as e:"},{"line_number":198,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":199,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"},{"line_number":200,"context_line":"        detected \u003d False"},{"line_number":201,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":202,"context_line":"        LOG.warning(\u0027Attempted to invoke multipath utilities, but we \u0027"},{"line_number":203,"context_line":"                    \u0027encountered an error: %s\u0027, e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7051093a_d1bc2f3a","line":200,"updated":"2022-04-20 08:00:45.000000000","message":"and here just return False","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    except FileNotFoundError as e:"},{"line_number":198,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"},{"line_number":199,"context_line":"                    \u0027Not detected. Error recorded: %s\u0027, e)"},{"line_number":200,"context_line":"        detected \u003d False"},{"line_number":201,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":202,"context_line":"        LOG.warning(\u0027Attempted to invoke multipath utilities, but we \u0027"},{"line_number":203,"context_line":"                    \u0027encountered an error: %s\u0027, e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"4b7c3314_d8db16c1","line":200,"in_reply_to":"7051093a_d1bc2f3a","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":205,"context_line":"    return detected"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _is_multipath_device(device):"},{"line_number":209,"context_line":"    \"\"\"Check and return a multipath device.\"\"\""},{"line_number":210,"context_line":"    if not device:"},{"line_number":211,"context_line":"        # if lsblk provides invalid output, this can be None."}],"source_content_type":"text/x-python","patch_set":5,"id":"6b60d2f8_b5243e68","line":208,"updated":"2022-04-20 08:00:45.000000000","message":"Let\u0027s call it _get_multipath_parent or something. is_* functions should return a boolean.","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    return detected"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _is_multipath_device(device):"},{"line_number":209,"context_line":"    \"\"\"Check and return a multipath device.\"\"\""},{"line_number":210,"context_line":"    if not device:"},{"line_number":211,"context_line":"        # if lsblk provides invalid output, this can be None."}],"source_content_type":"text/x-python","patch_set":5,"id":"3050a211_3fb54a77","line":208,"in_reply_to":"6b60d2f8_b5243e68","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":469,"context_line":"                return True"},{"line_number":470,"context_line":"        return False"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    is_multipath \u003d None"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    if ignore_multipath:"},{"line_number":475,"context_line":"        # Make the calls to trigger multipathd"}],"source_content_type":"text/x-python","patch_set":5,"id":"9e23ee0e_9131a720","line":472,"updated":"2022-04-20 08:00:45.000000000","message":"nit: multipath_enabled?","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                return True"},{"line_number":470,"context_line":"        return False"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    is_multipath \u003d None"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    if ignore_multipath:"},{"line_number":475,"context_line":"        # Make the calls to trigger multipathd"}],"source_content_type":"text/x-python","patch_set":5,"id":"a56fa93b_3e755634","line":472,"in_reply_to":"9e23ee0e_9131a720","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    if ignore_multipath:"},{"line_number":475,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":476,"context_line":"        is_multipath \u003d _is_multipath_enabled()"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    _udev_settle()"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5994c878_a491e9df","line":476,"updated":"2022-04-20 08:00:45.000000000","message":"Works for the initial iteration. But this is going to run many times per IPA execution and should really go to the hardware manager\u0027s initialization code.","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb08c37d4223d33bd6861e222395fdeb458e7107","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    if ignore_multipath:"},{"line_number":475,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":476,"context_line":"        is_multipath \u003d _is_multipath_enabled()"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    _udev_settle()"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f78ec20_2639f1b3","line":476,"in_reply_to":"5994c878_a491e9df","updated":"2022-05-10 07:48:02.000000000","message":"Ack","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":567,"context_line":"                LOG.debug("},{"line_number":568,"context_line":"                    \"TYPE detected to contain \u0027md\u0027, signifying a \""},{"line_number":569,"context_line":"                    \"RAID partition. Found: %s\", line)"},{"line_number":570,"context_line":"            elif (devtype \u003d\u003d \u0027mpath\u0027 and block_type \u003d\u003d \u0027disk\u0027):"},{"line_number":571,"context_line":"                LOG.debug("},{"line_number":572,"context_line":"                    \"TYPE detected to contain \u0027mpath\u0027, \""},{"line_number":573,"context_line":"                    \"signifing a device mapper multipath device.\""}],"source_content_type":"text/x-python","patch_set":5,"id":"69edb24e_bf77d006","line":570,"updated":"2022-04-20 08:00:45.000000000","message":"nit: redundant brackets","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                LOG.debug("},{"line_number":568,"context_line":"                    \"TYPE detected to contain \u0027md\u0027, signifying a \""},{"line_number":569,"context_line":"                    \"RAID partition. Found: %s\", line)"},{"line_number":570,"context_line":"            elif (devtype \u003d\u003d \u0027mpath\u0027 and block_type \u003d\u003d \u0027disk\u0027):"},{"line_number":571,"context_line":"                LOG.debug("},{"line_number":572,"context_line":"                    \"TYPE detected to contain \u0027mpath\u0027, \""},{"line_number":573,"context_line":"                    \"signifing a device mapper multipath device.\""}],"source_content_type":"text/x-python","patch_set":5,"id":"549d6cc3_daba972d","line":570,"in_reply_to":"69edb24e_bf77d006","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":570,"context_line":"            elif (devtype \u003d\u003d \u0027mpath\u0027 and block_type \u003d\u003d \u0027disk\u0027):"},{"line_number":571,"context_line":"                LOG.debug("},{"line_number":572,"context_line":"                    \"TYPE detected to contain \u0027mpath\u0027, \""},{"line_number":573,"context_line":"                    \"signifing a device mapper multipath device.\""},{"line_number":574,"context_line":"                    \"Found: %s\", line)"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                LOG.debug("}],"source_content_type":"text/x-python","patch_set":5,"id":"037a7986_fd4c2677","line":573,"updated":"2022-04-20 08:00:45.000000000","message":"nit: missing space after the dot","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"07bb9bcb516e3c39f105eae03193a66a8a0430d6","unresolved":false,"context_lines":[{"line_number":570,"context_line":"            elif (devtype \u003d\u003d \u0027mpath\u0027 and block_type \u003d\u003d \u0027disk\u0027):"},{"line_number":571,"context_line":"                LOG.debug("},{"line_number":572,"context_line":"                    \"TYPE detected to contain \u0027mpath\u0027, \""},{"line_number":573,"context_line":"                    \"signifing a device mapper multipath device.\""},{"line_number":574,"context_line":"                    \"Found: %s\", line)"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                LOG.debug("}],"source_content_type":"text/x-python","patch_set":5,"id":"23d1ba6d_a1f5ead3","line":573,"in_reply_to":"037a7986_fd4c2677","updated":"2022-04-20 12:09:01.000000000","message":"Done","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d72e12c1705c9e9f344d9fdfc74cd7c1db15a67a","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"},{"line_number":147,"context_line":"    \"\"\""},{"line_number":148,"context_line":"    il_utils.try_execute(\u0027modprobe\u0027, \u0027dm-multipath\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def _check_for_iscsi():"}],"source_content_type":"text/x-python","patch_set":8,"id":"5414e6b7_20b15218","line":148,"updated":"2022-04-26 13:40:40.000000000","message":"ahh, yes. Good catch!","commit_id":"39627ca2c2f013e40660cd0769a1984a95dd7456"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb08c37d4223d33bd6861e222395fdeb458e7107","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"},{"line_number":147,"context_line":"    \"\"\""},{"line_number":148,"context_line":"    il_utils.try_execute(\u0027modprobe\u0027, \u0027dm-multipath\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def _check_for_iscsi():"}],"source_content_type":"text/x-python","patch_set":8,"id":"52a1377f_c6f40dcf","line":148,"in_reply_to":"5414e6b7_20b15218","updated":"2022-05-10 07:48:02.000000000","message":"Ack","commit_id":"39627ca2c2f013e40660cd0769a1984a95dd7456"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d72e12c1705c9e9f344d9fdfc74cd7c1db15a67a","unresolved":true,"context_lines":[{"line_number":219,"context_line":"    if not device:"},{"line_number":220,"context_line":"        # if lsblk provides invalid output, this can be None."},{"line_number":221,"context_line":"        return"},{"line_number":222,"context_line":"    check_device \u003d os.path.join(\u0027/dev\u0027, str(device))"},{"line_number":223,"context_line":"    try:"},{"line_number":224,"context_line":"        # Explicitly run the check as regardless of if the device is mpath or"},{"line_number":225,"context_line":"        # not, multipath tools when using list always exits with a return"}],"source_content_type":"text/x-python","patch_set":8,"id":"d137378b_aaf3471c","line":222,"range":{"start_line":222,"start_character":40,"end_line":222,"end_character":51},"updated":"2022-04-26 13:40:40.000000000","message":"Direct casting is likely not required.","commit_id":"39627ca2c2f013e40660cd0769a1984a95dd7456"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"MULTIPATH_ENABLED \u003d None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def _get_device_info(dev, devclass, field):"}],"source_content_type":"text/x-python","patch_set":9,"id":"26b10696_03195620","line":84,"range":{"start_line":84,"start_character":20,"end_line":84,"end_character":24},"updated":"2022-04-27 16:55:22.000000000","message":"?: Why is this initialized to None and not False if this is used as the default when ignore_multipath is False?","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88125f0417a42646baa4b90311dd923abe69dcb3","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"MULTIPATH_ENABLED \u003d None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def _get_device_info(dev, devclass, field):"}],"source_content_type":"text/x-python","patch_set":9,"id":"50055ba5_9b3d1b41","line":84,"range":{"start_line":84,"start_character":20,"end_line":84,"end_character":24},"in_reply_to":"26b10696_03195620","updated":"2022-05-06 15:28:35.000000000","message":"when I originally tried using a global variable, which is kind of asking for unit testing headache... my thought was None meaning \"not done yet, and then never call base setup action sever again by checking based upon that, since it can be called potentially multiple times based upon the code path and any plugins loaded.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    il_utils.try_execute(\u0027modprobe\u0027, \u0027ipmi_si\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def _load_multipath_modules():"},{"line_number":144,"context_line":"    \"\"\"Load multipath modules"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"}],"source_content_type":"text/x-python","patch_set":9,"id":"2567e597_4d06704e","line":143,"range":{"start_line":143,"start_character":4,"end_line":143,"end_character":27},"updated":"2022-04-27 16:55:22.000000000","message":"-1: This is creating the multipath.conf file, an appropriate name is necessary. e.g. \"_ensure_multipath_conf_exists\"","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"},{"line_number":147,"context_line":"    \"\"\""},{"line_number":148,"context_line":"    il_utils.try_execute(\u0027/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":149,"context_line":"                         \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":150,"context_line":"                         \u0027--with_module\u0027, \u0027y\u0027,"},{"line_number":151,"context_line":"                         \u0027--with_multipathd\u0027, \u0027y\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f24be01_6caca1ae","line":148,"updated":"2022-04-27 16:55:22.000000000","message":"-1: This will replace existing values if /ect/multipath.conf already exists.\n\nFor example existing multipath.conf could have \"find_multipaths\" set to \"no\", because detection is faster if all volumes are going to be multipathed, but with this command it will change the current configuration to wait until there is a second device (or if it\u0027s the second time we attach the same volume and it was multipathed before).\n\nIn my opinion conditioning the creation of the file to the file not existing should suffice.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34bf0995bcf263253c4ce4a8636227392ae1ef69","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"},{"line_number":147,"context_line":"    \"\"\""},{"line_number":148,"context_line":"    il_utils.try_execute(\u0027/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":149,"context_line":"                         \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":150,"context_line":"                         \u0027--with_module\u0027, \u0027y\u0027,"},{"line_number":151,"context_line":"                         \u0027--with_multipathd\u0027, \u0027y\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a1740d25_44cf55fa","line":148,"in_reply_to":"7f24be01_6caca1ae","updated":"2022-05-05 07:30:52.000000000","message":"Keep in mind that it\u0027s a deployment ramdisk, i.e. a controlled environment. The configuration file cannot just appear.\n\nBut yeah, we can check it nonetheless.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88125f0417a42646baa4b90311dd923abe69dcb3","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    This is required to be able to collect multipath information"},{"line_number":147,"context_line":"    \"\"\""},{"line_number":148,"context_line":"    il_utils.try_execute(\u0027/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":149,"context_line":"                         \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":150,"context_line":"                         \u0027--with_module\u0027, \u0027y\u0027,"},{"line_number":151,"context_line":"                         \u0027--with_multipathd\u0027, \u0027y\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b51052d5_2a8d6227","line":148,"in_reply_to":"a1740d25_44cf55fa","updated":"2022-05-06 15:28:35.000000000","message":"We do have some non-ramdisky usage out there, mainly in containers for re-introspection, but yeah. We shouldn\u0027t overwrite if it already exists.\n\nI guess my *huge* frustration here is divergence between the same base tools in distributions.\n\nIt still looks like my patch would have been good for Debian based upon published docs and local evaluation where I don\u0027t have an actual config file and the docs say to start with \"multipath -t\" which dumps out the configuration, but it is not required.... Joy!","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            return match.group(1)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"def _is_multipath_enabled():"},{"line_number":198,"context_line":"    \"\"\"Check, remember, and start multipath tools is present.\"\"\""},{"line_number":199,"context_line":"    try:"},{"line_number":200,"context_line":"        _load_multipath_modules()"}],"source_content_type":"text/x-python","patch_set":9,"id":"4ebf2df7_d01b2d0a","line":197,"range":{"start_line":197,"start_character":4,"end_line":197,"end_character":25},"updated":"2022-04-27 16:55:22.000000000","message":"-1: Name indicates that this is checking whether it\u0027s enabled or not, but in reality it is starting it if it\u0027s not.  Method should be renamed to reflect it.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":203,"context_line":"        # explicit multipathd start just appears to silently exit with a"},{"line_number":204,"context_line":"        # result code of 0."},{"line_number":205,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":206,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":207,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":208,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":"    except FileNotFoundError as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"47277a9e_10eea0e8","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":54},"updated":"2022-04-27 16:55:22.000000000","message":"nit: This comment is misleading\n\nThe comment here says \"kernel to actually do the needful and identify paths\", but  \"multipath -ll\" only collects available information from multiple sources to present it in a nice and organized way.\n\nThat is different from identify existing paths (devices) in the system, checking them against known multipathed WWID devices and other paths, and creating the DM for the multipath.  Which, iirc, is done via udev events/rules.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78e02ba477d723cea77a969174dfdb5e145ffbcd","unresolved":true,"context_lines":[{"line_number":203,"context_line":"        # explicit multipathd start just appears to silently exit with a"},{"line_number":204,"context_line":"        # result code of 0."},{"line_number":205,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":206,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":207,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":208,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":"    except FileNotFoundError as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"4c065e88_0f934c57","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":54},"in_reply_to":"47277a9e_10eea0e8","updated":"2022-05-06 23:30:37.000000000","message":"Intentionally oversimplified and based upon documentation as I interpreted it given that it is to trigger a scan and *and* presents the mix of what is known and what is detected to the user.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":206,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":207,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":208,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":"    except FileNotFoundError as e:"},{"line_number":211,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"4e40830b_a8c1717b","line":208,"updated":"2022-04-27 16:55:22.000000000","message":"nit: If we are using this command to check that multipathd is responsive, then I think a cleaner command would be:\n\n multipathd show daemon\n\nIf we are running it thinking that it triggers something in multipathd or the kernel, such as bulding multipath DMs from existing paths, then we can just remove the call, since it won\u0027t do that.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88125f0417a42646baa4b90311dd923abe69dcb3","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":206,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":207,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":208,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":209,"context_line":"        return True"},{"line_number":210,"context_line":"    except FileNotFoundError as e:"},{"line_number":211,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7f8661_9e667820","line":208,"in_reply_to":"4e40830b_a8c1717b","updated":"2022-05-06 15:28:35.000000000","message":"It is to explicitly force it to scan, as we can have devices appear with hardware manager plugins or particular actions against the hardware which we\u0027re not directly exposed to.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":224,"context_line":"        return"},{"line_number":225,"context_line":"    check_device \u003d os.path.join(\u0027/dev\u0027, str(device))"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        # Explicitly run the check as regardless of if the device is mpath or"},{"line_number":228,"context_line":"        # not, multipath tools when using list always exits with a return"},{"line_number":229,"context_line":"        # code of 0."},{"line_number":230,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-c\u0027, check_device)"},{"line_number":231,"context_line":"        # path check with return an exit code of 1 if you send it a multipath"},{"line_number":232,"context_line":"        # device mapper device, like dm-0."},{"line_number":233,"context_line":"        out, _ \u003d il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, check_device)"},{"line_number":234,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":235,"context_line":"        # FileNotFoundError if the utility does not exist."},{"line_number":236,"context_line":"        # -1 return code if the device is not valid."}],"source_content_type":"text/x-python","patch_set":9,"id":"7d3a5674_fc36fb42","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":67},"updated":"2022-04-27 16:55:22.000000000","message":"nit: There\u0027s a faster way to know if it belongs to a DM, but this patches implementation is probably easier to understand.\n\nAlternative is:\n\n        dev_name \u003d os.path.basename(check_device)\n        dms \u003d glob.glob(f\u0027/sys/block/{dev_name}/holders/dm-*\u0027)          \n        if dms:\n            return os.path.basename(dms[0])","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78e02ba477d723cea77a969174dfdb5e145ffbcd","unresolved":true,"context_lines":[{"line_number":224,"context_line":"        return"},{"line_number":225,"context_line":"    check_device \u003d os.path.join(\u0027/dev\u0027, str(device))"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        # Explicitly run the check as regardless of if the device is mpath or"},{"line_number":228,"context_line":"        # not, multipath tools when using list always exits with a return"},{"line_number":229,"context_line":"        # code of 0."},{"line_number":230,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-c\u0027, check_device)"},{"line_number":231,"context_line":"        # path check with return an exit code of 1 if you send it a multipath"},{"line_number":232,"context_line":"        # device mapper device, like dm-0."},{"line_number":233,"context_line":"        out, _ \u003d il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027, check_device)"},{"line_number":234,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":235,"context_line":"        # FileNotFoundError if the utility does not exist."},{"line_number":236,"context_line":"        # -1 return code if the device is not valid."}],"source_content_type":"text/x-python","patch_set":9,"id":"346978d9_ef4fe3f2","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":67},"in_reply_to":"7d3a5674_fc36fb42","updated":"2022-05-06 23:30:37.000000000","message":"not sure, I kind of like it if we\u0027re just going to rely upon sysfs...\n\nWhich maybe we should, or maybe we could run ?mulitpath -f?","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"61939732f28b0f598dbca9ff8665f44d7fa3d47e","unresolved":true,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    if ignore_multipath:"},{"line_number":485,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":486,"context_line":"        MULTIPATH_ENABLED \u003d _is_multipath_enabled()"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    _udev_settle()"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ce647b7_922433d6","line":486,"range":{"start_line":486,"start_character":28,"end_line":486,"end_character":49},"updated":"2022-04-27 16:55:22.000000000","message":"?: Do we need to run this again if it\u0027s already run on \"evaluate_hardware_support\"?\n\nIn that method we could set global MULTIPATH_ENABLED to the value that was detected there and then just use it here:\n\n ignore_multipath_children \u003d ignore_multipath and MULTIPATH_ENABLED\n\nnit: Seems a bit \"hacky\" (and an unnecessary technical debt) to have a global default (L84) but then hide that value with a local variable when ignore_multipath is True. Why not just create a local variable in all cases?\n\n MULTIPATH_ENABLED \u003d ignore_multipath and _is_multipath_enabled()","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78e02ba477d723cea77a969174dfdb5e145ffbcd","unresolved":true,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    if ignore_multipath:"},{"line_number":485,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":486,"context_line":"        MULTIPATH_ENABLED \u003d _is_multipath_enabled()"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    _udev_settle()"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b4d7b74c_b903b42c","line":486,"range":{"start_line":486,"start_character":28,"end_line":486,"end_character":49},"in_reply_to":"5ce647b7_922433d6","updated":"2022-05-06 23:30:37.000000000","message":"short answer, no. we only need to run it once.","commit_id":"c25daf35da6586d7d582414a2aca0fdec154876d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    and another which is just load the modules, and trust multipathd"},{"line_number":150,"context_line":"    will do the needful."},{"line_number":151,"context_line":"    \"\"\""},{"line_number":152,"context_line":"    if (os.path.isfile(\u0027/usr/sbin/mpathconf\u0027)"},{"line_number":153,"context_line":"        and not os.path.isfile(\u0027/etc/multipath.conf\u0027)):"},{"line_number":154,"context_line":"        # For Centos/Rhel/Etc which uses mpathconf, this does"},{"line_number":155,"context_line":"        # a couple different things, including configuration generation..."}],"source_content_type":"text/x-python","patch_set":17,"id":"5152fb96_fcbf26b3","line":152,"updated":"2022-05-17 15:24:39.000000000","message":"nit: the location in /usr/sbin is not granted for sure, maybe just catch FileNotFoundError from execute?","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    \"\"\""},{"line_number":152,"context_line":"    if (os.path.isfile(\u0027/usr/sbin/mpathconf\u0027)"},{"line_number":153,"context_line":"        and not os.path.isfile(\u0027/etc/multipath.conf\u0027)):"},{"line_number":154,"context_line":"        # For Centos/Rhel/Etc which uses mpathconf, this does"},{"line_number":155,"context_line":"        # a couple different things, including configuration generation..."},{"line_number":156,"context_line":"        # which is not *really* required.. at least *shouldn\u0027t* be."},{"line_number":157,"context_line":"        # WARNING(TheJulia): This command explicitly replaces local"}],"source_content_type":"text/x-python","patch_set":17,"id":"785ee7a9_dfee66fc","line":154,"updated":"2022-05-17 15:24:39.000000000","message":"nit: RHEL","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        # a couple different things, including configuration generation..."},{"line_number":156,"context_line":"        # which is not *really* required.. at least *shouldn\u0027t* be."},{"line_number":157,"context_line":"        # WARNING(TheJulia): This command explicitly replaces local"},{"line_number":158,"context_line":"        # configuration."},{"line_number":159,"context_line":"        il_utils.try_execute(\u0027/usr/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":160,"context_line":"                             \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":161,"context_line":"                             \u0027--with_module\u0027, \u0027y\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"0e8a7951_fa5424eb","line":158,"updated":"2022-05-17 15:24:39.000000000","message":"nit: can be removed","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"}],"ironic_python_agent/tests/unit/test_hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":790,"context_line":"        mocked_readlink.return_value \u003d \u0027../../sda\u0027"},{"line_number":791,"context_line":"        mocked_listdir.return_value \u003d [\u00271:0:0:0\u0027]"},{"line_number":792,"context_line":"        mock_cached_node.return_value \u003d None"},{"line_number":793,"context_line":"        mocked_execute.side_effect \u003d ["},{"line_number":794,"context_line":"            (hws.MULTIPATH_BLK_DEVICE_TEMPLATE, \u0027\u0027),"},{"line_number":795,"context_line":"            (hws.MULTIPATH_VALID_PATH % \u0027/dev/sda\u0027, \u0027\u0027),"},{"line_number":796,"context_line":"            (hws.MULTIPATH_LINKS_DM % \u0027dm-0\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3da0b2ca_df8ace0f","line":793,"updated":"2022-04-20 08:00:45.000000000","message":"Here and below, I\u0027d rather see _is_multipath_device mocked and unit-tested separately, than adding complexity to already complex unit tests.","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"097a5480d7f03b6c62cc795fa2acfe294398b99b","unresolved":true,"context_lines":[{"line_number":790,"context_line":"        mocked_readlink.return_value \u003d \u0027../../sda\u0027"},{"line_number":791,"context_line":"        mocked_listdir.return_value \u003d [\u00271:0:0:0\u0027]"},{"line_number":792,"context_line":"        mock_cached_node.return_value \u003d None"},{"line_number":793,"context_line":"        mocked_execute.side_effect \u003d ["},{"line_number":794,"context_line":"            (hws.MULTIPATH_BLK_DEVICE_TEMPLATE, \u0027\u0027),"},{"line_number":795,"context_line":"            (hws.MULTIPATH_VALID_PATH % \u0027/dev/sda\u0027, \u0027\u0027),"},{"line_number":796,"context_line":"            (hws.MULTIPATH_LINKS_DM % \u0027dm-0\u0027, \u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ad623d34_df65ce3b","line":793,"in_reply_to":"3da0b2ca_df8ace0f","updated":"2022-04-20 12:16:58.000000000","message":"Yeah, I think this makes sense","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"db181bacb22480f0a938e153c5a8c8396b5a8ac0","unresolved":true,"context_lines":[{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":""},{"line_number":4758,"context_line":"@mock.patch.object(il_utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":4759,"context_line":"class TestMultipathEnabled(base.IronicAgentTest):"},{"line_number":4760,"context_line":""},{"line_number":4761,"context_line":"    def test_is_multipath_enabled(self, mocked_execute):"},{"line_number":4762,"context_line":"        mocked_execute.side_effect \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"ffcc976f_20e6be46","line":4759,"updated":"2022-04-20 08:00:45.000000000","message":"One test case for one function, not three","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f441034545bd06b1aeebe32038ed5283907fc442","unresolved":false,"context_lines":[{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":""},{"line_number":4758,"context_line":"@mock.patch.object(il_utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":4759,"context_line":"class TestMultipathEnabled(base.IronicAgentTest):"},{"line_number":4760,"context_line":""},{"line_number":4761,"context_line":"    def test_is_multipath_enabled(self, mocked_execute):"},{"line_number":4762,"context_line":"        mocked_execute.side_effect \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"2879fa63_690bd2f7","line":4759,"in_reply_to":"c3f80862_b99076d6","updated":"2022-04-20 12:58:23.000000000","message":"I did it as 3 originally because I tried to have it as a global variable but testing runs kept squashing it, so I refactored it out and forgot about separate classes.","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"097a5480d7f03b6c62cc795fa2acfe294398b99b","unresolved":false,"context_lines":[{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":""},{"line_number":4758,"context_line":"@mock.patch.object(il_utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":4759,"context_line":"class TestMultipathEnabled(base.IronicAgentTest):"},{"line_number":4760,"context_line":""},{"line_number":4761,"context_line":"    def test_is_multipath_enabled(self, mocked_execute):"},{"line_number":4762,"context_line":"        mocked_execute.side_effect \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"c3f80862_b99076d6","line":4759,"in_reply_to":"ffcc976f_20e6be46","updated":"2022-04-20 12:16:58.000000000","message":"Moved to one class","commit_id":"bdd59d69bdbb1743c402cb4b78fa5d20b44253d3"}],"ironic_python_agent/tests/unit/test_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                     \u0027lshw\u0027: mock.ANY, \u0027lsblk\u0027: mock.ANY,"},{"line_number":434,"context_line":"                     \u0027lsblk-full\u0027: mock.ANY, \u0027mdstat\u0027: mock.ANY,"},{"line_number":435,"context_line":"                     \u0027mount\u0027: mock.ANY, \u0027parted\u0027: mock.ANY,"},{"line_number":436,"context_line":"                     \u0027multipath\u0027: mock.ANY},"},{"line_number":437,"context_line":"            file_list\u003d[])"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    @mock.patch.object(utils, \u0027gzip_and_b64encode\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"d3ca8b36_05baeeaf","line":436,"updated":"2022-05-17 15:24:39.000000000","message":"Please revert this in a follow-up.","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                     \u0027lshw\u0027: mock.ANY, \u0027lsblk\u0027: mock.ANY,"},{"line_number":464,"context_line":"                     \u0027lsblk-full\u0027: mock.ANY, \u0027mdstat\u0027: mock.ANY,"},{"line_number":465,"context_line":"                     \u0027mount\u0027: mock.ANY, \u0027parted\u0027: mock.ANY,"},{"line_number":466,"context_line":"                     \u0027multipath\u0027: mock.ANY},"},{"line_number":467,"context_line":"            file_list\u003d[tmp.name])"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    @mock.patch.object(utils, \u0027gzip_and_b64encode\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"21cbdfd4_dc84c210","line":466,"updated":"2022-05-17 15:24:39.000000000","message":"ditto","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                     \u0027lshw\u0027: mock.ANY, \u0027lsblk\u0027: mock.ANY,"},{"line_number":489,"context_line":"                     \u0027lsblk-full\u0027: mock.ANY, \u0027mdstat\u0027: mock.ANY,"},{"line_number":490,"context_line":"                     \u0027mount\u0027: mock.ANY, \u0027parted\u0027: mock.ANY,"},{"line_number":491,"context_line":"                     \u0027multipath\u0027: mock.ANY},"},{"line_number":492,"context_line":"            file_list\u003d[\u0027/var/log\u0027])"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    @mock.patch.object(utils, \u0027gzip_and_b64encode\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"6d546b54_3614bfcc","line":491,"updated":"2022-05-17 15:24:39.000000000","message":"ditto","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a5650c9ce65d96b5123153dc4a759618889b3b4","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                     \u0027lshw\u0027: mock.ANY, \u0027lsblk\u0027: mock.ANY,"},{"line_number":518,"context_line":"                     \u0027lsblk-full\u0027: mock.ANY, \u0027mdstat\u0027: mock.ANY,"},{"line_number":519,"context_line":"                     \u0027mount\u0027: mock.ANY, \u0027parted\u0027: mock.ANY,"},{"line_number":520,"context_line":"                     \u0027multipath\u0027: mock.ANY},"},{"line_number":521,"context_line":"            file_list\u003d[\u0027/var/log\u0027, tmp.name])"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def test_get_ssl_client_options(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ea4af09f_2d23252f","line":520,"updated":"2022-05-17 15:24:39.000000000","message":"ditto","commit_id":"ac47735ad6b5c27a57e7b295afb2bafb7617eea9"}]}
