)]}'
{"swift/cli/relinker.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4a1cc30bdb3eac2019d023c021e9b991ae44ab10","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        final_messages.append(\u0027Device %s (pid\u003d%s) exited with unexpected status %s\u0027 % (dev, pid, status))"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    for msg in final_messages:"},{"line_number":184,"context_line":"        print(msg)"},{"line_number":185,"context_line":"    return final_status"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f2c279eb_1fdbc633","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":13},"updated":"2021-01-07 01:48:48.000000000","message":"Should probably be more like a\n\n logger.info(msg)","commit_id":"5838e93fb3fc7e7cb279c71905fc5aa881b3d8b0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f3683abe45c70126eaeb87ff569860b7c263bf2f","unresolved":true,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"def parallel_process(do_cleanup, conf, logger\u003dNone, device_list\u003dNone):"},{"line_number":453,"context_line":"    logger \u003d logger or logging.getLogger()"},{"line_number":454,"context_line":"    device_list \u003d device_list or os.listdir(conf[\u0027devices\u0027])"},{"line_number":455,"context_line":"    workers \u003d conf[\u0027workers\u0027]"},{"line_number":456,"context_line":"    if workers \u003d\u003d \u0027auto\u0027:"},{"line_number":457,"context_line":"        workers \u003d len(device_list)"}],"source_content_type":"text/x-python","patch_set":8,"id":"c70dea4d_fc5ee617","line":454,"range":{"start_line":454,"start_character":18,"end_line":454,"end_character":29},"updated":"2021-03-31 07:57:02.000000000","message":"device_list should be made into a set at some point if it isn\u0027t already - the listdir will have devices but the list from command line might not","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"def parallel_process(do_cleanup, conf, logger\u003dNone, device_list\u003dNone):"},{"line_number":453,"context_line":"    logger \u003d logger or logging.getLogger()"},{"line_number":454,"context_line":"    device_list \u003d device_list or os.listdir(conf[\u0027devices\u0027])"},{"line_number":455,"context_line":"    workers \u003d conf[\u0027workers\u0027]"},{"line_number":456,"context_line":"    if workers \u003d\u003d \u0027auto\u0027:"},{"line_number":457,"context_line":"        workers \u003d len(device_list)"}],"source_content_type":"text/x-python","patch_set":8,"id":"52d33811_36fabfe3","line":454,"range":{"start_line":454,"start_character":18,"end_line":454,"end_character":29},"in_reply_to":"c70dea4d_fc5ee617","updated":"2021-03-31 20:50:34.000000000","message":"Done","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":476,"context_line":"    final_messages \u003d []"},{"line_number":477,"context_line":"    while children:"},{"line_number":478,"context_line":"        pid, status \u003d os.wait()"},{"line_number":479,"context_line":"        # sig \u003d status \u0026 0xff"},{"line_number":480,"context_line":"        status \u003d status \u003e\u003e 8"},{"line_number":481,"context_line":"        devs \u003d children.pop(pid, \u0027unknown device\u0027)"},{"line_number":482,"context_line":"        worker_desc \u003d \u0027(pid\u003d%s, devs\u003d%s)\u0027 % (pid, \u0027,\u0027.join(devs))"}],"source_content_type":"text/x-python","patch_set":8,"id":"828f9a37_e5545233","line":479,"range":{"start_line":479,"start_character":8,"end_line":479,"end_character":29},"updated":"2021-03-30 17:10:20.000000000","message":"worth checking sig \u003d\u003d 0?","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9f26ce52735b628fc4e796a0cf4104b83bb29ae","unresolved":true,"context_lines":[{"line_number":476,"context_line":"    final_messages \u003d []"},{"line_number":477,"context_line":"    while children:"},{"line_number":478,"context_line":"        pid, status \u003d os.wait()"},{"line_number":479,"context_line":"        # sig \u003d status \u0026 0xff"},{"line_number":480,"context_line":"        status \u003d status \u003e\u003e 8"},{"line_number":481,"context_line":"        devs \u003d children.pop(pid, \u0027unknown device\u0027)"},{"line_number":482,"context_line":"        worker_desc \u003d \u0027(pid\u003d%s, devs\u003d%s)\u0027 % (pid, \u0027,\u0027.join(devs))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa8df5f_09ca696b","line":479,"range":{"start_line":479,"start_character":8,"end_line":479,"end_character":29},"in_reply_to":"828f9a37_e5545233","updated":"2021-03-30 17:44:12.000000000","message":"Yeah, signal handling of the children is definitely under-tested (even just manually). If it\u0027s *not* 0, we should treat it as an error, since we have to assume the child didn\u0027t finish processing.\n\nAlso need to look at signal handling of the parent, e.g. to make sure that sending a TERM fans out to the children.","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":480,"context_line":"        status \u003d status \u003e\u003e 8"},{"line_number":481,"context_line":"        devs \u003d children.pop(pid, \u0027unknown device\u0027)"},{"line_number":482,"context_line":"        worker_desc \u003d \u0027(pid\u003d%s, devs\u003d%s)\u0027 % (pid, \u0027,\u0027.join(devs))"},{"line_number":483,"context_line":"        if status \u003d\u003d 0:"},{"line_number":484,"context_line":"            continue"},{"line_number":485,"context_line":"        if status \u003d\u003d 2:"},{"line_number":486,"context_line":"            final_messages.append("},{"line_number":487,"context_line":"                \u0027Worker %s completed with warnings\u0027 % worker_desc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff3894f9_26b70e4a","line":484,"range":{"start_line":483,"start_character":8,"end_line":484,"end_character":20},"updated":"2021-03-30 17:10:20.000000000","message":"no summary log for ok completion?","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9f26ce52735b628fc4e796a0cf4104b83bb29ae","unresolved":true,"context_lines":[{"line_number":480,"context_line":"        status \u003d status \u003e\u003e 8"},{"line_number":481,"context_line":"        devs \u003d children.pop(pid, \u0027unknown device\u0027)"},{"line_number":482,"context_line":"        worker_desc \u003d \u0027(pid\u003d%s, devs\u003d%s)\u0027 % (pid, \u0027,\u0027.join(devs))"},{"line_number":483,"context_line":"        if status \u003d\u003d 0:"},{"line_number":484,"context_line":"            continue"},{"line_number":485,"context_line":"        if status \u003d\u003d 2:"},{"line_number":486,"context_line":"            final_messages.append("},{"line_number":487,"context_line":"                \u0027Worker %s completed with warnings\u0027 % worker_desc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba113c5a_bfb156c6","line":484,"range":{"start_line":483,"start_character":8,"end_line":484,"end_character":20},"in_reply_to":"ff3894f9_26b70e4a","updated":"2021-03-30 17:44:12.000000000","message":"Each worker is already going to log something like\n\n N hash dirs processed (cleanup\u003dT/F) (P files, Q linked, R removed, S errors\n\nI mainly wanted to make sure that error \u0026 warning summaries showed up somewhere obvious and not lost in the middle -- IDK that I care about \"normal\" exits.","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":true,"context_lines":[{"line_number":484,"context_line":"            continue"},{"line_number":485,"context_line":"        if status \u003d\u003d 2:"},{"line_number":486,"context_line":"            final_messages.append("},{"line_number":487,"context_line":"                \u0027Worker %s completed with warnings\u0027 % worker_desc)"},{"line_number":488,"context_line":"            if final_status \u003d\u003d 0:"},{"line_number":489,"context_line":"                final_status \u003d status"},{"line_number":490,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"05f14a5b_f8b4bb33","line":487,"updated":"2021-03-31 20:50:34.000000000","message":"IDK that this is worth logging; all the workers should complain the same way, and do so quickly:\n\n [pid\u003d71086, devs\u003dsdb1] No policy found to increase the partition power.\n [pid\u003d71084, devs\u003dsdb5] No policy found to increase the partition power.","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":488,"context_line":"            if final_status \u003d\u003d 0:"},{"line_number":489,"context_line":"                final_status \u003d status"},{"line_number":490,"context_line":"            continue"},{"line_number":491,"context_line":"        final_status \u003d status"},{"line_number":492,"context_line":"        if status \u003d\u003d 1:"},{"line_number":493,"context_line":"            final_messages.append("},{"line_number":494,"context_line":"                \u0027Worker %s completed with errors\u0027 % worker_desc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fbed6db2_aac84aab","line":491,"range":{"start_line":491,"start_character":8,"end_line":491,"end_character":29},"updated":"2021-03-30 17:10:20.000000000","message":"if status not in 0,1,2 should we just set final_status\u003d1? the unexpected status is logged","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":false,"context_lines":[{"line_number":488,"context_line":"            if final_status \u003d\u003d 0:"},{"line_number":489,"context_line":"                final_status \u003d status"},{"line_number":490,"context_line":"            continue"},{"line_number":491,"context_line":"        final_status \u003d status"},{"line_number":492,"context_line":"        if status \u003d\u003d 1:"},{"line_number":493,"context_line":"            final_messages.append("},{"line_number":494,"context_line":"                \u0027Worker %s completed with errors\u0027 % worker_desc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da7a4144_b8313c02","line":491,"range":{"start_line":491,"start_character":8,"end_line":491,"end_character":29},"in_reply_to":"fbed6db2_aac84aab","updated":"2021-03-31 20:50:34.000000000","message":"Done","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":493,"context_line":"            final_messages.append("},{"line_number":494,"context_line":"                \u0027Worker %s completed with errors\u0027 % worker_desc)"},{"line_number":495,"context_line":"            continue"},{"line_number":496,"context_line":"        final_messages.append(\u0027Worker %s exited with unexpected status %s\u0027"},{"line_number":497,"context_line":"                              % (worker_desc, status))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for msg in final_messages:"}],"source_content_type":"text/x-python","patch_set":8,"id":"cec23aca_57b4fa10","line":496,"range":{"start_line":496,"start_character":30,"end_line":496,"end_character":62},"updated":"2021-03-30 17:10:20.000000000","message":"a timestamp might be useful (elapsed time?) - if only to reinforce that this message is not \u0027real-time\u0027 logging of the completion","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":false,"context_lines":[{"line_number":493,"context_line":"            final_messages.append("},{"line_number":494,"context_line":"                \u0027Worker %s completed with errors\u0027 % worker_desc)"},{"line_number":495,"context_line":"            continue"},{"line_number":496,"context_line":"        final_messages.append(\u0027Worker %s exited with unexpected status %s\u0027"},{"line_number":497,"context_line":"                              % (worker_desc, status))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for msg in final_messages:"}],"source_content_type":"text/x-python","patch_set":8,"id":"e2e056be_3ca3f8a4","line":496,"range":{"start_line":496,"start_character":30,"end_line":496,"end_character":62},"in_reply_to":"cec23aca_57b4fa10","updated":"2021-03-31 20:50:34.000000000","message":"Done","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":496,"context_line":"        final_messages.append(\u0027Worker %s exited with unexpected status %s\u0027"},{"line_number":497,"context_line":"                              % (worker_desc, status))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for msg in final_messages:"},{"line_number":500,"context_line":"        logger.info(msg)"},{"line_number":501,"context_line":"    return final_status"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ddc1050a_21c9e5e5","line":499,"updated":"2021-03-30 17:10:20.000000000","message":"ok, so we do see a log as each worker completes, as well as this summary when all have completed","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":497,"context_line":"                              % (worker_desc, status))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for msg in final_messages:"},{"line_number":500,"context_line":"        logger.info(msg)"},{"line_number":501,"context_line":"    return final_status"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3c52606f_6e22111b","line":500,"range":{"start_line":500,"start_character":15,"end_line":500,"end_character":19},"updated":"2021-03-30 17:10:20.000000000","message":"currently the final_messages only relate to abnormal exist codes, but they are logged at info, which made me notice that the Relinker.run() also logs its final status at info regardless of the error code (although warnings are logged at warning level along the way) - should we make the Relinker final log message level warning if there have been errors, and similarly should this be a warning level log here?","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                              % (worker_desc, status))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for msg in final_messages:"},{"line_number":500,"context_line":"        logger.info(msg)"},{"line_number":501,"context_line":"    return final_status"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"e07f392e_afcafd65","line":500,"range":{"start_line":500,"start_character":15,"end_line":500,"end_character":19},"in_reply_to":"3c52606f_6e22111b","updated":"2021-03-31 20:50:34.000000000","message":"Done","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":517,"context_line":"                        dest\u003d\u0027devices\u0027, help\u003d\u0027Path to swift device directory\u0027)"},{"line_number":518,"context_line":"    parser.add_argument(\u0027--user\u0027, default\u003dNone, dest\u003d\u0027user\u0027,"},{"line_number":519,"context_line":"                        help\u003d\u0027Drop privileges to this user before relinking\u0027)"},{"line_number":520,"context_line":"    parser.add_argument(\u0027--device\u0027, default\u003d[], dest\u003d\u0027device\u0027, action\u003d\u0027append\u0027,"},{"line_number":521,"context_line":"                        help\u003d\u0027Device name to relink (default: all)\u0027)"},{"line_number":522,"context_line":"    parser.add_argument(\u0027--partition\u0027, \u0027-p\u0027, default\u003d[], dest\u003d\u0027partitions\u0027,"},{"line_number":523,"context_line":"                        type\u003dnon_negative_int, action\u003d\u0027append\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"f8fc7b0c_f63ab164","line":520,"range":{"start_line":520,"start_character":54,"end_line":520,"end_character":60},"updated":"2021-03-30 17:10:20.000000000","message":"I\u0027d be ok with this dest being renamed to device_list (or devices and the devices dest being renamed to device_path). Obviously the options need to remain as they are, although --devices is now a bit unfortunate.","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9f26ce52735b628fc4e796a0cf4104b83bb29ae","unresolved":true,"context_lines":[{"line_number":517,"context_line":"                        dest\u003d\u0027devices\u0027, help\u003d\u0027Path to swift device directory\u0027)"},{"line_number":518,"context_line":"    parser.add_argument(\u0027--user\u0027, default\u003dNone, dest\u003d\u0027user\u0027,"},{"line_number":519,"context_line":"                        help\u003d\u0027Drop privileges to this user before relinking\u0027)"},{"line_number":520,"context_line":"    parser.add_argument(\u0027--device\u0027, default\u003d[], dest\u003d\u0027device\u0027, action\u003d\u0027append\u0027,"},{"line_number":521,"context_line":"                        help\u003d\u0027Device name to relink (default: all)\u0027)"},{"line_number":522,"context_line":"    parser.add_argument(\u0027--partition\u0027, \u0027-p\u0027, default\u003d[], dest\u003d\u0027partitions\u0027,"},{"line_number":523,"context_line":"                        type\u003dnon_negative_int, action\u003d\u0027append\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"b7610bad_df293c48","line":520,"range":{"start_line":520,"start_character":54,"end_line":520,"end_character":60},"in_reply_to":"f8fc7b0c_f63ab164","updated":"2021-03-30 17:44:12.000000000","message":"Yeah, I always thought https://github.com/openstack/swift/blob/2.27.0/etc/object-server.conf-sample#L9 was unfortunate...","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eae381c5aa09c72f3b2138972b52a38d9ca29215","unresolved":true,"context_lines":[{"line_number":575,"context_line":"    })"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"},{"line_number":578,"context_line":"        return parallel_process(False, conf, logger, args.device)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    if args.action \u003d\u003d \u0027cleanup\u0027:"},{"line_number":581,"context_line":"        return parallel_process(True, conf, logger, args.device)"}],"source_content_type":"text/x-python","patch_set":8,"id":"25712711_d2924ae9","line":578,"range":{"start_line":578,"start_character":32,"end_line":578,"end_character":37},"updated":"2021-03-30 17:10:20.000000000","message":"off-topic: wonder if a --cleanup option would be appropriate, and deprecate the actions?","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d18c1ff0a8215696d559de35aa07c20650e93561","unresolved":false,"context_lines":[{"line_number":575,"context_line":"    })"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"},{"line_number":578,"context_line":"        return parallel_process(False, conf, logger, args.device)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    if args.action \u003d\u003d \u0027cleanup\u0027:"},{"line_number":581,"context_line":"        return parallel_process(True, conf, logger, args.device)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4c58ae_7e151f9e","line":578,"range":{"start_line":578,"start_character":32,"end_line":578,"end_character":37},"in_reply_to":"0c82df69_ad4a3e53","updated":"2021-03-31 20:50:34.000000000","message":"Done","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9f26ce52735b628fc4e796a0cf4104b83bb29ae","unresolved":true,"context_lines":[{"line_number":575,"context_line":"    })"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"},{"line_number":578,"context_line":"        return parallel_process(False, conf, logger, args.device)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    if args.action \u003d\u003d \u0027cleanup\u0027:"},{"line_number":581,"context_line":"        return parallel_process(True, conf, logger, args.device)"}],"source_content_type":"text/x-python","patch_set":8,"id":"0c82df69_ad4a3e53","line":578,"range":{"start_line":578,"start_character":32,"end_line":578,"end_character":37},"in_reply_to":"25712711_d2924ae9","updated":"2021-03-30 17:44:12.000000000","message":"If nothing else, I could simplify this to\n\n return parallel_process(args.action \u003d\u003d \u0027cleanup\u0027, conf, logger, args.device)\n\nIDK about changing the CLI -- the potential gain seems fairly minimal.","commit_id":"ed447cbc2e01b539b8bbd28047bce31389b6fb09"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bb669767ec116700e14f93549ae08d4ea2bbfe89","unresolved":true,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    start \u003d time.time()"},{"line_number":526,"context_line":"    children \u003d {}"},{"line_number":527,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":528,"context_line":"        pid \u003d os.fork()"},{"line_number":529,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":530,"context_line":"            dev_logger \u003d PrefixLoggerAdapter(logger, {})"}],"source_content_type":"text/x-python","patch_set":11,"id":"07a63de0_51cf9632","line":527,"updated":"2021-04-02 22:02:16.000000000","message":"We\u0027re calling fork more times than we should:\n\nhttps://github.com/openstack/swift/blob/master/test/unit/common/test_utils.py#L7727\n\nhttps://github.com/openstack/swift/blob/master/swift/obj/replicator.py#L272\n\nApr  2 21:54:11 saio object-6010: [pid\u003d89322, devs\u003dsdb1] 0 hash dirs processed (cleanup\u003dFalse) (0 files, 0 linked, 0 removed, 0 errors)\nApr  2 21:54:11 saio object-6010: [pid\u003d89324, devs\u003d] 0 hash dirs processed (cleanup\u003dFalse) (0 files, 0 linked, 0 removed, 0 errors)","commit_id":"f0bb43a1703abe64f0c6ceda6c59a9a83d6abca1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bb669767ec116700e14f93549ae08d4ea2bbfe89","unresolved":true,"context_lines":[{"line_number":652,"context_line":"        \u0027partitions\u0027: set(args.partitions),"},{"line_number":653,"context_line":"        \u0027workers\u0027: config_auto_int_value("},{"line_number":654,"context_line":"            conf.get(\u0027workers\u0027) if args.workers is None else args.workers,"},{"line_number":655,"context_line":"            \u0027auto\u0027),"},{"line_number":656,"context_line":"        \u0027link_check_limit\u0027: ("},{"line_number":657,"context_line":"            args.link_check_limit if args.link_check_limit is not None"},{"line_number":658,"context_line":"            else non_negative_int(conf.get(\u0027link_check_limit\u0027, 2))),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dda462c8_9df77ba4","line":655,"updated":"2021-04-02 22:02:16.000000000","message":"precedence seems to work for me","commit_id":"f0bb43a1703abe64f0c6ceda6c59a9a83d6abca1"}],"test/unit/cli/test_relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bb669767ec116700e14f93549ae08d4ea2bbfe89","unresolved":true,"context_lines":[{"line_number":268,"context_line":"            \u0027fork\u0027,"},{"line_number":269,"context_line":"            (\u0027run\u0027, [\u0027sda2\u0027, \u0027sda4\u0027]),"},{"line_number":270,"context_line":"            (\u0027exit\u0027, 0),"},{"line_number":271,"context_line":"        ], calls)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _do_test_relinker_drop_privileges(self, command):"},{"line_number":274,"context_line":"        @contextmanager"}],"source_content_type":"text/x-python","patch_set":11,"id":"d6d71963_cab4c2e5","line":271,"updated":"2021-04-02 22:02:16.000000000","message":"maybe something like this:\n\n\t+        # test too many workers\n\t+        calls \u003d []\n\t+\n\t+        with mock.patch(\u0027os.fork\u0027, fake_fork), \\\n\t+                mock.patch(\u0027os._exit\u0027, fake_exit), \\\n\t+                mock.patch(\u0027swift.cli.relinker.Relinker.run\u0027, fake_run):\n\t+            self.assertEqual(0, relinker.main([\n\t+                \u0027cleanup\u0027,\n\t+                \u0027--swift-dir\u0027, self.testdir,\n\t+                \u0027--devices\u0027, self.devices,\n\t+                \u0027--workers\u0027, \u00276\u0027,\n\t+                \u0027--skip-mount\u0027,\n\t+            ]))\n\t+        self.assertEqual([\n\t+            \u0027fork\u0027,\n\t+            (\u0027run\u0027, [\u0027sda1\u0027]),\n\t+            (\u0027exit\u0027, 0),\n\t+            \u0027fork\u0027,\n\t+            (\u0027run\u0027, [\u0027sda2\u0027]),\n\t+            (\u0027exit\u0027, 0),\n\t+            \u0027fork\u0027,\n\t+            (\u0027run\u0027, [\u0027sda3\u0027]),\n\t+            (\u0027exit\u0027, 0),\n\t+            \u0027fork\u0027,\n\t+            (\u0027run\u0027, [\u0027sda4\u0027]),\n\t+            (\u0027exit\u0027, 0),\n\t+            \u0027fork\u0027,\n\t+            (\u0027run\u0027, [\u0027sda5\u0027]),\n\t+            (\u0027exit\u0027, 0),\n\t+        ], calls)\n\t+\n\t+\n\n\tvagrant@saio:~$ nosetests swift/test/unit/cli/test_relinker.py:TestRelinker.test_workers_children\n\tF\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tFAIL: test_workers_children (test.unit.cli.test_relinker.TestRelinker)\n\t----------------------------------------------------------------------\n\tTraceback (most recent call last):\n\t  File \"/home/vagrant/swift/test/unit/cli/test_relinker.py\", line 302, in test_workers_children\n\t    ], calls)\n\tAssertionError: Lists differ: [\u0027fork\u0027, (\u0027run\u0027, [\u0027sda1\u0027]), (\u0027... !\u003d [\u0027fork\u0027, (\u0027run\u0027, [\u0027sda1\u0027]), (\u0027...\n\n\tSecond list contains 3 additional elements.\n\tFirst extra element 15:\n\t\u0027fork\u0027\n\n\t  [\u0027fork\u0027,\n\t   (\u0027run\u0027, [\u0027sda1\u0027]),\n\t   (\u0027exit\u0027, 0),\n\t   \u0027fork\u0027,\n\t   (\u0027run\u0027, [\u0027sda2\u0027]),\n\t   (\u0027exit\u0027, 0),\n\t   \u0027fork\u0027,\n\t   (\u0027run\u0027, [\u0027sda3\u0027]),\n\t   (\u0027exit\u0027, 0),\n\t   \u0027fork\u0027,\n\t   (\u0027run\u0027, [\u0027sda4\u0027]),\n\t   (\u0027exit\u0027, 0),\n\t   \u0027fork\u0027,\n\t   (\u0027run\u0027, [\u0027sda5\u0027]),\n\t+  (\u0027exit\u0027, 0),\n\t+  \u0027fork\u0027,\n\t+  (\u0027run\u0027, []),\n\t   (\u0027exit\u0027, 0)]\n\n\t----------------------------------------------------------------------\n\tRan 1 test in 0.158s\n\n\tFAILED (failures\u003d1)","commit_id":"f0bb43a1703abe64f0c6ceda6c59a9a83d6abca1"}]}
