IGNITE-19687 Add support for reassigning the default distribution zone in Catalog (#3590)

diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/Catalog.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/Catalog.java
index c7668e7..40e35b4 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/Catalog.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/Catalog.java
@@ -64,6 +64,7 @@
     private final long activationTimestamp;
     private final Map<String, CatalogSchemaDescriptor> schemasByName;
     private final Map<String, CatalogZoneDescriptor> zonesByName;
+    private final CatalogZoneDescriptor defaultZone;
 
     @IgniteToStringExclude
     private final Int2ObjectMap<CatalogSchemaDescriptor> schemasById;
@@ -89,13 +90,15 @@
      *         next version of the catalog.
      * @param zones Distribution zones descriptors.
      * @param schemas Enumeration of schemas available in the current version of catalog.
+     * @param defaultZoneId ID of the default distribution zone.
      */
     public Catalog(
             int version,
             long activationTimestamp,
             int objectIdGen,
             Collection<CatalogZoneDescriptor> zones,
-            Collection<CatalogSchemaDescriptor> schemas
+            Collection<CatalogSchemaDescriptor> schemas,
+            int defaultZoneId
     ) {
         this.version = version;
         this.activationTimestamp = activationTimestamp;
@@ -112,6 +115,11 @@
         indexesById = schemas.stream().flatMap(s -> Arrays.stream(s.indexes())).collect(toMapById());
         indexesByTableId = unmodifiable(toIndexesByTableId(schemas));
         zonesById = zones.stream().collect(toMapById());
+        defaultZone = zonesById.get(defaultZoneId);
+
+        if (defaultZone == null) {
+            throw new IllegalStateException("The default zone was not found among the provided zones [id=" + defaultZoneId + ']');
+        }
     }
 
     public int version() {
@@ -170,6 +178,10 @@
         return zonesByName.values();
     }
 
+    public CatalogZoneDescriptor defaultZone() {
+        return defaultZone;
+    }
+
     @Override
     public String toString() {
         return S.toString(this);
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogManagerImpl.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogManagerImpl.java
index 72ec956..52c0ab7 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogManagerImpl.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogManagerImpl.java
@@ -40,7 +40,6 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.Flow.Publisher;
-import java.util.function.Function;
 import java.util.function.LongSupplier;
 import org.apache.ignite.internal.catalog.descriptors.CatalogHashIndexDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogIndexDescriptor;
@@ -74,6 +73,7 @@
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
 import org.apache.ignite.internal.util.PendingComparableValuesTracker;
 import org.apache.ignite.internal.util.SubscriptionUtils;
+import org.apache.ignite.internal.util.TransformingIterator;
 import org.apache.ignite.lang.ErrorGroups.Common;
 import org.jetbrains.annotations.Nullable;
 
@@ -82,6 +82,8 @@
  */
 public class CatalogManagerImpl extends AbstractEventProducer<CatalogEvent, CatalogEventParameters>
         implements CatalogManager, SystemViewProvider {
+    static String DEFAULT_ZONE_NAME = "Default";
+
     private static final int MAX_RETRY_COUNT = 10;
 
     private static final int SYSTEM_VIEW_STRING_COLUMN_LENGTH = Short.MAX_VALUE;
@@ -185,7 +187,7 @@
                 DEFAULT_ZONE_NAME
         );
 
-        registerCatalog(new Catalog(0, 0L, objectIdGen, List.of(defaultZone), List.of(publicSchema, systemSchema)));
+        registerCatalog(new Catalog(0, 0L, objectIdGen, List.of(defaultZone), List.of(publicSchema, systemSchema), defaultZone.id()));
 
         updateLog.registerUpdateHandler(new OnUpdateHandlerImpl());
 
@@ -565,7 +567,8 @@
                 activationTimestamp,
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                catalog.schemas()
+                catalog.schemas(),
+                catalog.defaultZone().id()
         );
     }
 
@@ -648,16 +651,21 @@
     }
 
     private SystemView<?> createZonesView() {
-        return SystemViews.<CatalogZoneDescriptor>clusterViewBuilder()
+        return SystemViews.<ZoneWithDefaultMarker>clusterViewBuilder()
                 .name("ZONES")
-                .addColumn("NAME", STRING, CatalogZoneDescriptor::name)
-                .addColumn("PARTITIONS", INT32, CatalogZoneDescriptor::partitions)
-                .addColumn("REPLICAS", INT32, CatalogZoneDescriptor::replicas)
-                .addColumn("DATA_NODES_AUTO_ADJUST_SCALE_UP", INT32, CatalogZoneDescriptor::dataNodesAutoAdjustScaleUp)
-                .addColumn("DATA_NODES_AUTO_ADJUST_SCALE_DOWN", INT32, CatalogZoneDescriptor::dataNodesAutoAdjustScaleDown)
-                .addColumn("DATA_NODES_FILTER", STRING, CatalogZoneDescriptor::filter)
-                .addColumn("IS_DEFAULT_ZONE", BOOLEAN, isDefaultZone())
-                .dataProvider(SubscriptionUtils.fromIterable(() -> catalogAt(clockService.nowLong()).zones().iterator()))
+                .<String>addColumn("NAME", STRING, wrapper -> wrapper.zone.name())
+                .<Integer>addColumn("PARTITIONS", INT32, wrapper -> wrapper.zone.partitions())
+                .<Integer>addColumn("REPLICAS", INT32, wrapper -> wrapper.zone.replicas())
+                .<Integer>addColumn("DATA_NODES_AUTO_ADJUST_SCALE_UP", INT32, wrapper -> wrapper.zone.dataNodesAutoAdjustScaleUp())
+                .<Integer>addColumn("DATA_NODES_AUTO_ADJUST_SCALE_DOWN", INT32, wrapper -> wrapper.zone.dataNodesAutoAdjustScaleDown())
+                .<String>addColumn("DATA_NODES_FILTER", STRING, wrapper -> wrapper.zone.filter())
+                .<Boolean>addColumn("IS_DEFAULT_ZONE", BOOLEAN, wrapper -> wrapper.isDefault)
+                .dataProvider(SubscriptionUtils.fromIterable(() -> {
+                            Catalog catalog = catalogAt(clockService.nowLong());
+                            return new TransformingIterator<>(catalog.zones().iterator(),
+                                    (zone) -> new ZoneWithDefaultMarker(zone, catalog.defaultZone().id() == zone.id()));
+                        }
+                ))
                 .build();
     }
 
@@ -705,8 +713,15 @@
                         .collect(joining(", "));
     }
 
-    private static Function<CatalogZoneDescriptor, Boolean> isDefaultZone() {
-        return zone -> zone.name().equals(DEFAULT_ZONE_NAME);
+    /** Wraps a CatalogZoneDescriptor and a flag indicating whether this zone is the default zone. */
+    static class ZoneWithDefaultMarker {
+        private final CatalogZoneDescriptor zone;
+        private final boolean isDefault;
+
+        ZoneWithDefaultMarker(CatalogZoneDescriptor zone, boolean isDefault) {
+            this.zone = zone;
+            this.isDefault = isDefault;
+        }
     }
 
     /**
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogService.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogService.java
index e944beb..eefbaa0 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogService.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/CatalogService.java
@@ -49,8 +49,6 @@
 
     String SYSTEM_SCHEMA_NAME = "SYSTEM";
 
-    String DEFAULT_ZONE_NAME = "Default";
-
     /** Default storage profile. */
     String DEFAULT_STORAGE_PROFILE = "default";
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterZoneSetDefaultCatalogCommand.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterZoneSetDefaultCatalogCommand.java
index 50e8fe2..473940a 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterZoneSetDefaultCatalogCommand.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterZoneSetDefaultCatalogCommand.java
@@ -17,13 +17,15 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
+import static org.apache.ignite.internal.catalog.commands.CatalogUtils.zoneOrThrow;
 
 import java.util.Collections;
 import java.util.List;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogCommand;
 import org.apache.ignite.internal.catalog.CatalogValidationException;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
+import org.apache.ignite.internal.catalog.storage.SetDefaultZoneEntry;
 import org.apache.ignite.internal.catalog.storage.UpdateEntry;
 
 /**
@@ -47,12 +49,14 @@
 
     @Override
     public List<UpdateEntry> get(Catalog catalog) {
-        // TODO https://issues.apache.org/jira/browse/IGNITE-19687
-        if (zoneName.equals(DEFAULT_ZONE_NAME)) {
+        CatalogZoneDescriptor zone = zoneOrThrow(catalog, zoneName);
+
+        if (zone.id() == catalog.defaultZone().id()) {
+            // Specified zone already marked as default.
             return Collections.emptyList();
         }
 
-        throw new UnsupportedOperationException();
+        return List.of(new SetDefaultZoneEntry(zone.id()));
     }
 
     /**
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
index bb5dd51..3de1ec8 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static java.util.Objects.requireNonNullElse;
 import static java.util.stream.Collectors.toList;
 import static org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.ensureNoTableIndexOrSysViewExistsWithGivenName;
 import static org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.ensureZoneContainsTablesStorageProfile;
@@ -35,7 +34,6 @@
 import java.util.Set;
 import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogCommand;
-import org.apache.ignite.internal.catalog.CatalogService;
 import org.apache.ignite.internal.catalog.CatalogValidationException;
 import org.apache.ignite.internal.catalog.commands.DefaultValue.Type;
 import org.apache.ignite.internal.catalog.descriptors.CatalogColumnCollation;
@@ -51,6 +49,7 @@
 import org.apache.ignite.internal.catalog.storage.NewTableEntry;
 import org.apache.ignite.internal.catalog.storage.ObjectIdGenUpdateEntry;
 import org.apache.ignite.internal.catalog.storage.UpdateEntry;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A command that adds a new table to the catalog.
@@ -81,7 +80,7 @@
      * @param colocationColumns Name of the columns participating in distribution calculation.
      *      Should be subset of the primary key columns.
      * @param columns List of the columns containing by the table. There should be at least one column.
-     * @param zoneName Name of the zone to create table in. Should not be null or blank.
+     * @param zoneName Name of the zone to create table in or {@code null} to use the default distribution zone.
      * @throws CatalogValidationException if any of restrictions above is violated.
      */
     private CreateTableCommand(
@@ -90,7 +89,7 @@
             TablePrimaryKey primaryKey,
             List<String> colocationColumns,
             List<ColumnParams> columns,
-            String zoneName,
+            @Nullable String zoneName,
             String storageProfile
     ) throws CatalogValidationException {
         super(schemaName, tableName);
@@ -110,7 +109,9 @@
 
         ensureNoTableIndexOrSysViewExistsWithGivenName(schema, tableName);
 
-        CatalogZoneDescriptor zone = zoneOrThrow(catalog, zoneName);
+        CatalogZoneDescriptor zone = zoneName == null
+                ? catalog.defaultZone()
+                : zoneOrThrow(catalog, zoneName);
 
         if (storageProfile == null) {
             storageProfile = zone.storageProfiles().defaultProfile().storageProfile();
@@ -302,8 +303,6 @@
 
         @Override
         public CatalogCommand build() {
-            String zoneName = requireNonNullElse(this.zoneName, CatalogService.DEFAULT_ZONE_NAME);
-
             List<String> colocationColumns;
 
             if (this.colocationColumns != null) {
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/DropZoneCommand.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/DropZoneCommand.java
index 1bbd8db..6e19e35 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/DropZoneCommand.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/DropZoneCommand.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.zoneOrThrow;
 
 import java.util.Arrays;
@@ -47,21 +46,16 @@
      */
     private DropZoneCommand(String zoneName) throws CatalogValidationException {
         super(zoneName);
-
-        validate();
-    }
-
-    @SuppressWarnings("MethodOverridesInaccessibleMethodOfSuper")
-    private void validate() {
-        if (zoneName.equals(DEFAULT_ZONE_NAME)) {
-            throw new DistributionZoneCantBeDroppedValidationException("Default distribution zone can't be dropped: zoneName={}", zoneName);
-        }
     }
 
     @Override
     public List<UpdateEntry> get(Catalog catalog) {
         CatalogZoneDescriptor zone = zoneOrThrow(catalog, zoneName);
 
+        if (zone.id() == catalog.defaultZone().id()) {
+            throw new DistributionZoneCantBeDroppedValidationException("Default distribution zone can't be dropped: zoneName={}", zoneName);
+        }
+
         catalog.schemas().stream()
                 .flatMap(s -> Arrays.stream(s.tables()))
                 .filter(t -> t.zoneId() == zone.id())
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommand.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommand.java
index 75f927c..aa76139 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommand.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommand.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.catalog.commands;
 
 import static org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.validateIdentifier;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.zoneOrThrow;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
 
@@ -82,10 +81,6 @@
 
     private void validate() {
         validateIdentifier(newZoneName, "New zone name");
-
-        if (zoneName.equals(DEFAULT_ZONE_NAME)) {
-            throw new CatalogValidationException("Default distribution zone can't be renamed");
-        }
     }
 
     /**
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/events/CatalogEvent.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/events/CatalogEvent.java
index 2c65d1f..58cb4b2 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/events/CatalogEvent.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/events/CatalogEvent.java
@@ -66,4 +66,7 @@
 
     /** This event is fired, when a system view was created in Catalog. */
     SYSTEM_VIEW_CREATE,
+
+    /** This event is fired, when a zone is marked as the default zone. */
+    SET_DEFAULT_ZONE;
 }
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AbstractChangeIndexStatusEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AbstractChangeIndexStatusEntry.java
index 484eeb4..0e75390 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AbstractChangeIndexStatusEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AbstractChangeIndexStatusEntry.java
@@ -54,7 +54,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceIndex(schema, newIndexDescriptor), catalog.schemas())
+                replaceSchema(replaceIndex(schema, newIndexDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterColumnEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterColumnEntry.java
index 0155977..338aae2 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterColumnEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterColumnEntry.java
@@ -108,7 +108,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas())
+                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterZoneEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterZoneEntry.java
index fc33f36..039218b 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterZoneEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/AlterZoneEntry.java
@@ -79,7 +79,8 @@
                 catalog.zones().stream()
                         .map(z -> z.id() == descriptor.id() ? descriptor : z)
                         .collect(toList()),
-                catalog.schemas()
+                catalog.schemas(),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropColumnsEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropColumnsEntry.java
index 99edb27..f3ae741 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropColumnsEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropColumnsEntry.java
@@ -110,7 +110,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas())
+                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropTableEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropTableEntry.java
index 7811456..dc20ff2 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropTableEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropTableEntry.java
@@ -90,7 +90,8 @@
                         schema.indexes(),
                         schema.systemViews(),
                         causalityToken
-                ), catalog.schemas())
+                ), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropZoneEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropZoneEntry.java
index f4154ad..6afbebc 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropZoneEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/DropZoneEntry.java
@@ -74,7 +74,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones().stream().filter(z -> z.id() != zoneId).collect(toList()),
-                catalog.schemas()
+                catalog.schemas(),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewColumnsEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewColumnsEntry.java
index 6db12c9..0d2047d 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewColumnsEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewColumnsEntry.java
@@ -106,7 +106,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas())
+                replaceSchema(replaceTable(schema, newTableDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewIndexEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewIndexEntry.java
index 03ed1a9..4110b86 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewIndexEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewIndexEntry.java
@@ -93,7 +93,8 @@
                         ArrayUtils.concat(schema.indexes(), descriptor),
                         schema.systemViews(),
                         causalityToken
-                ), catalog.schemas())
+                ), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewSystemViewEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewSystemViewEntry.java
index 5253d18..104e131 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewSystemViewEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewSystemViewEntry.java
@@ -99,7 +99,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                CatalogUtils.replaceSchema(newSystemSchema, catalog.schemas())
+                CatalogUtils.replaceSchema(newSystemSchema, catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewTableEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewTableEntry.java
index c13edc2..18507ab 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewTableEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewTableEntry.java
@@ -95,7 +95,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                schemas
+                schemas,
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewZoneEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewZoneEntry.java
index bea0705..6a00124 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewZoneEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/NewZoneEntry.java
@@ -77,7 +77,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 CollectionUtils.concat(catalog.zones(), List.of(descriptor)),
-                catalog.schemas()
+                catalog.schemas(),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/ObjectIdGenUpdateEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/ObjectIdGenUpdateEntry.java
index 111fa9d..66fe037 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/ObjectIdGenUpdateEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/ObjectIdGenUpdateEntry.java
@@ -54,7 +54,8 @@
                 catalog.time(),
                 catalog.objectIdGenState() + delta,
                 catalog.zones(),
-                catalog.schemas()
+                catalog.schemas(),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RemoveIndexEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RemoveIndexEntry.java
index 89a58b8..da155f2 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RemoveIndexEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RemoveIndexEntry.java
@@ -82,7 +82,8 @@
                         Arrays.stream(schema.indexes()).filter(t -> t.id() != indexId).toArray(CatalogIndexDescriptor[]::new),
                         schema.systemViews(),
                         causalityToken
-                ), catalog.schemas())
+                ), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameIndexEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameIndexEntry.java
index dabf422..550e418 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameIndexEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameIndexEntry.java
@@ -71,7 +71,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceIndex(schemaDescriptor, newIndexDescriptor), catalog.schemas())
+                replaceSchema(replaceIndex(schemaDescriptor, newIndexDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameTableEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameTableEntry.java
index f4ba1c6..99b1ec6 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameTableEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/RenameTableEntry.java
@@ -80,7 +80,8 @@
                 catalog.time(),
                 catalog.objectIdGenState(),
                 catalog.zones(),
-                replaceSchema(replaceTable(schemaDescriptor, newTableDescriptor), catalog.schemas())
+                replaceSchema(replaceTable(schemaDescriptor, newTableDescriptor), catalog.schemas()),
+                catalog.defaultZone().id()
         );
     }
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SetDefaultZoneEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SetDefaultZoneEntry.java
new file mode 100644
index 0000000..c089dfc
--- /dev/null
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SetDefaultZoneEntry.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.catalog.storage;
+
+import java.io.IOException;
+import org.apache.ignite.internal.catalog.Catalog;
+import org.apache.ignite.internal.catalog.events.CatalogEvent;
+import org.apache.ignite.internal.catalog.events.CatalogEventParameters;
+import org.apache.ignite.internal.catalog.events.DropZoneEventParameters;
+import org.apache.ignite.internal.catalog.storage.serialization.CatalogObjectSerializer;
+import org.apache.ignite.internal.catalog.storage.serialization.MarshallableEntryType;
+import org.apache.ignite.internal.tostring.S;
+import org.apache.ignite.internal.util.io.IgniteDataInput;
+import org.apache.ignite.internal.util.io.IgniteDataOutput;
+
+/**
+ * Describes changing of a default zone.
+ */
+public class SetDefaultZoneEntry implements UpdateEntry, Fireable {
+    public static final CatalogObjectSerializer<SetDefaultZoneEntry> SERIALIZER = new SetDefaultZoneEntrySerializer();
+
+    private final int zoneId;
+
+    /**
+     * Constructs the object.
+     *
+     * @param zoneId An id of a zone to set default.
+     */
+    public SetDefaultZoneEntry(int zoneId) {
+        this.zoneId = zoneId;
+    }
+
+    /** Returns an id of a zone to set default. */
+    public int zoneId() {
+        return zoneId;
+    }
+
+    @Override
+    public int typeId() {
+        return MarshallableEntryType.SET_DEFAULT_ZONE.id();
+    }
+
+    @Override
+    public CatalogEvent eventType() {
+        return CatalogEvent.SET_DEFAULT_ZONE;
+    }
+
+    @Override
+    public CatalogEventParameters createEventParameters(long causalityToken, int catalogVersion) {
+        return new DropZoneEventParameters(causalityToken, catalogVersion, zoneId);
+    }
+
+    @Override
+    public Catalog applyUpdate(Catalog catalog, long causalityToken) {
+        return new Catalog(
+                catalog.version(),
+                catalog.time(),
+                catalog.objectIdGenState(),
+                catalog.zones(),
+                catalog.schemas(),
+                zoneId);
+    }
+
+    @Override
+    public String toString() {
+        return S.toString(this);
+    }
+
+    /**
+     * Serializer for {@link SetDefaultZoneEntry}.
+     */
+    private static class SetDefaultZoneEntrySerializer implements CatalogObjectSerializer<SetDefaultZoneEntry> {
+        @Override
+        public SetDefaultZoneEntry readFrom(IgniteDataInput input) throws IOException {
+            int zoneId = input.readInt();
+
+            return new SetDefaultZoneEntry(zoneId);
+        }
+
+        @Override
+        public void writeTo(SetDefaultZoneEntry entry, IgniteDataOutput output) throws IOException {
+            output.writeInt(entry.zoneId());
+        }
+    }
+}
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SnapshotEntry.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SnapshotEntry.java
index 8ca6595..29f2980 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SnapshotEntry.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/SnapshotEntry.java
@@ -42,6 +42,7 @@
     private final int objectIdGenState;
     private final CatalogZoneDescriptor[] zones;
     private final CatalogSchemaDescriptor[] schemas;
+    private final int defaultZoneId;
 
     /**
      * Constructs the object.
@@ -50,7 +51,7 @@
      */
     public SnapshotEntry(Catalog catalog) {
         this(catalog.version(), catalog.time(), catalog.objectIdGenState(), catalog.zones().toArray(CatalogZoneDescriptor[]::new),
-                catalog.schemas().toArray(CatalogSchemaDescriptor[]::new));
+                catalog.schemas().toArray(CatalogSchemaDescriptor[]::new), catalog.defaultZone().id());
     }
 
     /**
@@ -61,13 +62,15 @@
             long activationTime,
             int objectIdGenState,
             CatalogZoneDescriptor[] zones,
-            CatalogSchemaDescriptor[] schemas
+            CatalogSchemaDescriptor[] schemas,
+            int defaultZoneId
     ) {
         this.version = version;
         this.activationTime = activationTime;
         this.objectIdGenState = objectIdGenState;
         this.zones = zones;
         this.schemas = schemas;
+        this.defaultZoneId = defaultZoneId;
     }
 
     /**
@@ -86,7 +89,8 @@
                 activationTime,
                 objectIdGenState,
                 List.of(zones),
-                List.of(schemas)
+                List.of(schemas),
+                defaultZoneId
         );
     }
 
@@ -133,7 +137,9 @@
             CatalogSchemaDescriptor[] schemas =
                     CatalogSerializationUtils.readArray(CatalogSchemaDescriptor.SERIALIZER, input, CatalogSchemaDescriptor.class);
 
-            return new SnapshotEntry(catalogVersion, activationTime, objectIdGenState, zones, schemas);
+            int defaultZoneId = input.readInt();
+
+            return new SnapshotEntry(catalogVersion, activationTime, objectIdGenState, zones, schemas, defaultZoneId);
         }
 
         @Override
@@ -144,6 +150,8 @@
 
             CatalogSerializationUtils.writeArray(entry.zones, CatalogZoneDescriptor.SERIALIZER, output);
             CatalogSerializationUtils.writeArray(entry.schemas, CatalogSchemaDescriptor.SERIALIZER, output);
+
+            output.writeInt(entry.defaultZoneId);
         }
     }
 }
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/CatalogEntrySerializerProvider.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/CatalogEntrySerializerProvider.java
index 4ab86fc..ed7e523 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/CatalogEntrySerializerProvider.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/CatalogEntrySerializerProvider.java
@@ -35,6 +35,7 @@
 import org.apache.ignite.internal.catalog.storage.RemoveIndexEntry;
 import org.apache.ignite.internal.catalog.storage.RenameIndexEntry;
 import org.apache.ignite.internal.catalog.storage.RenameTableEntry;
+import org.apache.ignite.internal.catalog.storage.SetDefaultZoneEntry;
 import org.apache.ignite.internal.catalog.storage.SnapshotEntry;
 import org.apache.ignite.internal.catalog.storage.StartBuildingIndexEntry;
 import org.apache.ignite.internal.catalog.storage.VersionedUpdate.VersionedUpdateSerializer;
@@ -77,6 +78,7 @@
             serializers[MarshallableEntryType.ID_GENERATOR.id()] = ObjectIdGenUpdateEntry.SERIALIZER;
             serializers[MarshallableEntryType.SNAPSHOT.id()] = SnapshotEntry.SERIALIZER;
             serializers[MarshallableEntryType.RENAME_INDEX.id()] = RenameIndexEntry.SERIALIZER;
+            serializers[MarshallableEntryType.SET_DEFAULT_ZONE.id()] = SetDefaultZoneEntry.SERIALIZER;
             //noinspection ThisEscapedInObjectConstruction
             serializers[MarshallableEntryType.VERSIONED_UPDATE.id()] = new VersionedUpdateSerializer(this);
 
diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/MarshallableEntryType.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/MarshallableEntryType.java
index c18175d..5306fc7 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/MarshallableEntryType.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/serialization/MarshallableEntryType.java
@@ -39,7 +39,8 @@
     ID_GENERATOR(15),
     SNAPSHOT(16),
     VERSIONED_UPDATE(17),
-    RENAME_INDEX(18);
+    RENAME_INDEX(18),
+    SET_DEFAULT_ZONE(19);
 
     /** Type ID. */
     private final int id;
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerDescriptorCausalityTokenTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerDescriptorCausalityTokenTest.java
index 6dabac7..caff7da 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerDescriptorCausalityTokenTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerDescriptorCausalityTokenTest.java
@@ -20,7 +20,6 @@
 import static org.apache.ignite.internal.catalog.CatalogManagerImpl.INITIAL_CAUSALITY_TOKEN;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.addColumnParams;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.columnParams;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.columnParamsBuilder;
@@ -42,6 +41,7 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.List;
+import java.util.Objects;
 import org.apache.ignite.internal.catalog.commands.AlterZoneCommand;
 import org.apache.ignite.internal.catalog.commands.CreateZoneCommand;
 import org.apache.ignite.internal.catalog.commands.RenameZoneCommand;
@@ -59,7 +59,7 @@
  */
 public class CatalogManagerDescriptorCausalityTokenTest extends BaseCatalogManagerTest {
     private static final String SCHEMA_NAME = DEFAULT_SCHEMA_NAME;
-    private static final String ZONE_NAME = DEFAULT_ZONE_NAME;
+    private static final String ZONE_NAME = "TEST_ZONE_NAME";
     private static final String TABLE_NAME_2 = "myTable2";
     private static final String NEW_COLUMN_NAME = "NEWCOL";
 
@@ -79,7 +79,7 @@
         assertEquals(INITIAL_CAUSALITY_TOKEN, defaultSchema.updateToken());
 
         // Default distribution zone must exists.
-        CatalogZoneDescriptor zone = manager.zone(DEFAULT_ZONE_NAME, clock.nowLong());
+        CatalogZoneDescriptor zone = Objects.requireNonNull(manager.catalog(manager.activeCatalogVersion(clock.nowLong()))).defaultZone();
 
         assertNotNull(zone);
 
@@ -342,7 +342,7 @@
 
     @Test
     public void testCreateZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -368,7 +368,7 @@
 
     @Test
     public void testRenameZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -412,7 +412,7 @@
 
     @Test
     public void testAlterZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = ZONE_NAME;
 
         CatalogCommand alterCmd = AlterZoneCommand.builder()
                 .zoneName(zoneName)
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
index 925118e..b60d99b 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
@@ -18,9 +18,9 @@
 package org.apache.ignite.internal.catalog;
 
 import static java.util.stream.Collectors.toList;
+import static org.apache.ignite.internal.catalog.CatalogManagerImpl.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.SYSTEM_SCHEMA_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.addColumnParams;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.applyNecessaryLength;
@@ -92,6 +92,7 @@
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
@@ -100,6 +101,7 @@
 import org.apache.ignite.internal.catalog.commands.AlterTableAlterColumnCommand;
 import org.apache.ignite.internal.catalog.commands.AlterTableAlterColumnCommandBuilder;
 import org.apache.ignite.internal.catalog.commands.AlterZoneCommand;
+import org.apache.ignite.internal.catalog.commands.AlterZoneSetDefaultCatalogCommand;
 import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.catalog.commands.ColumnParams;
 import org.apache.ignite.internal.catalog.commands.ColumnParams.Builder;
@@ -161,7 +163,7 @@
  */
 public class CatalogManagerSelfTest extends BaseCatalogManagerTest {
     private static final String SCHEMA_NAME = DEFAULT_SCHEMA_NAME;
-    private static final String ZONE_NAME = DEFAULT_ZONE_NAME;
+    private static final String TEST_ZONE_NAME = "TEST_ZONE_NAME";
     private static final String NEW_COLUMN_NAME = "NEWCOL";
     private static final String NEW_COLUMN_NAME_2 = "NEWCOL2";
     private static final int DFLT_TEST_PRECISION = 11;
@@ -187,7 +189,7 @@
         assertEquals(0, defaultSchema.indexes().length);
 
         // Default distribution zone must exists.
-        CatalogZoneDescriptor zone = manager.zone(DEFAULT_ZONE_NAME, clock.nowLong());
+        CatalogZoneDescriptor zone = latestActiveCatalog().defaultZone();
 
         assertEquals(DEFAULT_ZONE_NAME, zone.name());
         assertEquals(DEFAULT_PARTITION_COUNT, zone.partitions());
@@ -290,7 +292,10 @@
 
         // Validate newly created table
         assertEquals(TABLE_NAME, table.name());
-        assertEquals(manager.zone(ZONE_NAME, clock.nowLong()).id(), table.zoneId());
+
+        CatalogZoneDescriptor defaultZone = latestActiveCatalog().defaultZone();
+
+        assertEquals(defaultZone.id(), table.zoneId());
 
         // Validate newly created pk index
         assertEquals(pkIndexName(TABLE_NAME), pkIndex.name());
@@ -1313,7 +1318,7 @@
 
     @Test
     public void testCreateZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1352,8 +1357,77 @@
     }
 
     @Test
+    public void testSetDefaultZone() {
+        CatalogZoneDescriptor initialDefaultZone = latestActiveCatalog().defaultZone();
+
+        // Create new zone
+        {
+            StorageProfileParams storageProfile = StorageProfileParams.builder()
+                    .storageProfile("test_profile")
+                    .build();
+
+            CatalogCommand createZoneCmd = CreateZoneCommand.builder()
+                    .zoneName(TEST_ZONE_NAME)
+                    .storageProfilesParams(List.of(storageProfile))
+                    .build();
+
+            assertThat(manager.execute(createZoneCmd), willCompleteSuccessfully());
+
+            assertNotEquals(TEST_ZONE_NAME, latestActiveCatalog().defaultZone().name());
+        }
+
+        // Set new zone as default.
+        {
+            CatalogCommand setDefaultCmd = AlterZoneSetDefaultCatalogCommand.builder()
+                    .zoneName(TEST_ZONE_NAME)
+                    .build();
+
+            int prevVer = latestActiveCatalog().version();
+
+            assertThat(manager.execute(setDefaultCmd), willCompleteSuccessfully());
+            assertEquals(TEST_ZONE_NAME, latestActiveCatalog().defaultZone().name());
+
+            // Make sure history has not been affected.
+            Catalog prevCatalog = Objects.requireNonNull(manager.catalog(prevVer));
+            assertNotEquals(TEST_ZONE_NAME, prevCatalog.defaultZone().name());
+            assertNotEquals(latestActiveCatalog().defaultZone().id(), prevCatalog.defaultZone().id());
+        }
+
+        // Create table in the new zone.
+        {
+            assertThat(manager.execute(simpleTable(TABLE_NAME)), willCompleteSuccessfully());
+
+            Catalog catalog = latestActiveCatalog();
+            CatalogTableDescriptor tab = Objects.requireNonNull(manager.table(TABLE_NAME, catalog.time()));
+
+            assertEquals(catalog.defaultZone().id(), tab.zoneId());
+        }
+
+        // Setting default zone that is already the default changes nothing.
+        {
+            int lastVer =  manager.latestCatalogVersion();
+
+            CatalogCommand setDefaultCmd = AlterZoneSetDefaultCatalogCommand.builder()
+                    .zoneName(TEST_ZONE_NAME)
+                    .build();
+
+            assertThat(manager.execute(setDefaultCmd), willCompleteSuccessfully());
+            assertEquals(lastVer, manager.latestCatalogVersion());
+        }
+
+        // Drop old default zone.
+        {
+            CatalogCommand dropCommand = DropZoneCommand.builder()
+                    .zoneName(initialDefaultZone.name())
+                    .build();
+
+            assertThat(manager.execute(dropCommand), willCompleteSuccessfully());
+        }
+    }
+
+    @Test
     public void testDropZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1389,8 +1463,48 @@
     }
 
     @Test
+    public void testDropDefaultZoneIsRejected() {
+        // Drop default zone is rejected.
+        {
+            Catalog catalog = latestActiveCatalog();
+            CatalogCommand dropCommand = DropZoneCommand.builder()
+                    .zoneName(catalog.defaultZone().name())
+                    .build();
+
+            int ver = catalog.version();
+
+            assertThat(manager.execute(dropCommand), willThrow(DistributionZoneCantBeDroppedValidationException.class));
+
+            assertEquals(ver, manager.latestCatalogVersion());
+        }
+
+        // Renamed zone deletion is also rejected.
+        {
+            CatalogCommand renameCommand = RenameZoneCommand.builder()
+                    .zoneName(latestActiveCatalog().defaultZone().name())
+                    .newZoneName(TEST_ZONE_NAME)
+                    .build();
+
+            int ver = manager.latestCatalogVersion();
+
+            assertThat(manager.execute(renameCommand), willCompleteSuccessfully());
+
+            assertSame(ver + 1, manager.latestCatalogVersion());
+
+            ver = manager.latestCatalogVersion();
+
+            CatalogCommand dropCommand = DropZoneCommand.builder()
+                    .zoneName(TEST_ZONE_NAME)
+                    .build();
+
+            assertThat(manager.execute(dropCommand), willThrow(DistributionZoneCantBeDroppedValidationException.class));
+            assertSame(ver, manager.latestCatalogVersion());
+        }
+    }
+
+    @Test
     public void testRenameZone() throws InterruptedException {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1433,25 +1547,44 @@
     }
 
     @Test
+    public void testRenameDefaultZone() {
+        CatalogZoneDescriptor defaultZone = latestActiveCatalog().defaultZone();
+
+        assertNotEquals(TEST_ZONE_NAME, defaultZone.name());
+
+        CatalogCommand renameZoneCmd = RenameZoneCommand.builder()
+                .zoneName(defaultZone.name())
+                .newZoneName(TEST_ZONE_NAME)
+                .build();
+
+        int ver = manager.latestCatalogVersion();
+        assertThat(manager.execute(renameZoneCmd), willCompleteSuccessfully());
+
+        assertEquals(ver + 1, manager.latestCatalogVersion());
+        assertEquals(TEST_ZONE_NAME, latestActiveCatalog().defaultZone().name());
+        assertEquals(defaultZone.id(), latestActiveCatalog().defaultZone().id());
+    }
+
+    @Test
     public void testDefaultZone() {
-        CatalogZoneDescriptor defaultZone = manager.zone(DEFAULT_ZONE_NAME, clock.nowLong());
+        CatalogZoneDescriptor defaultZone = latestActiveCatalog().defaultZone();
 
         // Try to create zone with default zone name.
         CatalogCommand cmd = CreateZoneCommand.builder()
-                .zoneName(DEFAULT_ZONE_NAME)
+                .zoneName(defaultZone.name())
                 .partitions(42)
                 .replicas(15)
                 .storageProfilesParams(List.of(StorageProfileParams.builder().storageProfile(DEFAULT_STORAGE_PROFILE).build()))
                 .build();
-        assertThat(manager.execute(cmd), willThrow(IgniteInternalException.class));
+        assertThat(manager.execute(cmd), willThrow(DistributionZoneExistsValidationException.class));
 
         // Validate default zone wasn't changed.
-        assertSame(defaultZone, manager.zone(DEFAULT_ZONE_NAME, clock.nowLong()));
+        assertSame(defaultZone, manager.zone(defaultZone.name(), clock.nowLong()));
     }
 
     @Test
     public void testAlterZone() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1492,7 +1625,7 @@
 
     @Test
     public void testCreateZoneWithSameName() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1527,7 +1660,7 @@
 
     @Test
     public void testCreateZoneEvents() {
-        String zoneName = ZONE_NAME + 1;
+        String zoneName = TEST_ZONE_NAME;
 
         CatalogCommand cmd = CreateZoneCommand.builder()
                 .zoneName(zoneName)
@@ -1876,7 +2009,7 @@
         assertThat(
                 manager.execute(
                         CreateZoneCommand.builder()
-                                .zoneName(ZONE_NAME + 1)
+                                .zoneName(TEST_ZONE_NAME)
                                 .storageProfilesParams(
                                         List.of(StorageProfileParams.builder().storageProfile(DEFAULT_STORAGE_PROFILE).build())
                                 ).build()
@@ -1884,7 +2017,7 @@
                 willCompleteSuccessfully()
         );
 
-        CatalogZoneDescriptor zone = manager.zone(ZONE_NAME, clock.nowLong());
+        CatalogZoneDescriptor zone = manager.zone(TEST_ZONE_NAME, clock.nowLong());
 
         assertEquals(DEFAULT_PARTITION_COUNT, zone.partitions());
         assertEquals(DEFAULT_REPLICA_COUNT, zone.replicas());
@@ -2521,7 +2654,7 @@
 
         assertThat(manager.execute(startBuildingIndexCommand(indexId)), willCompleteSuccessfully());
 
-        Catalog latestCatalog = manager.catalog(manager.latestCatalogVersion());
+        Catalog latestCatalog = manager.catalog(manager.activeCatalogVersion(clock.nowLong()));
 
         assertThat(latestCatalog.version(), greaterThan(expCreationVersion));
 
@@ -2549,7 +2682,7 @@
             createSomeTable(TABLE_NAME + 1);
         }
 
-        Catalog latestCatalog = manager.catalog(manager.latestCatalogVersion());
+        Catalog latestCatalog = manager.catalog(manager.activeCatalogVersion(clock.nowLong()));
 
         assertThat(latestCatalog.version(), greaterThan(expCreationVersion));
 
@@ -2571,7 +2704,7 @@
         assertThat(manager.execute(simpleTable(TABLE_NAME_2)), willCompleteSuccessfully());
 
         long timestamp = clock.nowLong();
-        Catalog catalog = manager.catalog(manager.latestCatalogVersion());
+        Catalog catalog = manager.catalog(manager.activeCatalogVersion(clock.nowLong()));
 
         // Add more updates
         assertThat(manager.execute(simpleIndex(TABLE_NAME, INDEX_NAME)), willCompleteSuccessfully());
@@ -2741,4 +2874,10 @@
             return falseCompletedFuture();
         };
     }
+
+    private Catalog latestActiveCatalog() {
+        Catalog catalog = manager.catalog(manager.activeCatalogVersion(clock.nowLong()));
+
+        return Objects.requireNonNull(catalog);
+    }
 }
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
index 0c3ad29..7cbac40 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AbstractCommandValidationTest.java
@@ -197,8 +197,8 @@
                         indexes,
                         systemViews,
                         INITIAL_CAUSALITY_TOKEN
-                ))
-        );
+                )),
+                DEFAULT_ZONE.id());
     }
 
     static CatalogTableDescriptor table(int tableId, int schemaId, int zoneId, int pkIndexId, String columnName) {
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CatalogUtilsTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CatalogUtilsTest.java
index 06b42fa..531cf31 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CatalogUtilsTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CatalogUtilsTest.java
@@ -19,7 +19,6 @@
 
 import static java.util.stream.Collectors.toList;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.createTestCatalogManager;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.index;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.clusterWideEnsuredActivationTimestamp;
@@ -407,7 +406,6 @@
     private void createTable(String tableName) {
         CatalogCommand catalogCommand = CreateTableCommand.builder()
                 .schemaName(DEFAULT_SCHEMA_NAME)
-                .zone(DEFAULT_ZONE_NAME)
                 .tableName(tableName)
                 .columns(List.of(ColumnParams.builder().name(COLUMN_NAME).type(INT32).build()))
                 // Any type of a primary key index can be used.
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/DropZoneCommandValidationTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/DropZoneCommandValidationTest.java
index 59edacd..2a09397 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/DropZoneCommandValidationTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/DropZoneCommandValidationTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrows;
 
@@ -49,9 +48,15 @@
 
     @Test
     void rejectToDropDefaultZone() {
+        Catalog catalog = emptyCatalog();
+
+        CatalogCommand cmd = DropZoneCommand.builder()
+                .zoneName(catalog.defaultZone().name())
+                .build();
+
         assertThrows(
                 DistributionZoneCantBeDroppedValidationException.class,
-                () -> DropZoneCommand.builder().zoneName(DEFAULT_ZONE_NAME).build(),
+                () -> cmd.get(catalog),
                 "Default distribution zone can't be dropped"
         );
     }
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommandValidationTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommandValidationTest.java
index 600b976..fcb5620 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommandValidationTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/RenameZoneCommandValidationTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.catalog.commands;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrows;
 
 import org.apache.ignite.internal.catalog.Catalog;
@@ -48,17 +47,6 @@
     }
 
     @Test
-    void rejectToRenameDefaultZone() {
-        assertThrows(
-                CatalogValidationException.class,
-                () -> RenameZoneCommand.builder().zoneName(DEFAULT_ZONE_NAME).newZoneName("some").build(),
-                "Default distribution zone can't be renamed");
-
-        // Let's check the success cases.
-        RenameZoneCommand.builder().zoneName(ZONE_NAME).newZoneName(ZONE_NAME + 0).build();
-    }
-
-    @Test
     void exceptionIsThrownIfZoneWithGivenNameNotFound() {
         RenameZoneCommandBuilder builder = RenameZoneCommand.builder();
 
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogEntrySerializationTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogEntrySerializationTest.java
index 52e8b8f..52c77d1 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogEntrySerializationTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogEntrySerializationTest.java
@@ -64,75 +64,79 @@
     void test(MarshallableEntryType type) {
         switch (type) {
             case ALTER_COLUMN:
-                alterColumnEntry();
+                checkAlterColumnEntry();
                 break;
 
             case ALTER_ZONE:
-                alterZoneEntry();
+                checkAlterZoneEntry();
                 break;
 
             case NEW_ZONE:
-                newZoneEntry();
+                checkNewZoneEntry();
                 break;
 
             case DROP_COLUMN:
-                dropColumnsEntry();
+                checkSerialization(new DropColumnsEntry(1, Set.of("C1", "C2"), "PUBLIC"));
                 break;
 
             case DROP_INDEX:
-                dropIndexEntry();
+                checkSerialization(new DropIndexEntry(231, 23), new DropIndexEntry(231, 1));
                 break;
 
             case DROP_TABLE:
-                dropTableEntry();
+                checkSerialization(new DropTableEntry(23, "PUBLIC"), new DropTableEntry(3, "SYSTEM"));
                 break;
 
             case DROP_ZONE:
-                dropZoneEntry();
+                checkSerialization(new DropZoneEntry(123));
                 break;
 
             case MAKE_INDEX_AVAILABLE:
-                makeIndexAvailableEntry();
+                checkSerialization(new MakeIndexAvailableEntry(321));
                 break;
 
             case REMOVE_INDEX:
-                removeIndexEntry();
+                checkSerialization(new RemoveIndexEntry(231));
                 break;
 
             case START_BUILDING_INDEX:
-                startBuildingIndexEntry();
+                checkSerialization(new StartBuildingIndexEntry(321));
                 break;
 
             case NEW_COLUMN:
-                newColumnsEntry();
+                checkNewColumnsEntry();
                 break;
 
             case NEW_INDEX:
-                newIndexEntry();
+                checkNewIndexEntry();
                 break;
 
             case NEW_SYS_VIEW:
-                newSystemViewEntry();
+                checkNewSystemViewEntry();
                 break;
 
             case NEW_TABLE:
-                newTableEntry();
+                checkNewTableEntry();
                 break;
 
             case RENAME_TABLE:
-                renameTableEntry();
+                checkSerialization(new RenameTableEntry(1, "newName"));
                 break;
 
             case ID_GENERATOR:
-                objectIdGenUpdateEntry();
+                checkSerialization(new ObjectIdGenUpdateEntry(Integer.MAX_VALUE));
                 break;
 
             case SNAPSHOT:
-                snapshotEntry();
+                checkSnapshotEntry();
                 break;
 
             case RENAME_INDEX:
-                renameIndexEntry();
+                checkSerialization(new RenameIndexEntry(1, "newName"));
+                break;
+
+            case SET_DEFAULT_ZONE:
+                checkSerialization(new SetDefaultZoneEntry(1), new SetDefaultZoneEntry(Integer.MAX_VALUE));
                 break;
 
             default:
@@ -140,7 +144,7 @@
         }
     }
 
-    private void alterZoneEntry() {
+    private void checkAlterZoneEntry() {
         CatalogStorageProfilesDescriptor profiles =
                 new CatalogStorageProfilesDescriptor(List.of(new CatalogStorageProfileDescriptor("default")));
         UpdateEntry entry1 = new AlterZoneEntry(newCatalogZoneDescriptor("zone1", profiles));
@@ -150,7 +154,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void newZoneEntry() {
+    private void checkNewZoneEntry() {
         CatalogStorageProfilesDescriptor profiles =
                 new CatalogStorageProfilesDescriptor(List.of(new CatalogStorageProfileDescriptor("default")));
 
@@ -161,7 +165,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void alterColumnEntry() {
+    private void checkAlterColumnEntry() {
         CatalogTableColumnDescriptor desc1 = newCatalogTableColumnDescriptor("c0", null);
         CatalogTableColumnDescriptor desc2 =
                 newCatalogTableColumnDescriptor("c1", DefaultValue.constant(new CustomDefaultValue(Integer.MAX_VALUE)));
@@ -179,63 +183,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void dropColumnsEntry() {
-        DropColumnsEntry entry = new DropColumnsEntry(1, Set.of("C1", "C2"), "PUBLIC");
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void dropIndexEntry() {
-        DropIndexEntry entry = new DropIndexEntry(231, 23);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void removeIndexEntry() {
-        RemoveIndexEntry entry = new RemoveIndexEntry(231);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void dropTableEntry() {
-        DropTableEntry entry = new DropTableEntry(23, "PUBLIC");
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void dropZoneEntry() {
-        DropZoneEntry entry = new DropZoneEntry(1);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void makeIndexAvailableEntry() {
-        MakeIndexAvailableEntry entry = new MakeIndexAvailableEntry(321);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void startBuildingIndexEntry() {
-        StartBuildingIndexEntry entry = new StartBuildingIndexEntry(321);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void newColumnsEntry() {
+    private void checkNewColumnsEntry() {
         CatalogTableColumnDescriptor columnDescriptor1 = newCatalogTableColumnDescriptor("c1", DefaultValue.constant(null));
         CatalogTableColumnDescriptor columnDescriptor2 = newCatalogTableColumnDescriptor("c2", DefaultValue.functionCall("func"));
 
@@ -246,7 +194,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void newIndexEntry() {
+    private void checkNewIndexEntry() {
         CatalogSortedIndexDescriptor sortedIndexDescriptor = newSortedIndexDescriptor("idx1");
         CatalogHashIndexDescriptor hashIndexDescriptor = newHashIndexDescriptor("idx2");
 
@@ -258,7 +206,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void newTableEntry() {
+    private void checkNewTableEntry() {
         CatalogTableColumnDescriptor col1 = newCatalogTableColumnDescriptor("c0", null);
         CatalogTableColumnDescriptor col2 = newCatalogTableColumnDescriptor("c1", null);
         CatalogTableColumnDescriptor col3 = newCatalogTableColumnDescriptor("c3", null);
@@ -280,7 +228,7 @@
         assertSame(deserializedEntry.descriptor().primaryKeyColumns(), deserializedEntry.descriptor().colocationColumns());
     }
 
-    private void newSystemViewEntry() {
+    private void checkNewSystemViewEntry() {
         CatalogTableColumnDescriptor col1 = newCatalogTableColumnDescriptor("c1", null);
         CatalogTableColumnDescriptor col2 = newCatalogTableColumnDescriptor("c2", null);
 
@@ -297,23 +245,7 @@
         assertVersionedUpdate(update, serialize(update));
     }
 
-    private void renameTableEntry() {
-        RenameTableEntry entry = new RenameTableEntry(1, "newName");
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void objectIdGenUpdateEntry() {
-        ObjectIdGenUpdateEntry entry = new ObjectIdGenUpdateEntry(Integer.MAX_VALUE);
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
-    private void snapshotEntry() {
+    private void checkSnapshotEntry() {
         CatalogTableColumnDescriptor col1 = newCatalogTableColumnDescriptor("c1", null);
         CatalogTableColumnDescriptor col2 = newCatalogTableColumnDescriptor("c2", null);
 
@@ -337,28 +269,28 @@
         CatalogStorageProfilesDescriptor profiles =
                 new CatalogStorageProfilesDescriptor(List.of(new CatalogStorageProfileDescriptor("default")));
 
+        CatalogZoneDescriptor zone1 = newCatalogZoneDescriptor("zone1", profiles);
+
         SnapshotEntry entry = new SnapshotEntry(new Catalog(2, 0L, 1,
-                List.of(newCatalogZoneDescriptor("zone1", profiles)),
-                List.of(new CatalogSchemaDescriptor(1, "desc", tables, indexes, views, 1))));
+                List.of(zone1),
+                List.of(new CatalogSchemaDescriptor(1, "desc", tables, indexes, views, 1)), zone1.id()));
 
         SnapshotEntry deserialized = (SnapshotEntry) marshaller.unmarshall(marshaller.marshall(entry));
 
         BDDAssertions.assertThat(deserialized).usingRecursiveComparison().isEqualTo(entry);
     }
 
-    private void renameIndexEntry() {
-        var entry = new RenameIndexEntry(1, "newName");
-
-        VersionedUpdate update = newVersionedUpdate(entry);
-
-        assertVersionedUpdate(update, serialize(update));
-    }
-
     private VersionedUpdate serialize(VersionedUpdate update) {
         byte[] bytes = marshaller.marshall(update);
         return (VersionedUpdate) marshaller.unmarshall(bytes);
     }
 
+    private void checkSerialization(UpdateEntry ... entry) {
+        VersionedUpdate update = newVersionedUpdate(entry);
+
+        assertVersionedUpdate(update, serialize(update));
+    }
+
     private static void assertVersionedUpdate(VersionedUpdate expected, VersionedUpdate update) {
         assertThat(update.version(), is(expected.version()));
         assertThat(update.delayDurationMs(), is(expected.delayDurationMs()));
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
index 5e00692..817da4e 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
@@ -37,6 +37,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import org.apache.ignite.internal.catalog.Catalog;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.catalog.storage.UpdateLog.OnUpdateHandler;
 import org.apache.ignite.internal.catalog.storage.VersionedUpdate.VersionedUpdateSerializer;
 import org.apache.ignite.internal.catalog.storage.serialization.CatalogEntrySerializerProvider;
@@ -322,6 +323,7 @@
         Catalog catalog = Mockito.mock(Catalog.class);
 
         Mockito.when(catalog.version()).thenReturn(version);
+        Mockito.when(catalog.defaultZone()).thenReturn(Mockito.mock(CatalogZoneDescriptor.class));
 
         return new SnapshotEntry(catalog);
     }
diff --git a/modules/catalog/src/testFixtures/java/org/apache/ignite/internal/catalog/BaseCatalogManagerTest.java b/modules/catalog/src/testFixtures/java/org/apache/ignite/internal/catalog/BaseCatalogManagerTest.java
index f9a0b14..ed12aca 100644
--- a/modules/catalog/src/testFixtures/java/org/apache/ignite/internal/catalog/BaseCatalogManagerTest.java
+++ b/modules/catalog/src/testFixtures/java/org/apache/ignite/internal/catalog/BaseCatalogManagerTest.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.catalog;
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.columnParams;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.columnParamsBuilder;
 import static org.apache.ignite.internal.catalog.commands.DefaultValue.constant;
@@ -204,7 +203,6 @@
 
         return CreateTableCommand.builder()
                 .schemaName(DEFAULT_SCHEMA_NAME)
-                .zone(DEFAULT_ZONE_NAME)
                 .tableName(tableName)
                 .columns(columns)
                 .primaryKey(primaryKey)
diff --git a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
index adf2638..aef3470 100644
--- a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
+++ b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
@@ -22,13 +22,13 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.stream.Collectors.toSet;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.IMMEDIATE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertDataNodesFromManager;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertLogicalTopologyInMetastorage;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertValueInStorage;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.createZone;
+import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.getDefaultZone;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesUtil.dataNodes;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesUtil.toDataNodesMap;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesUtil.zoneDataNodesKey;
@@ -77,6 +77,7 @@
 import org.apache.ignite.internal.BaseIgniteRestartTest;
 import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.catalog.CatalogManagerImpl;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.catalog.storage.UpdateLogImpl;
 import org.apache.ignite.internal.cluster.management.ClusterManagementGroupManager;
 import org.apache.ignite.internal.cluster.management.raft.TestClusterStateStorage;
@@ -123,7 +124,7 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Tests for checking {@link DistributionZoneManager} behavior after node's restart.
@@ -360,14 +361,14 @@
         assertEquals(nodeAttributesBeforeRestart, nodeAttributesAfterRestart);
     }
 
-    @ParameterizedTest
-    @MethodSource("provideArgumentsRestartTests")
-    public void testTopologyAugmentationMapRestoredAfterRestart(String zoneName) throws Exception {
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    public void testTopologyAugmentationMapRestoredAfterRestart(boolean defaultZone) throws Exception {
         PartialNode node = startPartialNode(0);
 
         node.logicalTopology().putNode(A);
 
-        createZoneOrAlterDefaultZone(node, zoneName, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE);
+        String zoneName = createZoneOrAlterDefaultZone(node, defaultZone, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE);
 
         node.logicalTopology().putNode(B);
         node.logicalTopology().putNode(C);
@@ -453,7 +454,7 @@
 
         assertValueInStorage(metastore, zonesLastHandledTopology(), ByteUtils::fromBytes, logicalTopology, TIMEOUT_MILLIS);
 
-        int zoneId = getZoneId(node, DEFAULT_ZONE_NAME);
+        int zoneId = getDefaultZoneId(node);
 
         assertDataNodesFromManager(
                 distributionZoneManager,
@@ -543,7 +544,7 @@
 
         assertValueInStorage(metastore, zonesLastHandledTopology(), ByteUtils::fromBytes, newLogicalTopology, TIMEOUT_MILLIS);
 
-        int zoneId = getZoneId(node, DEFAULT_ZONE_NAME);
+        int zoneId = getDefaultZoneId(node);
 
         assertDataNodesFromManager(
                 distributionZoneManager,
@@ -573,7 +574,7 @@
 
         assertTrue(waitForCondition(() -> logicalTopology.equals(finalDistributionZoneManager.logicalTopology()), TIMEOUT_MILLIS));
 
-        int zoneId = getZoneId(node, DEFAULT_ZONE_NAME);
+        int zoneId = getDefaultZoneId(node);
 
         assertValueInStorage(
                 metastore,
@@ -619,12 +620,12 @@
         assertThat(metastore.get(new ByteArray(dataNodeKey[0])).thenApply(Entry::tombstone), willBe(true));
     }
 
-    @ParameterizedTest
-    @MethodSource("provideArgumentsRestartTests")
-    public void testLocalDataNodesAreRestoredAfterRestart(String zoneName) throws Exception {
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    public void testLocalDataNodesAreRestoredAfterRestart(boolean defaultZone) throws Exception {
         PartialNode node = startPartialNode(0);
 
-        createZoneOrAlterDefaultZone(node, zoneName, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE);
+        String zoneName = createZoneOrAlterDefaultZone(node, defaultZone, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE);
 
         node.logicalTopology().putNode(A);
         node.logicalTopology().putNode(B);
@@ -656,9 +657,9 @@
                 Set.of(A), TIMEOUT_MILLIS);
     }
 
-    @ParameterizedTest
-    @MethodSource("provideArgumentsRestartTests")
-    public void testScaleUpTimerIsRestoredAfterRestart(String zoneName) throws Exception {
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    public void testScaleUpTimerIsRestoredAfterRestart(boolean defaultZone) throws Exception {
         PartialNode node = startPartialNode(0);
 
         node.logicalTopology().putNode(A);
@@ -666,7 +667,7 @@
 
         assertLogicalTopologyInMetastorage(Set.of(A, B), metastore);
 
-        createZoneOrAlterDefaultZone(node, zoneName, 1, 1);
+        String zoneName = createZoneOrAlterDefaultZone(node, defaultZone, 1, 1);
 
         int zoneId = getZoneId(node, zoneName);
 
@@ -726,9 +727,9 @@
         );
     }
 
-    @ParameterizedTest
-    @MethodSource("provideArgumentsRestartTests")
-    public void testScaleDownTimerIsRestoredAfterRestart(String zoneName) throws Exception {
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    public void testScaleDownTimerIsRestoredAfterRestart(boolean defaultZone) throws Exception {
         PartialNode node = startPartialNode(0);
 
         node.logicalTopology().putNode(A);
@@ -739,7 +740,7 @@
         DistributionZoneManager distributionZoneManager = getDistributionZoneManager(node);
         CatalogManager catalogManager = getCatalogManager(node);
 
-        createZoneOrAlterDefaultZone(node, zoneName, 1, 1);
+        String zoneName = createZoneOrAlterDefaultZone(node, defaultZone, 1, 1);
 
         int zoneId = getZoneId(node, zoneName);
 
@@ -787,22 +788,21 @@
         );
     }
 
-    private static String[] provideArgumentsRestartTests() {
-        return new String[]{DEFAULT_ZONE_NAME, ZONE_NAME};
-    }
-
-    private static void createZoneOrAlterDefaultZone(
+    private static String createZoneOrAlterDefaultZone(
             PartialNode node,
-            String zoneName,
+            boolean useDefaultZone,
             int scaleUp,
             int scaleDown
     ) throws Exception {
-        if (zoneName.equals(DEFAULT_ZONE_NAME)) {
-            alterZone(node, DEFAULT_ZONE_NAME, scaleUp, scaleDown, null);
+        String zoneName;
 
-            int defaultZoneId = getZoneId(node, DEFAULT_ZONE_NAME);
+        if (useDefaultZone) {
+            CatalogZoneDescriptor defaultZone = getDefaultZone(getCatalogManager(node), node.clock().nowLong());
+            zoneName = defaultZone.name();
 
-            ZoneState zoneState = getDistributionZoneManager(node).zonesState().get(defaultZoneId);
+            alterZone(node, zoneName, scaleUp, scaleDown, null);
+
+            ZoneState zoneState = getDistributionZoneManager(node).zonesState().get(defaultZone.id());
 
             // This is needed because we want to wait for the end of scale up/down triggered by altering delays.
             if (zoneState.scaleUpTask() != null) {
@@ -813,8 +813,12 @@
                 assertTrue(waitForCondition(() -> zoneState.scaleDownTask().isDone(), TIMEOUT_MILLIS));
             }
         } else {
-            createZone(getCatalogManager(node), ZONE_NAME, scaleUp, scaleDown, null, DEFAULT_STORAGE_PROFILE);
+            zoneName = ZONE_NAME;
+
+            createZone(getCatalogManager(node), zoneName, scaleUp, scaleDown, null, DEFAULT_STORAGE_PROFILE);
         }
+
+        return zoneName;
     }
 
     private void blockMetaStorageUpdates(MetaStorageManager metaStorageManager) {
@@ -856,6 +860,10 @@
         return DistributionZonesTestUtil.getZoneId(getCatalogManager(node), zoneName, node.clock().nowLong());
     }
 
+    private static int getDefaultZoneId(PartialNode node) {
+        return DistributionZonesTestUtil.getDefaultZone(getCatalogManager(node), node.clock().nowLong()).id();
+    }
+
     private static void alterZone(
             PartialNode node,
             String zoneName,
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/BaseDistributionZoneManagerTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/BaseDistributionZoneManagerTest.java
index 40e2783..b671a9f 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/BaseDistributionZoneManagerTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/BaseDistributionZoneManagerTest.java
@@ -37,6 +37,7 @@
 import java.util.function.Consumer;
 import java.util.function.LongFunction;
 import org.apache.ignite.internal.catalog.CatalogManager;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.cluster.management.ClusterManagementGroupManager;
 import org.apache.ignite.internal.cluster.management.raft.ClusterStateStorage;
 import org.apache.ignite.internal.cluster.management.raft.TestClusterStateStorage;
@@ -199,4 +200,8 @@
     protected int getZoneId(String zoneName) {
         return DistributionZonesTestUtil.getZoneIdStrict(catalogManager, zoneName, clock.nowLong());
     }
+
+    protected CatalogZoneDescriptor getDefaultZone() {
+        return DistributionZonesTestUtil.getDefaultZone(catalogManager, clock.nowLong());
+    }
 }
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerAlterFilterTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerAlterFilterTest.java
index d8d6427..1e0efb9 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerAlterFilterTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerAlterFilterTest.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.distributionzones;
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.IMMEDIATE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertDataNodesFromManager;
@@ -39,7 +38,7 @@
 import org.apache.ignite.internal.network.ClusterNodeImpl;
 import org.apache.ignite.network.NetworkAddress;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Test scenarios when filter of a zone is altered and immediate scale up is triggered.
@@ -81,10 +80,10 @@
      *
      * @throws Exception If failed.
      */
-    @ParameterizedTest
-    @MethodSource("provideArgumentsForFilterAlteringTests")
-    void testAlterFilter(String zoneName) throws Exception {
-        preparePrerequisites(zoneName);
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    void testAlterFilter(boolean defaultZone) throws Exception {
+        String zoneName = preparePrerequisites(defaultZone);
 
         // Change timers to infinite, add new node, alter filter and check that data nodes was changed.
         alterZone(zoneName, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, FILTER);
@@ -105,10 +104,10 @@
      *
      * @throws Exception If failed.
      */
-    @ParameterizedTest
-    @MethodSource("provideArgumentsForFilterAlteringTests")
-    void testAlterFilterToEmtpyNodes(String zoneName) throws Exception {
-        preparePrerequisites(zoneName);
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    void testAlterFilterToEmtpyNodes(boolean defaultZone) throws Exception {
+        String zoneName = preparePrerequisites(defaultZone);
 
         // Change timers to infinite, add new node, alter filter and check that data nodes was changed.
         alterZone(zoneName, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, FILTER);
@@ -129,10 +128,10 @@
      *
      * @throws Exception If failed.
      */
-    @ParameterizedTest
-    @MethodSource("provideArgumentsForFilterAlteringTests")
-    void testAlterFilterDoNotAffectScaleDown(String zoneName) throws Exception {
-        preparePrerequisites(IMMEDIATE_TIMER_VALUE, COMMON_UP_DOWN_AUTOADJUST_TIMER_SECONDS, zoneName);
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    void testAlterFilterDoNotAffectScaleDown(boolean defaultZone) throws Exception {
+        String zoneName = preparePrerequisites(IMMEDIATE_TIMER_VALUE, COMMON_UP_DOWN_AUTOADJUST_TIMER_SECONDS, defaultZone);
 
         topology.putNode(D);
 
@@ -177,10 +176,10 @@
      *
      * @throws Exception If failed.
      */
-    @ParameterizedTest
-    @MethodSource("provideArgumentsForFilterAlteringTests")
-    void testNodeAddedWhileAlteringFilter(String zoneName) throws Exception {
-        preparePrerequisites(COMMON_UP_DOWN_AUTOADJUST_TIMER_SECONDS, INFINITE_TIMER_VALUE, zoneName);
+    @ParameterizedTest(name = "defaultZone={0}")
+    @ValueSource(booleans = {true, false})
+    void testNodeAddedWhileAlteringFilter(boolean defaultZone) throws Exception {
+        String zoneName = preparePrerequisites(COMMON_UP_DOWN_AUTOADJUST_TIMER_SECONDS, INFINITE_TIMER_VALUE, defaultZone);
 
         int zoneId = getZoneId(zoneName);
 
@@ -244,8 +243,8 @@
      *
      * @throws Exception If failed
      */
-    private void preparePrerequisites(String zoneName) throws Exception {
-        preparePrerequisites(IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, zoneName);
+    private String preparePrerequisites(boolean defaultZone) throws Exception {
+        return preparePrerequisites(IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, defaultZone);
     }
 
     /**
@@ -254,24 +253,26 @@
      *
      * @throws Exception If failed
      */
-    private void preparePrerequisites(int scaleUpTimer, int scaleDownTimer, String zoneName) throws Exception {
+    private String preparePrerequisites(int scaleUpTimer, int scaleDownTimer, boolean defaultZone) throws Exception {
         startDistributionZoneManager();
 
         topology.putNode(A);
         topology.putNode(B);
         topology.putNode(C);
 
-        if (DEFAULT_ZONE_NAME.equals(zoneName)) {
-            alterZone(DEFAULT_ZONE_NAME, scaleUpTimer, scaleDownTimer, FILTER);
+        String zoneName;
+
+        if (defaultZone) {
+            zoneName = getDefaultZone().name();
+            alterZone(zoneName, scaleUpTimer, scaleDownTimer, FILTER);
         } else {
+            zoneName = ZONE_NAME;
             createZone(ZONE_NAME, scaleUpTimer, scaleDownTimer, FILTER, DEFAULT_STORAGE_PROFILE);
         }
 
         assertDataNodesFromManager(distributionZoneManager, metaStorageManager::appliedRevision, catalogManager::latestCatalogVersion,
                 getZoneId(zoneName), Set.of(A, C), ZONE_MODIFICATION_AWAIT_TIMEOUT);
-    }
 
-    private static String[] provideArgumentsForFilterAlteringTests() {
-        return new String[]{DEFAULT_ZONE_NAME, ZONE_NAME};
+        return zoneName;
     }
 }
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
index 260a191..bbc272c 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerConfigurationChangesTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.distributionzones;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertDataNodesFromLogicalNodesInStorage;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertLogicalTopology;
@@ -55,7 +54,7 @@
 
         assertLogicalTopology(nodes, keyValueStorage);
 
-        assertDataNodesFromLogicalNodesInStorage(getZoneId(DEFAULT_ZONE_NAME), nodes, keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(getDefaultZone().id(), nodes, keyValueStorage);
     }
 
     @Test
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpScaleDownTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpScaleDownTest.java
index 7c4f81d..292f797 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpScaleDownTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerScaleUpScaleDownTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.distributionzones;
 
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.IMMEDIATE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.assertDataNodesFromLogicalNodesInStorage;
@@ -44,6 +43,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.cluster.management.topology.api.LogicalNode;
 import org.apache.ignite.internal.distributionzones.DistributionZoneManager.ZoneState;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
@@ -87,7 +87,7 @@
 
         Set<LogicalNode> clusterNodes = Set.of(NODE_1);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = getDefaultZone().id();
 
         assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes, keyValueStorage);
 
@@ -117,13 +117,13 @@
     void testDataNodesPropagationAfterScaleUpTriggeredOnNewCluster() throws Exception {
         startDistributionZoneManager();
 
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
+        alterZone(getDefaultZone().name(), IMMEDIATE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, null, null);
 
         topology.putNode(NODE_1);
 
-        assertDataNodesFromLogicalNodesInStorage(getZoneId(DEFAULT_ZONE_NAME), Set.of(NODE_1), keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(getDefaultZone().id(), Set.of(NODE_1), keyValueStorage);
         assertDataNodesFromLogicalNodesInStorage(getZoneId(ZONE_NAME), Set.of(NODE_1), keyValueStorage);
     }
 
@@ -137,7 +137,7 @@
 
         Set<LogicalNode> clusterNodes = Set.of(NODE_1, NODE_2);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = getDefaultZone().id();
 
         assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes, keyValueStorage);
 
@@ -167,11 +167,11 @@
 
         Set<LogicalNode> clusterNodes = Set.of(NODE_1);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
 
-        assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes, keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(defaultZone.id(), clusterNodes, keyValueStorage);
 
-        alterZone(DEFAULT_ZONE_NAME, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
         topology.putNode(NODE_2);
 
@@ -179,9 +179,9 @@
 
         assertLogicalTopology(clusterNodes2, keyValueStorage);
 
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
-        assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes2, keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(defaultZone.id(), clusterNodes2, keyValueStorage);
     }
 
     @Test
@@ -194,11 +194,11 @@
 
         Set<LogicalNode> clusterNodes = Set.of(NODE_1, NODE_2);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
 
-        assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes, keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(defaultZone.id(), clusterNodes, keyValueStorage);
 
-        alterZone(DEFAULT_ZONE_NAME, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
         topology.removeNodes(Set.of(NODE_2));
 
@@ -206,9 +206,9 @@
 
         assertLogicalTopology(clusterNodes2, keyValueStorage);
 
-        alterZone(DEFAULT_ZONE_NAME, INFINITE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), INFINITE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
-        assertDataNodesFromLogicalNodesInStorage(defaultZoneId, clusterNodes2, keyValueStorage);
+        assertDataNodesFromLogicalNodesInStorage(defaultZone.id(), clusterNodes2, keyValueStorage);
     }
 
     @Test
@@ -472,7 +472,7 @@
 
         assertLogicalTopology(Set.of(NODE_1), keyValueStorage);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = getDefaultZone().id();
 
         assertDataNodesFromLogicalNodesInStorage(defaultZoneId, Set.of(NODE_1), keyValueStorage);
 
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/causalitydatanodes/DistributionZoneCausalityDataNodesTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/causalitydatanodes/DistributionZoneCausalityDataNodesTest.java
index 633673a..df0bb57 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/causalitydatanodes/DistributionZoneCausalityDataNodesTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/causalitydatanodes/DistributionZoneCausalityDataNodesTest.java
@@ -21,7 +21,6 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.stream.Collectors.toSet;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.IMMEDIATE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.events.CatalogEvent.ZONE_ALTER;
@@ -63,6 +62,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Stream;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.catalog.events.AlterZoneEventParameters;
 import org.apache.ignite.internal.catalog.events.CreateZoneEventParameters;
 import org.apache.ignite.internal.catalog.events.DropZoneEventParameters;
@@ -269,8 +269,11 @@
         // Create the zone with immediate timers.
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
+        int defaultZoneId = defaultZone.id();
+
         // Alter the zone with immediate timers.
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
         // Create logical topology with NODE_0 and NODE_1.
         topology.putNode(NODE_0);
@@ -278,7 +281,6 @@
         // Check that data nodes value of both zone is NODE_0 and NODE_1.
         long topologyRevision1 = putNodeInLogicalTopologyAndGetRevision(NODE_1, TWO_NODES);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
         int zoneId = getZoneId(ZONE_NAME);
 
         Set<String> dataNodes0 = distributionZoneManager.dataNodes(topologyRevision1, catalogManager.latestCatalogVersion(), defaultZoneId)
@@ -292,7 +294,7 @@
         // Alter zones with not immediate scale up timer.
         alterZone(ZONE_NAME, 1, IMMEDIATE_TIMER_VALUE, null);
 
-        alterZone(DEFAULT_ZONE_NAME, 1, IMMEDIATE_TIMER_VALUE, null);
+        alterZone(getDefaultZone().name(), 1, IMMEDIATE_TIMER_VALUE, null);
 
         // Test steps.
 
@@ -342,8 +344,10 @@
         // Create the zone with not immediate scale down timer.
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, 1, null);
 
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
+
         // Alter the zone with not immediate scale down timer.
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, 1, null);
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, 1, null);
 
         // Create logical topology with NODE_0 and NODE_1.
         topology.putNode(NODE_0);
@@ -351,7 +355,7 @@
         // Check that data nodes value of both zone is NODE_0 and NODE_1.
         long topologyRevision1 = putNodeInLogicalTopologyAndGetRevision(NODE_1, TWO_NODES);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = defaultZone.id();
         int zoneId = getZoneId(ZONE_NAME);
 
         Set<String> dataNodes0 = distributionZoneManager.dataNodes(topologyRevision1, catalogManager.latestCatalogVersion(), defaultZoneId)
@@ -544,7 +548,7 @@
         int zoneId2 = getZoneId(ZONE_NAME_2);
         int zoneId3 = getZoneId(ZONE_NAME_3);
         int zoneId4 = getZoneId(ZONE_NAME_4);
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = getDefaultZone().id();
 
         Set<String> dataNodes = distributionZoneManager.dataNodes(
                 metaStorageManager.appliedRevision(),
@@ -791,14 +795,16 @@
         // Create the zone with immediate timers.
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
+        int defaultZoneId = defaultZone.id();
+
         // Alter the zone with immediate timers.
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
         // Create logical topology with NODE_0.
         // Check that data nodes value of both zone is NODE_0.
         long topologyRevision1 = putNodeInLogicalTopologyAndGetRevision(NODE_0, ONE_NODE);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
         int zoneId = getZoneId(ZONE_NAME);
 
         Set<String> dataNodes0 = distributionZoneManager.dataNodes(topologyRevision1, catalogManager.latestCatalogVersion(), defaultZoneId)
@@ -813,14 +819,14 @@
         alterZone(ZONE_NAME, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
         // Alter the zone with infinite timers.
-        alterZone(DEFAULT_ZONE_NAME, INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), INFINITE_TIMER_VALUE, INFINITE_TIMER_VALUE, null);
 
         // Test steps.
 
         String filter = "$[?($..* || @.region == 'US')]";
 
         // Change filter and get revision of this change.
-        long filterRevision0 = alterFilterAndGetRevision(DEFAULT_ZONE_NAME, filter);
+        long filterRevision0 = alterFilterAndGetRevision(defaultZone.name(), filter);
         long filterRevision1 = alterFilterAndGetRevision(ZONE_NAME, filter);
 
         // Check that data nodes value of the the zone is NODE_0.
@@ -914,7 +920,7 @@
     /** Tests data nodes obtaining with wrong parameters throw an exception. */
     @Test
     void validationTest() {
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
+        int defaultZoneId = getDefaultZone().id();
 
         assertThrowsWithCause(
                 () -> distributionZoneManager.dataNodes(0, catalogManager.latestCatalogVersion(), defaultZoneId).get(TIMEOUT, MILLISECONDS),
@@ -947,10 +953,13 @@
      */
     @Test
     void simpleTopologyChanges() throws Exception {
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
+        int defaultZoneId = defaultZone.id();
+
         // Prerequisite.
 
         // Create zones with immediate timers.
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
@@ -961,7 +970,6 @@
         // Change logical topology. NODE_1 is added.
         long topologyRevision1 = putNodeInLogicalTopologyAndGetRevision(NODE_1, TWO_NODES);
 
-        int defaultZoneId = getZoneId(DEFAULT_ZONE_NAME);
         int zoneId = getZoneId(ZONE_NAME);
 
         Set<String> dataNodes1 = distributionZoneManager.dataNodes(topologyRevision0, catalogManager.latestCatalogVersion(), defaultZoneId)
@@ -1015,7 +1023,7 @@
         prepareZonesWithTwoDataNodes();
 
         Map<Integer, Set<String>> expectedDataNodes = new HashMap<>();
-        expectedDataNodes.put(getZoneId(DEFAULT_ZONE_NAME), Set.of(NODE_0.name(), NODE_1.name(), NODE_2.name()));
+        expectedDataNodes.put(getDefaultZone().id(), Set.of(NODE_0.name(), NODE_1.name(), NODE_2.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME), Set.of(NODE_0.name(), NODE_1.name(), NODE_2.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME_2), Set.of(NODE_0.name(), NODE_1.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME_3), Set.of(NODE_0.name(), NODE_1.name()));
@@ -1042,7 +1050,7 @@
         prepareZonesWithTwoDataNodes();
 
         Map<Integer, Set<String>> expectedDataNodes = new HashMap<>();
-        expectedDataNodes.put(getZoneId(DEFAULT_ZONE_NAME), Set.of(NODE_0.name()));
+        expectedDataNodes.put(getDefaultZone().id(), Set.of(NODE_0.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME), Set.of(NODE_0.name(), NODE_1.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME_2), Set.of(NODE_0.name()));
         expectedDataNodes.put(getZoneId(ZONE_NAME_3), Set.of(NODE_0.name(), NODE_1.name()));
@@ -1121,7 +1129,9 @@
      * Added two nodes in topology and assert that data nodes of zones are contains all topology nodes.
      */
     private void prepareZonesWithTwoDataNodes() throws Exception {
-        alterZone(DEFAULT_ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
+        CatalogZoneDescriptor defaultZone = getDefaultZone();
+
+        alterZone(defaultZone.name(), IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
         createZone(ZONE_NAME, IMMEDIATE_TIMER_VALUE, IMMEDIATE_TIMER_VALUE, null);
 
@@ -1138,7 +1148,7 @@
         long topologyRevision = putNodeInLogicalTopologyAndGetRevision(NODE_1, TWO_NODES);
 
         Set<Integer> zoneIds = Set.of(
-                getZoneId(DEFAULT_ZONE_NAME),
+                defaultZone.id(),
                 getZoneId(ZONE_NAME),
                 getZoneId(ZONE_NAME_2),
                 getZoneId(ZONE_NAME_3),
diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/DistributionZoneRebalanceEngineTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/DistributionZoneRebalanceEngineTest.java
index a92a29e..372191d 100644
--- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/DistributionZoneRebalanceEngineTest.java
+++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/DistributionZoneRebalanceEngineTest.java
@@ -24,8 +24,8 @@
 import static org.apache.ignite.internal.affinity.AffinityUtils.calculateAssignmentForPartition;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.createTestCatalogManager;
+import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.getDefaultZone;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesTestUtil.getZoneIdStrict;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesUtil.toDataNodesMap;
 import static org.apache.ignite.internal.distributionzones.DistributionZonesUtil.zoneDataNodesKey;
@@ -457,7 +457,7 @@
 
             rebalanceEngine.start();
 
-            alterZone(DEFAULT_ZONE_NAME, 2);
+            alterZone(getDefaultZone(catalogManager, clock.nowLong()).name(), 2);
 
             assertTrue(waitForCondition(() -> keyValueStorage.get("assignments.pending.1_part_0".getBytes(UTF_8)) != null, 10_000));
         } finally {
diff --git a/modules/distribution-zones/src/testFixtures/java/org/apache/ignite/internal/distributionzones/DistributionZonesTestUtil.java b/modules/distribution-zones/src/testFixtures/java/org/apache/ignite/internal/distributionzones/DistributionZonesTestUtil.java
index 519ae87..415b583 100644
--- a/modules/distribution-zones/src/testFixtures/java/org/apache/ignite/internal/distributionzones/DistributionZonesTestUtil.java
+++ b/modules/distribution-zones/src/testFixtures/java/org/apache/ignite/internal/distributionzones/DistributionZonesTestUtil.java
@@ -40,6 +40,7 @@
 import java.util.concurrent.TimeoutException;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogCommand;
 import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.catalog.CatalogService;
@@ -570,6 +571,15 @@
         return zone == null ? null : zone.id();
     }
 
+    /** Returns default distribution zone. */
+    public static CatalogZoneDescriptor getDefaultZone(CatalogService catalogService, long timestamp) {
+        Catalog catalog = catalogService.catalog(catalogService.activeCatalogVersion(timestamp));
+
+        Objects.requireNonNull(catalog);
+
+        return catalog.defaultZone();
+    }
+
     /**
      * Returns distributed zone ID form catalog.
      *
diff --git a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerTest.java b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerTest.java
index 4f8c5e0..3157a53 100644
--- a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerTest.java
+++ b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerTest.java
@@ -20,7 +20,6 @@
 import static java.util.concurrent.CompletableFuture.allOf;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.createTestCatalogManager;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.pkIndexName;
 import static org.apache.ignite.internal.catalog.descriptors.CatalogIndexStatus.AVAILABLE;
@@ -48,6 +47,7 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
+import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.catalog.commands.AlterZoneCommand;
 import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
@@ -98,7 +98,11 @@
         assertThat(allOf(metaStorageManager.start(), catalogManager.start()), willCompleteSuccessfully());
         assertThat(metaStorageManager.deployWatches(), willCompleteSuccessfully());
 
-        CatalogZoneDescriptor zoneDescriptor = catalogManager.zone(DEFAULT_ZONE_NAME, clock.nowLong());
+        Catalog catalog = catalogManager.catalog(catalogManager.activeCatalogVersion(clock.nowLong()));
+
+        assert catalog != null;
+
+        CatalogZoneDescriptor zoneDescriptor = catalog.defaultZone();
 
         assertNotNull(zoneDescriptor);
 
@@ -346,8 +350,12 @@
     }
 
     private void changePartitionCountInCatalog(int newPartitions) {
+        Catalog catalog = catalogManager.catalog(catalogManager.activeCatalogVersion(clock.nowLong()));
+
+        assert catalog != null;
+
         assertThat(
-                catalogManager.execute(AlterZoneCommand.builder().zoneName(DEFAULT_ZONE_NAME).partitions(newPartitions).build()),
+                catalogManager.execute(AlterZoneCommand.builder().zoneName(catalog.defaultZone().name()).partitions(newPartitions).build()),
                 willCompleteSuccessfully()
         );
 
diff --git a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
index 80b3815..1475c22 100644
--- a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
+++ b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
@@ -21,7 +21,6 @@
 import static java.util.concurrent.CompletableFuture.completedFuture;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.CatalogTestUtils.createTestCatalogManager;
 import static org.apache.ignite.internal.index.TestIndexManagementUtils.COLUMN_NAME;
 import static org.apache.ignite.internal.index.TestIndexManagementUtils.INDEX_NAME;
@@ -45,10 +44,12 @@
 import java.nio.file.Path;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ForkJoinPool;
 import java.util.function.LongFunction;
+import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
@@ -173,7 +174,8 @@
     }
 
     private TableViewInternal newMockTable(int tableId) {
-        CatalogZoneDescriptor zone = catalogManager.zone(DEFAULT_ZONE_NAME, clock.nowLong());
+        Catalog catalog = Objects.requireNonNull(catalogManager.catalog(catalogManager.activeCatalogVersion(clock.nowLong())));
+        CatalogZoneDescriptor zone = catalog.defaultZone();
 
         assertNotNull(zone);
 
diff --git a/modules/index/src/test/java/org/apache/ignite/internal/index/TestIndexManagementUtils.java b/modules/index/src/test/java/org/apache/ignite/internal/index/TestIndexManagementUtils.java
index 66e8b3d..d8992a9 100644
--- a/modules/index/src/test/java/org/apache/ignite/internal/index/TestIndexManagementUtils.java
+++ b/modules/index/src/test/java/org/apache/ignite/internal/index/TestIndexManagementUtils.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.index;
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.pkIndexName;
 import static org.apache.ignite.internal.catalog.descriptors.CatalogIndexStatus.AVAILABLE;
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition;
@@ -76,7 +75,7 @@
         TableTestUtils.createTable(
                 catalogManager,
                 DEFAULT_SCHEMA_NAME,
-                DEFAULT_ZONE_NAME,
+                null,
                 tableName,
                 List.of(ColumnParams.builder().name(columnName).type(INT32).build()),
                 List.of(columnName)
diff --git a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/ClusterPerClassIntegrationTest.java b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/ClusterPerClassIntegrationTest.java
index d165a79..006d502 100644
--- a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/ClusterPerClassIntegrationTest.java
+++ b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/ClusterPerClassIntegrationTest.java
@@ -38,8 +38,8 @@
 import org.apache.ignite.Ignite;
 import org.apache.ignite.InitParametersBuilder;
 import org.apache.ignite.internal.app.IgniteImpl;
+import org.apache.ignite.internal.catalog.Catalog;
 import org.apache.ignite.internal.catalog.CatalogManager;
-import org.apache.ignite.internal.catalog.CatalogService;
 import org.apache.ignite.internal.catalog.descriptors.CatalogIndexDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.hlc.HybridClock;
@@ -154,9 +154,10 @@
     protected static void dropAllZonesExceptDefaultOne() {
         CatalogManager catalogManager = CLUSTER.aliveNode().catalogManager();
         int latestCatalogVersion = catalogManager.latestCatalogVersion();
+        Catalog catalog = Objects.requireNonNull(catalogManager.catalog(latestCatalogVersion));
         for (CatalogZoneDescriptor z : catalogManager.zones(latestCatalogVersion)) {
             String zoneName = z.name();
-            if (CatalogService.DEFAULT_ZONE_NAME.equals(zoneName)) {
+            if (zoneName.equals(catalog.defaultZone().name())) {
                 continue;
             }
             sql("DROP ZONE " + zoneName);
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
index 67bc59f..1262159 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
@@ -19,7 +19,6 @@
 
 import static org.apache.ignite.internal.TestWrappers.unwrapTableViewInternal;
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.SYSTEM_SCHEMAS;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
 import static org.apache.ignite.internal.sql.engine.util.SqlTestUtils.assertThrowsSqlException;
@@ -36,6 +35,8 @@
 import java.util.stream.Stream;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.ignite.internal.app.IgniteImpl;
+import org.apache.ignite.internal.catalog.Catalog;
+import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
 import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.lang.IgniteStringBuilder;
@@ -416,17 +417,18 @@
 
         CatalogTableDescriptor table = node.catalogManager().table("TEST", node.clock().nowLong());
 
-        CatalogZoneDescriptor zone = node.catalogManager().zone(DEFAULT_ZONE_NAME, node.clock().nowLong());
+        CatalogZoneDescriptor zone = getDefaultZone(node);
 
         assertEquals(zone.storageProfiles().defaultProfile().storageProfile(), table.storageProfile());
     }
 
-
     @Test
     public void tableStorageProfileExceptionIfZoneDoesntContainProfile() {
+        String defaultZoneName = getDefaultZone(CLUSTER.aliveNode()).name();
+
         assertThrowsSqlException(
                 STMT_VALIDATION_ERR,
-                "Zone with name '" + DEFAULT_ZONE_NAME + "' does not contain table's storage profile",
+                "Zone with name '" + defaultZoneName + "' does not contain table's storage profile",
                 () -> sql("CREATE TABLE TEST(ID INT PRIMARY KEY, VAL0 INT) WITH STORAGE_PROFILE='profile1'")
         );
     }
@@ -441,9 +443,9 @@
 
         assertEquals(DEFAULT_STORAGE_PROFILE, table.storageProfile());
 
-        CatalogZoneDescriptor zone = node.catalogManager().zone(DEFAULT_ZONE_NAME, node.clock().nowLong());
+        CatalogZoneDescriptor defaultZone = getDefaultZone(node);
 
-        assertEquals(zone.storageProfiles().defaultProfile().storageProfile(), table.storageProfile());
+        assertEquals(defaultZone.storageProfiles().defaultProfile().storageProfile(), table.storageProfile());
     }
 
     @Test
@@ -479,4 +481,13 @@
 
         sql("DROP ZONE ZONE1");
     }
+
+    private static CatalogZoneDescriptor getDefaultZone(IgniteImpl node) {
+        CatalogManager catalogManager = node.catalogManager();
+        Catalog catalog = catalogManager.catalog(catalogManager.activeCatalogVersion(node.clock().nowLong()));
+
+        assert catalog != null;
+
+        return catalog.defaultZone();
+    }
 }
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
index ee1cc44..5739c16 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
@@ -19,11 +19,20 @@
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
+import java.util.Objects;
 import org.apache.ignite.internal.ClusterPerClassIntegrationTest;
-import org.apache.ignite.internal.catalog.CatalogService;
+import org.apache.ignite.internal.app.IgniteImpl;
+import org.apache.ignite.internal.catalog.Catalog;
+import org.apache.ignite.internal.catalog.CatalogManager;
+import org.apache.ignite.internal.catalog.DistributionZoneCantBeDroppedValidationException;
 import org.apache.ignite.internal.catalog.DistributionZoneExistsValidationException;
 import org.apache.ignite.internal.catalog.DistributionZoneNotFoundValidationException;
+import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
+import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
@@ -37,6 +46,7 @@
     @AfterEach
     void tearDown() {
         tryToDropZone(ZONE_NAME, false);
+        dropAllTables();
     }
 
     @Test
@@ -102,6 +112,53 @@
     }
 
     @Test
+    @SuppressWarnings("ThrowableNotThrown")
+    public void testRenameDefaultZone() {
+        CatalogZoneDescriptor defaultZone = latestActiveCatalog().defaultZone();
+        int originalDefaultZoneId = defaultZone.id();
+
+        sql("CREATE TABLE T1(ID INT PRIMARY KEY)");
+
+        String initialDefaultZoneName = defaultZone.name();
+        String initialDefaultZoneNameQuoted = '\"' + initialDefaultZoneName + '\"';
+        String newDefaultZoneName = ZONE_NAME;
+        tryToRenameZone(initialDefaultZoneNameQuoted, newDefaultZoneName, true);
+
+        defaultZone = latestActiveCatalog().defaultZone();
+        assertEquals(newDefaultZoneName, defaultZone.name());
+        assertEquals(originalDefaultZoneId, defaultZone.id());
+
+        IgniteTestUtils.assertThrowsWithCause(
+                () -> tryToDropZone(newDefaultZoneName, false),
+                DistributionZoneCantBeDroppedValidationException.class,
+                "Default distribution zone can't be dropped"
+        );
+
+        IgniteTestUtils.assertThrowsWithCause(
+                () -> tryToDropZone(initialDefaultZoneNameQuoted, true),
+                DistributionZoneNotFoundValidationException.class,
+                format("Distribution zone with name '{}' not found", initialDefaultZoneName)
+        );
+
+        // Nothing prevents us from creating another zone with the original name.
+        tryToCreateZone(initialDefaultZoneNameQuoted, true);
+
+        sql("CREATE TABLE T2(ID INT PRIMARY KEY)");
+
+        Catalog catalog = latestActiveCatalog();
+
+        assertEquals(2, catalog.tables().stream().filter(tab -> tab.zoneId() == originalDefaultZoneId).count());
+
+        CatalogZoneDescriptor initialDefaultZone = catalog.zone(initialDefaultZoneName);
+        assertNotNull(initialDefaultZone);
+        assertNotEquals(initialDefaultZone.id(), catalog.defaultZone().id());
+
+        // Revert changes.
+        tryToDropZone(initialDefaultZoneNameQuoted, true);
+        tryToRenameZone(newDefaultZoneName, initialDefaultZoneNameQuoted, true);
+    }
+
+    @Test
     public void testAlterZone() {
         tryToCreateZone(ZONE_NAME, true);
 
@@ -117,9 +174,79 @@
     }
 
     @Test
-    public void testSetDefaultZoneThatIsAlreadyDefaultDoesNotThrowException() {
-        // TODO https://issues.apache.org/jira/browse/IGNITE-19687 The test should not only check the zone named "Default".
-        sql(format("ALTER ZONE \"{}\" SET DEFAULT", CatalogService.DEFAULT_ZONE_NAME));
+    @SuppressWarnings("ThrowableNotThrown")
+    public void testChangeDefaultZone() {
+        String initialDefaultZoneName = latestActiveCatalog().defaultZone().name();
+        String newDefaultZoneName = "test_zone";
+
+        // Set default non-existing zone.
+        {
+            IgniteTestUtils.assertThrowsWithCause(
+                    () -> tryToSetDefaultZone(newDefaultZoneName, true),
+                    DistributionZoneNotFoundValidationException.class,
+                    format("Distribution zone with name '{}' not found", newDefaultZoneName.toUpperCase())
+            );
+
+            // No error expected with IF EXISTS condition.
+            tryToSetDefaultZone(newDefaultZoneName, false);
+
+            // Nothing has changed.
+            assertEquals(initialDefaultZoneName, latestActiveCatalog().defaultZone().name());
+        }
+
+        // Set existing zone as default.
+        {
+            tryToCreateZone(newDefaultZoneName, true);
+            tryToSetDefaultZone(newDefaultZoneName, true);
+
+            assertEquals(newDefaultZoneName.toUpperCase(), latestActiveCatalog().defaultZone().name());
+
+            // Set the default zone that is already set by default does not produce any errors.
+            tryToSetDefaultZone(newDefaultZoneName, true);
+
+            IgniteTestUtils.assertThrowsWithCause(
+                    () -> tryToDropZone(newDefaultZoneName, false),
+                    DistributionZoneCantBeDroppedValidationException.class,
+                    "Default distribution zone can't be dropped"
+            );
+        }
+
+        // Create table in a new zone.
+        {
+            sql("CREATE TABLE t1(id INT PRIMARY KEY)");
+
+            Catalog catalog = latestActiveCatalog();
+
+            CatalogTableDescriptor tab = catalog.tables().stream()
+                    .filter(t -> "T1".equals(t.name())).findFirst().orElseThrow();
+
+            assertEquals(catalog.defaultZone().id(), tab.zoneId());
+        }
+
+        // Re-create initial default zone.
+        {
+            String quotedZoneName = "\"" + initialDefaultZoneName + "\"";
+
+            tryToDropZone(quotedZoneName, true);
+            tryToCreateZone(quotedZoneName, true);
+            tryToSetDefaultZone(quotedZoneName, true);
+
+            sql("CREATE TABLE t2(id INT PRIMARY KEY)");
+
+            Catalog catalog = latestActiveCatalog();
+            assertEquals(initialDefaultZoneName, catalog.defaultZone().name());
+
+            CatalogTableDescriptor tab = catalog.tables().stream()
+                    .filter(t -> "T2".equals(t.name())).findFirst().orElseThrow();
+            assertEquals(catalog.defaultZone().id(), tab.zoneId());
+        }
+
+        // Drop non-default zone.
+        {
+            sql("DROP TABLE T1");
+
+            tryToDropZone(newDefaultZoneName, true);
+        }
     }
 
     private static void tryToCreateZone(String zoneName, boolean failIfExists) {
@@ -142,4 +269,20 @@
                 failIfNotExists ? zoneName : "IF EXISTS " + zoneName, dataNodesAutoAdjust
         ));
     }
+
+    private static void tryToSetDefaultZone(String zoneName, boolean failIfNotExists) {
+        sql(format(
+                "ALTER ZONE {} SET DEFAULT ",
+                failIfNotExists ? zoneName : "IF EXISTS " + zoneName
+        ));
+    }
+
+    @SuppressWarnings("resource")
+    private static Catalog latestActiveCatalog() {
+        IgniteImpl node = CLUSTER.aliveNode();
+        CatalogManager catalogManager = node.catalogManager();
+        Catalog catalog = catalogManager.catalog(catalogManager.activeCatalogVersion(node.clock().nowLong()));
+
+        return Objects.requireNonNull(catalog);
+    }
 }
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZonesSystemViewTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZonesSystemViewTest.java
index da5715b..2e6c45d 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZonesSystemViewTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZonesSystemViewTest.java
@@ -18,13 +18,16 @@
 package org.apache.ignite.internal.sql.engine;
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_FILTER;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_PARTITION_COUNT;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_REPLICA_COUNT;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.IMMEDIATE_TIMER_VALUE;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 
+import java.util.Objects;
+import org.apache.ignite.internal.app.IgniteImpl;
+import org.apache.ignite.internal.catalog.Catalog;
+import org.apache.ignite.internal.catalog.CatalogManager;
 import org.apache.ignite.internal.sql.BaseSqlIntegrationTest;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.junit.jupiter.api.BeforeAll;
@@ -49,8 +52,14 @@
 
     @Test
     public void systemViewDefaultZone() {
+        IgniteImpl node = CLUSTER.aliveNode();
+        CatalogManager catalogManager = node.catalogManager();
+        Catalog catalog = Objects.requireNonNull(
+                catalogManager.catalog(catalogManager.activeCatalogVersion(node.clock().nowLong()))
+        );
+
         assertQuery("SELECT * FROM SYSTEM.ZONES").returns(
-                DEFAULT_ZONE_NAME,
+                catalog.defaultZone().name(),
                 DEFAULT_PARTITION_COUNT,
                 DEFAULT_REPLICA_COUNT,
                 IMMEDIATE_TIMER_VALUE,
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
index 74a038f..dbbaa51 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
@@ -547,7 +547,7 @@
         return testItems.stream();
     }
 
-    @Disabled("Remove after https://issues.apache.org/jira/browse/IGNITE-19274 is implemented.")
+    @Disabled("Remove after https://issues.apache.org/jira/browse/IGNITE-17376 is implemented.")
     @TestFactory
     public Stream<DynamicTest> timestampWithTzWithDefaults() {
         List<DynamicTest> testItems = new ArrayList<>();
@@ -555,7 +555,7 @@
         String template = "CREATE TABLE t (id INTEGER PRIMARY KEY, d {} DEFAULT {})";
 
         {
-            String sql = format(template, "TIMESTAMP_WITH_LOCAL_TIME_ZONE", "'2020-01-02 01:01:01'");
+            String sql = format(template, "TIMESTAMP WITH LOCAL TIME ZONE", "'2020-01-02 01:01:01'");
 
             testItems.add(DynamicTest.dynamicTest(String.format("ALLOW: %s", sql), () ->
                     converter.convert((SqlDdl) parse(sql), ctx)));
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
index b07edee..78041ac 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
@@ -180,6 +180,58 @@
     }
 
     /**
+     * Parsing ALTER ZONE SET DEFAULT statement.
+     */
+    @Test
+    public void alterZoneSetDefault() {
+        IgniteSqlAlterZoneSetDefault alterZone =
+                assertInstanceOf(IgniteSqlAlterZoneSetDefault.class, parse("alter zone a.test_zone set default"));
+
+        assertFalse(alterZone.ifExists());
+
+        String expectedStmt = "ALTER ZONE \"A\".\"TEST_ZONE\" SET DEFAULT";
+        expectUnparsed(alterZone, expectedStmt);
+    }
+
+    /**
+     * Parsing ALTER ZONE IF EXISTS SET DEFAULT statement.
+     */
+    @Test
+    public void alterZoneIfExistsSetDefault() {
+        IgniteSqlAlterZoneSetDefault alterZone =
+                assertInstanceOf(IgniteSqlAlterZoneSetDefault.class, parse("alter zone if exists a.test_zone set default"));
+        assertTrue(alterZone.ifExists());
+
+        String expectedStmt = "ALTER ZONE IF EXISTS \"A\".\"TEST_ZONE\" SET DEFAULT";
+        expectUnparsed(alterZone, expectedStmt);
+    }
+
+    /**
+     * Ensures that we cannot change zone parameters and set this zone as default in the same request.
+     */
+    @Test
+    @SuppressWarnings("ThrowableNotThrown")
+    public void alterZoneSetDefaultWithOptionsIsIllegal() {
+        assertThrowsSqlException(
+                Sql.STMT_PARSE_ERR,
+                "Failed to parse query",
+                () -> parse("alter zone a.test_zone set replicas=2, default")
+        );
+
+        assertThrowsSqlException(
+                Sql.STMT_PARSE_ERR,
+                "Failed to parse query",
+                () -> parse("alter zone a.test_zone set default, replicas=2")
+        );
+
+        assertThrowsSqlException(
+                Sql.STMT_PARSE_ERR,
+                "Failed to parse query",
+                () -> parse("alter zone a.test_zone set default replicas=2")
+        );
+    }
+
+    /**
      * Parsing ALTER ZONE RENAME TO statement with invalid arguments.
      */
     @Test
diff --git a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TableTestUtils.java b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TableTestUtils.java
index b6ea6b4..8093736 100644
--- a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TableTestUtils.java
+++ b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TableTestUtils.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.table;
 
 import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_SCHEMA_NAME;
-import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAME;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.pkIndexName;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
 import static org.apache.ignite.sql.ColumnType.INT32;
@@ -64,7 +63,7 @@
      *
      * @param catalogManager Catalog manager.
      * @param schemaName Schema name.
-     * @param zoneName Zone name.
+     * @param zoneName Zone name or {@code null} to use default distribution zone.
      * @param tableName Table name.
      * @param columns Table columns.
      * @param pkColumns Primary key columns.
@@ -72,7 +71,7 @@
     public static void createTable(
             CatalogManager catalogManager,
             String schemaName,
-            String zoneName,
+            @Nullable String zoneName,
             String tableName,
             List<ColumnParams> columns,
             List<String> pkColumns
@@ -293,8 +292,8 @@
     }
 
     /**
-     * Creates a simple table in {@link CatalogService#DEFAULT_SCHEMA_NAME} and {@link CatalogService#DEFAULT_ZONE_NAME} and single
-     * {@link #COLUMN_NAME column} of type {@link ColumnType#INT32}.
+     * Creates a simple table in {@link CatalogService#DEFAULT_SCHEMA_NAME} and single
+     * {@link #COLUMN_NAME column} of type {@link ColumnType#INT32} in default distribution zone.
      *
      * @param catalogManager Catalog name.
      * @param tableName Table name.
@@ -303,7 +302,7 @@
         createTable(
                 catalogManager,
                 DEFAULT_SCHEMA_NAME,
-                DEFAULT_ZONE_NAME,
+                null,
                 tableName,
                 List.of(ColumnParams.builder().name(COLUMN_NAME).type(INT32).build()),
                 List.of(COLUMN_NAME)