Skip to content

Commit 87648d7

Browse files
authored
Simplify RecordMetadata; short circuit callbacks (#768)
Simplify RecordMetadata to unaltered namedtuple -- minor speed optimization Minor optimization: inline check for no callbacks
1 parent ade3160 commit 87648d7

File tree

2 files changed

+9
-20
lines changed

2 files changed

+9
-20
lines changed

kafka/future.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ def success(self, value):
3030
assert not self.is_done, 'Future is already complete'
3131
self.value = value
3232
self.is_done = True
33-
self._call_backs('callback', self._callbacks, self.value)
33+
if self._callbacks:
34+
self._call_backs('callback', self._callbacks, self.value)
3435
return self
3536

3637
def failure(self, e):

kafka/producer/future.py

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ def __init__(self, produce_future, relative_offset, timestamp_ms):
3838
produce_future.add_errback(self.failure)
3939

4040
def _produce_success(self, offset_and_timestamp):
41-
base_offset, timestamp_ms = offset_and_timestamp
41+
offset, timestamp_ms = offset_and_timestamp
4242
if timestamp_ms is None:
4343
timestamp_ms = self.timestamp_ms
44-
self.success(RecordMetadata(self._produce_future.topic_partition,
45-
base_offset, timestamp_ms,
46-
self.relative_offset))
44+
if offset != -1 and self.relative_offset is not None:
45+
offset += self.relative_offset
46+
tp = self._produce_future.topic_partition
47+
metadata = RecordMetadata(tp[0], tp[1], tp, offset, timestamp_ms)
48+
self.success(metadata)
4749

4850
def get(self, timeout=None):
4951
if not self.is_done and not self._produce_future.wait(timeout):
@@ -55,18 +57,4 @@ def get(self, timeout=None):
5557
return self.value
5658

5759

58-
class RecordMetadata(collections.namedtuple(
59-
'RecordMetadata', 'topic partition topic_partition offset timestamp')):
60-
def __new__(cls, tp, base_offset, timestamp, relative_offset=None):
61-
offset = base_offset
62-
if relative_offset is not None and base_offset != -1:
63-
offset += relative_offset
64-
return super(RecordMetadata, cls).__new__(cls, tp.topic, tp.partition,
65-
tp, offset, timestamp)
66-
67-
def __str__(self):
68-
return 'RecordMetadata(topic=%s, partition=%s, offset=%s)' % (
69-
self.topic, self.partition, self.offset)
70-
71-
def __repr__(self):
72-
return str(self)
60+
RecordMetadata = collections.namedtuple('RecordMetadata', 'topic partition topic_partition offset timestamp')

0 commit comments

Comments
 (0)