)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"019c501233ebf4e9c890a84ad671ad29609c8dfd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4deaee88_d65beb62","updated":"2022-04-25 11:58:27.000000000","message":"recheck","commit_id":"11f295f5b73f2d2c2847aa2f52923a9ff889a98f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"357ca9d4_5673ce41","updated":"2022-04-27 14:58:43.000000000","message":"I may be missing something, but isn\u0027t the code supposed to ignore multipathed devices \"IF\" multipathd is actually running?\n\nCurrent code seems to actually want to enable it.  Is that what it wants to do?","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"f05f3aadcea1250a80ae72834d61ca95540839c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8c0f6129_311df8ae","updated":"2022-05-23 14:51:12.000000000","message":"recheck","commit_id":"668cd217967c6d114cec2241e97d3cfaee1a7a74"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f736a7700381b87b16c4f8ce1c83d56facd16b40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c422d57f_2b0d580a","updated":"2022-05-30 02:16:33.000000000","message":"recheck","commit_id":"668cd217967c6d114cec2241e97d3cfaee1a7a74"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d4cb54c501e38be7f79fe3e7b0978b4a456d9dff","unresolved":false,"context_lines":[{"line_number":172,"context_line":"def _is_multipath_enabled():"},{"line_number":173,"context_line":"    \"\"\"Check, remember, and start multipath tools is present.\"\"\""},{"line_number":174,"context_line":"    try:"},{"line_number":175,"context_line":"        utils.execute(\u0027multipath\u0027, \u0027-h\u0027)"},{"line_number":176,"context_line":"        # This might not work, ideally it *should* already be running..."},{"line_number":177,"context_line":"        # NOTE(TheJulia): Testing locally, a prior running multipathd, the"},{"line_number":178,"context_line":"        # explicit multipathd start just appears to silently exit with a"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b4f0c70_d2834ee0","line":175,"updated":"2022-04-26 10:04:07.000000000","message":"This is redundant with other commands and pollutes the logs","commit_id":"11f295f5b73f2d2c2847aa2f52923a9ff889a98f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"383044a0a1bda39aa8b9dd4b3d444672ab3469a5","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    if ignore_multipath:"},{"line_number":462,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":463,"context_line":"        multipath_enabled \u003d _is_multipath_enabled()"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    _udev_settle()"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"e959983f_211272e4","line":463,"updated":"2022-04-26 10:05:32.000000000","message":"ideally, this should be called once in evaluate_hardware_support","commit_id":"11f295f5b73f2d2c2847aa2f52923a9ff889a98f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d4cb54c501e38be7f79fe3e7b0978b4a456d9dff","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        self.sys_path \u003d \u0027/sys\u0027"},{"line_number":1066,"context_line":"        self.lldp_data \u003d {}"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"    def evaluate_hardware_support(self):"},{"line_number":1069,"context_line":"        # Do some initialization before we declare ourself ready"},{"line_number":1070,"context_line":"        _check_for_iscsi()"},{"line_number":1071,"context_line":"        _md_scan_and_assemble()"}],"source_content_type":"text/x-python","patch_set":3,"id":"631d8aea_481d02f8","line":1068,"updated":"2022-04-26 10:04:07.000000000","message":"you need to modprobe dm-multipath somewhere here (similarly to how it\u0027s done for IPMI)","commit_id":"11f295f5b73f2d2c2847aa2f52923a9ff889a98f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":416,"context_line":"                           \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)))[0]"},{"line_number":417,"context_line":"    lines \u003d report.splitlines()"},{"line_number":418,"context_line":"    context \u003d pyudev.Context()"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    devices \u003d []"},{"line_number":421,"context_line":"    for line in lines:"},{"line_number":422,"context_line":"        device \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3073206a_2b157a4a","side":"PARENT","line":419,"updated":"2022-04-27 14:58:43.000000000","message":"nit: unrelated change","commit_id":"881015acef90451754144f56d681cad3d4152cbe"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    This is required to be able to collect multipath information"},{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":"    il_utils.try_execute(\u0027/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":137,"context_line":"                         \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":138,"context_line":"                         \u0027--with_module\u0027, \u0027y\u0027,"},{"line_number":139,"context_line":"                         \u0027--with_multipathd\u0027, \u0027y\u0027)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def _check_for_iscsi():"}],"source_content_type":"text/x-python","patch_set":5,"id":"b5ec3f78_cc38c352","line":139,"range":{"start_line":136,"start_character":0,"end_line":139,"end_character":50},"updated":"2022-04-27 14:58:43.000000000","message":"-1: This will override values existing in /etc/multipath.conf, which seems like something we wouldn\u0027t want to do","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a2efe96c8262110cb280806ec6e007a7fed32195","unresolved":true,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    This is required to be able to collect multipath information"},{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":"    il_utils.try_execute(\u0027/sbin/mpathconf\u0027, \u0027--enable\u0027,"},{"line_number":137,"context_line":"                         \u0027--find_multipaths\u0027, \u0027yes\u0027,"},{"line_number":138,"context_line":"                         \u0027--with_module\u0027, \u0027y\u0027,"},{"line_number":139,"context_line":"                         \u0027--with_multipathd\u0027, \u0027y\u0027)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def _check_for_iscsi():"}],"source_content_type":"text/x-python","patch_set":5,"id":"717ceb2a_c4228ee0","line":139,"range":{"start_line":136,"start_character":0,"end_line":139,"end_character":50},"in_reply_to":"b5ec3f78_cc38c352","updated":"2022-04-27 15:34:24.000000000","message":"multipath.conf does not exist yet at this point\nthis is the error that we get:\nread /etc/multipath.conf\n/etc/multipath.conf does not exist, blacklisting all devices.\nYou can run \"/sbin/mpathconf --enable\" to create","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        # NOTE(TheJulia): Testing locally, a prior running multipathd, the"},{"line_number":191,"context_line":"        # explicit multipathd start just appears to silently exit with a"},{"line_number":192,"context_line":"        # result code of 0."},{"line_number":193,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":194,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":195,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":196,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"25991b92_a9442f2c","line":193,"updated":"2022-04-27 14:58:43.000000000","message":"-1: I don\u0027t think it\u0027s a good idea to run this, as it will start the multipathd daemon in the background if it\u0027s not already running.\n\nTo check whether it\u0027s running it would better to run \n\n multipathd show daemon\n\nWhich will return status code 1 if it\u0027s not running and something like this if it is:\n\n pid 867187 idle","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a2efe96c8262110cb280806ec6e007a7fed32195","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        # NOTE(TheJulia): Testing locally, a prior running multipathd, the"},{"line_number":191,"context_line":"        # explicit multipathd start just appears to silently exit with a"},{"line_number":192,"context_line":"        # result code of 0."},{"line_number":193,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":194,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":195,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":196,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"517417f7_e7398f2f","line":193,"in_reply_to":"25991b92_a9442f2c","updated":"2022-04-27 15:34:24.000000000","message":"the daemon at this point should be already running so this is redundant\nwe don\u0027t need to check if it\u0027s running, we need to be sure that it is actually running","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":194,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":195,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":196,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":197,"context_line":"        return True"},{"line_number":198,"context_line":"    except FileNotFoundError as e:"},{"line_number":199,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"19f3b1bd_176c9e32","line":196,"range":{"start_line":196,"start_character":0,"end_line":196,"end_character":44},"updated":"2022-04-27 14:58:43.000000000","message":"As far as I remember this doesn\u0027t actually do anything at the kernel level, that gets done via udev event triggers/rules...","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a2efe96c8262110cb280806ec6e007a7fed32195","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        il_utils.execute(\u0027multipathd\u0027)"},{"line_number":194,"context_line":"        # This is mainly to get the kernel to actually do the needful and"},{"line_number":195,"context_line":"        # identify paths. Maybe save output for later."},{"line_number":196,"context_line":"        il_utils.execute(\u0027multipath\u0027, \u0027-ll\u0027)"},{"line_number":197,"context_line":"        return True"},{"line_number":198,"context_line":"    except FileNotFoundError as e:"},{"line_number":199,"context_line":"        LOG.warning(\u0027Attempted to determine if multipath tools were present. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"aacd3a65_4f7e0245","line":196,"range":{"start_line":196,"start_character":0,"end_line":196,"end_character":44},"in_reply_to":"19f3b1bd_176c9e32","updated":"2022-04-27 15:34:24.000000000","message":"this should get the info that we need, it\u0027s a refresh of sort\nfrom the man pages:\n-ll    Show (\"list\") the current multipath topology from all available information (sysfs, the device mapper, path checkers ...).","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    if ignore_multipath:"},{"line_number":473,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":474,"context_line":"        MULTIPATH_ENABLED \u003d _is_multipath_enabled()"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    _udev_settle()"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"38160ba7_0ef669b4","line":474,"range":{"start_line":474,"start_character":8,"end_line":474,"end_character":25},"updated":"2022-04-27 14:58:43.000000000","message":"-1: Seems a bit \"hacky\" to have a global default (L83) but then hide that value with a local variable when we are asked to ignore_multipath.\n\nWhy not just create a local variable in all cases?\n\n MULTIPATH_ENABLED \u003d ignore_multipath and _is_multipath_enabled()","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"a2efe96c8262110cb280806ec6e007a7fed32195","unresolved":true,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    if ignore_multipath:"},{"line_number":473,"context_line":"        # Make the calls to trigger multipathd"},{"line_number":474,"context_line":"        MULTIPATH_ENABLED \u003d _is_multipath_enabled()"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    _udev_settle()"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3240a661_3d9cb13e","line":474,"range":{"start_line":474,"start_character":8,"end_line":474,"end_character":25},"in_reply_to":"38160ba7_0ef669b4","updated":"2022-04-27 15:34:24.000000000","message":"this is hacky, it\u0027s intended to be like this for the time being\nwe will consider a better option once we fix the current issue we\u0027re dealing with","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"}],"releasenotes/notes/multipath-handling-00a5b412d2cf2e4e.yaml":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"65974c9c0a041b91afa83262a13fad783e7cadc2","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    to handle and account for multipaths based upon the MPIO data available."},{"line_number":8,"context_line":"    This requires the ``multipath`` and ``multipathd`` utility to be present"},{"line_number":9,"context_line":"    in the ramdisk. These are supplied by the ``device-mapper-multipath`` or"},{"line_number":10,"context_line":"    ``multipath-tools`` packages, and are not requried for the agent\u0027s use."},{"line_number":11,"context_line":"  - |"},{"line_number":12,"context_line":"    Fixes non-ideal behavior when performing cleaning where Active/Active"},{"line_number":13,"context_line":"    MPIO devices would ultimately be cleaned once per IO path, instead of"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3cc1c03a_8ce64fbe","line":10,"updated":"2022-04-27 14:58:43.000000000","message":"nit: As I understand it, the code would also fail if a single path from a multipath is down.","commit_id":"866f9a997a490d9a03db9d800f169a033b134d15"}]}
