diff --git a/tests/rptest/services/admin.py b/tests/rptest/services/admin.py index 37f7eac0b2b7..1d8a47bc148b 100644 --- a/tests/rptest/services/admin.py +++ b/tests/rptest/services/admin.py @@ -174,7 +174,7 @@ def _get_stable_configuration( self.redpanda.logger.debug(f"doesn't have leader") return None if last_leader < 0: - last_leader = meta["leader_id"] + last_leader = int(meta["leader_id"]) self.redpanda.logger.debug(f"get leader:{last_leader}") if last_leader not in replicas: self.redpanda.logger.debug( @@ -255,9 +255,11 @@ def is_leader_stable(): info = self.wait_stable_configuration(topic, partition, namespace, replication, timeout_s, hosts) - return check(info.leader) + if check(info.leader): + return True, info.leader + return False - wait_until( + return wait_until_result( is_leader_stable, timeout_sec=timeout_s, backoff_sec=1, diff --git a/tests/rptest/tests/partition_movement_test.py b/tests/rptest/tests/partition_movement_test.py index 9850a147621b..3bb8ea63c3ab 100644 --- a/tests/rptest/tests/partition_movement_test.py +++ b/tests/rptest/tests/partition_movement_test.py @@ -541,7 +541,25 @@ def test_deletion_stops_move(self): # shutdown target node to make sure that move will never complete node = self.redpanda.get_node(replacement['node_id']) self.redpanda.stop_node(node) - admin.set_partition_replicas(topic, partition, target_assignment) + + # checking that a controller has leader (just in case + # the stopped node happened to be previous leader) + alive_hosts = [ + n.account.hostname for n in self.redpanda.nodes if n != node + ] + controller_leader = admin.await_stable_leader( + topic="controller", + partition=0, + namespace="redpanda", + hosts=alive_hosts, + check=lambda node_id: node_id != self.redpanda.idx(node), + timeout_s=30) + controller_leader = self.redpanda.get_node(controller_leader) + + admin.set_partition_replicas(topic, + partition, + target_assignment, + node=controller_leader) # check that the status is in progress