Skip to content

Commit 1c201b0

Browse files
committed
WIP ducktape pinning test
1 parent cb6ea63 commit 1c201b0

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

tests/rptest/tests/leadership_transfer_test.py

+63-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
import math
1414

1515
from rptest.services.cluster import cluster
16-
from rptest.services.redpanda import RESTART_LOG_ALLOW_LIST
16+
from rptest.services.redpanda import RESTART_LOG_ALLOW_LIST, LoggingConfig
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,64 @@ 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, self).__init__(
348+
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+
log_config=LoggingConfig('info',
355+
logger_levels={'cluster': 'trace'}),
356+
)
357+
358+
def setUp(self):
359+
pass
360+
361+
def _get_leaders_by_node(self):
362+
kc = KafkaCat(self.redpanda)
363+
md = kc.metadata()
364+
leaders = []
365+
for topic in md["topics"]:
366+
leaders.extend(p["leader"] for p in topic["partitions"])
367+
return dict(collections.Counter(leaders))
368+
369+
@cluster(num_nodes=6, log_allow_list=RESTART_LOG_ALLOW_LIST)
370+
def test_leadership_pinning(self):
371+
rack_layout = ['A', 'A', 'B', 'B', 'C', 'C']
372+
for ix, node in enumerate(self.redpanda.nodes):
373+
self.redpanda.set_extra_node_conf(node, {
374+
'rack': rack_layout[ix],
375+
})
376+
self.redpanda.add_extra_rp_conf(
377+
{'default_leaders_preference': "racks: A"})
378+
self.redpanda.start()
379+
380+
rpk = RpkTool(self.redpanda)
381+
382+
rpk.create_topic("foo", partitions=61, replicas=3)
383+
rpk.create_topic("bar",
384+
partitions=20,
385+
replicas=3,
386+
config={"redpanda.leaders.preference": "racks: B"})
387+
388+
rpk.alter_topic_config("bar", "redpanda.leaders.preference",
389+
"racks: B, C")
390+
391+
for i in range(20):
392+
time.sleep(5)
393+
self.logger.warn(
394+
f"FFF {sorted(self._get_leaders_by_node().items())}")
395+
396+
self.logger.warn(f"FFF ------------------")
397+
398+
rpk.alter_topic_config("foo", "redpanda.leaders.preference", "none")
399+
400+
for i in range(6):
401+
time.sleep(5)
402+
self.logger.warn(
403+
f"FFF {sorted(self._get_leaders_by_node().items())}")

0 commit comments

Comments
 (0)