)]}'
{"pytests/storage/fusion/fusion_s3.py":[{"robot_id":"droid-review","robot_run_id":"droid-review-20260515-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"39f9402b92aa510331476e165390a14a196eba52","patch_set":47,"id":"72fccdba_3c62fed0","line":327,"updated":"2026-05-15 11:15:46.000000000","message":"Command injection risk: s3_bucket_name / s3_key_prefix are interpolated into a shell command executed via SSH. If params contain shell metacharacters, they can alter the command. Quote the path (or use the AWS SDK).\nSuggested fix:\nimport shlex\ns3_path \u003d f\"s3://{s3_bucket_name}/{s3_key_prefix}/{bucket_uuid}/\"\ns3_cmd \u003d f\"aws s3 ls {shlex.quote(s3_path)} --recursive --human-readable --summarize | tail -n 2\"","commit_id":"c655a71087baf7bff71d2b0c50b2c1e2f2e939c3"}],"pytests/storage/fusion/fusion_sanity.py":[{"robot_id":"droid-review","robot_run_id":"droid-review-20260518-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e72ced8943c71ab61e67ace9e8afdfaeefe0de85","patch_set":50,"id":"27810250_21019743","line":525,"updated":"2026-05-18 08:29:01.000000000","message":"`rebalance_type` is read but never used, so this deterministic test always runs a Fusion rebalance even when `rebalance_type\u003d\"dcp\"` is passed. Either drop the param or branch on it:\n`if rebalance_type \u003d\u003d \"fusion\":\n    self.run_rebalance(...)\nelse:\n    self.task.rebalance(self.cluster, add, remove, ...)`","commit_id":"3c7bd58b0d1e271822f60fbe9d5d44278e8ced6e"}],"pytests/storage/fusion/fusion_sync_manager.py":[{"robot_id":"droid-review","robot_run_id":"droid-review-20260515-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"39f9402b92aa510331476e165390a14a196eba52","patch_set":47,"id":"506e1fd3_af8e45ca","line":450,"updated":"2026-05-15 11:15:46.000000000","message":"time_delta can become negative when update_load_time_taken exceeds the interval, which will cause self.sleep() to error or skip the intended wait. Clamp to a non-negative value.\nSuggested fix:\ntime_delta \u003d max(0, self.fusion_upload_interval - update_load_time_taken + 300)\nself.sleep(time_delta, \"Wait for sync2 containing updates to take place\")","commit_id":"c655a71087baf7bff71d2b0c50b2c1e2f2e939c3"},{"robot_id":"droid-review","robot_run_id":"droid-review-20260518-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e72ced8943c71ab61e67ace9e8afdfaeefe0de85","patch_set":50,"id":"7a38424d_39a3d022","line":452,"updated":"2026-05-18 08:29:01.000000000","message":"If `update_load_time_taken` exceeds `fusion_upload_interval + 300`, `time_delta` becomes negative and `self.sleep()` will raise `ValueError`. Guard against negatives:\n`time_delta \u003d max(0, self.fusion_upload_interval - update_load_time_taken + 300)`","commit_id":"3c7bd58b0d1e271822f60fbe9d5d44278e8ced6e"}],"pytests/storage/fusion/fusion_uploader_management.py":[{"robot_id":"droid-review","robot_run_id":"droid-review-20260515-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7e9a7cb06d48688f46203f02270ee39e5a553799","patch_set":47,"id":"85359eb5_839d59d3","line":410,"updated":"2026-05-15 09:36:59.000000000","message":"For `failover_type \u003d\u003d \"hard\"` there is no automatic rebalance to monitor, so `monitor_rebalance()` will timeout/fail. Guard this call to only run for graceful failover (or trigger a rebalance before monitoring).\n\nSuggested fix:\n\nif failover_type \u003d\u003d \"graceful\":\n    rebalance_passed \u003d RebalanceUtil(self.cluster).monitor_rebalance()\n    if not rebalance_passed:\n        self.fail(\"Graceful failover rebalance failed\")\n\n","commit_id":"c655a71087baf7bff71d2b0c50b2c1e2f2e939c3"},{"robot_id":"droid-review","robot_run_id":"droid-review-20260518-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e72ced8943c71ab61e67ace9e8afdfaeefe0de85","patch_set":50,"id":"17ca8ae7_eaa3dbd0","line":410,"updated":"2026-05-18 08:29:01.000000000","message":"Hard failover doesn’t trigger a rebalance, so `monitor_rebalance()` will likely time out and fail. Only monitor rebalance for graceful failover (or when you explicitly start one). Example:\n`if failover_type \u003d\u003d \"graceful\":\n    rebalance_passed \u003d RebalanceUtil(self.cluster).monitor_rebalance()\n    ...`","commit_id":"3c7bd58b0d1e271822f60fbe9d5d44278e8ced6e"}],"pytests/storage/magma/magma_base.py":[{"robot_id":"droid-review","robot_run_id":"droid-review-20260515-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7e9a7cb06d48688f46203f02270ee39e5a553799","patch_set":47,"id":"e8408a53_a49be733","line":153,"updated":"2026-05-15 09:36:59.000000000","message":"The ns_config key is misspelled (`place_uploades_on_actives`), so this diag/eval won\u0027t disable uploader placement on actives. Use the correct key name.\n\nSuggested fix:\n\ncmd \u003d f\"ns_config:set({{fusion_uploaders, place_uploaders_on_actives}}, {str(place_uploaders_on_actives).lower()}).\"\n","commit_id":"c655a71087baf7bff71d2b0c50b2c1e2f2e939c3"},{"robot_id":"droid-review","robot_run_id":"droid-review-20260515-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"39f9402b92aa510331476e165390a14a196eba52","patch_set":47,"id":"553373d8_638ce0c1","line":153,"updated":"2026-05-15 11:15:46.000000000","message":"Typo in ns_config key: `place_uploades_on_actives` will not match the actual setting, so the flag never takes effect. Fix the key name.\nSuggested fix:\ncmd \u003d f\"ns_config:set({{fusion_uploaders, place_uploaders_on_actives}}, {str(place_uploaders_on_actives).lower()}).\"","commit_id":"c655a71087baf7bff71d2b0c50b2c1e2f2e939c3"},{"robot_id":"droid-review","robot_run_id":"droid-review-20260518-001","author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e72ced8943c71ab61e67ace9e8afdfaeefe0de85","patch_set":50,"id":"3021516e_c29d45f4","line":153,"updated":"2026-05-18 08:29:01.000000000","message":"Typo in the diag/eval key (`place_uploades_on_actives`) means the setting won’t be applied. Use the correct key:\n`cmd \u003d f\"ns_config:set({{fusion_uploaders, place_uploaders_on_actives}}, {str(place_uploaders_on_actives).lower()}).\"`","commit_id":"3c7bd58b0d1e271822f60fbe9d5d44278e8ced6e"}]}
