diff options
author | Dana Powers <dana.powers@gmail.com> | 2018-05-26 08:43:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-26 08:43:25 -0700 |
commit | ee26c3f547f357d639b421b3e38a74e87e21f346 (patch) | |
tree | 945cc585f23bbeb7a3b64361e7d069998848394c | |
parent | c9d783a8211337205bc90c27d1f67beb65ac5d9e (diff) | |
download | kafka-python-ee26c3f547f357d639b421b3e38a74e87e21f346.tar.gz |
Ignore MetadataResponses with empty broker list (#1506)
-rw-r--r-- | kafka/cluster.py | 3 | ||||
-rw-r--r-- | kafka/errors.py | 4 | ||||
-rw-r--r-- | test/test_cluster.py | 22 |
3 files changed, 28 insertions, 1 deletions
diff --git a/kafka/cluster.py b/kafka/cluster.py index 45f25ad..8078eb7 100644 --- a/kafka/cluster.py +++ b/kafka/cluster.py @@ -214,7 +214,8 @@ class ClusterMetadata(object): return self.failed_update(error) if not metadata.brokers: - log.warning("No broker metadata found in MetadataResponse") + log.warning("No broker metadata found in MetadataResponse -- ignoring.") + return self.failed_update(Errors.MetadataEmptyBrokerList(metadata)) _new_brokers = {} for broker in metadata.brokers: diff --git a/kafka/errors.py b/kafka/errors.py index f4c8740..93a9f40 100644 --- a/kafka/errors.py +++ b/kafka/errors.py @@ -54,6 +54,10 @@ class StaleMetadata(KafkaError): invalid_metadata = True +class MetadataEmptyBrokerList(KafkaError): + retriable = True + + class UnrecognizedBrokerVersion(KafkaError): pass diff --git a/test/test_cluster.py b/test/test_cluster.py new file mode 100644 index 0000000..f010c4f --- /dev/null +++ b/test/test_cluster.py @@ -0,0 +1,22 @@ +# pylint: skip-file +from __future__ import absolute_import + +import pytest + +from kafka.cluster import ClusterMetadata +from kafka.protocol.metadata import MetadataResponse + + +def test_empty_broker_list(): + cluster = ClusterMetadata() + assert len(cluster.brokers()) == 0 + + cluster.update_metadata(MetadataResponse[0]( + [(0, 'foo', 12), (1, 'bar', 34)], [])) + assert len(cluster.brokers()) == 2 + + # empty broker list response should be ignored + cluster.update_metadata(MetadataResponse[0]( + [], # empty brokers + [(17, 'foo', []), (17, 'bar', [])])) # topics w/ error + assert len(cluster.brokers()) == 2 |