Skip to content

Commit fa14345

Browse files
committed
WIP ducktape pinning test
1 parent 2b13740 commit fa14345

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

tests/rptest/tests/leadership_transfer_test.py

+57
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from rptest.services.redpanda import RESTART_LOG_ALLOW_LIST
1717
from ducktape.utils.util import wait_until
1818
from rptest.clients.kafka_cat import KafkaCat
19+
from rptest.clients.rpk import RpkTool
1920
from rptest.util import wait_until_result
2021
from rptest.clients.types import TopicSpec
2122
from rptest.services.admin import Admin
@@ -339,3 +340,59 @@ def all_partitions_present(num_nodes, per_node=None):
339340
expected_min = math.floor(expected_on_shard * 0.8)
340341
assert count >= expected_min, \
341342
f"leader count on shard {s} ({count}) is < {expected_min}"
343+
344+
345+
class LeadershipPinningTest(RedpandaTest):
346+
def __init__(self, test_context):
347+
super(LeadershipPinningTest,
348+
self).__init__(test_context=test_context,
349+
num_brokers=6,
350+
extra_rp_conf={
351+
'enable_rack_awareness': True,
352+
'leader_balancer_idle_timeout': 20000,
353+
})
354+
355+
def setUp(self):
356+
pass
357+
358+
def _get_leaders_by_node(self):
359+
kc = KafkaCat(self.redpanda)
360+
md = kc.metadata()
361+
leaders = []
362+
for topic in md["topics"]:
363+
leaders.extend(p["leader"] for p in topic["partitions"])
364+
return dict(collections.Counter(leaders))
365+
366+
@cluster(num_nodes=6, log_allow_list=RESTART_LOG_ALLOW_LIST)
367+
def test_leadership_pinning(self):
368+
rack_layout = ['A', 'A', 'B', 'B', 'C', 'C']
369+
for ix, node in enumerate(self.redpanda.nodes):
370+
self.redpanda.set_extra_node_conf(node, {
371+
'rack': rack_layout[ix],
372+
})
373+
self.redpanda.add_extra_rp_conf({'default_leaders_preference': "A"})
374+
self.redpanda.start()
375+
376+
rpk = RpkTool(self.redpanda)
377+
378+
rpk.create_topic("foo", partitions=61, replicas=3)
379+
rpk.create_topic("bar",
380+
partitions=20,
381+
replicas=3,
382+
config={"redpanda.leaders.preference": "B"})
383+
384+
rpk.alter_topic_config("bar", "redpanda.leaders.preference", "C")
385+
386+
for i in range(20):
387+
time.sleep(5)
388+
self.logger.warn(
389+
f"FFF {sorted(self._get_leaders_by_node().items())}")
390+
391+
self.logger.warn(f"FFF ------------------")
392+
393+
rpk.alter_topic_config("bar", "redpanda.leaders.preference", "B")
394+
395+
for i in range(6):
396+
time.sleep(5)
397+
self.logger.warn(
398+
f"FFF {sorted(self._get_leaders_by_node().items())}")

0 commit comments

Comments
 (0)