Skip to content

Commit 017e869

Browse files
committed
Adding support to bucket throttle param handling
Change-Id: I0a73b6b9074d1c9b149fa2fbb97fe625e23cfce5 Reviewed-on: https://review.couchbase.org/c/TAF/+/242445 Reviewed-by: <shiva.adky@couchbase.com> Tested-by: Ashwin <ashwin.govindarajulu@couchbase.com>
1 parent 29ac531 commit 017e869

5 files changed

Lines changed: 54 additions & 10 deletions

File tree

couchbase_utils/bucket_utils/bucket_ready_functions.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2665,7 +2665,10 @@ def create_default_bucket(
26652665
enable_encryption_at_rest=False,
26662666
encryption_at_rest_key_id=None,
26672667
encryption_at_rest_dek_rotation_interval=None,
2668-
encryption_at_rest_dek_lifetime=None):
2668+
encryption_at_rest_dek_lifetime=None,
2669+
throttle_enabled=None,
2670+
throttle_hard_limit=None,
2671+
throttle_reserved=None):
26692672

26702673
node_info = global_vars.cluster_util.get_nodes_self(cluster.master)
26712674
if ram_quota:
@@ -2713,6 +2716,13 @@ def create_default_bucket(
27132716
if fusion_log_store_uri is not None:
27142717
bucket_obj.fusionLogstoreURI = fusion_log_store_uri
27152718

2719+
if throttle_enabled is not None:
2720+
bucket_obj.throttleEnabled = throttle_enabled
2721+
if throttle_hard_limit is not None:
2722+
bucket_obj.throttleHardLimit = throttle_hard_limit
2723+
if throttle_reserved is not None:
2724+
bucket_obj.throttleReserved = throttle_reserved
2725+
27162726
if vbuckets is not None and storage == Bucket.StorageBackend.magma:
27172727
bucket_obj.numVBuckets = vbuckets
27182728
if vbuckets == 1024 and bucket_obj.ramQuotaMB < 1024:
@@ -3575,7 +3585,10 @@ def update_bucket_property(cluster_node, bucket, ram_quota_mb=None,
35753585
magma_key_tree_data_block_size=None,
35763586
magma_seq_tree_data_block_size=None,
35773587
durability_impossible_fallback=None,
3578-
warmup_behavior=None):
3588+
warmup_behavior=None,
3589+
throttle_enabled=None,
3590+
throttle_hard_limit=None,
3591+
throttle_reserved=None):
35793592
return BucketHelper(cluster_node).change_bucket_props(
35803593
bucket, ramQuotaMB=ram_quota_mb, replicaNumber=replica_number,
35813594
replicaIndex=replica_index, flushEnabled=flush_enabled,
@@ -3595,7 +3608,10 @@ def update_bucket_property(cluster_node, bucket, ram_quota_mb=None,
35953608
magma_seq_tree_data_block_size=magma_seq_tree_data_block_size,
35963609
storageBackend=storageBackend,
35973610
durability_impossible_fallback=durability_impossible_fallback,
3598-
warmup_behavior=warmup_behavior)
3611+
warmup_behavior=warmup_behavior,
3612+
throttle_enabled=throttle_enabled,
3613+
throttle_hard_limit=throttle_hard_limit,
3614+
throttle_reserved=throttle_reserved)
35993615

36003616
def update_all_bucket_maxTTL(self, cluster, maxttl=0):
36013617
for bucket in cluster.buckets:

lib/BucketLib/BucketOperations_Rest.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,10 @@ def create_bucket(self, bucket_params=dict()):
400400
bucket_params.get(Bucket.warmupBehavior),
401401
Bucket.encryptionAtRestKeyId: bucket_params.get(Bucket.encryptionAtRestKeyId),
402402
Bucket.encryptionAtRestDekRotationInterval: bucket_params.get(Bucket.encryptionAtRestDekRotationInterval),
403-
Bucket.encryptionAtRestDekLifetime: bucket_params.get(Bucket.encryptionAtRestDekLifetime)}
403+
Bucket.encryptionAtRestDekLifetime: bucket_params.get(Bucket.encryptionAtRestDekLifetime),
404+
Bucket.throttleReserved: bucket_params.get(Bucket.throttleReserved, None),
405+
Bucket.throttleHardLimit: bucket_params.get(Bucket.throttleHardLimit, None),
406+
Bucket.throttleEnabled: bucket_params.get(Bucket.throttleEnabled, False)}
404407

405408
# Set Bucket's width/weight param only if serverless is enabled
406409
if bucket_params.get('serverless'):
@@ -539,7 +542,10 @@ def change_bucket_props(self, bucket, ramQuotaMB=None,
539542
encryptionAtRestKeyId=None,
540543
encryptionAtRestDekLifetime=None,
541544
encryptionAtRestDekRotationInterval=None,
542-
warmup_behavior=None):
545+
warmup_behavior=None,
546+
throttle_enabled=None,
547+
throttle_hard_limit=None,
548+
throttle_reserved=None):
543549
params_dict = {}
544550
if ramQuotaMB:
545551
params_dict["ramQuotaMB"] = ramQuotaMB
@@ -603,6 +609,12 @@ def change_bucket_props(self, bucket, ramQuotaMB=None,
603609
params_dict[Bucket.encryptionAtRestDekRotationInterval] = encryptionAtRestDekRotationInterval
604610
if encryptionAtRestDekLifetime is not None:
605611
params_dict[Bucket.encryptionAtRestDekLifetime] = encryptionAtRestDekLifetime
612+
if throttle_enabled is not None:
613+
params_dict[Bucket.throttleEnabled] = throttle_enabled
614+
if throttle_hard_limit is not None:
615+
params_dict[Bucket.throttleHardLimit] = throttle_hard_limit
616+
if throttle_reserved is not None:
617+
params_dict[Bucket.throttleReserved] = throttle_reserved
606618

607619
self.log.info("Updating bucket properties for {}".format(bucket.name))
608620
status, content = self.edit_bucket(bucket.name, params_dict)

lib/BucketLib/bucket.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,12 @@ def __init__(self, new_params=dict()):
298298
Bucket.encryptionAtRestDekRotationInterval, 2592000)
299299
self.encryptionAtRestDekLifetime = new_params.get(
300300
Bucket.encryptionAtRestDekLifetime, 31536000)
301-
self.throttleReserved = 18446744073709551615
302-
self.throttleHardLimit = 18446744073709551615
303-
self.throttleEnabled = False
301+
self.throttleReserved = new_params.get(
302+
Bucket.throttleReserved, 18446744073709551615)
303+
self.throttleHardLimit = new_params.get(
304+
Bucket.throttleHardLimit, 18446744073709551615)
305+
self.throttleEnabled = new_params.get(
306+
Bucket.throttleEnabled, False)
304307
self.encryptionAtRestInfo = {
305308
'dataStatus': new_params.get('dataStatus', 'unencrypted'),
306309
'dekNumber': new_params.get('dekNumber', 0),

pytests/cb_basetest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ def setUp(self):
103103
# Couchstore bucket + Eviction Policy not set explicitly
104104
if self.bucket_eviction_policy is None:
105105
self.bucket_eviction_policy = Bucket.EvictionPolicy.VALUE_ONLY
106+
self.bucket_throttle_enabled = \
107+
self.input.param("bucket_throttle_enabled", None)
108+
self.bucket_throttle_hard_limit = \
109+
self.input.param("bucket_throttle_hard_limit", None)
110+
self.bucket_throttle_reserved = \
111+
self.input.param("bucket_throttle_reserved", None)
106112
# End of bucket params
107113

108114
# Doc specific params

pytests/onPrem_basetestcase.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ def setUp(self):
9292
self.input.param("disable_file_based_rebalance", False)
9393
# End of cluster info parameters
9494

95-
self.bucket_replica_index = self.input.param("bucket_replica_index",
96-
1)
95+
self.bucket_replica_index = self.input.param("bucket_replica_index", 1)
9796
self.bucket_num_vb = self.input.param("bucket_num_vb", None)
9897
# End of bucket parameters
9998

@@ -1872,6 +1871,14 @@ def create_bucket(self, cluster, bucket_name="default"):
18721871
if self.bucket_num_vb is not None:
18731872
create_bucket_params["vbuckets"] = self.bucket_num_vb
18741873

1874+
# Rate limiting feature values
1875+
if self.bucket_throttle_enabled is not None:
1876+
create_bucket_params["throttle_enabled"] = self.bucket_throttle_enabled
1877+
if self.bucket_throttle_reserved is not None:
1878+
create_bucket_params["throttle_reserved"] = self.bucket_throttle_reserved
1879+
if self.bucket_throttle_hard_limit is not None:
1880+
create_bucket_params["throttle_hard_limit"] = self.bucket_throttle_hard_limit
1881+
18751882
# This is needed because server will throw the error saying,
18761883
# "Support for variable number of vbuckets is not enabled"
18771884
if CbServer.cluster_profile == "serverless":

0 commit comments

Comments
 (0)