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)
Exemple #2
0
 def create_topic_with_assignment(self, name: str,
                                  assignments: Sequence[Sequence[int]]):
     client = KafkaCliTools(self._redpanda)
     client.create_topic_with_assignment(name, assignments)