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 ff97888bee55f28adc7b3465575bf4228194ebf4
Merge: 406b856f41 7989e7e253
Author: Kirill Tkalenko <tkalkir...@yandex.ru>
AuthorDate: Tue Aug 15 10:50:18 2023 +0300

    Merge branch 'ai-main' into catalog-feature

 .idea/inspectionProfiles/Project_Default.xml       |   8 +-
 build.gradle                                       |   1 +
 .../org/apache/ignite/table/mapper/Mapper.java     |   3 +-
 .../internal/binarytuple/BinaryTupleCommon.java    |   6 -
 .../handler/requests/jdbc/JdbcQueryCursor.java     |  11 +-
 .../requests/jdbc/JdbcQueryCursorSelfTest.java     | 101 +++++
 .../ignite/client/fakes/FakeIgniteTables.java      |  22 +-
 .../ignite/client/fakes/FakeInternalTable.java     | 133 ++++---
 .../ignite/client/fakes/FakeSchemaRegistry.java    |  15 +-
 .../BaseDistributionZoneManagerTest.java           |   6 +-
 .../DistributionZoneFiltersTest.java               |   1 -
 .../DistributionZoneManagerAlterFilterTest.java    |  58 ++-
 ...ibutionZoneManagerConfigurationChangesTest.java |  59 ++-
 .../DistributionZoneManagerFilterTest.java         |   8 +-
 .../DistributionZoneManagerScaleUpTest.java        | 427 ++++++++++++---------
 .../DistributionZoneManagerTest.java               |  34 +-
 .../DistributionZoneManagerWatchListenerTest.java  |  17 +-
 .../DistributionZoneCausalityDataNodesTest.java    | 274 +++++++------
 .../DistributionZoneRebalanceEngineTest.java       |  58 ++-
 .../DistributionZonesTestUtil.java                 |  39 ++
 .../apache/ignite/internal/index/IndexManager.java |  49 ++-
 .../ignite/internal/marshaller/Marshaller.java     |  22 +-
 modules/placement-driver/build.gradle              |   1 +
 .../MultiActorPlacementDriverTest.java             |  36 +-
 .../PlacementDriverManagerTest.java                |  25 +-
 .../Apache.Ignite.Tests/Compute/ComputeTests.cs    |  10 +-
 .../dotnet/Apache.Ignite.Tests/FakeServer.cs       |   3 +-
 .../dotnet/Apache.Ignite.Tests/IgniteTestsBase.cs  |   6 +-
 .../dotnet/Apache.Ignite.Tests/ListLogger.cs       |   3 +-
 .../Apache.Ignite.Tests/PartitionAwarenessTests.cs |   2 +-
 .../Proto/ColocationHashTests.cs                   |   7 +-
 .../dotnet/Apache.Ignite.Tests/RetryPolicyTests.cs |   8 +-
 .../Sql/SqlResultSetObjectMappingTests.cs          |   2 +-
 .../Apache.Ignite.Tests/Table/DataStreamerTests.cs |   2 +-
 .../CollectionExtensions.cs => Table/KeyPoco.cs}   |  23 +-
 .../Table/KeyValueViewBinaryTests.cs               |   2 +-
 .../Table/KeyValueViewPocoPrimitiveTests.cs        | 118 +++---
 .../Table/KeyValueViewPocoTests.cs                 | 123 +++---
 .../Table/KeyValueViewPrimitivePocoTests.cs        |  97 +++--
 .../dotnet/Apache.Ignite.Tests/Table/PocoStruct.cs |   4 +-
 .../Table/RecordViewBinaryTests.cs                 |  17 +-
 .../Table/RecordViewCustomMappingTest.cs           |  13 +-
 .../Table/RecordViewPocoTests.cs                   |   2 +-
 .../Table/RecordViewPrimitiveTests.cs              |   3 +-
 .../Table/SchemaSynchronizationTest.cs             |  51 +--
 .../Table/SchemaValidationTest.cs                  | 357 +++++++++++++++++
 .../Table/Serialization/ReflectionUtilsTests.cs    |   4 +-
 .../CollectionExtensions.cs => Table/ValPoco.cs}   |  26 +-
 .../Transactions/TransactionsTests.cs              |   2 +-
 .../Internal}/Common/CollectionExtensions.cs       |  24 +-
 .../Internal/Linq/IgniteQueryExecutor.cs           |   3 +-
 .../Internal/Linq/IgniteQueryExpressionVisitor.cs  |   8 +-
 .../Apache.Ignite/Internal/Linq/ResultSelector.cs  |   3 +-
 .../Table/Serialization/ObjectSerializerHandler.cs |  91 ++++-
 .../Table/Serialization/ReflectionUtils.cs         |   3 +-
 .../Serialization/TuplePairSerializerHandler.cs    |  69 ++++
 .../Table/Serialization/TupleSerializerHandler.cs  |  42 ++
 .../raft/server/ItSimpleCounterServerTest.java     |   6 +-
 ...niteDistributionZoneManagerNodeRestartTest.java |  48 ++-
 .../ItRaftCommandLeftInLogUntilRestartTest.java    |  15 +-
 .../internal/table/ItReadOnlyTransactionTest.java  |   4 +-
 .../ignite/internal/table/ItRoReadsTest.java       |  53 +--
 .../ignite/internal/table/ItTableScanTest.java     |   8 +-
 .../apache/ignite/internal/schema/BinaryRow.java   |   3 -
 .../ignite/internal/schema/BinaryRowConverter.java |  82 ++--
 .../ignite/internal/schema/BinaryRowImpl.java      |   7 -
 .../{BinaryRow.java => ColumnsExtractor.java}      |  30 +-
 .../ignite/internal/schema/SchemaRegistry.java     |  10 +-
 .../marshaller/asm/AsmMarshallerGenerator.java     |   5 +-
 .../marshaller/reflection/KvMarshallerImpl.java    |  17 +-
 .../schema/marshaller/reflection/Marshaller.java   |  28 +-
 .../reflection/RecordMarshallerImpl.java           |   4 +-
 .../schema/registry/SchemaRegistryImpl.java        |  58 ++-
 .../schema/registry/UpgradingRowAdapter.java       |  40 +-
 .../org/apache/ignite/internal/schema/row/Row.java |  47 +--
 .../ignite/internal/schema/row/RowAssembler.java   |  44 +--
 .../apache/ignite/internal/util/ObjectFactory.java |   2 +
 .../benchmarks/SerializerBenchmarkTest.java        |   7 +-
 .../org/apache/ignite/internal/schema/RowTest.java |   2 +-
 .../schema/marshaller/KvMarshallerTest.java        |  68 ++--
 .../schema/marshaller/RecordMarshallerTest.java    |  12 +-
 .../RecordMarshallerValidationsTest.java           |   9 +-
 .../sql/engine/exec/UpdatableTableImpl.java        |   6 +-
 .../internal/storage/BaseMvStoragesTest.java       |  14 +-
 .../ItInternalTableReadOnlyOperationsTest.java     |  13 +-
 .../ignite/distributed/ItTablePersistenceTest.java |   2 +-
 .../distributed/ItTxDistributedTestSingleNode.java |   6 +-
 .../ignite/internal/table/ItColocationTest.java    |   2 +-
 .../schema/marshaller/TupleMarshallerImpl.java     |  29 +-
 .../internal/table/AbstractRowTupleAdapter.java    |   4 +-
 .../apache/ignite/internal/table/IndexWrapper.java |  12 +-
 .../internal/table/KeyValueBinaryViewImpl.java     |   6 +-
 .../ignite/internal/table/KeyValueViewImpl.java    |   4 +-
 .../internal/table/RecordBinaryViewImpl.java       |  18 +-
 .../ignite/internal/table/RecordViewImpl.java      |   4 +-
 .../apache/ignite/internal/table/TableImpl.java    |   8 +-
 .../table/distributed/HashIndexLocker.java         |  20 +-
 .../internal/table/distributed/IndexLocker.java    |  18 +-
 .../table/distributed/SortedIndexLocker.java       |  21 +-
 .../internal/table/distributed/TableManager.java   |  17 +-
 .../distributed/TableSchemaAwareIndexStorage.java  |  21 +-
 .../distributed/index/IndexUpdateHandler.java      |   4 +-
 .../request/MultipleRowReplicaRequest.java         |   3 +-
 .../replicator/PartitionReplicaListener.java       | 111 +++---
 .../table/ColocationHashCalculationTest.java       |   2 +-
 .../internal/table/distributed/IndexBaseTest.java  |  39 +-
 .../table/distributed/TableManagerTest.java        |   8 +-
 .../raft/PartitionCommandListenerTest.java         |  22 +-
 .../PartitionReplicaListenerIndexLockingTest.java  |  91 +++--
 .../replication/PartitionReplicaListenerTest.java  | 159 +++++---
 .../table/impl/DummyInternalTableImpl.java         |   6 +-
 .../table/impl/DummySchemaManagerImpl.java         |  15 +-
 112 files changed, 2476 insertions(+), 1360 deletions(-)

diff --cc 
modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
index 9e8d54a95c,1f780838bd..a76702db28
--- 
a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
+++ 
b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
@@@ -28,10 -32,9 +28,9 @@@ import java.util.Objects
  import java.util.concurrent.CompletableFuture;
  import java.util.concurrent.atomic.AtomicBoolean;
  import java.util.function.Consumer;
- import java.util.function.Function;
 +import java.util.function.LongFunction;
  import org.apache.ignite.configuration.NamedListView;
 -import 
org.apache.ignite.configuration.notifications.ConfigurationNamedListListener;
 -import 
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
 +import org.apache.ignite.internal.catalog.CatalogManager;
  import org.apache.ignite.internal.catalog.descriptors.CatalogColumnCollation;
  import 
org.apache.ignite.internal.catalog.descriptors.CatalogHashIndexDescriptor;
  import 
org.apache.ignite.internal.catalog.descriptors.CatalogIndexColumnDescriptor;
@@@ -382,108 -678,4 +401,108 @@@ public class IndexManager extends Produ
      private static ColumnCollation toEventCollation(CatalogColumnCollation 
collation) {
          return ColumnCollation.get(collation.asc(), collation.nullsFirst());
      }
 +
 +    private void startIndexes() {
 +        CompletableFuture<Long> recoveryFinishedFuture = 
metaStorageManager.recoveryFinishedFuture();
 +
 +        assert recoveryFinishedFuture.isDone();
 +
 +        int catalogVersion = catalogManager.latestCatalogVersion();
 +        long causalityToken = recoveryFinishedFuture.join();
 +
 +        NamedListView<TableView> tableListView = tablesCfg.tables().value();
 +
 +        List<CompletableFuture<?>> startIndexFutures = new ArrayList<>();
 +
 +        for (CatalogIndexDescriptor index : 
catalogManager.indexes(catalogVersion)) {
 +            CatalogTableDescriptor table = 
catalogManager.table(index.tableId(), catalogVersion);
 +
 +            assert table != null : "tableId=" + index.tableId() + ", 
indexId=" + index.id();
 +
 +            // TODO: IGNITE-19499 Only catalog should be used
 +            int configTableId = getConfigTableId(table.name(), tableListView);
 +
 +            CompletableFuture<?> fireCreateIndexEventFuture = 
fireCreateIndexEvent(index, causalityToken, configTableId);
 +
 +            CompletableFuture<Void> registerIndexFuture = 
registerIndex(table, index, causalityToken, configTableId);
 +
 +            startIndexFutures.add(allOf(fireCreateIndexEventFuture, 
registerIndexFuture));
 +        }
 +
 +        startVv.update(causalityToken, (unused, throwable) -> 
allOf(startIndexFutures.toArray(CompletableFuture[]::new)))
 +                .whenComplete((unused, throwable) -> {
 +                    if (throwable != null) {
 +                        LOG.error("Error starting indexes", throwable);
 +                    } else {
 +                        if (LOG.isDebugEnabled()) {
 +                            LOG.debug("Indexes started successfully");
 +                        }
 +                    }
 +                });
 +    }
 +
 +    private CompletableFuture<Void> registerIndex(
 +            CatalogTableDescriptor table,
 +            CatalogIndexDescriptor index,
 +            long causalityToken,
 +            int configTableId
 +    ) {
 +        // TODO: IGNITE-19712 Listen to assignment changes and start new 
index storages.
 +        CompletableFuture<PartitionSet> tablePartitionFuture = 
tableManager.localPartitionSetAsync(causalityToken, configTableId);
 +
 +        CompletableFuture<SchemaRegistry> schemaRegistryFuture = 
schemaManager.schemaRegistry(causalityToken, configTableId);
 +
 +        return tablePartitionFuture.thenAcceptBoth(schemaRegistryFuture, 
(partitionSet, schemaRegistry) -> {
 +            TableImpl tableImpl = tableManager.getTable(configTableId);
 +
 +            assert tableImpl != null : "tableId=" + configTableId + ", 
indexId=" + index.id();
 +
 +            var storageIndexDescriptor = StorageIndexDescriptor.create(table, 
index);
 +
 +            TableRowToIndexKeyConverter tableRowConverter = new 
TableRowToIndexKeyConverter(
 +                    schemaRegistry,
 +                    
storageIndexDescriptor.columns().stream().map(StorageColumnDescriptor::name).toArray(String[]::new)
 +            );
 +
 +            if (storageIndexDescriptor instanceof 
StorageSortedIndexDescriptor) {
 +                tableImpl.registerSortedIndex(
 +                        (StorageSortedIndexDescriptor) storageIndexDescriptor,
-                         tableRowConverter::convert,
++                        tableRowConverter,
 +                        partitionSet
 +                );
 +            } else {
 +                boolean unique = index.unique();
 +
 +                tableImpl.registerHashIndex(
 +                        (StorageHashIndexDescriptor) storageIndexDescriptor,
 +                        unique,
-                         tableRowConverter::convert,
++                        tableRowConverter,
 +                        partitionSet
 +                );
 +
 +                if (unique) {
 +                    tableImpl.pkId(index.id());
 +                }
 +            }
 +        });
 +    }
 +
 +    private CompletableFuture<?> fireCreateIndexEvent(
 +            CatalogIndexDescriptor index,
 +            long causalityToken,
 +            int configTableId
 +    ) {
 +        return fireEvent(
 +                IndexEvent.CREATE,
 +                new IndexEventParameters(causalityToken, configTableId, 
index.id(), toEventIndexDescriptor(index))
 +        );
 +    }
 +
 +    private static int getConfigTableId(String tableName, 
NamedListView<TableView> tableListView) {
 +        TableView tableView = tableListView.get(tableName);
 +
 +        assert tableView != null : tableName;
 +
 +        return tableView.id();
 +    }
  }
diff --cc 
modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItRoReadsTest.java
index 30db632c93,99ef4e29ab..6124bea1c9
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItRoReadsTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItRoReadsTest.java
@@@ -542,25 -556,6 +548,24 @@@ public class ItRoReadsTest extends Base
  
      private static void assertRowEquals(BinaryRow row1, BinaryRow row2) {
          assertThat(row1.schemaVersion(), is(row2.schemaVersion()));
-         assertThat(row1.hasValue(), is(row2.hasValue()));
          assertThat(row1.tupleSlice(), is(row2.tupleSlice()));
      }
 +
 +    private static List<List<Object>> sql(String sql, Object... args) {
 +        var queryEngine = new TestQueryProcessor(node());
 +
 +        SessionId sessionId = 
queryEngine.createSession(PropertiesHelper.emptyHolder());
 +
 +        try {
 +            var context = QueryContext.create(SqlQueryType.ALL);
 +
 +            CompletableFuture<AsyncSqlCursor<List<Object>>> queryFuture = 
queryEngine.querySingleAsync(sessionId, context, sql, args);
 +
 +            assertThat(queryFuture, willCompleteSuccessfully());
 +
 +            return getAllFromCursor(queryFuture.join());
 +        } finally {
 +            queryEngine.closeSession(sessionId);
 +        }
 +    }
  }

Reply via email to