This is an automated email from the ASF dual-hosted git repository. sk0x50 pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new 8ea605f0b6 IGNITE-21014 Add table creation revision for table descriptor (#2980) 8ea605f0b6 is described below commit 8ea605f0b6ce51838fc3a8bf3aae9081835bf102 Author: Mirza Aliev <alievmi...@gmail.com> AuthorDate: Wed Dec 20 16:06:42 2023 +0400 IGNITE-21014 Add table creation revision for table descriptor (#2980) --- .../catalog/commands/CreateTableCommand.java | 1 + .../descriptors/CatalogTableDescriptor.java | 23 ++++++++++- .../internal/catalog/storage/AlterColumnEntry.java | 4 +- .../internal/catalog/storage/DropColumnsEntry.java | 3 +- .../internal/catalog/storage/NewColumnsEntry.java | 3 +- .../internal/catalog/CatalogManagerSelfTest.java | 31 +++++++++++++++ .../MakeIndexAvailableCommandValidationTest.java | 1 + .../ignite/client/handler/FakeCatalogService.java | 2 +- .../RebalanceUtilUpdateAssignmentsTest.java | 1 + .../ignite/internal/schema/SchemaManagerTest.java | 44 ++++++++++++++++++++-- .../CatalogToSchemaDescriptorConverterTest.java | 1 + .../storage/AbstractMvTableStorageTest.java | 1 + .../storage/index/AbstractIndexStorageTest.java | 1 + .../replication/PartitionReplicaListenerTest.java | 1 + .../schema/CatalogValidationSchemasSourceTest.java | 2 +- 15 files changed, 108 insertions(+), 11 deletions(-) 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 4593514dce..f423f11578 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 @@ -115,6 +115,7 @@ public class CreateTableCommand extends AbstractTableCommand { columns.stream().map(CatalogUtils::fromParams).collect(toList()), primaryKeyColumns, colocationColumns, + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptor.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptor.java index 9949dc2bf8..89edf8bb98 100644 --- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptor.java +++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptor.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.catalog.descriptors; +import static org.apache.ignite.internal.catalog.CatalogManagerImpl.INITIAL_CAUSALITY_TOKEN; + import java.io.IOException; import java.io.ObjectInputStream; import java.util.List; @@ -52,6 +54,8 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor { @IgniteToStringExclude private transient Map<String, CatalogTableColumnDescriptor> columnsMap; + private long creationToken; + /** * Constructor. * @@ -62,7 +66,8 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor { * @param tableVersion Version of the table. * @param columns Table column descriptors. * @param pkCols Primary key column names. - * @param colocationCols Colocation column names. + * @param causalityToken Token of the update of the descriptor. + * @param creationToken Token of the creation of the table descriptor. */ public CatalogTableDescriptor( int id, @@ -74,7 +79,8 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor { List<CatalogTableColumnDescriptor> columns, List<String> pkCols, @Nullable List<String> colocationCols, - long causalityToken + long causalityToken, + long creationToken ) { super(id, Type.TABLE, name, causalityToken); @@ -88,6 +94,8 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor { this.columnsMap = columns.stream().collect(Collectors.toMap(CatalogTableColumnDescriptor::name, Function.identity())); + this.creationToken = creationToken; + // TODO: IGNITE-19082 Throw proper exceptions. assert !columnsMap.isEmpty() : "No columns."; @@ -151,4 +159,15 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor { public String toString() { return S.toString(this); } + + public long creationToken() { + return creationToken; + } + + @Override + public void updateToken(long updateToken) { + super.updateToken(updateToken); + + this.creationToken = this.creationToken == INITIAL_CAUSALITY_TOKEN ? updateToken : this.creationToken; + } } 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 bd0d04b818..615387953b 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 @@ -103,7 +103,9 @@ public class AlterColumnEntry implements UpdateEntry, Fireable { .collect(toList()), table.primaryKeyColumns(), table.colocationColumns(), - causalityToken) + causalityToken, + table.creationToken() + ) ) .toArray(CatalogTableDescriptor[]::new), schema.indexes(), 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 6dae7b0075..2a481153d1 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 @@ -99,7 +99,8 @@ public class DropColumnsEntry implements UpdateEntry, Fireable { .collect(toList()), table.primaryKeyColumns(), table.colocationColumns(), - causalityToken) : table + causalityToken, + table.creationToken()) : table ) .toArray(CatalogTableDescriptor[]::new), schema.indexes(), 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 5581fc1458..0230374f8f 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 @@ -96,7 +96,8 @@ public class NewColumnsEntry implements UpdateEntry, Fireable { CollectionUtils.concat(table.columns(), descriptors), table.primaryKeyColumns(), table.colocationColumns(), - causalityToken) : table + causalityToken, + table.creationToken()) : table ) .toArray(CatalogTableDescriptor[]::new), schema.indexes(), 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 4221c076d3..22243a116c 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 @@ -1635,6 +1635,37 @@ public class CatalogManagerSelfTest extends BaseCatalogManagerTest { assertThat(table.tableVersion(), is(2)); } + @Test + public void testTableCreationToken() { + createSomeTable(TABLE_NAME); + + CatalogTableDescriptor table = manager.table(TABLE_NAME, Long.MAX_VALUE); + + long expectedCreationToken = table.updateToken(); + + assertEquals(expectedCreationToken, table.creationToken()); + + CompletableFuture<Void> future = manager.execute( + AlterTableAlterColumnCommand.builder() + .schemaName(SCHEMA_NAME) + .tableName(TABLE_NAME) + .columnName("val1") + .type(INT64) + .build() + ); + assertThat(future, willCompleteSuccessfully()); + + table = manager.table(TABLE_NAME, Long.MAX_VALUE); + + assertThat(table.tableVersion(), is(2)); + + assertEquals(expectedCreationToken, table.creationToken()); + + table = manager.table(tableId(TABLE_NAME), 1); + + assertEquals(expectedCreationToken, table.creationToken()); + } + @Test void testCreateZoneWithDefaults() { assertThat(manager.execute(CreateZoneCommand.builder().zoneName(ZONE_NAME + 1).build()), willBe(nullValue())); diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/MakeIndexAvailableCommandValidationTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/MakeIndexAvailableCommandValidationTest.java index 9fd0569074..0914fdec66 100644 --- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/MakeIndexAvailableCommandValidationTest.java +++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/MakeIndexAvailableCommandValidationTest.java @@ -96,6 +96,7 @@ public class MakeIndexAvailableCommandValidationTest extends AbstractCommandVali List.of(tableColumn(columnName)), List.of(columnName), null, + 1, 1 ); } diff --git a/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakeCatalogService.java b/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakeCatalogService.java index a563b5f08c..93da89abba 100644 --- a/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakeCatalogService.java +++ b/modules/client-handler/src/testFixtures/java/org/apache/ignite/client/handler/FakeCatalogService.java @@ -56,7 +56,7 @@ public class FakeCatalogService implements CatalogService { @Override public CatalogTableDescriptor table(int tableId, long timestamp) { return new CatalogTableDescriptor( - tableId, 0, 0, "table", 0, 0, List.of(mock(CatalogTableColumnDescriptor.class)), List.of(), null, 0); + tableId, 0, 0, "table", 0, 0, List.of(mock(CatalogTableColumnDescriptor.class)), List.of(), null, 0, 0); } @Override diff --git a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtilUpdateAssignmentsTest.java b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtilUpdateAssignmentsTest.java index 11c5d6c864..2b920568b1 100644 --- a/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtilUpdateAssignmentsTest.java +++ b/modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/rebalance/RebalanceUtilUpdateAssignmentsTest.java @@ -95,6 +95,7 @@ public class RebalanceUtilUpdateAssignmentsTest extends IgniteAbstractTest { List.of(new CatalogTableColumnDescriptor("k1", ColumnType.INT32, false, 0, 0, 0, null)), List.of("k1"), null, + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaManagerTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaManagerTest.java index 81ceddab4b..cddac3f6a1 100644 --- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaManagerTest.java +++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/SchemaManagerTest.java @@ -174,7 +174,7 @@ class SchemaManagerTest extends BaseIgniteAbstractTest { new CatalogTableColumnDescriptor("v1", ColumnType.INT32, false, 0, 0, 0, null) ); CatalogTableDescriptor tableDescriptor = new CatalogTableDescriptor( - TABLE_ID, -1, -1, TABLE_NAME, 0, 1, columns, List.of("k1", "k2"), null, INITIAL_CAUSALITY_TOKEN + TABLE_ID, -1, -1, TABLE_NAME, 0, 1, columns, List.of("k1", "k2"), null, INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); CompletableFuture<Boolean> future = tableCreatedListener() @@ -244,7 +244,19 @@ class SchemaManagerTest extends BaseIgniteAbstractTest { new CatalogTableColumnDescriptor("v2", ColumnType.STRING, false, 0, 0, 0, null) ); - return new CatalogTableDescriptor(TABLE_ID, -1, -1, TABLE_NAME, 0, 2, columns, List.of("k1", "k2"), null, INITIAL_CAUSALITY_TOKEN); + return new CatalogTableDescriptor( + TABLE_ID, + -1, + -1, + TABLE_NAME, + 0, + 2, + columns, + List.of("k1", "k2"), + null, + INITIAL_CAUSALITY_TOKEN, + INITIAL_CAUSALITY_TOKEN + ); } private void completeCausalityToken(long causalityToken) { @@ -280,7 +292,19 @@ class SchemaManagerTest extends BaseIgniteAbstractTest { new CatalogTableColumnDescriptor("k2", ColumnType.STRING, false, 0, 0, 0, null) ); - return new CatalogTableDescriptor(TABLE_ID, -1, -1, TABLE_NAME, 0, 2, columns, List.of("k1", "k2"), null, INITIAL_CAUSALITY_TOKEN); + return new CatalogTableDescriptor( + TABLE_ID, + -1, + -1, + TABLE_NAME, + 0, + 2, + columns, + List.of("k1", "k2"), + null, + INITIAL_CAUSALITY_TOKEN, + INITIAL_CAUSALITY_TOKEN + ); } @Test @@ -318,7 +342,19 @@ class SchemaManagerTest extends BaseIgniteAbstractTest { new CatalogTableColumnDescriptor("v1", ColumnType.INT64, false, 0, 0, 0, null) ); - return new CatalogTableDescriptor(TABLE_ID, -1, -1, TABLE_NAME, 0, 2, columns, List.of("k1", "k2"), null, INITIAL_CAUSALITY_TOKEN); + return new CatalogTableDescriptor( + TABLE_ID, + -1, + -1, + TABLE_NAME, + 0, + 2, + columns, + List.of("k1", "k2"), + null, + INITIAL_CAUSALITY_TOKEN, + INITIAL_CAUSALITY_TOKEN + ); } @Test diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java index 5478e96eee..5f7a2499f0 100644 --- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java +++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java @@ -143,6 +143,7 @@ public class CatalogToSchemaDescriptorConverterTest extends AbstractSchemaConver ), List.of("K1", "K2"), List.of("K2"), + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java index 3d0a054112..1ea34a901a 100644 --- a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java +++ b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java @@ -784,6 +784,7 @@ public abstract class AbstractMvTableStorageTest extends BaseMvStoragesTest { ), List.of("INTKEY"), null, + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractIndexStorageTest.java b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractIndexStorageTest.java index e0f97a2b7b..23a95a62d9 100644 --- a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractIndexStorageTest.java +++ b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractIndexStorageTest.java @@ -162,6 +162,7 @@ public abstract class AbstractIndexStorageTest<S extends IndexStorage, D extends Stream.concat(Stream.of(pkColumn), ALL_TYPES_COLUMN_PARAMS.stream()).map(CatalogUtils::fromParams).collect(toList()), List.of("pk"), null, + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java index 5b104e26c5..5824cadacb 100644 --- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java +++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java @@ -341,6 +341,7 @@ public class PartitionReplicaListenerTest extends IgniteAbstractTest { ), List.of("intKey", "strKey"), null, + INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/schema/CatalogValidationSchemasSourceTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/schema/CatalogValidationSchemasSourceTest.java index e00425deb4..48847f641f 100644 --- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/schema/CatalogValidationSchemasSourceTest.java +++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/schema/CatalogValidationSchemasSourceTest.java @@ -114,7 +114,7 @@ class CatalogValidationSchemasSourceTest extends BaseIgniteAbstractTest { ); return new CatalogTableDescriptor( - tableId, -1, -1, "test", 0, tableVersion, columns, List.of("k1"), null, INITIAL_CAUSALITY_TOKEN + tableId, -1, -1, "test", 0, tableVersion, columns, List.of("k1"), null, INITIAL_CAUSALITY_TOKEN, INITIAL_CAUSALITY_TOKEN ); }