Skip to content

Commit dda2fd6

Browse files
committed
MB-65355 Add --eventing-add and --eventing-remove to rebalance
Eventing flags were previously missing from the rebalance subcommand. Change-Id: I42d38fc36fbfd2f6c7ec069e57a30d8c0501ee71 Reviewed-on: https://review.couchbase.org/c/couchbase-cli/+/226034 Tested-by: Build Bot <build@couchbase.com> Reviewed-by: Matt Hall <matt.hall@couchbase.com>
1 parent f15cdcb commit dda2fd6

4 files changed

Lines changed: 50 additions & 11 deletions

File tree

cbmgr.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,6 +2170,10 @@ def __init__(self):
21702170
help="A list of servers which should have the Analytics Service added")
21712171
group.add_argument("--analytics-remove", dest="cbas_remove", metavar="<server_list>",
21722172
help="A list of servers which should have the Analytics Service removed")
2173+
group.add_argument("--eventing-add", dest="eventing_add", metavar="<server_list>",
2174+
help="A list of servers which should have the Eventing Service added")
2175+
group.add_argument("--eventing-remove", dest="eventing_remove", metavar="<server_list>",
2176+
help="A list of servers which should have the Eventing Service removed")
21732177
group.add_argument("--no-progress-bar", dest="no_bar", action="store_true",
21742178
default=False, help="Disables the progress bar")
21752179
group.add_argument("--no-wait", dest="wait", action="store_false",
@@ -2184,7 +2188,8 @@ def execute(self, opts):
21842188
opts.index_add or opts.index_remove or \
21852189
opts.n1ql_add or opts.n1ql_remove or \
21862190
opts.backup_add or opts.backup_remove or \
2187-
opts.cbas_add or opts.cbas_remove
2191+
opts.cbas_add or opts.cbas_remove or \
2192+
opts.eventing_add or opts.eventing_remove
21882193

21892194
if opts.update_services and not services_modified:
21902195
_exit_if_errors(["--update-services requires services to be added/removed from nodes"])
@@ -2231,11 +2236,18 @@ def execute(self, opts):
22312236
if opts.cbas_remove is not None:
22322237
cbas_remove = apply_default_port(opts.cbas_remove)
22332238

2239+
eventing_add, eventing_remove = [], []
2240+
if opts.eventing_add is not None:
2241+
eventing_add = apply_default_port(opts.eventing_add)
2242+
if opts.eventing_remove is not None:
2243+
eventing_remove = apply_default_port(opts.eventing_remove)
2244+
22342245
_, errors = self.rest.rebalance_services(fts_add, fts_remove,
22352246
index_add, index_remove,
22362247
n1ql_add, n1ql_remove,
22372248
backup_add, backup_remove,
2238-
cbas_add, cbas_remove)
2249+
cbas_add, cbas_remove,
2250+
eventing_add, eventing_remove)
22392251
_exit_if_errors(errors)
22402252

22412253
time.sleep(1)

cluster_manager.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,8 @@ def rebalance_services(self,
722722
index_add, index_remove,
723723
n1ql_add, n1ql_remove,
724724
backup_add, backup_remove,
725-
cbas_add, cbas_remove):
725+
cbas_add, cbas_remove,
726+
eventing_add, eventing_remove):
726727

727728
all_cluster_nodes_info, errors = self._get_all_cluster_nodes_info()
728729
if errors:
@@ -744,6 +745,9 @@ def rebalance_services(self,
744745
if len(set(cbas_add) & set(cbas_remove)) > 0:
745746
return None, ["Nodes can't be added and removed from the Analytics Service at the same time"]
746747

748+
if len(set(eventing_add) & set(eventing_remove)) > 0:
749+
return None, ["Nodes can't be added and removed from the Eventing Service at the same time"]
750+
747751
# Verify the nodes in the inputted lists exist in the cluster, and get their OTP names
748752
otp_fts_add, errors = self.get_otp_names_and_verify(all_cluster_nodes_info, fts_add, "fts_add")
749753
if errors:
@@ -786,6 +790,15 @@ def rebalance_services(self,
786790
if errors:
787791
return None, errors
788792

793+
otp_eventing_add, errors = self.get_otp_names_and_verify(all_cluster_nodes_info, eventing_add, "eventing_add")
794+
if errors:
795+
return None, errors
796+
797+
otp_eventing_remove, errors = self.get_otp_names_and_verify(
798+
all_cluster_nodes_info, eventing_remove, "eventing_remove")
799+
if errors:
800+
return None, errors
801+
789802
# Map the services to the nodes that provide them
790803
services_to_nodes = self.map_services_to_nodes(all_cluster_nodes_info)
791804

@@ -815,6 +828,11 @@ def rebalance_services(self,
815828
if errors:
816829
return None, errors
817830

831+
self.add_service_to_node(otp_eventing_add, services_to_nodes[EVENT_SERVICE], EVENT_SERVICE)
832+
errors = self.remove_service_from_node(otp_eventing_remove, services_to_nodes[EVENT_SERVICE], EVENT_SERVICE)
833+
if errors:
834+
return None, errors
835+
818836
all_nodes, errors = self._get_all_nodes_otp_names(all_cluster_nodes_info)
819837
if errors:
820838
return None, errors
@@ -825,7 +843,8 @@ def rebalance_services(self,
825843
f"topology[{INDEX_SERVICE}]": ','.join(services_to_nodes[INDEX_SERVICE]),
826844
f"topology[{N1QL_SERVICE}]": ','.join(services_to_nodes[N1QL_SERVICE]),
827845
f"topology[{BACKUP_SERVICE}]": ','.join(services_to_nodes[BACKUP_SERVICE]),
828-
f"topology[{CBAS_SERVICE}]": ','.join(services_to_nodes[CBAS_SERVICE])}
846+
f"topology[{CBAS_SERVICE}]": ','.join(services_to_nodes[CBAS_SERVICE]),
847+
f"topology[{EVENT_SERVICE}]": ','.join(services_to_nodes[EVENT_SERVICE])}
829848

830849
return self._post_form_encoded(url, params)
831850

docs/modules/cli/pages/cbcli/couchbase-cli-rebalance.adoc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ _couchbase-cli rebalance_ [--cluster <url>] [--username <user>] [--password <pas
1919
[--index-add <servers>] [--index-remove <servers>] [--query-add <servers>]
2020
[--query-remove <servers>] [--backup-add <servers>]
2121
[--backup-remove <servers>] [--analytics-add <servers>]
22-
[--analytics-remove <servers>] [--no-progress-bar] [--no-wait]
22+
[--analytics-remove <servers>] [--eventing-add <servers>]
23+
[--eventing-remove <servers>] [--no-progress-bar] [--no-wait]
2324

2425
== DESCRIPTION
2526

@@ -82,6 +83,12 @@ include::{partialsdir}/cbcli/part-common-options.adoc[]
8283
--analytics-remove <servers>::
8384
A comma separated list of nodes to remove the Analytics Service from.
8485

86+
--eventing-add <servers>::
87+
A comma separated list of nodes to add the Eventing Service to.
88+
89+
--eventing-remove <servers>::
90+
A comma separated list of nodes to remove the Eventing Service from.
91+
8592
--no-progress-bar::
8693
Hides the progress bar which tracks the progress of the
8794
rebalance. This command will still wait for rebalance completion even if

test/test_cli.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ def setUp(self):
12021202
'services': ['kv', 'n1ql', 'index', 'fts']},
12031203
{'otpNode': 'ns1@some-host', 'hostname': 'some-host:6789', 'status': 'healthy', 'ports':
12041204
{'httpsMgmt': '16789'}, 'clusterMembership': 'active',
1205-
'services': ['fts', 'index', 'n1ql', 'backup', 'cbas']},
1205+
'services': ['fts', 'index', 'n1ql', 'backup', 'cbas', 'eventing']},
12061206
{'otpNode': 'ns1@some-host2', 'hostname': 'some-host2:6789', 'status': 'healthy', 'ports':
12071207
{'httpsMgmt': '16789'}, 'clusterMembership': 'active',
12081208
'services': ['eventing', 'backup', 'cbas']}
@@ -1226,16 +1226,17 @@ def test_rebalance_no_args(self):
12261226
def test_rebalance_services(self):
12271227
cmd_args = ['--update-services', '--fts-add', 'some-host2:6789', '--index-add', 'some-host2:6789',
12281228
'--query-add', 'some-host2:6789', '--backup-add', 'localhost:6789', '--analytics-add',
1229-
'localhost:6789', '--fts-remove', 'localhost:6789,some-host:6789',
1230-
'--index-remove', 'localhost:6789,some-host:6789', '--query-remove',
1231-
'localhost:6789,some-host:6789', '--backup-remove', 'some-host:6789,some-host2:6789',
1232-
'--analytics-remove', 'some-host:6789,some-host2:6789']
1229+
'localhost:6789', '--eventing-add', 'localhost:6789', '--fts-remove',
1230+
'localhost:6789,some-host:6789', '--index-remove', 'localhost:6789,some-host:6789',
1231+
'--query-remove', 'localhost:6789,some-host:6789', '--backup-remove',
1232+
'some-host:6789,some-host2:6789', '--analytics-remove', 'some-host:6789,some-host2:6789',
1233+
'--eventing-remove', 'some-host:6789,some-host2:6789']
12331234

12341235
self.no_error_run(self.command + cmd_args, self.server_args)
12351236
expected_params = ['knownNodes=ns1%40localhost%2Cns1%40some-host%2Cns1%40some-host2',
12361237
'topology%5Bfts%5D=ns1%40some-host2', 'topology%5Bindex%5D=ns1%40some-host2',
12371238
'topology%5Bn1ql%5D=ns1%40some-host2', 'topology%5Bbackup%5D=ns1%40localhost',
1238-
'topology%5Bcbas%5D=ns1%40localhost']
1239+
'topology%5Bcbas%5D=ns1%40localhost', 'topology%5Beventing%5D=ns1%40localhost']
12391240
self.rest_parameter_match(expected_params)
12401241

12411242

0 commit comments

Comments
 (0)