)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"75545a33bdbe3b5b7bf3af6d0e6ae4dba9fc7dcc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2a534df3_7ae4148e","updated":"2024-10-04 12:42:02.000000000","message":"recheck\nunrelated failure","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"44ea535c41bc8de535ed288514d29f286b1c0f00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"89aaa4b1_94e36f3d","updated":"2024-10-07 13:53:03.000000000","message":"It is beautiful!","commit_id":"41d8b6a21e8a7180e24596827ac79b0f5ad9c8d4"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"ff6c2ef1ebafe9bd2ab9c14ab1ba360d292a95c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e0953b13_c0a865d2","updated":"2024-10-07 19:53:05.000000000","message":"a great idea, lgtm","commit_id":"41d8b6a21e8a7180e24596827ac79b0f5ad9c8d4"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"a1b4b0cd519a5650a7ef2060bfb0627d63bb0551","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1df63911_01160592","updated":"2024-10-21 13:40:54.000000000","message":"https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_c19/931289/11/gate/tempest-slow-py3/c19c3bb/testr_results.html\n\n\n```\n2024-10-21 12:39:24,941 98264 DEBUG    [tempest.common.utils.net_downtime] metadata downtime meter results: {\u0027successes\u0027: 36, \u0027failures\u0027: 3, \u0027downtime\u0027: {\u0027PASSED\u0027: 26.860000000000007, \u0027FAILED\u0027: 3.3499999999999996}}\n...\nAssertionError: 3.3499999999999996 not less than or equal to 3.0 : Metadata downtime: 3.3499999999999996 seconds is higher than expected: 3.0\n```\n\n\n```\n2024-10-21 12:45:09,590 98266 DEBUG    [tempest.common.utils.net_downtime] metadata downtime meter results: {\u0027successes\u0027: 33, \u0027failures\u0027: 1, \u0027downtime\u0027: {\u0027PASSED\u0027: 24.45, \u0027FAILED\u0027: 4.07}}\n...\nAssertionError: 4.07 not less than or equal to 3.0 : Metadata downtime: 4.07 seconds is higher than expected: 3.0\n```\n\n\nLet me set a default value greater than 3.0 that could not make these jobs unstable depending on the setup, nodeset, etc.","commit_id":"41d8b6a21e8a7180e24596827ac79b0f5ad9c8d4"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"78ab63bff01e2227fd2d12217e739deb3e3d0db7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"630d19ec_3161b50c","updated":"2024-10-24 14:22:37.000000000","message":"3/3 pass.\nI think this is ready to approve.","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"0ab760397d157c08f02122bb77910a7256ced412","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2363b718_38c13fb3","updated":"2024-10-24 09:29:45.000000000","message":"recheck","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"5daafda3fffedca56324d5bbeaf00761a3a76f79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c25d6858_acae3b5f","updated":"2024-10-24 11:53:28.000000000","message":"recheck\n2/3 pass","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"b8093c8afdfef52cfe4dbd0cfa2e6def7a0c2eae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"53a51dc6_ba4d2919","updated":"2024-10-25 06:28:19.000000000","message":"thanks","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"}],"tempest/common/utils/net_downtime.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"564755594ea4a9fc5c82f66a938669e65f03aca1","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"METADATA_SCRIPT_LINES \u003d ("},{"line_number":26,"context_line":"    \u0027i\u003d0\u0027,"},{"line_number":27,"context_line":"    \u0027while true; do\u0027,"},{"line_number":28,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"e157244a_19a18899","line":25,"updated":"2024-10-04 12:45:29.000000000","message":"I think we\u0027ll need to improve this if we want to measure the downtime in seconds to be more accurate.","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"METADATA_SCRIPT_LINES \u003d ("},{"line_number":26,"context_line":"    \u0027i\u003d0\u0027,"},{"line_number":27,"context_line":"    \u0027while true; do\u0027,"},{"line_number":28,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"69f58392_1b799bc0","line":25,"in_reply_to":"e157244a_19a18899","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"564755594ea4a9fc5c82f66a938669e65f03aca1","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        results \u003d {}"},{"line_number":119,"context_line":"        results[\u0027failures\u0027] \u003d output.count(\u0027FAILED\u0027)"},{"line_number":120,"context_line":"        results[\u0027successes\u0027] \u003d output.count(\u0027succeeded\u0027)"},{"line_number":121,"context_line":"        results[\u0027downtime\u0027] \u003d results[\u0027failures\u0027] * float(self.interval)"},{"line_number":122,"context_line":"        LOG.debug(\u0027metadata downtime meter results: %r\u0027, results)"},{"line_number":123,"context_line":"        return results"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9de367b3_f1f5f84f","line":121,"updated":"2024-10-04 12:45:29.000000000","message":"Is this accurate? It doesn\u0027t account for the time it took to get a response. Typically if there is an disruption, it takes some time to get a reply.","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        results \u003d {}"},{"line_number":119,"context_line":"        results[\u0027failures\u0027] \u003d output.count(\u0027FAILED\u0027)"},{"line_number":120,"context_line":"        results[\u0027successes\u0027] \u003d output.count(\u0027succeeded\u0027)"},{"line_number":121,"context_line":"        results[\u0027downtime\u0027] \u003d results[\u0027failures\u0027] * float(self.interval)"},{"line_number":122,"context_line":"        LOG.debug(\u0027metadata downtime meter results: %r\u0027, results)"},{"line_number":123,"context_line":"        return results"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"719d958a_6f8b3e72","line":121,"in_reply_to":"9de367b3_f1f5f84f","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"73b8606dd1718e3881eb271bc155677f556e6301","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    \u0027while true; do\u0027,"},{"line_number":29,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"},{"line_number":30,"context_line":"    \u0027grep -q `hostname` \u0026\u0026 \u0027"},{"line_number":31,"context_line":"    \u0027echo \"PASSED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\" || \u0027"},{"line_number":32,"context_line":"    \u0027echo \"FAILED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\"\u0027,"},{"line_number":33,"context_line":"    \u0027sleep {interval}\u0027,"},{"line_number":34,"context_line":"    \u0027done\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9393e1f9_56ebc59c","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":57},"updated":"2024-10-04 15:20:22.000000000","message":"nice :)","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027while true; do\u0027,"},{"line_number":29,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"},{"line_number":30,"context_line":"    \u0027grep -q `hostname` \u0026\u0026 \u0027"},{"line_number":31,"context_line":"    \u0027echo \"PASSED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\" || \u0027"},{"line_number":32,"context_line":"    \u0027echo \"FAILED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\"\u0027,"},{"line_number":33,"context_line":"    \u0027sleep {interval}\u0027,"},{"line_number":34,"context_line":"    \u0027done\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"a22915a6_0dbd6bb5","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":57},"in_reply_to":"9393e1f9_56ebc59c","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"73b8606dd1718e3881eb271bc155677f556e6301","unresolved":true,"context_lines":[{"line_number":26,"context_line":"# `date +%s.%N` does not work in cirros (min granularity is seconds)"},{"line_number":27,"context_line":"METADATA_SCRIPT_LINES \u003d ("},{"line_number":28,"context_line":"    \u0027while true; do\u0027,"},{"line_number":29,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"},{"line_number":30,"context_line":"    \u0027grep -q `hostname` \u0026\u0026 \u0027"},{"line_number":31,"context_line":"    \u0027echo \"PASSED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\" || \u0027"},{"line_number":32,"context_line":"    \u0027echo \"FAILED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\"\u0027,"},{"line_number":33,"context_line":"    \u0027sleep {interval}\u0027,"},{"line_number":34,"context_line":"    \u0027done\u0027)"},{"line_number":35,"context_line":"METADATA_SCRIPT \u003d \u0027\\n\u0027.join(METADATA_SCRIPT_LINES)"}],"source_content_type":"text/x-python","patch_set":7,"id":"09412f18_076bba6b","line":32,"range":{"start_line":29,"start_character":0,"end_line":32,"end_character":60},"updated":"2024-10-04 15:20:22.000000000","message":"I\u0027d rather be on the save side here and avoid pattern `command \u0026\u0026 consider_success || consider_failure` because the `consider_failure` would be triggered if `consider_success` fails too.\n\n`\nif curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | grep -q `hostname`; then\n    echo \"PASSED ...\"\nelse\n    echo \"FAILED ...\"\nfi\n`","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":26,"context_line":"# `date +%s.%N` does not work in cirros (min granularity is seconds)"},{"line_number":27,"context_line":"METADATA_SCRIPT_LINES \u003d ("},{"line_number":28,"context_line":"    \u0027while true; do\u0027,"},{"line_number":29,"context_line":"    \u0027curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \u0027"},{"line_number":30,"context_line":"    \u0027grep -q `hostname` \u0026\u0026 \u0027"},{"line_number":31,"context_line":"    \u0027echo \"PASSED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\" || \u0027"},{"line_number":32,"context_line":"    \u0027echo \"FAILED endtime:$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\"\u0027,"},{"line_number":33,"context_line":"    \u0027sleep {interval}\u0027,"},{"line_number":34,"context_line":"    \u0027done\u0027)"},{"line_number":35,"context_line":"METADATA_SCRIPT \u003d \u0027\\n\u0027.join(METADATA_SCRIPT_LINES)"}],"source_content_type":"text/x-python","patch_set":7,"id":"292764bb_f12f2d68","line":32,"range":{"start_line":29,"start_character":0,"end_line":32,"end_character":60},"in_reply_to":"09412f18_076bba6b","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"73b8606dd1718e3881eb271bc155677f556e6301","unresolved":true,"context_lines":[{"line_number":123,"context_line":"        downtime \u003d 0.0"},{"line_number":124,"context_line":"        output_lines \u003d [line.strip() for line in output.splitlines()]"},{"line_number":125,"context_line":"        for i, line in enumerate(output_lines):"},{"line_number":126,"context_line":"            this_request_endtime \u003d line.split(\u0027endtime:\u0027)[-1]"},{"line_number":127,"context_line":"            prev_request_endtime \u003d output_lines[i - 1].split(\u0027endtime:\u0027)[-1]"},{"line_number":128,"context_line":"            downtime +\u003d (float(this_request_endtime) -"},{"line_number":129,"context_line":"                         float(prev_request_endtime))"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"730142b6_7a4cd6d3","line":127,"range":{"start_line":126,"start_character":0,"end_line":127,"end_character":76},"updated":"2024-10-04 15:20:22.000000000","message":"Considering we will likely not read the meter.log as humans and its purpose is only to be parsed, we can either simplify the output and then use just a split or use regular expressions here. We can incorporate the runtime in the bash script instead to make it easier to calculate the downtime. The first one seems easier and less error prone? Basically just remove the `endtime:` from there and then you can parse it easily per failure\n\n```\nPASSED \u003d \u0027PASSED\u0027\nFAILED \u003d \u0027FAILED\u0027\n\nMETADATA_SCRIPT \u003d\"\"\"\nold_uptime\u003d$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\nwhile true; do\n    curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | grep -q `hostname`\n    result\u003d$?\n    new_uptime\u003d$(cut -d\\\u0027 \\\u0027 -f1 /proc/uptime)\n    runtime\u003d$(awk -v new\u003d$new_uptime -v old\u003d$old_uptime \u0027BEGIN {print new-old}\u0027)\n    old_uptime\u003d$new_uptime\n    if [ $result -eq 0 ]; then\n        echo \"PASSED $runtime\" \n    else\n        echo \"FAILED $runtime\"\n    fi\n    sleep {interval}\ndone\n\"\"\"\n\n...\n\ndowntime \u003d {PASSED: 0.0, FAILED: 0.0}\nfor line in output_lines:\n   key, value \u003d line.split()\n   downtime[key] +\u003d value\n   \nresults[\u0027downtime\u0027] \u003d downtime\n```\n\nIt would not work nice if there are two and more disruptions but will take the total.","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        downtime \u003d 0.0"},{"line_number":124,"context_line":"        output_lines \u003d [line.strip() for line in output.splitlines()]"},{"line_number":125,"context_line":"        for i, line in enumerate(output_lines):"},{"line_number":126,"context_line":"            this_request_endtime \u003d line.split(\u0027endtime:\u0027)[-1]"},{"line_number":127,"context_line":"            prev_request_endtime \u003d output_lines[i - 1].split(\u0027endtime:\u0027)[-1]"},{"line_number":128,"context_line":"            downtime +\u003d (float(this_request_endtime) -"},{"line_number":129,"context_line":"                         float(prev_request_endtime))"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c52f2f5b_e00f9ac6","line":127,"range":{"start_line":126,"start_character":0,"end_line":127,"end_character":76},"in_reply_to":"730142b6_7a4cd6d3","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"e8601e75791b4f82101c6d885c131665682a0be6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":27,"context_line":"# /proc/uptime is used because it include two decimals in cirros, while"},{"line_number":28,"context_line":"# `date +%s.%N` does not work in cirros (min granularity is seconds)"},{"line_number":29,"context_line":"METADATA_SCRIPT \u003d \"\"\""},{"line_number":30,"context_line":"old_time\u003d$(cut -F1 /proc/uptime)"},{"line_number":31,"context_line":"while true; do"},{"line_number":32,"context_line":"    curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \\"},{"line_number":33,"context_line":"grep -q `hostname`"}],"source_content_type":"text/x-python","patch_set":9,"id":"00db1af9_24fe85f6","line":30,"range":{"start_line":30,"start_character":14,"end_line":30,"end_character":18},"updated":"2024-10-04 17:16:38.000000000","message":"This doesn\u0027t work for me on cirros 6.2.0\n```\n$ cut -F1 /proc/uptime\ncut: invalid option -- F\n```","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# /proc/uptime is used because it include two decimals in cirros, while"},{"line_number":28,"context_line":"# `date +%s.%N` does not work in cirros (min granularity is seconds)"},{"line_number":29,"context_line":"METADATA_SCRIPT \u003d \"\"\""},{"line_number":30,"context_line":"old_time\u003d$(cut -F1 /proc/uptime)"},{"line_number":31,"context_line":"while true; do"},{"line_number":32,"context_line":"    curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \\"},{"line_number":33,"context_line":"grep -q `hostname`"}],"source_content_type":"text/x-python","patch_set":9,"id":"7c00d4bc_6bb91ba0","line":30,"range":{"start_line":30,"start_character":14,"end_line":30,"end_character":18},"in_reply_to":"00db1af9_24fe85f6","updated":"2024-10-07 09:38:52.000000000","message":"I had issues with `\u0027\u0027` and found this `-F1` that works with cirros 5.\nAnyway, it seems with `\"\"` it works well too in cirros 5.","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"44ea535c41bc8de535ed288514d29f286b1c0f00","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# /proc/uptime is used because it include two decimals in cirros, while"},{"line_number":28,"context_line":"# `date +%s.%N` does not work in cirros (min granularity is seconds)"},{"line_number":29,"context_line":"METADATA_SCRIPT \u003d \"\"\""},{"line_number":30,"context_line":"old_time\u003d$(cut -F1 /proc/uptime)"},{"line_number":31,"context_line":"while true; do"},{"line_number":32,"context_line":"    curl http://169.254.169.254/latest/meta-data/hostname 2\u003e/dev/null | \\"},{"line_number":33,"context_line":"grep -q `hostname`"}],"source_content_type":"text/x-python","patch_set":9,"id":"a99f5a9d_482f8ce6","line":30,"range":{"start_line":30,"start_character":14,"end_line":30,"end_character":18},"in_reply_to":"7c00d4bc_6bb91ba0","updated":"2024-10-07 13:53:03.000000000","message":"`\"-d\\  \"` should work too :) no need for quotes, just escape the whitespace","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    def _setUp(self):"},{"line_number":99,"context_line":"        self.upload_metadata_script()"},{"line_number":100,"context_line":"        self.run_metadata_script()"},{"line_number":101,"context_line":"        self.addCleanup(self.cleanup)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def upload_metadata_script(self):"},{"line_number":104,"context_line":"        metadata_script \u003d METADATA_SCRIPT.format(interval\u003dself.interval)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7fa2f8da_cdb82363","line":101,"updated":"2024-10-04 17:16:38.000000000","message":"This should be added first, even though it just uses `self.pid` which is the very last action.","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _setUp(self):"},{"line_number":99,"context_line":"        self.upload_metadata_script()"},{"line_number":100,"context_line":"        self.run_metadata_script()"},{"line_number":101,"context_line":"        self.addCleanup(self.cleanup)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def upload_metadata_script(self):"},{"line_number":104,"context_line":"        metadata_script \u003d METADATA_SCRIPT.format(interval\u003dself.interval)"}],"source_content_type":"text/x-python","patch_set":9,"id":"098b9eba_82079e03","line":101,"in_reply_to":"7fa2f8da_cdb82363","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":111,"context_line":"            \u0027cat {}\u0027.format(self.script_path)))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def run_metadata_script(self):"},{"line_number":114,"context_line":"        self.ssh_client.exec_command(\u0027{} \u003e {} \u0026\u0027.format(self.script_path,"},{"line_number":115,"context_line":"                                                        self.output_path))"},{"line_number":116,"context_line":"        # try command that works on advanced images"},{"line_number":117,"context_line":"        # if it fails, try commmand that works on cirros"}],"source_content_type":"text/x-python","patch_set":9,"id":"3e1b91a0_8732f1d4","line":114,"range":{"start_line":114,"start_character":38,"end_line":114,"end_character":41},"updated":"2024-10-04 17:16:38.000000000","message":"The script has no shebang, shall we explicitly call a shell?","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            \u0027cat {}\u0027.format(self.script_path)))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def run_metadata_script(self):"},{"line_number":114,"context_line":"        self.ssh_client.exec_command(\u0027{} \u003e {} \u0026\u0027.format(self.script_path,"},{"line_number":115,"context_line":"                                                        self.output_path))"},{"line_number":116,"context_line":"        # try command that works on advanced images"},{"line_number":117,"context_line":"        # if it fails, try commmand that works on cirros"}],"source_content_type":"text/x-python","patch_set":9,"id":"e7d64ba1_1f835ba1","line":114,"range":{"start_line":114,"start_character":38,"end_line":114,"end_character":41},"in_reply_to":"3e1b91a0_8732f1d4","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                                        self.output_path))"},{"line_number":116,"context_line":"        # try command that works on advanced images"},{"line_number":117,"context_line":"        # if it fails, try commmand that works on cirros"},{"line_number":118,"context_line":"        processes \u003d self.ssh_client.exec_command("},{"line_number":119,"context_line":"            \u0027ps -a -o pid,cmd -ww || ps -o pid,args\u0027)"},{"line_number":120,"context_line":"        for line in processes.splitlines():"},{"line_number":121,"context_line":"            if self.script_path in line:"},{"line_number":122,"context_line":"                self.pid \u003d line.strip().split()[0]"},{"line_number":123,"context_line":"                break"},{"line_number":124,"context_line":"        LOG.debug(\u0027running metadata downtime meter script in background with \u0027"},{"line_number":125,"context_line":"                  \u0027PID \u003d %s\u0027, self.pid)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"527cf93f_794fe718","line":123,"range":{"start_line":118,"start_character":0,"end_line":123,"end_character":21},"updated":"2024-10-04 17:16:38.000000000","message":"We can just store the pid in a pidfile and read it from there.\n```\nMETADATA_METER_PIDFILE \u003d \"/tmp/metadata_meter.pid\"\nthe script content add:\n\n echo $$ \u003e %(metadata_meter_pidfile)s\n \n...\n\nself.pid \u003d self.ssh_client.exec_command(\n    \u0027cat {}\u0027.format(METADATA_METER_PIDFILE))\n```","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                                        self.output_path))"},{"line_number":116,"context_line":"        # try command that works on advanced images"},{"line_number":117,"context_line":"        # if it fails, try commmand that works on cirros"},{"line_number":118,"context_line":"        processes \u003d self.ssh_client.exec_command("},{"line_number":119,"context_line":"            \u0027ps -a -o pid,cmd -ww || ps -o pid,args\u0027)"},{"line_number":120,"context_line":"        for line in processes.splitlines():"},{"line_number":121,"context_line":"            if self.script_path in line:"},{"line_number":122,"context_line":"                self.pid \u003d line.strip().split()[0]"},{"line_number":123,"context_line":"                break"},{"line_number":124,"context_line":"        LOG.debug(\u0027running metadata downtime meter script in background with \u0027"},{"line_number":125,"context_line":"                  \u0027PID \u003d %s\u0027, self.pid)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bf027b0d_9292a88f","line":123,"range":{"start_line":118,"start_character":0,"end_line":123,"end_character":21},"in_reply_to":"527cf93f_794fe718","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        results[\u0027successes\u0027] \u003d output.count(PASSED)"},{"line_number":132,"context_line":"        results[\u0027failures\u0027] \u003d output.count(FAILED)"},{"line_number":133,"context_line":"        downtime \u003d {PASSED: 0.0, FAILED: 0.0}"},{"line_number":134,"context_line":"        output_lines \u003d [line.strip() for line in output.splitlines()]"},{"line_number":135,"context_line":"        for line in output_lines:"},{"line_number":136,"context_line":"            key, value \u003d line.split()"},{"line_number":137,"context_line":"            downtime[key] +\u003d float(value)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"2a9e9015_d8fe0595","line":135,"range":{"start_line":134,"start_character":0,"end_line":135,"end_character":33},"updated":"2024-10-04 17:16:38.000000000","message":"The file may be big depending on how long the test is running. Would be good to do it in a single loop:\n```\nfor line in output.splitlines():\n   key, value \u003d line.strip().split()\n...\n```","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        results[\u0027successes\u0027] \u003d output.count(PASSED)"},{"line_number":132,"context_line":"        results[\u0027failures\u0027] \u003d output.count(FAILED)"},{"line_number":133,"context_line":"        downtime \u003d {PASSED: 0.0, FAILED: 0.0}"},{"line_number":134,"context_line":"        output_lines \u003d [line.strip() for line in output.splitlines()]"},{"line_number":135,"context_line":"        for line in output_lines:"},{"line_number":136,"context_line":"            key, value \u003d line.split()"},{"line_number":137,"context_line":"            downtime[key] +\u003d float(value)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"8db9efd8_2f5005d3","line":135,"range":{"start_line":134,"start_character":0,"end_line":135,"end_character":33},"in_reply_to":"2a9e9015_d8fe0595","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"44ea535c41bc8de535ed288514d29f286b1c0f00","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class MetadataDowntimeMeter(fixtures.Fixture):"},{"line_number":90,"context_line":"    def __init__(self, ssh_client,"},{"line_number":91,"context_line":"                 interval\u003d\u00270.2\u0027, script_path\u003d\u0027/tmp/metadata_meter_script.sh\u0027,"},{"line_number":92,"context_line":"                 output_path\u003d\u0027/tmp/metadata_meter.log\u0027,"},{"line_number":93,"context_line":"                 pidfile_path\u003d\u0027/tmp/metadata_meter.pid\u0027):"},{"line_number":94,"context_line":"        self.ssh_client \u003d ssh_client"}],"source_content_type":"text/x-python","patch_set":11,"id":"8bc18225_9475fff9","line":91,"range":{"start_line":91,"start_character":45,"end_line":91,"end_character":76},"updated":"2024-10-07 13:53:03.000000000","message":"nit: it would be nice to have these as constants, like\n```\nDEFAULT_METADATA_METER_SCRIPT_PATH \u003d \u0027...\u0027\n```","commit_id":"41d8b6a21e8a7180e24596827ac79b0f5ad9c8d4"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"14b7a18091259bc4f7a32cf9a39e408b531b231a","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class MetadataDowntimeMeter(fixtures.Fixture):"},{"line_number":90,"context_line":"    def __init__(self, ssh_client,"},{"line_number":91,"context_line":"                 interval\u003d\u00270.2\u0027, script_path\u003d\u0027/tmp/metadata_meter_script.sh\u0027,"},{"line_number":92,"context_line":"                 output_path\u003d\u0027/tmp/metadata_meter.log\u0027,"},{"line_number":93,"context_line":"                 pidfile_path\u003d\u0027/tmp/metadata_meter.pid\u0027):"},{"line_number":94,"context_line":"        self.ssh_client \u003d ssh_client"}],"source_content_type":"text/x-python","patch_set":11,"id":"73d8b9e9_4000e7ea","line":91,"range":{"start_line":91,"start_character":45,"end_line":91,"end_character":76},"in_reply_to":"8bc18225_9475fff9","updated":"2024-10-23 13:51:31.000000000","message":"Thanks! :)","commit_id":"41d8b6a21e8a7180e24596827ac79b0f5ad9c8d4"}],"tempest/config.py":[{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"0ab760397d157c08f02122bb77910a7256ced412","unresolved":true,"context_lines":[{"line_number":964,"context_line":"                      \"migration, in seconds. \""},{"line_number":965,"context_line":"                      \"When the measured downtime exceeds this value, an \""},{"line_number":966,"context_line":"                      \"exception is raised.\"),"},{"line_number":967,"context_line":"    cfg.FloatOpt(\u0027allowed_metadata_downtime\u0027,"},{"line_number":968,"context_line":"                 default\u003d6.0,"},{"line_number":969,"context_line":"                 help\u003d\"Allowed VM metadata connection downtime during live \""},{"line_number":970,"context_line":"                      \"migration, in seconds. \""},{"line_number":971,"context_line":"                      \"When the measured downtime exceeds this value, an \""},{"line_number":972,"context_line":"                      \"exception is raised.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"0386e483_54956405","line":969,"range":{"start_line":967,"start_character":0,"end_line":969,"end_character":0},"updated":"2024-10-24 09:29:45.000000000","message":"let me recheck a couple of time. If the test passes with this value of 6 seconds, I think we can consider this is stable and the patch can be approved.","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"78ab63bff01e2227fd2d12217e739deb3e3d0db7","unresolved":false,"context_lines":[{"line_number":964,"context_line":"                      \"migration, in seconds. \""},{"line_number":965,"context_line":"                      \"When the measured downtime exceeds this value, an \""},{"line_number":966,"context_line":"                      \"exception is raised.\"),"},{"line_number":967,"context_line":"    cfg.FloatOpt(\u0027allowed_metadata_downtime\u0027,"},{"line_number":968,"context_line":"                 default\u003d6.0,"},{"line_number":969,"context_line":"                 help\u003d\"Allowed VM metadata connection downtime during live \""},{"line_number":970,"context_line":"                      \"migration, in seconds. \""},{"line_number":971,"context_line":"                      \"When the measured downtime exceeds this value, an \""},{"line_number":972,"context_line":"                      \"exception is raised.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"d06d400f_46038402","line":969,"range":{"start_line":967,"start_character":0,"end_line":969,"end_character":0},"in_reply_to":"0386e483_54956405","updated":"2024-10-24 14:22:37.000000000","message":"Done","commit_id":"86a5853c9f68f3917276237e16acaae1a6d2ed26"}],"tempest/scenario/test_network_advanced_server_ops.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"564755594ea4a9fc5c82f66a938669e65f03aca1","unresolved":true,"context_lines":[{"line_number":238,"context_line":"                downtime, allowed_downtime))"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        metadata_downtime_results \u003d metadata_downtime_meter.get_results()"},{"line_number":241,"context_line":"        self.assertGreater(metadata_downtime_results[\u0027successes\u0027],"},{"line_number":242,"context_line":"                           metadata_downtime_results[\u0027failures\u0027])"},{"line_number":243,"context_line":"        LOG.debug(\"Metadata Downtime seconds measured \u003d %r\","},{"line_number":244,"context_line":"                  metadata_downtime_results[\u0027downtime\u0027])"},{"line_number":245,"context_line":"        allowed_metadata_downtime \u003d CONF.validation.allowed_metadata_downtime"}],"source_content_type":"text/x-python","patch_set":6,"id":"a5fb1d84_711c6f77","line":242,"range":{"start_line":241,"start_character":0,"end_line":242,"end_character":65},"updated":"2024-10-04 12:45:29.000000000","message":"What is this metric? We want to have successful curls more than failed?","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                downtime, allowed_downtime))"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        metadata_downtime_results \u003d metadata_downtime_meter.get_results()"},{"line_number":241,"context_line":"        self.assertGreater(metadata_downtime_results[\u0027successes\u0027],"},{"line_number":242,"context_line":"                           metadata_downtime_results[\u0027failures\u0027])"},{"line_number":243,"context_line":"        LOG.debug(\"Metadata Downtime seconds measured \u003d %r\","},{"line_number":244,"context_line":"                  metadata_downtime_results[\u0027downtime\u0027])"},{"line_number":245,"context_line":"        allowed_metadata_downtime \u003d CONF.validation.allowed_metadata_downtime"}],"source_content_type":"text/x-python","patch_set":6,"id":"1c189825_2b27c273","line":242,"range":{"start_line":241,"start_character":0,"end_line":242,"end_character":65},"in_reply_to":"a5fb1d84_711c6f77","updated":"2024-10-07 09:38:52.000000000","message":"I wanted to check that there are some \"successes\". I mean, that the script really worked. I have changed it to `#successes \u003e 0` which seems more reasonable.","commit_id":"e417fd16d2ad99553bd50b18306cdd4f0e163a7a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"044c02f6db28ae00a2b9334ca5888583530d55c2","unresolved":true,"context_lines":[{"line_number":247,"context_line":"        self.assertLessEqual("},{"line_number":248,"context_line":"            metadata_downtime_failed, allowed_metadata_downtime,"},{"line_number":249,"context_line":"            \"Metadata downtime: {} seconds is higher than expected: {}\".format("},{"line_number":250,"context_line":"                metadata_downtime_results[\u0027downtime\u0027],"},{"line_number":251,"context_line":"                allowed_metadata_downtime))"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _test_server_connectivity_cold_migration_revert(self, source_host\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"2ea64704_d4a62523","line":250,"range":{"start_line":250,"start_character":16,"end_line":250,"end_character":53},"updated":"2024-10-04 17:16:38.000000000","message":"`metadata_downtime_failed`","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"eeec60b9f3ccd37a70bac717178e4054609ef7fa","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.assertLessEqual("},{"line_number":248,"context_line":"            metadata_downtime_failed, allowed_metadata_downtime,"},{"line_number":249,"context_line":"            \"Metadata downtime: {} seconds is higher than expected: {}\".format("},{"line_number":250,"context_line":"                metadata_downtime_results[\u0027downtime\u0027],"},{"line_number":251,"context_line":"                allowed_metadata_downtime))"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _test_server_connectivity_cold_migration_revert(self, source_host\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"d080c5fa_703b8cdc","line":250,"range":{"start_line":250,"start_character":16,"end_line":250,"end_character":53},"in_reply_to":"2ea64704_d4a62523","updated":"2024-10-07 09:38:52.000000000","message":"Done","commit_id":"733ff5b576a67d729380f852b3cdfe0a7ac68fba"}]}
