)]}'
{"conf/ep_engine/rate_limiting_steady_state.conf":[{"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":"f881e94022af2d007fcb52c5538a8e3c65828d96","patch_set":14,"id":"8b2aba80_06e56d59","line":13,"updated":"2026-05-15 11:02:11.000000000","message":"These entries are under `KVRateLimitingTests`, but the methods are defined on `RateLimitingUpgradeTests`, so testrunner will skip them. Move them under a `epengine.rate_limiting_tests.RateLimitingUpgradeTests:` section, e.g.:\n\nepengine.rate_limiting_tests.RateLimitingUpgradeTests:\n    test_rate_limit_in_mixed_mode_cluster,...\n    test_rate_limit_after_full_upgrade,...\n\n","commit_id":"363df318cb5321add5572671a38ac16bbd546576"}],"lib/sdk_exceptions.py":[{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"ea6f916e_c0f14378","line":108,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] `\"rate limit\"` is an overly broad substring that will produce false-positive rate-limit detections.\n\nReasoning: `SDKException.check_if_exception_exists` performs a case-sensitive substring search. The two-word string `\"rate limit\"` can appear in general resource-limit log messages, server error descriptions, or monitoring output that have nothing to do with KV throttling, causing `_burst_writes` and `test_sync_gateway_backoff_simulation` to miscount non-throttle errors as rate-limited.\n\nSuggested fix — remove the generic entry and rely on the specific identifiers:\nsuggestion\n    RateLimitedException \u003d [\n        \"com.couchbase.client.core.error.RateLimitedException\",\n        \"RateLimitedException\",\n        \"EWouldThrottle\",\n        \"WouldThrottle\",\n        \"rate_limited\",\n    ]\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"}],"pytests/epengine/rate_limiting_tests.py":[{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"b975b090_9f1f8688","line":30,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] `manage_global_memcached_setting(throttle_enabled\u003d\"true\", ...)` is called in `setUp` but is never reverted in `tearDown`.\n\nReasoning: This mutates cluster-wide throttle state permanently. Any test class running on the same cluster after `KVRateLimitingTests` inherits the elevated throttle configuration, causing unintended interactions and non-deterministic failures in unrelated suites.\n\nSuggested fix — add a `tearDown` override (or extend the existing one) in `KVRateLimitingTests`:\nsuggestion\n    def tearDown(self):\n        try:\n            self.cluster_rest.manage_global_memcached_setting(\n                throttle_enabled\u003d\"false\")\n        except Exception as e:\n            self.log.warning(f\"Failed to revert global throttle setting: {e}\")\n        super(KVRateLimitingTests, self).tearDown()\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"ad9c7a23_5664ba0f","line":320,"updated":"2026-05-13 05:23:20.000000000","message":"[ADVISORY] `except Exception` on the Prometheus fetch silently skips nodes without any assertion that at least one node responded.\n\nReasoning: If every KV node\u0027s stats endpoint is unreachable (e.g. wrong port, firewall rule), `total_lines` remains 0 and `seen` stays all-`False`. The test then fails with a misleading \"Missing Prometheus metric families\" error instead of a clear \"no nodes responded\" failure, making triage harder.\n\nSuggested fix — add a post-loop guard:\nsuggestion\n        self.assertGreater(\n            total_lines, 0,\n            \"No Prometheus metric lines were collected from any KV node; \"\n            \"check that the stats endpoint is reachable.\")\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"eb1b141b_ed9d6f7f","line":353,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] The `except Exception` block in `worker` silently discards all non-rate-limited exceptions via `continue`.\n\nReasoning: Errors such as `NetworkException`, `AuthenticationException`, or `TimeoutException` are swallowed without any record. If the cluster is unreachable, `_burst_writes` returns 0, the test asserts the OR-condition fails, and the failure message falsely implies the throttler never triggered — rather than that the cluster was down. This makes one-pass debugging impossible.\n\nSuggested fix:\nsuggestion\n                except Exception as e:\n                    if SDKException.check_if_exception_exists(\n                            SDKException.RateLimitedException, str(e)):\n                        rate_limited_counts[c_idx] +\u003d 1\n                    else:\n                        self.log.debug(\n                            f\"worker[{c_idx}] op {i} non-rate-limit error: \"\n                            f\"{type(e).__name__}: {e}\")\n                    continue\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"1c7dfd5b_de408c75","line":374,"updated":"2026-05-13 05:23:20.000000000","message":"[BLOCKER] SDK client cleanup in `_burst_writes` is not guarded by `try/finally`.\n\nReasoning: If any `t.join()` call is interrupted (e.g. `KeyboardInterrupt`, or an exception propagated from a daemon thread in some Python builds), execution jumps past the `for c in clients: c.close()` block, leaking all SDK connections for the remainder of the test run. This violates the resource-lifecycle requirement.\n\nSuggested fix:\nsuggestion\n        try:\n            for t in threads:\n                t.join()\n        finally:\n            for c in clients:\n                try:\n                    c.close()\n                except Exception:\n                    pass\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"76c20143_f611d0ad","line":465,"updated":"2026-05-13 05:23:20.000000000","message":"[BLOCKER] `import time` is placed inside the `tearDown` method body, not at module level.\n\nReasoning: Python re-evaluates method-level imports on every call, obscuring dependencies and violating PEP-8 import conventions. For a tearDown path this is also a latent risk if the import ever fails under a restricted environment.\n\nSuggested fix:\nsuggestion\nimport time\n\nRemove the inline `import time` at line 465 and add it alongside the other stdlib imports at the top of the file.","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"4ed9d8cf_7c9f858f","line":490,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] `time.sleep(10)` is a bare sleep anti-pattern in tearDown.\n\nReasoning: 6 attempts × 10 s \u003d up to 60 s of blind waiting per bucket on every failing test run, bloating CI wall-clock time with no observable progress. There is also no guard against the outer `for name in bucket_names` loop multiplying this cost across multiple buckets.\n\nSuggested fix — replace the bare sleep with elapsed-time tracking:\nsuggestion\n                deadline \u003d time.monotonic() + 60\n                while time.monotonic() \u003c deadline:\n                    # attempt delete logic here\n                    if done:\n                        break\n                    time.sleep(2)\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"a04882a3_5fb6f530","line":527,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] Upgrade failures in the `finally` block of `test_rate_limit_in_mixed_mode_cluster` are silently swallowed.\n\nReasoning: If completing the upgrade of the remaining nodes fails, the cluster is left in a mixed-mode state. `tearDown` will then attempt bucket deletes against a partially-upgraded cluster and may silently succeed or fail in unpredictable ways. At minimum the test should be marked as failed (not just warned) if the cleanup upgrade cannot complete, so the result is not a misleading pass.\n\nSuggested fix: re-raise or use `self.fail()` after logging if the upgrade count does not reach the expected node count.","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"39f1d538_8983af03","line":545,"updated":"2026-05-13 05:23:20.000000000","message":"[WARNING] `self.bucket_rest.get_bucket_info()` has no error handling.\n\nReasoning: A REST failure here (e.g. cluster still rebalancing post-upgrade) raises an unhandled exception with no context about the upgrade state, making one-pass debugging difficult. Wrap with a `try/except` and log the HTTP status/content before failing.","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"robot_id":"github-copilot-infra-review","robot_run_id":"kv-rate-limit-review-20260513","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":"7a1ef8320bea8e03414c04d6afd91dd0a4aa16b8","patch_set":8,"id":"4ad710b3_58b8679d","line":546,"updated":"2026-05-13 05:23:20.000000000","message":"[BLOCKER] `next(b for b in buckets if b[\u0027name\u0027] \u003d\u003d self.bucket.name)` raises a bare `StopIteration` if the bucket is absent after upgrade.\n\nReasoning: A missing bucket post-upgrade is a meaningful failure condition. A raw `StopIteration` produces an unreadable traceback with zero context about which bucket was expected or what the REST response contained, making one-pass debugging impossible.\n\nSuggested fix:\nsuggestion\n        bucket_info \u003d next(\n            (b for b in buckets if b[\u0027name\u0027] \u003d\u003d self.bucket.name), None)\n        self.assertIsNotNone(\n            bucket_info,\n            f\"Bucket \u0027{self.bucket.name}\u0027 not found in REST response after upgrade; \"\n            f\"available: {[b.get(\u0027name\u0027) for b in buckets]}\")\n","commit_id":"167624ecf5ff67965371d692177ec2fe14be81c8"},{"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":"f881e94022af2d007fcb52c5538a8e3c65828d96","patch_set":14,"id":"ff75b0a4_af665c6d","line":27,"updated":"2026-05-15 11:02:11.000000000","message":"Enabling cluster-wide throttle unconditionally will fail CE runs: `ce.conf` executes `test_rate_limiting_unavailable_in_ce` and expects the REST call to be rejected, but setUp now asserts success before the test can run. Guard this call by edition or a test param. For example:\n\nif self.cluster_util.is_enterprise_edition(self.cluster):\n    status, content \u003d self.cluster_rest.manage_global_memcached_setting(\n        throttle_enabled\u003d\u0027true\u0027,\n        node_capacity\u003dself.input.param(\u0027node_capacity\u0027, 500))\n    self.assertTrue(\n        status, f\u0027Failed to enable cluster-wide throttle: {content}\u0027)\nelse:\n    self.log.info(\u0027Skipping global throttle enable on CE\u0027)\n\n","commit_id":"363df318cb5321add5572671a38ac16bbd546576"},{"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":"2a3d6aeeb3952641faeef7f6db895419881617ba","patch_set":17,"id":"d6ea4bf2_e1ec9d2c","line":52,"updated":"2026-05-15 16:33:04.000000000","message":"In CE runs (see conf/ep_engine/ce.conf), throttle settings are unsupported and edit_bucket typically fails, but setUp asserts success. This will fail test_rate_limiting_unavailable_in_ce before the test executes. Guard the edit to enterprise-only or allow failure on CE.\n\nFix example:\nif self.cluster_util.is_enterprise_edition(self.cluster) and (throttle_reserved or throttle_hard_limit):\n    status, content \u003d self.bucket_rest.edit_bucket(self.bucket.name, edit_params)\n    self.assertTrue(status, f\"Failed to set bucket throttle limits: {content}\")\nelse:\n    self.log.info(\"Skipping bucket throttle edits on CE\")","commit_id":"e4b37236e77faa6ce8f169f4a06318c3c30b22e8"}]}
