)]}'
{"couchbase_utils/cb_tools/cbbackupmgr.py":[{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"383f0c2f_cb4ec70a","line":21,"updated":"2026-05-13 05:25:50.000000000","message":"[ADVISORY] Exposing `shellConn` directly via `get_shell_conn()` breaks encapsulation. External callers that close or otherwise mutate the connection will corrupt the manager\u0027s internal state. Consider providing a higher-level helper method instead of leaking the raw connection object.","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"},{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"78d4e70b_64444655","line":316,"updated":"2026-05-13 05:25:50.000000000","message":"[BLOCKER] `collect_logs` uses `self.cbstatCmd` to build the command, but this attribute holds the path to the `cbstat` binary, not `cbbackupmgr`. The resulting shell command will invoke the wrong executable and silently produce no useful output.\n\n**Suggested Fix:**\nsuggestion\n        cmd \u003d \"%s collect-logs\" % self.cbbackupmgrCmd\n\nVerify the correct attribute name for the cbbackupmgr binary path (e.g., `self.cbbackupmgrCmd`) as defined in the class constructor.","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"},{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"d45a74ad_f4b86e6f","line":329,"updated":"2026-05-13 05:25:50.000000000","message":"[WARNING] `if not output or error:` treats an empty-but-successful output list as a failure. `cbbackupmgr collect-logs` may produce no stdout on success, causing a spurious error log on every clean run.\n\n**Suggested Fix:**\nsuggestion\n        if error:\n            self.log.error(f\"Command failed with error: {error}\")\n","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"}],"pytests/bucket_collections/collections_base.py":[{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"dbadf798_0ba9914d","line":264,"updated":"2026-05-13 05:25:50.000000000","message":"[ADVISORY] The `ls {remote_tmp_dir}/*.zip` glob assumes `cbbackupmgr collect-logs` always produces `.zip` files. If the output format changes (e.g., `.tar.gz`) in a future server version, log collection will silently succeed while copying nothing. Consider using `ls {remote_tmp_dir}/` and filtering by a more permissive pattern, or asserting that at least one file was found.","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"},{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"322cbd71_cf07ff25","line":274,"updated":"2026-05-13 05:25:50.000000000","message":"[BLOCKER] `self.backup_mgr` and `self.cont_bk_mgr` are referenced directly in the `collectors` list without an `hasattr` guard. If the test failed before these managers were initialised (e.g., in `setUp`), this will raise `AttributeError` and swallow the real failure, making root-cause analysis harder.\n\n**Suggested Fix:**\nsuggestion\n        collectors \u003d []\n        if hasattr(self, \u0027backup_mgr\u0027) and self.backup_mgr:\n            collectors.append(\n                (\"cbbackupmgr\", self.backup_mgr,\n                 lambda mgr, tmp: mgr.collect_logs(archive_dir\u003dself.backup_archive_dir,\n                                                   output_dir\u003dtmp))\n            )\n        if hasattr(self, \u0027cont_bk_mgr\u0027) and self.cont_bk_mgr:\n            collectors.append(\n                (\"cbcontbk\", self.cont_bk_mgr,\n                 lambda mgr, tmp: mgr.collect_logs(location\u003dself.continuous_backup_location,\n                                                   temp_dir\u003dtmp))\n            )\n","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"},{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"989503aa_ad25c5b4","line":284,"updated":"2026-05-13 05:25:50.000000000","message":"[WARNING] `mgr.get_shell_conn()` returns the manager\u0027s internal, shared `shellConn`. Using it here to call `execute_command` concurrently with any background manager activity risks interleaved I/O or a use-after-close crash. Open a dedicated short-lived connection for log collection instead:\n\nsuggestion\n                shell \u003d RemoteMachineShellConnection(mgr.get_shell_conn().ip)\n\nClose it in a `finally` block after the per-manager loop body.","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"},{"robot_id":"github-copilot-review","robot_run_id":"9902ac5458b482d02e95645f51bcba1518cda16b","author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331db7b4391a8f55887a4d89d11b41f08ef02a58","patch_set":3,"id":"604dd1c7_d9f05322","line":299,"updated":"2026-05-13 05:25:50.000000000","message":"[WARNING] `remote_tmp_dir` (`/data/tmp`) is populated with log ZIP files but never cleaned up after the copy. On repeated test failures this directory will accumulate files and eventually fill the disk on the remote node.\n\n**Suggested Fix:** Add a cleanup step after the copy loop:\nsuggestion\n                        shell.get_file(remote_tmp_dir, log_file.split(\"/\")[-1], log_path)\n                shell.execute_command(f\"rm -f {remote_tmp_dir}/*.zip\")\n","commit_id":"9902ac5458b482d02e95645f51bcba1518cda16b"}]}
