async def _wait_on_metadata(self, topic): """ Wait for cluster metadata including partitions for the given topic to be available. Arguments: topic (str): topic we want metadata for Returns: set: partition ids for the topic Raises: UnknownTopicOrPartitionError: if no topic or partitions found in cluster metadata """ if topic in self.cluster.topics(): return self.cluster.partitions_for_topic(topic) # add topic to metadata topic list if it is not there already. self.add_topic(topic) t0 = time.monotonic() while True: await self.force_metadata_update() if topic in self.cluster.topics(): break if (time.monotonic() - t0) > (self._request_timeout_ms / 1000): raise UnknownTopicOrPartitionError() if topic in self.cluster.unauthorized_topics: raise Errors.TopicAuthorizationFailedError(topic) await asyncio.sleep(self._retry_backoff) return self.cluster.partitions_for_topic(topic)
def _wait_on_metadata(self, topic): """ Wait for cluster metadata including partitions for the given topic to be available. Arguments: topic (str): topic we want metadata for Returns: set: partition ids for the topic Raises: UnknownTopicOrPartitionError: if no topic or partitions found in cluster metadata """ if topic in self.cluster.topics(): return self.cluster.partitions_for_topic(topic) # add topic to metadata topic list if it is not there already. self.add_topic(topic) t0 = self._loop.time() while True: yield from self.force_metadata_update() if topic in self.cluster.topics(): break if (self._loop.time() - t0) > (self._request_timeout_ms / 1000): raise UnknownTopicOrPartitionError() yield from asyncio.sleep(self._retry_backoff, loop=self._loop) return self.cluster.partitions_for_topic(topic)
def assign(self, partitions): """ Manually assign a list of TopicPartitions to this consumer. This interface does not support incremental assignment and will replace the previous assignment (if there was one). Arguments: partitions (list of TopicPartition): assignment for this instance. Raises: IllegalStateError: if consumer has already called subscribe() Warning: It is not possible to use both manual partition assignment with assign() and group assignment with subscribe(). Note: Manual topic assignment through this method does not use the consumer's group management functionality. As such, there will be **no rebalance operation triggered** when group membership or cluster and topic metadata change. """ for tp in partitions: p_ids = self.partitions_for_topic(tp.topic) if not p_ids or tp.partition not in p_ids: raise UnknownTopicOrPartitionError(tp) self._subscription.assign_from_user(partitions) self._on_change_subscription() self._client.set_topics([tp.topic for tp in partitions])
async def mocked_func(node_id, request): if not send_fut.done(): send_fut.set_result(None) raise UnknownTopicOrPartitionError()