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

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

commit 96a9ed49c214af3b6df22032b04572559f48c3da
Merge: 81cefdd6a4 6bc603deb6
Author: Kirill Tkalenko <tkalkir...@yandex.ru>
AuthorDate: Thu Sep 14 09:50:11 2023 +0300

    Merge branch 'ai-main' into catalog-feature

 .../internal/catalog/CatalogManagerImpl.java       |  17 +-
 .../catalog/CatalogParamsValidationUtils.java      |   6 +-
 .../ignite/internal/catalog/CatalogService.java    |   2 +
 .../catalog/CatalogValidationException.java        |   2 +-
 .../commands/AbstractCreateIndexCommand.java       |   5 +-
 .../commands/AlterTableAddColumnCommand.java       |   2 +-
 .../commands/AlterTableAlterColumnCommand.java     |   2 +-
 .../commands/AlterTableDropColumnCommand.java      |   2 +-
 .../internal/catalog/commands/CatalogUtils.java    |  20 ++
 .../internal/catalog/commands/ColumnParams.java    |  20 ++
 .../catalog/commands/CreateSystemViewCommand.java  | 206 +++++++++++
 .../commands/CreateSystemViewCommandBuilder.java   |  62 ++++
 .../catalog/commands/CreateTableCommand.java       |  10 +-
 .../catalog/commands/DropIndexCommand.java         |   2 +-
 .../catalog/commands/DropTableCommand.java         |   4 +-
 .../descriptors/CatalogObjectDescriptor.java       |   5 +-
 .../descriptors/CatalogSchemaDescriptor.java       |  28 +-
 .../descriptors/CatalogSystemViewDescriptor.java   | 105 ++++++
 .../internal/catalog/events/CatalogEvent.java      |   5 +-
 .../events/CreateSystemViewEventParameters.java    |  48 +++
 .../internal/catalog/storage/AlterColumnEntry.java |  18 +-
 .../internal/catalog/storage/DropColumnsEntry.java |  17 +-
 .../internal/catalog/storage/DropIndexEntry.java   |  19 +-
 .../internal/catalog/storage/DropTableEntry.java   |  19 +-
 .../internal/catalog/storage/NewColumnsEntry.java  |  16 +-
 .../internal/catalog/storage/NewIndexEntry.java    |  19 +-
 .../catalog/storage/NewSystemViewEntry.java        |  99 ++++++
 .../internal/catalog/storage/NewTableEntry.java    |  26 +-
 .../internal/catalog/CatalogManagerSelfTest.java   |  43 ++-
 .../internal/catalog/CatalogSystemViewTest.java    | 381 +++++++++++++++++++++
 .../commands/AbstractCommandValidationTest.java    |  10 +-
 .../CreateSystemViewCommandValidationTest.java     | 141 ++++++++
 .../internal/catalog/BaseCatalogManagerTest.java   |  12 +-
 .../processor/ConfigurationProcessor.java          |   3 +-
 .../configuration/ConfigurationTreeGenerator.java  |   9 +-
 .../ConfigurationNotificationUtils.java            |  42 ++-
 .../notifications/ConfigurationNotifier.java       |  44 +--
 .../configuration/util/ConfigurationUtil.java      | 138 +++++++-
 .../configuration/util/ConfigurationUtilTest.java  | 106 ++++++
 .../ignite/internal/util/CollectionUtils.java      | 184 ++--------
 .../ignite/internal/util/CollectionUtilsTest.java  |  88 +----
 .../persistence/compaction/Compactor.java          |   2 +-
 .../persistence/store/FilePageStoreManager.java    |   5 +-
 .../persistence/store/GroupPageStoresMap.java      |   7 +-
 .../store/FilePageStoreManagerTest.java            |   8 +-
 .../persistence/store/GroupPageStoresMapTest.java  |   9 +-
 .../placementdriver/PlacementDriverManager.java    |   2 +
 .../internal/benchmark/SqlOneNodeBenchmark.java    | 147 ++++++++
 .../internal/runner/app/ItTablesApiTest.java       |   1 +
 .../ignite/internal/schema/BinaryTupleSchema.java  |   3 +-
 .../ignite/internal/schema/SchemaTestUtils.java    |   5 +-
 modules/sql-engine/build.gradle                    |   1 +
 .../internal/sql/api/AsyncResultSetImpl.java       |   5 +
 .../engine/exec/ExecutableTableRegistryImpl.java   |   9 +-
 .../sql/engine/exec/ScannableTableImpl.java        |  18 +-
 .../sql/engine/exec/TableRowConverter.java         |  15 +-
 ...onverter.java => TableRowConverterFactory.java} |  24 +-
 .../sql/engine/exec/TableRowConverterImpl.java     |  85 +++--
 .../sql/engine/exec/UpdatableTableImpl.java        |   2 +-
 .../sql/engine/schema/TableDescriptor.java         |   2 +-
 .../sql/engine/schema/TableDescriptorImpl.java     |   7 +
 .../sql/engine/util/AbstractProjectedTuple.java    | 227 ++++++++++++
 .../util/FieldDeserializingProjectedTuple.java     |  75 ++++
 .../sql/engine/util/FormatAwareProjectedTuple.java |  93 +++++
 .../exec/ExecutableTableRegistrySelfTest.java      |   3 +
 .../engine/exec/rel/ScannableTableSelfTest.java    |  31 +-
 .../exec/rel/TableScanNodeExecutionTest.java       |   5 +-
 .../sql/engine/planner/AbstractPlannerTest.java    |   6 +
 .../engine/schema/CatalogSqlSchemaManagerTest.java |   5 +-
 .../sql/engine/util/ProjectedTupleTest.java        | 179 ++++++++++
 .../internal/table/distributed/TableManager.java   |   3 +-
 .../replicator/PartitionReplicaListener.java       |   1 +
 .../apache/ignite/internal/table/TxLocalTest.java  |  13 +-
 .../table/impl/DummyInternalTableImpl.java         |  15 +-
 74 files changed, 2464 insertions(+), 536 deletions(-)

diff --cc 
modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
index 70c2225baf,471c3332e1..bee55a4c18
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AbstractCreateIndexCommand.java
@@@ -17,7 -17,7 +17,8 @@@
  
  package org.apache.ignite.internal.catalog.commands;
  
 +import static 
org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.ensureNoTableOrIndexExistsWithGivenName;
+ import static 
org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.ensureNoTableIndexOrSysViewExistsWithGivenName;
  import static 
org.apache.ignite.internal.catalog.CatalogParamsValidationUtils.validateIdentifier;
  import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.schemaOrThrow;
  import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.tableOrThrow;
diff --cc 
modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
index f8a6553284,fae6e961b5..d34b705ed9
--- 
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
@@@ -17,10 -17,13 +17,11 @@@
  
  package org.apache.ignite.internal.catalog.commands;
  
 -import static java.util.stream.Collectors.toList;
  import static org.apache.ignite.lang.IgniteStringFormatter.format;
  
+ import java.util.Collection;
  import java.util.EnumMap;
  import java.util.EnumSet;
 -import java.util.List;
  import java.util.Map;
  import java.util.Objects;
  import java.util.Set;
diff --cc 
modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItTablesApiTest.java
index ac1c41e638,0acac49c2c..9947f25bd8
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItTablesApiTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItTablesApiTest.java
@@@ -39,17 -44,23 +39,18 @@@ import java.util.stream.IntStream
  import org.apache.ignite.Ignite;
  import org.apache.ignite.IgnitionManager;
  import org.apache.ignite.InitParameters;
+ import org.apache.ignite.internal.catalog.IndexExistsValidationException;
 -import org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders;
 -import 
org.apache.ignite.internal.schema.testutils.definition.ColumnDefinition;
 -import org.apache.ignite.internal.schema.testutils.definition.ColumnType;
 +import org.apache.ignite.internal.catalog.CatalogValidationException;
 +import org.apache.ignite.internal.catalog.IndexExistsValidationException;
 +import org.apache.ignite.internal.catalog.TableExistsValidationException;
 +import org.apache.ignite.internal.catalog.TableNotFoundValidationException;
  import org.apache.ignite.internal.table.IgniteTablesInternal;
  import org.apache.ignite.internal.table.TableImpl;
 -import org.apache.ignite.internal.table.distributed.TableManager;
  import org.apache.ignite.internal.test.WatchListenerInhibitor;
  import org.apache.ignite.internal.testframework.IgniteAbstractTest;
 -import org.apache.ignite.internal.testframework.IgniteTestUtils;
  import org.apache.ignite.internal.testframework.TestIgnitionManager;
  import org.apache.ignite.internal.util.IgniteUtils;
 -import org.apache.ignite.lang.ColumnAlreadyExistsException;
 -import org.apache.ignite.lang.IndexAlreadyExistsException;
  import org.apache.ignite.lang.NodeStoppingException;
 -import org.apache.ignite.lang.TableAlreadyExistsException;
 -import org.apache.ignite.lang.TableNotFoundException;
  import org.apache.ignite.sql.Session;
  import org.apache.ignite.table.Table;
  import org.apache.ignite.table.Tuple;
diff --cc 
modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
index 7fe1f5f3e0,355a0b42c4..8801dc69a0
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
@@@ -18,17 -18,16 +18,19 @@@
  package org.apache.ignite.internal.sql.engine.exec;
  
  import java.util.BitSet;
- import org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
  import org.apache.ignite.internal.schema.BinaryRow;
- import org.apache.ignite.internal.schema.BinaryRowConverter;
  import org.apache.ignite.internal.schema.BinaryTuple;
  import org.apache.ignite.internal.schema.BinaryTupleSchema;
 +import org.apache.ignite.internal.schema.Column;
  import org.apache.ignite.internal.schema.SchemaDescriptor;
  import org.apache.ignite.internal.schema.SchemaRegistry;
+ import org.apache.ignite.internal.schema.row.InternalTuple;
+ import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
 +import org.apache.ignite.internal.schema.row.Row;
 +import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
  import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
+ import 
org.apache.ignite.internal.sql.engine.util.FieldDeserializingProjectedTuple;
+ import org.apache.ignite.internal.sql.engine.util.FormatAwareProjectedTuple;
  import org.jetbrains.annotations.Nullable;
  
  /**
diff --cc 
modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
index 937cc182ff,6d99328dce..99b56ab6a8
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutableTableRegistrySelfTest.java
@@@ -29,7 -29,9 +30,8 @@@ import org.apache.ignite.internal.schem
  import org.apache.ignite.internal.schema.Column;
  import org.apache.ignite.internal.schema.NativeTypes;
  import org.apache.ignite.internal.schema.SchemaDescriptor;
 -import org.apache.ignite.internal.schema.SchemaManager;
  import org.apache.ignite.internal.schema.SchemaRegistry;
+ import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
  import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
  import org.apache.ignite.internal.table.InternalTable;
  import org.apache.ignite.internal.table.TableImpl;
@@@ -151,8 -152,9 +153,9 @@@ public class ExecutableTableRegistrySel
              
when(tableManager.tableAsync(tableId)).thenReturn(CompletableFuture.completedFuture(table));
              
when(schemaManager.schemaRegistry(tableId)).thenReturn(schemaRegistry);
              when(schemaRegistry.schema()).thenReturn(schemaDescriptor);
+             
when(descriptor.iterator()).thenReturn(List.<ColumnDescriptor>of().iterator());
  
 -            return registry.getTable(tableId, descriptor);
 +            return registry.getTable(tableId, tableVersion, descriptor);
          }
      }
  }
diff --cc 
modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
index 66af7c86cf,1bbb0b1e45..c83f5d6666
--- 
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
@@@ -148,7 -167,7 +148,8 @@@ import org.apache.ignite.internal.table
  import 
org.apache.ignite.internal.table.distributed.raft.snapshot.PartitionSnapshotStorageFactory;
  import 
org.apache.ignite.internal.table.distributed.raft.snapshot.outgoing.OutgoingSnapshotsManager;
  import 
org.apache.ignite.internal.table.distributed.raft.snapshot.outgoing.SnapshotAwarePartitionDataStorage;
 +import 
org.apache.ignite.internal.table.distributed.replicator.DirectCatalogTables;
+ import 
org.apache.ignite.internal.table.distributed.replicator.CatalogTablesWithIdConversion;
  import 
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener;
  import 
org.apache.ignite.internal.table.distributed.replicator.TransactionStateResolver;
  import org.apache.ignite.internal.table.distributed.schema.NonHistoricSchemas;
@@@ -491,48 -538,80 +492,48 @@@ public class TableManager extends Produ
  
      @Override
      public void start() {
 -        mvGc.start();
 +        inBusyLock(busyLock, () -> {
 +            mvGc.start();
  
-             lowWatermark.start();
+         lowWatermark.start();
  
 -        try {
 -            metaStorageMgr.recoveryFinishedFuture()
 -                    .thenComposeAsync(this::performRebalanceOnRecovery, 
ioExecutor)
 -                    .get();
 -        } catch (InterruptedException e) {
 -            Thread.currentThread().interrupt();
 -
 -            throw new IgniteInternalException(INTERNAL_ERR, e);
 -        } catch (ExecutionException e) {
 -            throw new IgniteInternalException(INTERNAL_ERR, e);
 -        }
 -
 -        
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(PENDING_ASSIGNMENTS_PREFIX),
 pendingAssignmentsRebalanceListener);
 -        
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(STABLE_ASSIGNMENTS_PREFIX),
 stableAssignmentsRebalanceListener);
 -        
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(ASSIGNMENTS_SWITCH_REDUCE_PREFIX),
 assignmentsSwitchRebalanceListener);
 +            startTables();
  
 -        tablesCfg.tables().listenElements(new 
ConfigurationNamedListListener<>() {
 -            @Override
 -            public CompletableFuture<?> 
onCreate(ConfigurationNotificationEvent<TableView> ctx) {
 -                return onTableCreate(ctx);
 -            }
 -
 -            @Override
 -            public CompletableFuture<?> 
onRename(ConfigurationNotificationEvent<TableView> ctx) {
 -                // TODO: IGNITE-15485 Support table rename operation.
 -
 -                return completedFuture(null);
 -            }
 -
 -            @Override
 -            public CompletableFuture<?> 
onDelete(ConfigurationNotificationEvent<TableView> ctx) {
 -                return onTableDelete(ctx);
 -            }
 -        });
 -
 -        schemaManager.listen(SchemaEvent.CREATE, new EventListener<>() {
 -            @Override
 -            public CompletableFuture<Boolean> notify(SchemaEventParameters 
parameters, @Nullable Throwable exception) {
 -                var eventParameters = new 
TableEventParameters(parameters.causalityToken(), parameters.tableId());
 -
 -                return fireEvent(TableEvent.ALTER, 
eventParameters).thenApply(v -> false);
 +            try {
 +                metaStorageMgr.recoveryFinishedFuture()
 +                        .thenComposeAsync(this::performRebalanceOnRecovery, 
ioExecutor)
 +                        .get();
 +            } catch (InterruptedException e) {
 +                Thread.currentThread().interrupt();
 +
 +                throw new IgniteInternalException(INTERNAL_ERR, e);
 +            } catch (ExecutionException e) {
 +                throw new IgniteInternalException(INTERNAL_ERR, e);
              }
 -        });
  
 -        addMessageHandler(clusterService.messagingService());
 +            
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(PENDING_ASSIGNMENTS_PREFIX),
 pendingAssignmentsRebalanceListener);
 +            
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(STABLE_ASSIGNMENTS_PREFIX),
 stableAssignmentsRebalanceListener);
 +            
metaStorageMgr.registerPrefixWatch(ByteArray.fromString(ASSIGNMENTS_SWITCH_REDUCE_PREFIX),
 assignmentsSwitchRebalanceListener);
  
 -        // TODO: IGNITE-19499 - remove when switched to the Catalog.
 -        recoverTableIdsMapping();
 +            catalogService.listen(CatalogEvent.TABLE_CREATE, (parameters, 
exception) -> {
 +                assert exception == null : parameters;
  
 -        // TODO: IGNITE-19499 - remove when switched to the Catalog.
 -        catalogService.listen(CatalogEvent.TABLE_CREATE, (parameters, 
exception) -> {
 -            CreateTableEventParameters event = (CreateTableEventParameters) 
parameters;
 -
 -            TableView tableConfig = 
tablesCfg.tables().value().get(event.tableDescriptor().name());
 -
 -            assert tableConfig != null : "No table config found by name " + 
event.tableDescriptor().name();
 +                return onTableCreate((CreateTableEventParameters) 
parameters).thenApply(unused -> false);
 +            });
  
 -            tableIdTranslator.registerMapping(tableConfig.id(), 
event.tableId());
 +            catalogService.listen(CatalogEvent.TABLE_DROP, (parameters, 
exception) -> {
 +                assert exception == null : parameters;
  
 -            return completedFuture(false);
 -        });
 -    }
 +                return onTableDelete(((DropTableEventParameters) 
parameters)).thenApply(unused -> false);
 +            });
  
 -    private void recoverTableIdsMapping() {
 -        tablesCfg.tables().value().forEach(tableView -> {
 -            CatalogTableDescriptor tableDescriptor = 
catalogService.table(tableView.name(), Long.MAX_VALUE);
 +            schemaManager.listen(SchemaEvent.CREATE, (parameters, exception) 
-> inBusyLockAsync(busyLock, () -> {
 +                var eventParameters = new 
TableEventParameters(parameters.causalityToken(), parameters.tableId());
  
 -            assert tableDescriptor != null : "No table in the Catalog with 
name " + tableView.name();
 +                return fireEvent(TableEvent.ALTER, 
eventParameters).thenApply(v -> false);
 +            }));
  
 -            tableIdTranslator.registerMapping(tableView.id(), 
tableDescriptor.id());
 +            addMessageHandler(clusterService.messagingService());
          });
      }
  
diff --cc 
modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replicator/PartitionReplicaListener.java
index fba6bec0e7,8b785381c4..a649d0ad6c
--- 
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replicator/PartitionReplicaListener.java
+++ 
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replicator/PartitionReplicaListener.java
@@@ -279,8 -281,8 +279,9 @@@ public class PartitionReplicaListener i
       * @param localNode Instance of the local node.
       * @param mvTableStorage Table storage.
       * @param indexBuilder Index builder.
 -     * @param tablesConfig Tables configuration.
 +     * @param catalogService Catalog service.
 +     * @param placementDriver Placement driver.
+      * @param placementDriver Placement driver.
       */
      public PartitionReplicaListener(
              MvPartitionStorage mvDataStorage,
diff --cc 
modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
index bcc7c184b6,69476824e4..89ca256b7e
--- 
a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
+++ 
b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
@@@ -113,12 -113,12 +112,14 @@@ public class DummyInternalTableImpl ext
  
      public static final ClusterNode LOCAL_NODE = new ClusterNodeImpl("id", 
"node", ADDR);
  
-     public static final HybridClock CLOCK = new TestHybridClock(new 
LongSupplier() {
-         @Override
-         public long getAsLong() {
-             return 0;
-         }
-     });
++    public static final ClusterNode LOCAL_NODE = new ClusterNodeImpl("id", 
"node", ADDR);
++
+     // 2000 was picked to avoid negative time that we get when building read 
timestamp
+     // in TxManagerImpl.currentReadTimestamp.
+     // We subtract 
(ReplicaManager.IDLE_SAFE_TIME_PROPAGATION_PERIOD_MILLISECONDS + 
HybridTimestamp.CLOCK_SKEW) = (1000 + 7) = 1007
+     // from the current time.
+     // Any value greater than that will work, hence 2000.
+     public static final HybridClock CLOCK = new TestHybridClock(() -> 2000);
  
      private static final int PART_ID = 0;
  

Reply via email to