>From Ali Alsuliman <[email protected]>: Ali Alsuliman has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20410?usp=email )
Change subject: [ASTERIXDB-3650][COMP] Ignore sample indexes when checking for secondary indexes ...................................................................... [ASTERIXDB-3650][COMP] Ignore sample indexes when checking for secondary indexes - user model changes: no - storage format changes: no - interface changes: no Details: Currently DatasetUtil.hasSecondaries, does not account for sample indexes, which will lead to lookup in LSMPrimaryUpsertOperatorNodePushable. Ext-ref: MB-68717 Change-Id: I65ca9c74192d14bbaecf8a306902e4cecf1337d2 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20410 Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java M asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java 4 files changed, 16 insertions(+), 19 deletions(-) Approvals: Jenkins: Verified; Verified Ali Alsuliman: Looks good to me, approved Objections: Anon. E. Moose #1000171: Violations found diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java index 31f2511..7356bd8 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java @@ -33,7 +33,6 @@ import org.apache.asterix.metadata.declared.DataSourceId; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.metadata.entities.Dataset; -import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.utils.DatasetUtil; import org.apache.asterix.om.base.AInt32; import org.apache.asterix.om.base.AString; @@ -152,17 +151,7 @@ } } - List<Index> datasetIndexes = - mp.getDatasetIndexes(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName()); - boolean hasSecondaryIndex = false; - for (Index index : datasetIndexes) { - if (index.isSecondaryIndex()) { - hasSecondaryIndex = true; - break; - } - } - - return hasSecondaryIndex; + return mp.hasSecondaryIndexes(dataset); } private boolean tryingToPushThroughSelectionWithSameDataSource(AssignOperator access, AbstractLogicalOperator op2) { diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan index cd177f7..5754b6d 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan @@ -26,10 +26,10 @@ -- EXTERNAL_GROUP_BY[$$52] |PARTITIONED| exchange [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - select (and(gt($$53, 1), gt($$54, 4))) project: [$$52] [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] - -- STREAM_SELECT |PARTITIONED| - assign [$$52] <- [$$l.getField(1)] project: [$$53, $$54, $$52] [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] - -- ASSIGN |PARTITIONED| + assign [$$52] <- [$$l.getField(1)] project: [$$52] [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] + -- ASSIGN |PARTITIONED| + select (and(gt($$53, 1), gt($$54, 4))) project: [$$l] [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] + -- STREAM_SELECT |PARTITIONED| exchange [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| unnest-map [$$53, $$54, $$l] <- index-search("LineItem", 0, "Default", "tpch", "LineItem", false, false, 2, $$60, $$61, 0, true, true, false) [cardinality: 1321.89, doc-size: 0.0, op-cost: 0.0, total-cost: 6005.0] diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java index b029137..8ab2f2a 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java @@ -1918,6 +1918,14 @@ .filter(idx -> idx.isSecondaryIndex() && !idx.isSampleIndex()).collect(Collectors.toList()); } + /** + * Returns true if the dataset has any (non-samples) secondary index. + */ + public boolean hasSecondaryIndexes(Dataset ds) throws AlgebricksException { + return getDatasetIndexes(ds.getDatabaseName(), ds.getDataverseName(), ds.getDatasetName()).stream() + .anyMatch(idx -> idx.isSecondaryIndex() && !idx.isSampleIndex()); + } + public LockList getLocks() { return locks; } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java index 55f4259..c39395b 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java @@ -484,9 +484,9 @@ primaryKeyFields[i] = i; pkFields[i] = fieldPermutation[i]; } - boolean hasSecondaries = metadataProvider - .getDatasetIndexes(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName()) - .size() > 1; + + boolean hasSecondaries = metadataProvider.hasSecondaryIndexes(dataset); + IStorageComponentProvider storageComponentProvider = metadataProvider.getStorageComponentProvider(); IModificationOperationCallbackFactory modificationCallbackFactory = dataset.getModificationCallbackFactory( storageComponentProvider, primaryIndex, IndexOperation.UPSERT, primaryKeyFields); -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20410?usp=email To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: asterixdb Gerrit-Branch: phoenix Gerrit-Change-Id: I65ca9c74192d14bbaecf8a306902e4cecf1337d2 Gerrit-Change-Number: 20410 Gerrit-PatchSet: 7 Gerrit-Owner: Ritik Raj <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Ritik Raj <[email protected]>
