)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ee9cf18c561719a85a614ec25004e55a73454315","unresolved":false,"context_lines":[{"line_number":7,"context_line":"_error_in_logs function of driver.py shall check all nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Don\u0027t simply return, if one node is clean or not clean."},{"line_number":10,"context_line":"2. It\u0027s better to log all errors and return all errors."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib0e23bff013836347f90bed50dd1d3a9566e6bad"},{"line_number":13,"context_line":"Close-Bug: #1229957"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAS3%2F%2FW04%3D","line":10,"updated":"2013-09-28 15:38:01.000000000","message":"I guess \"and return all errors\" is not necessary.","commit_id":"2ff9740830af4f775f805d509ada7d28f68fe21a"}],"tempest/stress/driver.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f191ade68ef69a0241ccc6cfc36fb8258bdfc427","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d \"%s %s\" % (ret, errors)"},{"line_number":75,"context_line":"    return None if ret \u003d\u003d \"\" else ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def sigchld_handler(signal, frame):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2FesA%3D","line":75,"updated":"2013-09-26 01:18:58.000000000","message":"At line184, the return value of _error_in_logs() is used only for boolean whether log files contain error messages or not.\n\nso I feel it is better to change \"ret\" to boolean(default: False) for readability.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5f41ee203934860930e2314e5b0c7ab52fba4205","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d \"%s %s\" % (ret, errors)"},{"line_number":75,"context_line":"    return None if ret \u003d\u003d \"\" else ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def sigchld_handler(signal, frame):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2FefA%3D","line":75,"in_reply_to":"AAAAS3%2F%2Fefg%3D","updated":"2013-09-26 03:16:25.000000000","message":"Thanks for considering.\n\n_has_error_in_logs() is a good idea for me :-)","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":8641,"name":"DennyZhang","email":"filebat.mark@gmail.com","username":"dennyzhang"},"change_message_id":"670d793942e858f7992a93b2897023838ad1adbc","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d \"%s %s\" % (ret, errors)"},{"line_number":75,"context_line":"    return None if ret \u003d\u003d \"\" else ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def sigchld_handler(signal, frame):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Fefg%3D","line":75,"in_reply_to":"AAAAS3%2F%2Feis%3D","updated":"2013-09-26 03:12:51.000000000","message":"Yes, I know.\n\nWe shall either: \n- rename _error_in_logs to _has_error_in_logs, if return value is changed to boolean\n- Or change line 184 to \"if errors !\u003d \u0027\u0027\".\n\nEither way is OK for me.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a2c06db2fb43fd171b828b9f3adcf28077588d26","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d \"%s %s\" % (ret, errors)"},{"line_number":75,"context_line":"    return None if ret \u003d\u003d \"\" else ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def sigchld_handler(signal, frame):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Feis%3D","line":75,"in_reply_to":"AAAAS3%2F%2FekU%3D","updated":"2013-09-26 02:37:49.000000000","message":"The caller is stress_openstack() only, and the caller uses this return value as boolean at line184.\nI\u0027m sorry if I miss something.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":8641,"name":"DennyZhang","email":"filebat.mark@gmail.com","username":"dennyzhang"},"change_message_id":"abdb47b8cbbf76053ea3c3cfad2be2588161ec69","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d \"%s %s\" % (ret, errors)"},{"line_number":75,"context_line":"    return None if ret \u003d\u003d \"\" else ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def sigchld_handler(signal, frame):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2FekU%3D","line":75,"in_reply_to":"AAAAS3%2F%2FesA%3D","updated":"2013-09-26 02:31:41.000000000","message":"Ken\u0027ichi, I suggest not:\n- Currently it return the error strings. If boolean, caller of the function may lose this kind of information.\n- It\u0027s the way before current check-in.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a2c06db2fb43fd171b828b9f3adcf28077588d26","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if not logfiles:"},{"line_number":182,"context_line":"            continue"},{"line_number":183,"context_line":"        errors \u003d _error_in_logs(logfiles, computes)"},{"line_number":184,"context_line":"        if errors:"},{"line_number":185,"context_line":"            had_errors \u003d True"},{"line_number":186,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Feic%3D","line":183,"updated":"2013-09-26 02:37:49.000000000","message":"The return value(errors) is used only here.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5e286a1e903716eb0303dd1d93f3d1fb04a0b710","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if not logfiles:"},{"line_number":182,"context_line":"            continue"},{"line_number":183,"context_line":"        errors \u003d _error_in_logs(logfiles, computes)"},{"line_number":184,"context_line":"        if errors:"},{"line_number":185,"context_line":"            had_errors \u003d True"},{"line_number":186,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Fegs%3D","line":183,"in_reply_to":"AAAAS3%2F%2Feic%3D","updated":"2013-09-26 02:55:43.000000000","message":"sorry for wrong place.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5e286a1e903716eb0303dd1d93f3d1fb04a0b710","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        errors \u003d _error_in_logs(logfiles, computes)"},{"line_number":184,"context_line":"        if errors:"},{"line_number":185,"context_line":"            had_errors \u003d True"},{"line_number":186,"context_line":"            break"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    terminate_all_processes()"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Fego%3D","line":186,"updated":"2013-09-26 02:55:43.000000000","message":"The return value(errors) is used only here.","commit_id":"d8debae9c3ae550512406a0a9c72819bc13c4f66"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0b5f63865bfa3dfbf76ebfa6266570de8fe2c5a2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        errors \u003d do_ssh(grep, node)"},{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d True"},{"line_number":75,"context_line":"    return ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FbuE%3D","line":74,"updated":"2013-09-26 18:12:01.000000000","message":"maybe you can return here so we don\u0027t check all nodes if one has errors?\n\nby doing so we only return False if the for finishes, we don\u0027t even have to store it in ret","commit_id":"2902efa8c26f568d99b521062c7849d91718f095"},{"author":{"_account_id":8641,"name":"DennyZhang","email":"filebat.mark@gmail.com","username":"dennyzhang"},"change_message_id":"88ad699f1e3f4df10be91957581d2173ace55328","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        errors \u003d do_ssh(grep, node)"},{"line_number":72,"context_line":"        if len(errors) \u003e 0:"},{"line_number":73,"context_line":"            LOG.error(\u0027%s: %s\u0027 % (node, errors))"},{"line_number":74,"context_line":"            ret \u003d True"},{"line_number":75,"context_line":"    return ret"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FbqY%3D","line":74,"in_reply_to":"AAAAS3%2F%2FbuE%3D","updated":"2013-09-26 18:36:36.000000000","message":"Giulio, why checking all nodes is not better than return after one failed node is checked?","commit_id":"2902efa8c26f568d99b521062c7849d91718f095"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"c32ac4dfaa3374d53a5efd0909b0227363f1e93e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    return nodes"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _has_error_in_logs(logfiles, nodes):"},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    Detect errors in the nova log files on the controller and compute nodes."},{"line_number":67,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FZjE%3D","line":64,"updated":"2013-09-27 14:29:09.000000000","message":"Could we split up this function into two pieces? One just to determine whether there was an error and one to print out all error messages? This second function should be called after the terminate_all_processes() call. With this we don\u0027t lose the time with all the ssh connections.","commit_id":"0b634a7cfaa5eace4af928c0ed68366d19a2e358"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ee9cf18c561719a85a614ec25004e55a73454315","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        if not logfiles:"},{"line_number":184,"context_line":"            continue"},{"line_number":185,"context_line":"        if _has_error_in_logs(logfiles, computes, True):"},{"line_number":186,"context_line":"            had_errors \u003d True"},{"line_number":187,"context_line":"            break"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FW0o%3D","line":185,"updated":"2013-09-28 15:38:01.000000000","message":"If specifying \"True\" as 3rd argument, we cannot log all errors.\n\nI guess that behavior is not the purpose of this patch.","commit_id":"2ff9740830af4f775f805d509ada7d28f68fe21a"}]}
