Skip to content

Commit 15fc7f7

Browse files
authored
Merge pull request #10 from devshawn/kafka-preferred-replica-election
feat: add kafka-preferred-replica-election command (closes #3)
2 parents 6d2116c + cbcd24a commit 15fc7f7

File tree

6 files changed

+73
-4
lines changed

6 files changed

+73
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Currently, the following commands are supported:
7979
* `kafka-avro-console-producer`
8080
* `kafka-verifiable-consumer`
8181
* `kafka-verifiable-producer`
82+
* `kafka-preferred-replica-election`
8283
* `kafka-replica-verification`
8384
* `kafka-broker-api-versions`
8485
* `kafka-consumer-groups`

kafkashell/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
COMMAND_KAFKA_VERIFIABLE_CONSUMER = "kafka-verifiable-consumer"
2525
COMMAND_KAFKA_VERIFIABLE_PRODUCER = "kafka-verifiable-producer"
2626
COMMAND_KAFKA_CONSUMER_GROUPS = "kafka-consumer-groups"
27+
COMMAND_KAFKA_PREFERRED_REPLICA_ELECTION = "kafka-preferred-replica-election"
2728
COMMAND_KAFKA_REPLICA_VERIFICATION = "kafka-replica-verification"
2829
COMMAND_KAFKA_BROKER_API_VERSIONS = "kafka-broker-api-versions"
2930
COMMAND_KAFKA_DELETE_RECORDS = "kafka-delete-records"

kafkashell/data/completer.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,32 @@
792792
}
793793
}
794794
},
795+
"kafka-preferred-replica-election": {
796+
"name": "kafka-preferred-replica-election",
797+
"description": "Tool to cause leadership for each partition to be transferred back to the 'preferred replica'.",
798+
"options": {
799+
"--admin.config": {
800+
"name": "--admin.config",
801+
"description": "Property file containing configs to be passed to the admin client."
802+
},
803+
"--bootstrap-server": {
804+
"name": "--bootstrap-server",
805+
"description": "The Kafka broker(s) to connect to. NOTE: This'll overwrite the selected cluster value."
806+
},
807+
"--help": {
808+
"name": "--help",
809+
"description": "Print usage information."
810+
},
811+
"--path-to-json-file": {
812+
"name": "--path-to-json-file",
813+
"description": "The JSON file with the list of partitions to perform preferred replica leader election on."
814+
},
815+
"--zookeeper": {
816+
"name": "--zookeeper",
817+
"description": "DEPRECATED. Zookeeper connection string."
818+
}
819+
}
820+
},
795821
"kafka-replica-verification": {
796822
"name": "kafka-replica-verification",
797823
"description": "Validate that all replicas for a set of topics have the same data.",

kafkashell/executor.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def execute_valid_command(self, command):
8787
elif command.startswith(constants.COMMAND_KAFKA_CONSUMER_GROUPS):
8888
final_command = self.handle_kafka_consumer_groups_command(command)
8989

90+
elif command.startswith(constants.COMMAND_KAFKA_PREFERRED_REPLICA_ELECTION):
91+
final_command = self.handle_kafka_preferred_replica_election(command)
92+
9093
elif command.startswith(constants.COMMAND_KAFKA_REPLICA_VERIFICATION):
9194
final_command = self.handle_kafka_replica_verification_command(command)
9295

@@ -193,6 +196,11 @@ def handle_kafka_consumer_groups_command(self, command):
193196
command += self.handle_admin_client_settings(command)
194197
return command
195198

199+
def handle_kafka_preferred_replica_election(self, command):
200+
command += self.handle_bootstrap_server_flag(command)
201+
command += self.handle_admin_client_settings(command)
202+
return command
203+
196204
def handle_kafka_replica_verification_command(self, command):
197205
command += self.handle_broker_list_flag(command)
198206
return command
@@ -263,7 +271,9 @@ def handle_zookeeper_shell_input(self, command):
263271

264272
def handle_admin_client_settings(self, command):
265273
if "admin_client_settings" in self.settings.get_cluster_details().keys():
266-
return self.handle_config(command, "command-config", "admin_client")
274+
admin_client_option = "command-config" if constants.COMMAND_KAFKA_PREFERRED_REPLICA_ELECTION \
275+
not in command else "admin.config"
276+
return self.handle_config(command, admin_client_option, "admin_client")
267277
else:
268278
return ""
269279

tests/test_completer_data.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
(
55
"",
66
["version", "cluster-select", "cluster-describe", "exit", "clear", "kafka-acls", "kafka-avro-console-consumer",
7-
"kafka-avro-console-producer", "kafka-replica-verification",
7+
"kafka-avro-console-producer", "kafka-replica-verification", "kafka-preferred-replica-election",
88
"kafka-broker-api-versions", "kafka-configs", "kafka-console-consumer", "kafka-console-producer",
99
"kafka-consumer-groups", "kafka-delete-records", "kafka-dump-log", "kafka-log-dirs", "kafka-topics",
1010
"kafka-verifiable-consumer", "kafka-verifiable-producer", "ksql", "zookeeper-shell"]
@@ -14,12 +14,12 @@
1414
["kafka-acls", "kafka-avro-console-consumer", "kafka-avro-console-producer", "kafka-broker-api-versions",
1515
"kafka-configs", "kafka-console-consumer", "kafka-console-producer", "kafka-consumer-groups",
1616
"kafka-delete-records", "kafka-dump-log", "kafka-log-dirs", "kafka-topics", "kafka-verifiable-consumer",
17-
"kafka-verifiable-producer", "kafka-replica-verification", ]
17+
"kafka-verifiable-producer", "kafka-replica-verification", "kafka-preferred-replica-election"]
1818
),
1919
(
2020
"k",
2121
["ksql", "kafka-acls", "kafka-avro-console-consumer", "kafka-avro-console-producer",
22-
"kafka-broker-api-versions", "kafka-replica-verification",
22+
"kafka-broker-api-versions", "kafka-replica-verification", "kafka-preferred-replica-election",
2323
"kafka-configs", "kafka-console-consumer", "kafka-console-producer", "kafka-consumer-groups",
2424
"kafka-delete-records", "kafka-dump-log", "kafka-log-dirs", "kafka-topics", "kafka-verifiable-consumer",
2525
"kafka-verifiable-producer", "zookeeper-shell"]

tests/test_executor.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,22 @@
113113
"kafka-consumer-groups --list --bootstrap-server test:9092",
114114
"kafka-consumer-groups --list --bootstrap-server test:9092"
115115
),
116+
(
117+
"kafka-preferred-replica-election",
118+
"kafka-preferred-replica-election --bootstrap-server localhost:9092"
119+
),
120+
(
121+
"kafka-preferred-replica-election",
122+
"kafka-preferred-replica-election --bootstrap-server localhost:9092"
123+
),
124+
(
125+
"kafka-preferred-replica-election --bootstrap-server test:9092",
126+
"kafka-preferred-replica-election --bootstrap-server test:9092"
127+
),
128+
(
129+
"kafka-preferred-replica-election --bootstrap-server test:9092 --admin.config test.properties",
130+
"kafka-preferred-replica-election --bootstrap-server test:9092 --admin.config test.properties"
131+
),
116132
(
117133
"kafka-replica-verification",
118134
"kafka-replica-verification --broker-list localhost:9092"
@@ -512,6 +528,21 @@
512528
"kafka-log-dirs --broker-list 0,1 --command-config test.properties --bootstrap-server test:9092",
513529
"test-admin-client-settings"
514530
),
531+
(
532+
"kafka-preferred-replica-election",
533+
"kafka-preferred-replica-election --bootstrap-server localhost:9092 --admin.config admin.properties",
534+
"test-admin-client-settings"
535+
),
536+
(
537+
"kafka-preferred-replica-election --admin.config testing.properties",
538+
"kafka-preferred-replica-election --admin.config testing.properties --bootstrap-server localhost:9092",
539+
"test-admin-client-settings"
540+
),
541+
(
542+
"kafka-preferred-replica-election --bootstrap-server test:9092",
543+
"kafka-preferred-replica-election --bootstrap-server test:9092 --admin.config admin.properties",
544+
"test-admin-client-settings"
545+
),
515546
]
516547

517548
prefix_test_data = [

0 commit comments

Comments
 (0)