Skip to content

Commit 6f25dd9

Browse files
committed
PYCBC-1682: Use the server default for storage backend when creating buckets
Motivation ========== The default storage backend can change in the future. We should not set the storage backend in create_bucket requests, to ensure the server default is used. Changes ======= * If storage_backend is not set, don't set it to couchstore in the request. Leave it unset so the server uses its own default. * Update tests to reflect this change. Results ======= All tests pass. Change-Id: I3630d75b823879e163d078b0292574b35b49f32f Reviewed-on: https://review.couchbase.org/c/couchbase-python-client/+/225951 Tested-by: Build Bot <build@couchbase.com> Reviewed-by: Jared Casey <jared.casey@couchbase.com>
1 parent c1dc050 commit 6f25dd9

5 files changed

Lines changed: 65 additions & 4 deletions

File tree

acouchbase/tests/bucketmgmt_t.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,10 @@ async def test_bucket_backend_default(self, cb_env, test_bucket):
265265
ram_quota_mb=100,
266266
flush_enabled=False))
267267
bucket = await cb_env.try_n_times(10, 3, cb_env.bm.get_bucket, test_bucket)
268-
assert bucket.storage_backend == StorageBackend.COUCHSTORE
268+
if cb_env.supports_feature('magma_128_buckets'):
269+
assert bucket.storage_backend == StorageBackend.MAGMA
270+
else:
271+
assert bucket.storage_backend == StorageBackend.COUCHSTORE
269272

270273
@pytest.mark.usefixtures("check_bucket_storage_backend_supported")
271274
@pytest.mark.usefixtures("purge_buckets")
@@ -281,6 +284,20 @@ async def test_bucket_backend_magma(self, cb_env, test_bucket):
281284
bucket = await cb_env.try_n_times(10, 3, cb_env.bm.get_bucket, test_bucket)
282285
assert bucket.storage_backend == StorageBackend.MAGMA
283286

287+
@pytest.mark.usefixtures("check_bucket_storage_backend_supported")
288+
@pytest.mark.usefixtures("purge_buckets")
289+
@pytest.mark.asyncio
290+
async def test_bucket_backend_couchstore(self, cb_env, test_bucket):
291+
# Create the bucket
292+
await cb_env.bm.create_bucket(
293+
CreateBucketSettings(
294+
name=test_bucket,
295+
ram_quota_mb=100,
296+
flush_enabled=False,
297+
storage_backend=StorageBackend.COUCHSTORE))
298+
bucket = await cb_env.try_n_times(10, 3, cb_env.bm.get_bucket, test_bucket)
299+
assert bucket.storage_backend == StorageBackend.COUCHSTORE
300+
284301
@pytest.mark.usefixtures("check_bucket_storage_backend_supported")
285302
@pytest.mark.usefixtures("purge_buckets")
286303
@pytest.mark.asyncio

couchbase/management/logic/buckets_logic.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,8 +401,7 @@ class BucketSettings(dict):
401401
ParamTransform("storageBackend",
402402
EnumToStr(StorageBackend)),
403403
ParamTransform("storageBackend",
404-
StrToEnum(StorageBackend)),
405-
default=StorageBackend.COUCHSTORE),
404+
StrToEnum(StorageBackend))),
406405
BidirectionalTransform("history_retention_collection_default",
407406
ParamTransform("historyRetentionCollectionDefault", Identity(bool, optional=True)),
408407
ParamTransform("historyRetentionCollectionDefault", Identity(bool, optional=True))),

couchbase/tests/bucketmgmt_t.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class BucketManagementTestSuite:
4040
'test_bucket_backend_default',
4141
'test_bucket_backend_ephemeral',
4242
'test_bucket_backend_magma',
43+
'test_bucket_backend_couchstore',
4344
'test_bucket_create',
4445
'test_bucket_create_durability',
4546
'test_bucket_create_fail',
@@ -88,6 +89,11 @@ def check_non_deduped_history_supported(self, cb_env):
8889
cb_env.server_version_short,
8990
cb_env.mock_server_type)
9091

92+
def supports_magma_128_buckets(self, cb_env):
93+
return EnvironmentFeatures.supports_feature('magma_128_buckets',
94+
cb_env.server_version_short,
95+
cb_env.mock_server_type) is None
96+
9197
@pytest.fixture()
9298
def drop_bucket(self, cb_env):
9399
yield
@@ -105,7 +111,10 @@ def test_bucket_backend_default(self, cb_env):
105111
flush_enabled=False))
106112
cb_env.consistency.wait_until_bucket_present(bucket_name)
107113
bucket = cb_env.bm.get_bucket(bucket_name)
108-
assert bucket.storage_backend == StorageBackend.COUCHSTORE
114+
if self.supports_magma_128_buckets(cb_env):
115+
assert bucket.storage_backend == StorageBackend.MAGMA
116+
else:
117+
assert bucket.storage_backend == StorageBackend.COUCHSTORE
109118

110119
@pytest.mark.usefixtures('check_bucket_storage_backend_supported')
111120
@pytest.mark.usefixtures('drop_bucket')
@@ -137,6 +146,21 @@ def test_bucket_backend_magma(self, cb_env):
137146
bucket = cb_env.bm.get_bucket(bucket_name)
138147
assert bucket.storage_backend == StorageBackend.MAGMA
139148

149+
@pytest.mark.usefixtures('check_bucket_storage_backend_supported')
150+
@pytest.mark.usefixtures('drop_bucket')
151+
def test_bucket_backend_couchstore(self, cb_env):
152+
bucket_name = cb_env.get_bucket_name()
153+
# Create the bucket
154+
cb_env.bm.create_bucket(
155+
CreateBucketSettings(
156+
name=bucket_name,
157+
ram_quota_mb=100,
158+
flush_enabled=False,
159+
storage_backend=StorageBackend.COUCHSTORE))
160+
cb_env.consistency.wait_until_bucket_present(bucket_name)
161+
bucket = cb_env.bm.get_bucket(bucket_name)
162+
assert bucket.storage_backend == StorageBackend.COUCHSTORE
163+
140164
@pytest.mark.usefixtures('check_bucket_mgmt_supported')
141165
@pytest.mark.usefixtures('drop_bucket')
142166
def test_bucket_create(self, cb_env):

tests/helpers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ class ServerFeatures(Enum):
138138
ScopeSearchIndexManagement = 'scope_search_index_mgmt'
139139
ScopeEventingFunctionManagement = 'scope_eventing_function_mgmt'
140140
ServerGroups = 'server_groups'
141+
Magma128Buckets = 'magma_128_buckets'
141142

142143

143144
# mock and real server (all versions) should have these features
@@ -217,6 +218,8 @@ class ServerFeatures(Enum):
217218

218219
AT_LEAST_V7_6_2_FEATURES = [ServerFeatures.ServerGroups]
219220

221+
AT_LEAST_V8_0_0_FEATURES = [ServerFeatures.Magma128Buckets]
222+
220223
# Only set the baseline needed
221224
TEST_SUITE_MAP = {
222225
'analytics_t': [ServerFeatures.Analytics],
@@ -519,6 +522,11 @@ def supports_feature(self, feature # type: str # noqa: C901
519522
or self.server_version_short > 7.6)
520523
return not self.is_mock_server
521524

525+
if feature in map(lambda f: f.value, AT_LEAST_V8_0_0_FEATURES):
526+
if self.is_real_server:
527+
return self.server_version_short >= 8.0
528+
return not self.is_mock_server
529+
522530
raise CouchbaseTestEnvironmentException(f"Unable to determine if server has provided feature: {feature}")
523531

524532
def feature_not_supported_text(self, feature # type: str # noqa: C901

tests/test_features.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class ServerFeatures(Enum):
7373
ScopeEventingFunctionManagement = 'scope_eventing_function_mgmt'
7474
BinaryTxns = 'binary_txns'
7575
ServerGroups = 'server_groups'
76+
Magma128Buckets = 'magma_128_buckets'
7677

7778

7879
class EnvironmentFeatures:
@@ -156,6 +157,8 @@ class EnvironmentFeatures:
156157
AT_LEAST_V7_6_2_FEATURES = [ServerFeatures.BinaryTxns,
157158
ServerFeatures.ServerGroups]
158159

160+
AT_LEAST_V8_0_0_FEATURES = [ServerFeatures.Magma128Buckets]
161+
159162
AT_MOST_V7_2_0_FEATURES = [ServerFeatures.RateLimiting]
160163

161164
@staticmethod
@@ -369,3 +372,13 @@ def supports_feature(feature, # type: str # noqa: C901
369372
f'Using server version: {server_version}.{patch}.')
370373

371374
return None
375+
376+
if feature in map(lambda f: f.value, EnvironmentFeatures.AT_LEAST_V8_0_0_FEATURES):
377+
if is_mock_server:
378+
return f'Mock server does not support feature: {feature}'
379+
380+
if server_version < 8:
381+
return (f'Feature: {feature} only supported on server versions >= 8.0. '
382+
f'Using server version: {server_version}.')
383+
384+
return None

0 commit comments

Comments
 (0)