Skip to content

Commit 5e5d709

Browse files
committed
Changes based on comments by @rdiomar, plus added LeaderUnavailableError for clarity
1 parent b253166 commit 5e5d709

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

kafka/client.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from kafka.common import (ErrorMapping, TopicAndPartition,
99
ConnectionError, FailedPayloadsError,
1010
BrokerResponseError, PartitionUnavailableError,
11+
LeaderUnavailableError,
1112
KafkaUnavailableError)
1213

1314
from kafka.conn import KafkaConnection, DEFAULT_SOCKET_TIMEOUT_SECONDS
@@ -124,8 +125,10 @@ def _send_broker_aware_request(self, payloads, encoder_fn, decoder_fn):
124125
leader = self._get_leader_for_partition(payload.topic,
125126
payload.partition)
126127
if leader is None:
127-
raise PartitionUnavailableError(
128-
"No leader for topic %s partition %s" % (payload.topic, payload.partition))
128+
raise LeaderUnavailableError(
129+
"Leader not available for topic %s partition %s" %
130+
(payload.topic, payload.partition))
131+
129132
payloads_by_broker[leader].append(payload)
130133
original_keys.append((payload.topic, payload.partition))
131134

@@ -250,15 +253,15 @@ def load_metadata_for_topics(self, *topics):
250253
self.reset_topic_metadata(topic)
251254

252255
if not partitions:
253-
log.info('No partitions for %s', topic)
256+
log.warning('No partitions for %s', topic)
254257
continue
255258

256259
self.topic_partitions[topic] = []
257260
for partition, meta in partitions.items():
258261
self.topic_partitions[topic].append(partition)
259262
topic_part = TopicAndPartition(topic, partition)
260263
if meta.leader == -1:
261-
log.info('No leader for topic %s partition %s', topic, partition)
264+
log.warning('No leader for topic %s partition %s', topic, partition)
262265
self.topics_to_brokers[topic_part] = None
263266
else:
264267
self.topics_to_brokers[topic_part] = brokers[meta.leader]

kafka/common.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ class BrokerResponseError(KafkaError):
8282
pass
8383

8484

85+
class LeaderUnavailableError(KafkaError):
86+
pass
87+
88+
8589
class PartitionUnavailableError(KafkaError):
8690
pass
8791

test/test_unit.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
ProduceRequest, FetchRequest, Message, ChecksumError,
88
ConsumerFetchSizeTooSmall, ProduceResponse, FetchResponse,
99
OffsetAndMessage, BrokerMetadata, PartitionMetadata,
10-
TopicAndPartition, PartitionUnavailableError
10+
TopicAndPartition, LeaderUnavailableError, PartitionUnavailableError
1111
)
1212
from kafka.codec import (
1313
has_gzip, has_snappy, gzip_encode, gzip_decode,
@@ -386,7 +386,7 @@ def test_decode_offset_fetch_response(self):
386386
pass
387387

388388

389-
class TestClient(unittest.TestCase):
389+
class TestKafkaClient(unittest.TestCase):
390390

391391
@patch('kafka.client.KafkaConnection')
392392
@patch('kafka.client.KafkaProtocol')
@@ -520,7 +520,7 @@ def test_get_leader_returns_none_when_noleader(self, protocol, conn):
520520
@patch('kafka.client.KafkaConnection')
521521
@patch('kafka.client.KafkaProtocol')
522522
def test_send_produce_request_raises_when_noleader(self, protocol, conn):
523-
"Getting leader for partitions returns None when the partiion has no leader"
523+
"Send producer request raises LeaderUnavailableError if leader is not available"
524524

525525
conn.recv.return_value = 'response' # anything but None
526526

@@ -542,7 +542,7 @@ def test_send_produce_request_raises_when_noleader(self, protocol, conn):
542542
[create_message("a"), create_message("b")])]
543543

544544
self.assertRaises(
545-
PartitionUnavailableError,
545+
LeaderUnavailableError,
546546
client.send_produce_request, requests)
547547

548548
if __name__ == '__main__':

0 commit comments

Comments
 (0)