Skip to content

Commit 3a0d5d6

Browse files
authored
Retain unrecognized broker response error codes with dynamic error class (#2481)
1 parent 252e0bd commit 3a0d5d6

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

kafka/cluster.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def update_metadata(self, metadata):
236236
"""
237237
# In the common case where we ask for a single topic and get back an
238238
# error, we should fail the future
239-
if len(metadata.topics) == 1 and metadata.topics[0][0] != 0:
239+
if len(metadata.topics) == 1 and metadata.topics[0][0] != Errors.NoError.errno:
240240
error_code, topic = metadata.topics[0][:2]
241241
error = Errors.for_code(error_code)(topic)
242242
return self.failed_update(error)

kafka/errors.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -512,15 +512,15 @@ def _iter_broker_errors():
512512

513513

514514
def for_code(error_code):
515-
return kafka_errors.get(error_code, UnknownError)
516-
517-
518-
def check_error(response):
519-
if isinstance(response, Exception):
520-
raise response
521-
if response.error:
522-
error_class = kafka_errors.get(response.error, UnknownError)
523-
raise error_class(response)
515+
if error_code in kafka_errors:
516+
return kafka_errors[error_code]
517+
else:
518+
# The broker error code was not found in our list. This can happen when connecting
519+
# to a newer broker (with new error codes), or simply because our error list is
520+
# not complete.
521+
#
522+
# To avoid dropping the error code, create a dynamic error class w/ errno override.
523+
return type('UnrecognizedBrokerError', (UnknownError,), {'errno': error_code})
524524

525525

526526
RETRY_BACKOFF_ERROR_TYPES = (

0 commit comments

Comments
 (0)