Skip to content

Commit 54d1f00

Browse files
committed
MB-70082 Add support for KV rate limiting to setting-cluster
Change-Id: I65683e720d09fe037496a23f4c0a3eeb92db8b26 Reviewed-on: https://review.couchbase.org/c/couchbase-cli/+/242094 Reviewed-by: Matt Hall <matt.hall@couchbase.com> Tested-by: Build Bot <build@couchbase.com>
1 parent 94001b8 commit 54d1f00

3 files changed

Lines changed: 62 additions & 1 deletion

File tree

cbmgr.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3501,6 +3501,15 @@ def __init__(self):
35013501
group.add_argument("--cluster-query-ramsize", dest="query_mem_quota", metavar="<quota>",
35023502
type=(int), help="The query service memory quota in mebibytes")
35033503
group.add_argument("--cluster-name", dest="name", metavar="<name>", help="The cluster name")
3504+
group.add_argument("--node-capacity", dest="node_capacity", metavar="<capacity>", type=(int),
3505+
help="The number of units (bytes) per second. This is a global counter that any "
3506+
"bucket can consume from")
3507+
group.add_argument("--throttle-enabled", dest="throttle_enabled", metavar="<1|0>", choices=["0", "1"],
3508+
help="Enable/Disable throttling feature")
3509+
group.add_argument("--read-unit-size", dest="read_unit_size", metavar="<size>", type=(int),
3510+
help="Size of read that will consume 1 unit")
3511+
group.add_argument("--write-unit-size", dest="write_unit_size", metavar="<size>", type=(int),
3512+
help="Size of write that will consume 1 unit")
35043513

35053514
@rest_initialiser(cluster_init_check=True, version_check=True)
35063515
def execute(self, opts):
@@ -3523,6 +3532,12 @@ def execute(self, opts):
35233532
_, errors = self.rest.set_admin_credentials(username, password, opts.port)
35243533
_exit_if_errors(errors)
35253534

3535+
# Set global throttling settings if any were provided
3536+
if opts.node_capacity is not None or opts.throttle_enabled is not None or opts.read_unit_size is not None or opts.write_unit_size is not None:
3537+
_, errors = self.rest.set_global_memcached_settings(
3538+
opts.node_capacity, opts.throttle_enabled, opts.read_unit_size, opts.write_unit_size)
3539+
_exit_if_errors(errors)
3540+
35263541
_success("Cluster settings modified")
35273542

35283543
@staticmethod

docs/modules/cli/pages/cbcli/couchbase-cli-setting-cluster.adoc

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ _couchbase-cli setting-cluster_ [--cluster <url>] [--username <user>] [--passwor
1919
[--cluster-ramsize <mebibytes>] [--cluster-name <name>]
2020
[--cluster-index-ramsize <mebibytes>] [--cluster-fts-ramsize <mebibytes>]
2121
[--cluster-eventing-ramsize <mebibytes>]
22-
[--cluster-analytics-ramsize <mebibytes>]
22+
[--cluster-analytics-ramsize <mebibytes>] [--cluster-query-ramsize <mebibytes>]
23+
[--node-capacity <capacity>] [--throttle-enabled <1|0>]
24+
[--read-unit-size <size>] [--write-unit-size <size>]
2325

2426
== DESCRIPTION
2527

@@ -79,6 +81,21 @@ include::{partialsdir}/cbcli/part-common-options.adoc[]
7981
Specifies the port for the Couchbase Administration Console. Defaults to
8082
port 8091.
8183

84+
--node-capacity::
85+
The number of units (bytes) per second. This is a global counter that any
86+
bucket can consume from. This sets the total amount of resources available on
87+
the node.
88+
89+
--throttle-enabled::
90+
Enable or disable the throttling feature. Accepted values are "1" to enable
91+
and "0" to disable.
92+
93+
--read-unit-size::
94+
The size in bytes of read that will consume 1 unit.
95+
96+
--write-unit-size::
97+
The size in bytes of write that will consume 1 unit.
98+
8299
include::{partialsdir}/cbcli/part-host-formats.adoc[]
83100

84101
include::{partialsdir}/cbcli/part-certificate-authentication.adoc[]

test/test_cli.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,6 +2096,35 @@ def test_setting_cluster_memory(self):
20962096
'cbasMemoryQuota=500', 'indexMemoryQuota=200', 'queryMemoryQuota=600']
20972097
self.rest_parameter_match(expected_params)
20982098

2099+
def test_setting_cluster_throttle_settings(self):
2100+
args = [
2101+
'--node-capacity',
2102+
'10000',
2103+
'--throttle-enabled',
2104+
'1',
2105+
'--read-unit-size',
2106+
'1024',
2107+
'--write-unit-size',
2108+
'2048']
2109+
self.no_error_run(self.command + args, self.server_args)
2110+
self.assertIn('POST:/pools/default/settings/memcached/global', self.server.trace)
2111+
expected_params = ['nodeCapacity=10000', 'throttleEnabled=true', 'readUnitSize=1024', 'writeUnitSize=2048']
2112+
self.rest_parameter_match(expected_params)
2113+
2114+
def test_setting_cluster_throttle_disabled(self):
2115+
args = ['--node-capacity', '50000', '--throttle-enabled', '0']
2116+
self.no_error_run(self.command + args, self.server_args)
2117+
self.assertIn('POST:/pools/default/settings/memcached/global', self.server.trace)
2118+
expected_params = ['nodeCapacity=50000', 'throttleEnabled=false']
2119+
self.rest_parameter_match(expected_params)
2120+
2121+
def test_setting_cluster_only_node_capacity(self):
2122+
args = ['--node-capacity', '25000']
2123+
self.no_error_run(self.command + args, self.server_args)
2124+
self.assertIn('POST:/pools/default/settings/memcached/global', self.server.trace)
2125+
expected_params = ['nodeCapacity=25000']
2126+
self.rest_parameter_match(expected_params)
2127+
20992128

21002129
class TestSettingCompaction(CommandTest):
21012130
def setUp(self):

0 commit comments

Comments
 (0)