abstract.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from __future__ import absolute_import
  2. import abc
  3. import logging
  4. log = logging.getLogger(__name__)
  5. class AbstractPartitionAssignor(object):
  6. """
  7. Abstract assignor implementation which does some common grunt work (in particular collecting
  8. partition counts which are always needed in assignors).
  9. """
  10. @abc.abstractproperty
  11. def name(self):
  12. """.name should be a string identifying the assignor"""
  13. pass
  14. @abc.abstractmethod
  15. def assign(self, cluster, members):
  16. """Perform group assignment given cluster metadata and member subscriptions
  17. Arguments:
  18. cluster (ClusterMetadata): metadata for use in assignment
  19. members (dict of {member_id: MemberMetadata}): decoded metadata for
  20. each member in the group.
  21. Returns:
  22. dict: {member_id: MemberAssignment}
  23. """
  24. pass
  25. @abc.abstractmethod
  26. def metadata(self, topics):
  27. """Generate ProtocolMetadata to be submitted via JoinGroupRequest.
  28. Arguments:
  29. topics (set): a member's subscribed topics
  30. Returns:
  31. MemberMetadata struct
  32. """
  33. pass
  34. @abc.abstractmethod
  35. def on_assignment(self, assignment):
  36. """Callback that runs on each assignment.
  37. This method can be used to update internal state, if any, of the
  38. partition assignor.
  39. Arguments:
  40. assignment (MemberAssignment): the member's assignment
  41. """
  42. pass