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)