This is an automated email from the ASF dual-hosted git repository. tkalkirill 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 e917054b5f IGNITE-20530 Start building indexes for write-only indexes (#2704) e917054b5f is described below commit e917054b5f932eca2c393615b9a0125d2f54f29f Author: Kirill Tkalenko <tkalkir...@yandex.ru> AuthorDate: Wed Oct 18 10:36:06 2023 +0300 IGNITE-20530 Start building indexes for write-only indexes (#2704) --- .../internal/index/IndexBuildController.java | 3 +- .../internal/index/IndexBuildControllerTest.java | 45 ++++++++++++++-- .../ignite/internal/runner/app/TableTestUtils.java | 62 ---------------------- .../ignite/internal/sql/api/ItSqlApiBaseTest.java | 2 +- 4 files changed, 42 insertions(+), 70 deletions(-) diff --git a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexBuildController.java b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexBuildController.java index 55f751de2f..24778080bb 100644 --- a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexBuildController.java +++ b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexBuildController.java @@ -220,9 +220,8 @@ public class IndexBuildController implements IgniteComponent { return; } - // TODO: IGNITE-20530 We only need to get write-only indexes for (CatalogIndexDescriptor indexDescriptor : catalogService.indexes(catalogVersion)) { - if (primaryReplicaId.tableId() == indexDescriptor.tableId()) { + if (!indexDescriptor.available() && primaryReplicaId.tableId() == indexDescriptor.tableId()) { scheduleBuildIndex(primaryReplicaId, indexDescriptor, mvTableStorage); } } diff --git a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexBuildControllerTest.java b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexBuildControllerTest.java index dca73259f9..f9edd68af9 100644 --- a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexBuildControllerTest.java +++ b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexBuildControllerTest.java @@ -32,6 +32,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -43,6 +44,7 @@ import java.util.concurrent.TimeUnit; import org.apache.ignite.internal.catalog.CatalogManager; import org.apache.ignite.internal.catalog.CatalogTestUtils; import org.apache.ignite.internal.catalog.commands.ColumnParams; +import org.apache.ignite.internal.catalog.commands.MakeIndexAvailableCommand; import org.apache.ignite.internal.event.AbstractEventProducer; import org.apache.ignite.internal.hlc.HybridClock; import org.apache.ignite.internal.hlc.HybridClockImpl; @@ -133,7 +135,7 @@ public class IndexBuildControllerTest extends BaseIgniteAbstractTest { @Test void testStartBuildIndexesOnIndexCreate() { - setPrimaryReplicaWitchExpireInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); + setPrimaryReplicaWhichExpiresInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); clearInvocations(indexBuilder); @@ -146,7 +148,7 @@ public class IndexBuildControllerTest extends BaseIgniteAbstractTest { void testStartBuildIndexesOnPrimaryReplicaElected() { createIndex(INDEX_NAME); - setPrimaryReplicaWitchExpireInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); + setPrimaryReplicaWhichExpiresInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); verify(indexBuilder).scheduleBuildIndex(eq(tableId()), eq(PARTITION_ID), eq(indexId(INDEX_NAME)), any(), any(), eq(localNode)); @@ -173,21 +175,54 @@ public class IndexBuildControllerTest extends BaseIgniteAbstractTest { @Test void testStopBuildIndexesOnChangePrimaryReplica() { - setPrimaryReplicaWitchExpireInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); - setPrimaryReplicaWitchExpireInOneSecond(PARTITION_ID, NODE_NAME + "_other", clock.now()); + setPrimaryReplicaWhichExpiresInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); + setPrimaryReplicaWhichExpiresInOneSecond(PARTITION_ID, NODE_NAME + "_other", clock.now()); verify(indexBuilder).stopBuildingIndexes(tableId(), PARTITION_ID); } + @Test + void testStartBuildIndexesOnPrimaryReplicaElectedOnlyForRegisteredIndexes() { + createIndex(INDEX_NAME); + + int indexId = indexId(INDEX_NAME); + + makeIndexAvailable(indexId); + + setPrimaryReplicaWhichExpiresInOneSecond(PARTITION_ID, NODE_NAME, clock.now()); + + verify(indexBuilder, never()).scheduleBuildIndex( + eq(tableId()), + eq(PARTITION_ID), + eq(indexId(INDEX_NAME)), + any(), + any(), + eq(localNode) + ); + + verify(indexBuilder).scheduleBuildIndex( + eq(tableId()), + eq(PARTITION_ID), + eq(indexId(pkIndexName(TABLE_NAME))), + any(), + any(), + eq(localNode) + ); + } + private void createIndex(String indexName) { createHashIndex(catalogManager, DEFAULT_SCHEMA_NAME, TABLE_NAME, indexName, List.of(COLUMN_NAME), false); } + private void makeIndexAvailable(int indexId) { + assertThat(catalogManager.execute(MakeIndexAvailableCommand.builder().indexId(indexId).build()), willCompleteSuccessfully()); + } + private void dropIndex(String indexName) { TableTestUtils.dropIndex(catalogManager, DEFAULT_SCHEMA_NAME, indexName); } - private void setPrimaryReplicaWitchExpireInOneSecond(int partitionId, String leaseholder, HybridTimestamp startTime) { + private void setPrimaryReplicaWhichExpiresInOneSecond(int partitionId, String leaseholder, HybridTimestamp startTime) { CompletableFuture<ReplicaMeta> replicaMetaFuture = completedFuture(replicaMetaForOneSecond(leaseholder, startTime)); assertThat(placementDriver.setPrimaryReplicaMeta(0, replicaId(partitionId), replicaMetaFuture), willCompleteSuccessfully()); diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/TableTestUtils.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/TableTestUtils.java deleted file mode 100644 index f8add797f0..0000000000 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/TableTestUtils.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.runner.app; - -import static org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.util.List; -import org.apache.ignite.internal.catalog.CatalogCommand; -import org.apache.ignite.internal.catalog.CatalogManager; -import org.apache.ignite.internal.catalog.commands.ColumnParams; -import org.apache.ignite.internal.catalog.commands.CreateTableCommand; - -/** - * Utils to manage tables inside tests. - */ -// TODO: IGNITE-19502 - remove after switching to the Catalog. -public class TableTestUtils { - /** - * Creates table in the catalog. - * - * @param catalogManager Catalog manager. - * @param schemaName Schema name. - * @param zoneName Zone name. - * @param tableName Table name. - * @param columns Table columns. - * @param pkColumns Primary key columns. - */ - public static void createTable( - CatalogManager catalogManager, - String schemaName, - String zoneName, - String tableName, - List<ColumnParams> columns, - List<String> pkColumns - ) { - CatalogCommand command = CreateTableCommand.builder() - .schemaName(schemaName) - .zone(zoneName) - .tableName(tableName) - .columns(columns) - .primaryKeyColumns(pkColumns) - .build(); - - assertThat(catalogManager.execute(command), willCompleteSuccessfully()); - } -} diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java index 5f94a23702..2fabd673ee 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java @@ -91,7 +91,7 @@ public abstract class ItSqlApiBaseTest extends ClusterPerClassIntegrationTest { } @Test - @Disabled("https://issues.apache.org/jira/browse/IGNITE-20096") + @Disabled("https://issues.apache.org/jira/browse/IGNITE-20671") public void ddl() throws Exception { IgniteSql sql = igniteSql(); Session ses = sql.createSession();