private Mono<Void> ensureZones() {
        Mono<Void> ensureZones = Mono.empty();
        var map = Map.of(messageTieredStorageProperties, messageMongoClient);
        for (var entry : map.entrySet()) {
            TieredStorageProperties properties = entry.getKey();
            if (!properties.isEnabled()) {
                continue;
            }
            TurmsMongoClient client = entry.getValue();
            for (MongoEntity<?> entity : client.getRegisteredEntities()) {
                String collectionName = entity.collectionName();
                Zone zone = entity.zone();
                if (zone == null) {
                    continue;
                }
                List<Pair<String, StorageTierProperties>> tiers;
                try {
                    tiers = getEnabledTiers(properties);
                    if (tiers.isEmpty()) {
                        continue;
                    }
                } catch (Exception e) {
                    return Mono.error(new RuntimeException("Failed to get enabled tiers", e));
                }
                ensureZones = ensureZones.then(client.findTags(entity.collectionName()))
                        .flatMap(tags -> needRotateTieredStorageZones(entity, tags, tiers)
                                ? client.isBalancerRunning()
                                : Mono.empty())
                        .flatMap(isBalancerRunning -> {
                            if (isBalancerRunning) {
                                return Mono.error(new IllegalStateException(
                                        "Failed to ensure zones because the balancer is running"));
                            }
                            return client.disableBalancing(collectionName)
                                    .then(Mono.defer(() -> {
                                        LOGGER.info(
                                                "Deleting the existing tags of the collection: \"{}\"",
                                                collectionName);
                                        return client.deleteTags(collectionName)
                                                .onErrorMap(t -> new RuntimeException(
                                                        "Failed to delete the existing tags of the collection: \""
                                                                + collectionName
                                                                + "\""))
                                                .then(Mono.defer(() -> {
                                                    LOGGER.info(
                                                            "Deleted the existing tags of the collection: \"{}\"",
                                                            collectionName);
                                                    LOGGER.info(
                                                            "Adding shards to zones for the collection: \"{}\"",
                                                            collectionName);
                                                    return ensureZones(client,
                                                            tiers,
                                                            collectionName,
                                                            entity.zone())
                                                            .doOnSuccess(unused -> LOGGER.info(
                                                                    "Added shards to zones for the collection: \"{}\"",
                                                                    collectionName));
                                                }));
                                    }))
                                    .then(client.enableBalancing(collectionName));
                        });
            }
        }
        return ensureZones;
    }
@return True if all collections have existed
turms-service/src/main/java/im/turms/service/storage/mongo/MongoCollectionInitializer.java