You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2023/07/27 16:50:30 UTC

[ignite-3] 14/19: Split catalogVersion into schemaVersion and catalogVersion

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-19499
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 2a414351cbe9177249204ed1d3d86503ca83cf65
Author: amashenkov <an...@gmail.com>
AuthorDate: Fri Jul 21 15:48:51 2023 +0300

    Split catalogVersion into schemaVersion and catalogVersion
---
 .../apache/ignite/internal/catalog/commands/CatalogUtils.java |  1 +
 .../internal/catalog/descriptors/CatalogTableDescriptor.java  |  8 ++++++++
 .../ignite/internal/catalog/storage/AlterColumnEntry.java     |  1 +
 .../ignite/internal/catalog/storage/DropColumnsEntry.java     |  1 +
 .../ignite/internal/catalog/storage/NewColumnsEntry.java      |  1 +
 .../apache/ignite/internal/schema/CatalogDescriptorUtils.java |  5 +++--
 .../java/org/apache/ignite/internal/schema/SchemaManager.java |  7 ++-----
 .../java/org/apache/ignite/internal/schema/SchemaUtils.java   | 11 -----------
 .../internal/sql/engine/exec/ExecutableTableRegistryImpl.java |  5 ++++-
 .../ignite/internal/sql/engine/exec/MockedStructuresTest.java |  5 -----
 .../sql/engine/schema/CatalogSqlSchemaManagerTest.java        |  2 +-
 .../ignite/internal/table/distributed/TableManager.java       |  2 +-
 .../ignite/internal/table/distributed/TableManagerTest.java   |  5 -----
 13 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
index 4243a54b3d..fa918d9e83 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
@@ -87,6 +87,7 @@ public class CatalogUtils {
         return new CatalogTableDescriptor(
                 id,
                 params.tableName(),
+                1,
                 zoneId,
                 params.columns().stream().map(CatalogUtils::fromParams).collect(toList()),
                 params.primaryKeyColumns(),
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 58a744d74c..e438721f18 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
@@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
 public class CatalogTableDescriptor extends CatalogObjectDescriptor {
     private static final long serialVersionUID = -2021394971104316570L;
 
+    private final int version;
     private final int zoneId;
 
     private final List<CatalogTableColumnDescriptor> columns;
@@ -49,6 +50,7 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor {
      *
      * @param id Table id.
      * @param name Table name.
+     * @param version Table descriptor version.
      * @param zoneId Distribution zone ID.
      * @param columns Table column descriptors.
      * @param pkCols Primary key column names.
@@ -57,6 +59,7 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor {
     public CatalogTableDescriptor(
             int id,
             String name,
+            int version,
             int zoneId,
             List<CatalogTableColumnDescriptor> columns,
             List<String> pkCols,
@@ -64,6 +67,7 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor {
     ) {
         super(id, Type.TABLE, name);
 
+        this.version = version;
         this.zoneId = zoneId;
         this.columns = Objects.requireNonNull(columns, "No columns defined.");
         primaryKeyColumns = Objects.requireNonNull(pkCols, "No primary key columns.");
@@ -85,6 +89,10 @@ public class CatalogTableDescriptor extends CatalogObjectDescriptor {
         return columnsMap.get(columnName);
     }
 
+    public int version() {
+        return version;
+    }
+
     public int zoneId() {
         return zoneId;
     }
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 910a363d81..b2e7a11ada 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
@@ -91,6 +91,7 @@ public class AlterColumnEntry implements UpdateEntry, Fireable {
                                         : new CatalogTableDescriptor(
                                                 table.id(),
                                                 table.name(),
+                                                table.version() + 1,
                                                 table.zoneId(),
                                                 table.columns().stream()
                                                         .map(source -> source.name().equals(column.name()) ? column : source)
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 e29c250283..562db4122a 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
@@ -88,6 +88,7 @@ public class DropColumnsEntry implements UpdateEntry, Fireable {
                                 .map(table -> table.id() == tableId ? new CatalogTableDescriptor(
                                         table.id(),
                                         table.name(),
+                                        table.version() + 1,
                                         table.zoneId(),
                                         table.columns().stream()
                                                 .filter(col -> !columns.contains(col.name()))
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 1e1aff017e..ca93e4a358 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
@@ -88,6 +88,7 @@ public class NewColumnsEntry implements UpdateEntry, Fireable {
                                 .map(table -> table.id() == tableId ? new CatalogTableDescriptor(
                                         table.id(),
                                         table.name(),
+                                        table.version() + 1,
                                         table.zoneId(),
                                         CollectionUtils.concat(table.columns(), descriptors),
                                         table.primaryKeyColumns(),
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/CatalogDescriptorUtils.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/CatalogDescriptorUtils.java
index e400dd1d11..5959b0ddf6 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/CatalogDescriptorUtils.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/CatalogDescriptorUtils.java
@@ -74,6 +74,7 @@ public class CatalogDescriptorUtils {
         return new CatalogTableDescriptor(
                 config.id(),
                 config.name(),
+                1,
                 config.zoneId(),
                 config.columns().stream().map(CatalogDescriptorUtils::toTableColumnDescriptor).collect(toList()),
                 List.of(primaryKeyConfig.columns()),
@@ -314,7 +315,7 @@ public class CatalogDescriptorUtils {
     /**
      * Converts table descriptor to table schema descriptor.
      */
-    public static SchemaDescriptor convert(int schemaVer, CatalogTableDescriptor tableDescriptor) {
+    public static SchemaDescriptor convert(CatalogTableDescriptor tableDescriptor) {
         List<Column> keyCols = new ArrayList<>(tableDescriptor.primaryKeyColumns().size());
         List<Column> valCols = new ArrayList<>(tableDescriptor.columns().size() - tableDescriptor.primaryKeyColumns().size());
 
@@ -331,7 +332,7 @@ public class CatalogDescriptorUtils {
         }
 
         return new SchemaDescriptor(
-                schemaVer,
+                tableDescriptor.version(),
                 keyCols.toArray(Column[]::new),
                 tableDescriptor.colocationColumns().toArray(String[]::new),
                 valCols.toArray(Column[]::new)
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
index d1a2ff5415..af0451b259 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
@@ -122,10 +122,9 @@ public class SchemaManager extends Producer<SchemaEvent, SchemaEventParameters>
     private CompletableFuture<?> onTableCreated(CreateTableEventParameters evt) {
         CatalogTableDescriptor tableDescriptor = evt.tableDescriptor();
 
-        int newSchemaVersion = INITIAL_SCHEMA_VERSION; // evt.catalogVersion();
         int tblId = tableDescriptor.id();
 
-        SchemaDescriptor newSchema = CatalogDescriptorUtils.convert(newSchemaVersion, tableDescriptor);
+        SchemaDescriptor newSchema = CatalogDescriptorUtils.convert(tableDescriptor);
 
         return onSchemaChange(tblId, newSchema, evt.causalityToken());
     }
@@ -160,9 +159,7 @@ public class SchemaManager extends Producer<SchemaEvent, SchemaEventParameters>
                 return completedFuture(new UnsupportedOperationException("Unexpected event."));
             }
 
-            int newSchemaVersion = registriesVv.latest().get(tableDescriptor.id()).lastSchemaVersion() + 1;
-
-            SchemaDescriptor newSchema = CatalogDescriptorUtils.convert(newSchemaVersion, tableDescriptor);
+            SchemaDescriptor newSchema = CatalogDescriptorUtils.convert(tableDescriptor);
 
             return onSchemaChange(tableDescriptor.id(), newSchema, evt.causalityToken());
         } catch (Throwable th) {
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
index aa0bbc51b3..ac4cef9e78 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
@@ -28,17 +28,6 @@ import org.apache.ignite.internal.schema.mapping.ColumnMapping;
  * Stateless schema utils that produces helper methods for schema preparation.
  */
 public class SchemaUtils {
-    /**
-     * Creates schema descriptor for the table with specified configuration.
-     *
-     * @param schemaVer Schema version.
-     * @param tableView Table configuration.
-     * @return Schema descriptor.
-     */
-    public static SchemaDescriptor prepareSchemaDescriptor(int schemaVer, TableView tableView) {
-        return ConfigurationToSchemaDescriptorConverter.convert(schemaVer, tableView);
-    }
-
     /**
      * Prepares column mapper.
      *
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
index 67c9b5c4fd..b84644d8ad 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistryImpl.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.exec;
 import com.github.benmanes.caffeine.cache.Caffeine;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
 import org.apache.ignite.internal.hlc.HybridClock;
 import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
@@ -76,10 +77,12 @@ public class ExecutableTableRegistryImpl implements ExecutableTableRegistry, Sch
     private CompletableFuture<ExecutableTable> loadTable(int schemaVersion, int tableId, TableDescriptor tableDescriptor) {
         return tableManager.tableAsync(tableId)
                 .thenApply(table -> {
+                    CatalogTableDescriptor descriptor = tableManager.catalogManager.table(tableId, schemaVersion);
+
                     InternalTable internalTable = table.internalTable();
                     SchemaRegistry schemaRegistry = schemaManager.schemaRegistry(tableId);
 
-                    SchemaDescriptor schemaDescriptor = schemaRegistry.schema(schemaVersion);
+                    SchemaDescriptor schemaDescriptor = schemaRegistry.schema(descriptor.version());
                     TableRowConverter rowConverter = new TableRowConverterImpl(schemaRegistry, schemaDescriptor, tableDescriptor);
                     ScannableTable scannableTable = new ScannableTableImpl(internalTable, rowConverter, tableDescriptor);
 
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
index 26a355f767..6bce878f4f 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
@@ -557,11 +557,6 @@ public class MockedStructuresTest extends IgniteAbstractTest {
                 new NetworkAddress("localhost", 47500)
         ));
 
-        try (MockedStatic<SchemaUtils> schemaServiceMock = mockStatic(SchemaUtils.class)) {
-            schemaServiceMock.when(() -> SchemaUtils.prepareSchemaDescriptor(anyInt(), any()))
-                    .thenReturn(mock(SchemaDescriptor.class));
-        }
-
         when(cs.messagingService()).thenAnswer(invocation -> {
             MessagingService ret = mock(MessagingService.class);
 
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManagerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManagerTest.java
index 894a6a60ba..382adc6162 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManagerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/CatalogSqlSchemaManagerTest.java
@@ -573,7 +573,7 @@ public class CatalogSqlSchemaManagerTest {
                 columnDescriptors.add(newCol);
             }
 
-            return new CatalogTableDescriptor(id, name, zoneId, columnDescriptors, primaryKey, colocationKey);
+            return new CatalogTableDescriptor(id, name, 1, zoneId, columnDescriptors, primaryKey, colocationKey);
         }
     }
 
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
index a6dd0dd47e..4d9a5cf7e9 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
@@ -328,7 +328,7 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
     private final SchemaManager schemaManager;
 
     /** Catalog manager. */
-    private final CatalogManager catalogManager;
+    public final CatalogManager catalogManager;
 
     private final LogStorageFactoryCreator volatileLogStorageFactoryCreator;
 
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
index 7fc676d9b3..a223eddbf1 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
@@ -775,11 +775,6 @@ public class TableManagerTest extends IgniteAbstractTest {
                 new NetworkAddress("localhost", 47500)
         ));
 
-        try (MockedStatic<SchemaUtils> schemaServiceMock = mockStatic(SchemaUtils.class)) {
-            schemaServiceMock.when(() -> SchemaUtils.prepareSchemaDescriptor(anyInt(), any()))
-                    .thenReturn(mock(SchemaDescriptor.class));
-        }
-
         try (MockedStatic<AffinityUtils> affinityServiceMock = mockStatic(AffinityUtils.class)) {
             ArrayList<List<ClusterNode>> assignment = new ArrayList<>(PARTITIONS);