def create_and_validate(self, name, custom_assignment): self.redpanda.logger.info( f"creating topic {name} with {custom_assignment}") cli = KafkaCliTools(self.redpanda) rpk = RpkTool(self.redpanda) cli.create_topic_with_assignment(name, custom_assignment) def replica_matches(): replicas_per_partition = {} for p in rpk.describe_topic(name): replicas_per_partition[p.id] = list(p.replicas) self.redpanda.logger.debug( f"requested replicas: {custom_assignment}, current replicas: {replicas_per_partition}" ) for p_id, replicas in enumerate(custom_assignment): if p_id not in replicas_per_partition: return False if set(replicas) != set(replicas_per_partition[p_id]): return False return True # each assignment defines a partition wait_until(replica_matches, 10, backoff_sec=1)
def create_topic_with_assignment(self, name: str, assignments: Sequence[Sequence[int]]): client = KafkaCliTools(self._redpanda) client.create_topic_with_assignment(name, assignments)