This is an automated email from the ASF dual-hosted git repository. alsuliman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 81bde67c3e1dacfc7d58317a2adc76f7ba1c6a8f Author: Ali Alsuliman <[email protected]> AuthorDate: Wed Mar 15 15:55:38 2023 -0700 [NO ISSUE][*DB] Create SAMPLE indexes after secondary indexes - user model changes: no - storage format changes: no - interface changes: no Change-Id: I42e9ad0b13d6e785d603561387150e975ef1b50f Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17431 Reviewed-by: Murtadha Hubail <[email protected]> Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> --- .../java/org/apache/asterix/utils/RebalanceUtil.java | 18 ++++++++++++++---- .../org/apache/asterix/metadata/entities/Index.java | 4 ++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java index b0dc16238b..ba6c602fa6 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java @@ -28,6 +28,7 @@ import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.IntStream; import org.apache.asterix.active.IActiveEntityEventsListener; @@ -371,10 +372,19 @@ public class RebalanceUtil { // Creates and loads all secondary indexes for the rebalance target dataset. private static void createAndLoadSecondaryIndexesForTarget(Dataset source, Dataset target, MetadataProvider metadataProvider, IHyracksClientConnection hcc) throws Exception { - for (Index index : metadataProvider.getDatasetIndexes(source.getDataverseName(), source.getDatasetName())) { - if (!index.isSecondaryIndex()) { - continue; - } + List<Index> indexes = metadataProvider.getDatasetIndexes(source.getDataverseName(), source.getDatasetName()); + List<Index> secondaryIndexes = indexes.stream().filter(Index::isSecondaryIndex).collect(Collectors.toList()); + List<Index> nonSampleIndexes = + secondaryIndexes.stream().filter(idx -> !idx.isSampleIndex()).collect(Collectors.toList()); + List<Index> sampleIndexes = secondaryIndexes.stream().filter(Index::isSampleIndex).collect(Collectors.toList()); + // must create all non samples secondary indexes first since samples need the stats of secondary indexes + createAndLoadIndexes(target, metadataProvider, hcc, nonSampleIndexes); + createAndLoadIndexes(target, metadataProvider, hcc, sampleIndexes); + } + + private static void createAndLoadIndexes(Dataset target, MetadataProvider metadataProvider, + IHyracksClientConnection hcc, List<Index> indexes) throws Exception { + for (Index index : indexes) { // Creates the secondary index. JobSpecification indexCreationJobSpec = IndexUtil.buildSecondaryIndexCreationJobSpec(target, index, metadataProvider, null); diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java index bbccd65cf3..6b12bf82ce 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java @@ -138,6 +138,10 @@ public class Index implements IMetadataEntity<Index>, Comparable<Index> { this.pendingOp = pendingOp; } + public boolean isSampleIndex() { + return indexType == IndexType.SAMPLE; + } + public boolean isSecondaryIndex() { return !isPrimaryIndex(); }
