Skip to content

Commit 817b7ea

Browse files
committed
MB-65437 Consider columnar edition on version checks
Change-Id: I1c006af826d12373614527418b424c006fec351b Reviewed-on: https://review.couchbase.org/c/couchbase-cli/+/223857 Reviewed-by: Michael Blow <michael.blow@couchbase.com> Reviewed-by: Matt Hall <matt.hall@couchbase.com> Tested-by: Build Bot <build@couchbase.com>
1 parent 436fa5b commit 817b7ea

3 files changed

Lines changed: 15 additions & 12 deletions

File tree

cbmgr.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,15 @@ def decorator(self, opts):
205205
if version_check:
206206
check_versions(self.rest)
207207
if enterprise_check is not None:
208-
enterprise, errors = self.rest.is_enterprise()
208+
# check columnar when we check enterprise to avoid a duplicate fetch on pools
209+
enterprise, columnar, errors = self.rest.is_enterprise_columnar()
209210
_exit_if_errors(errors)
210211

211212
if enterprise_check and not enterprise:
212213
_exit_if_errors(['Command only available in enterprise edition'])
213214

214215
self.enterprise = enterprise
216+
self.columnar = columnar
215217

216218
return fn(self, opts)
217219
return decorator
@@ -313,7 +315,7 @@ def index_storage_mode_to_param(value, default="plasma"):
313315
return value
314316

315317

316-
def process_services(services, enterprise, cluster_version="0.0.0"):
318+
def process_services(services, enterprise, columnar, cluster_version="0.0.0"):
317319
"""Converts services to a format Couchbase understands"""
318320
sep = ","
319321
if services.find(sep) < 0:
@@ -333,7 +335,7 @@ def process_services(services, enterprise, cluster_version="0.0.0"):
333335
return None, ["Invalid service configuration. A manager only node cannot run any other services."]
334336

335337
versionCheck = compare_versions(cluster_version, "7.6.0")
336-
if manager_only in svc_set and versionCheck == -1:
338+
if manager_only in svc_set and not columnar and versionCheck == -1:
337339
return None, ["The manager only service can only be used with >= 7.6.0 clusters"]
338340

339341
if not enterprise:
@@ -905,7 +907,7 @@ def execute(self, opts):
905907
if "manager-only" in opts.services:
906908
_exit_if_errors(["Cannot initialize cluster with the manager only service"])
907909

908-
services, errors = process_services(opts.services, self.enterprise)
910+
services, errors = process_services(opts.services, self.enterprise, self.columnar)
909911
_exit_if_errors(errors)
910912

911913
if 'kv' not in services.split(','):
@@ -932,7 +934,7 @@ def execute(self, opts):
932934
_exit_if_errors(errors)
933935

934936
versionCheck = compare_versions(min_version, "7.2.3")
935-
if versionCheck == -1:
937+
if not self.columnar and versionCheck == -1:
936938
_exit_if_errors(["--cluster-init can only be used against >= 7.2.3 clusters"])
937939

938940
if not self.enterprise and opts.notifications == "0":
@@ -2437,7 +2439,7 @@ def execute(self, opts):
24372439
min_version, error = self.rest.min_version()
24382440
_exit_if_errors(error)
24392441

2440-
opts.services, errors = process_services(opts.services, self.enterprise, min_version)
2442+
opts.services, errors = process_services(opts.services, self.enterprise, self.columnar, min_version)
24412443
_exit_if_errors(errors)
24422444

24432445
settings, errors = self.rest.index_settings()
@@ -3929,7 +3931,7 @@ def execute(self, opts):
39293931
_exit_if_errors(errors)
39303932

39313933
versionCheck = compare_versions(min_version, "7.2.3")
3932-
if not self.enterprise and versionCheck != -1:
3934+
if not self.enterprise and not self.columnar and versionCheck != -1:
39333935
_exit_if_errors(["Modifying notifications settings is an Enterprise Edition only feature"])
39343936

39353937
enabled = None

cluster_manager.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,12 @@ def is_cluster_initialized(self):
257257
return True, None
258258
return False, errors
259259

260-
def is_enterprise(self):
260+
def is_enterprise_columnar(self):
261261
data, errors = self.pools()
262262
if errors:
263-
return None, errors
264-
return data["isEnterprise"], None
263+
return None, None, errors
264+
# use data["isColumnar"] once MB-65393 is completed
265+
return data["isEnterprise"], data["implementationVersion"].endswith("-columnar"), None
265266

266267
def get_hostnames_for_service(self, service_name):
267268
""" Gets all hostnames that run a service

test/test_cbmgr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ def test_process_services(self):
3030
for name, test in tests.items():
3131
with self.subTest(name):
3232
cluster_version = test.setdefault("cluster_version", "7.6.0")
33-
services, err = process_services(test["service"], True, cluster_version)
33+
services, err = process_services(test["service"], True, False, cluster_version)
3434
self.assertEqual(err, test.setdefault("error", None))
3535
self.assertEqual(services, test["expected"])
3636

3737
def test_process_services_version_none(self):
38-
services, err = process_services("manager-only", True)
38+
services, err = process_services("manager-only", True, False)
3939
self.assertEqual(err, None)
4040
self.assertEqual(services, "")
4141

0 commit comments

Comments
 (0)