summaryrefslogtreecommitdiff
path: root/kafka/client_async.py
diff options
context:
space:
mode:
authorDana Powers <dana.powers@gmail.com>2017-03-06 10:15:47 -0800
committerDana Powers <dana.powers@gmail.com>2017-03-07 16:39:01 -0800
commit8408df8d1da9840183a368be2753dd7924601e90 (patch)
tree24c6e75ff12893a1c4d16ea6922208dd67b5a20e /kafka/client_async.py
parent1813d7d21ed1d9e76d9078a2c70a7657e8c18d07 (diff)
downloadkafka-python-ready_metadata_kwarg.tar.gz
Add optional kwarg to ready and is_ready to disable metadata-priority logicready_metadata_kwarg
Diffstat (limited to 'kafka/client_async.py')
-rw-r--r--kafka/client_async.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/kafka/client_async.py b/kafka/client_async.py
index 5824e7a..c0cdc43 100644
--- a/kafka/client_async.py
+++ b/kafka/client_async.py
@@ -333,17 +333,19 @@ class KafkaClient(object):
conn.connect()
return conn.connected()
- def ready(self, node_id):
+ def ready(self, node_id, metadata_priority=True):
"""Check whether a node is connected and ok to send more requests.
Arguments:
node_id (int): the id of the node to check
+ metadata_priority (bool): Mark node as not-ready if a metadata
+ refresh is required. Default: True
Returns:
bool: True if we are ready to send to the given node
"""
self._maybe_connect(node_id)
- return self.is_ready(node_id)
+ return self.is_ready(node_id, metadata_priority=metadata_priority)
def connected(self, node_id):
"""Return True iff the node_id is connected."""
@@ -414,7 +416,7 @@ class KafkaClient(object):
else:
return 999999999
- def is_ready(self, node_id):
+ def is_ready(self, node_id, metadata_priority=True):
"""Check whether a node is ready to send more requests.
In addition to connection-level checks, this method also is used to
@@ -422,16 +424,23 @@ class KafkaClient(object):
Arguments:
node_id (int): id of the node to check
+ metadata_priority (bool): Mark node as not-ready if a metadata
+ refresh is required. Default: True
Returns:
bool: True if the node is ready and metadata is not refreshing
"""
+ if not self._can_send_request(node_id):
+ return False
+
# if we need to update our metadata now declare all requests unready to
# make metadata requests first priority
- if not self._metadata_refresh_in_progress and not self.cluster.ttl() == 0:
- if self._can_send_request(node_id):
- return True
- return False
+ if metadata_priority:
+ if self._metadata_refresh_in_progress:
+ return False
+ if self.cluster.ttl() == 0:
+ return False
+ return True
def _can_send_request(self, node_id):
if node_id not in self._conns: