Skip to content

Hotfix: TypeError: object of type 'dict_itemiterator' has no len() #2167

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

indywidualny
Copy link
Contributor

@indywidualny indywidualny commented Nov 13, 2020

Solution for a TypeError we encountered in release 2.0.2. We migrated from 2.0.1 because of Sticky Assignor support and found the issue (Python 3.8).

    data = self.consumer.poll(timeout_ms=self.timeout, max_records=max_records)
  File "/usr/local/lib/python3.8/dist-packages/kafka/consumer/group.py", line 655, in poll
    records = self._poll_once(remaining, max_records, update_offsets=update_offsets)
  File "/usr/local/lib/python3.8/dist-packages/kafka/consumer/group.py", line 675, in _poll_once
    self._coordinator.poll()
  File "/usr/local/lib/python3.8/dist-packages/kafka/coordinator/consumer.py", line 289, in poll
    self.ensure_active_group()
  File "/usr/local/lib/python3.8/dist-packages/kafka/coordinator/base.py", line 390, in ensure_active_group
    future = self._send_join_group_request()
  File "/usr/local/lib/python3.8/dist-packages/kafka/coordinator/base.py", line 453, in _send_join_group_request
    for protocol, metadata in self.group_protocols()
  File "/usr/local/lib/python3.8/dist-packages/kafka/coordinator/consumer.py", line 154, in group_protocols
    metadata = assignor.metadata(self._joined_subscription)
  File "/usr/local/lib/python3.8/dist-packages/kafka/coordinator/assignors/sticky/sticky_assignor.py", line 660, in metadata
    user_data = data.encode()
  File "/usr/local/lib/python3.8/dist-packages/kafka/util.py", line 50, in __call__
    return self.method()(self.target(), *args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/kafka/protocol/struct.py", line 42, in _encode_self
    return self.SCHEMA.encode(
  File "/usr/local/lib/python3.8/dist-packages/kafka/protocol/types.py", line 146, in encode
    return b''.join([
  File "/usr/local/lib/python3.8/dist-packages/kafka/protocol/types.py", line 147, in <listcomp>
    field.encode(item[i])
  File "/usr/local/lib/python3.8/dist-packages/kafka/protocol/types.py", line 185, in encode
    [Int32.encode(len(items))] +
TypeError: object of type 'dict_itemiterator' has no len()

This change is Reviewable

Copy link
Owner

@dpkp dpkp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch -- one comment inline

@indywidualny indywidualny requested a review from dpkp November 16, 2020 12:43
@jeffwidman jeffwidman merged commit 53dc740 into dpkp:master Nov 19, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants