You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2025/11/06 17:28:39 UTC
(asterixdb) 22/25: [ASTERIXDB-3650][COMP] Ignore sample indexes when checking for secondary indexes
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit c8542b55f04eb69ab4d6286f7a7147341d9cfeb8
Author: Ali Alsuliman <al...@gmail.com>
AuthorDate: Tue Oct 21 14:40:49 2025 -0700
[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 <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
.../apache/asterix/optimizer/rules/PushFieldAccessRule.java | 13 +------------
.../single-collection-queries.7.plan | 8 ++++----
.../apache/asterix/metadata/declared/MetadataProvider.java | 8 ++++++++
.../java/org/apache/asterix/metadata/utils/DatasetUtil.java | 6 +++---
4 files changed, 16 insertions(+), 19 deletions(-)
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 31f2511667..7356bd82d9 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.DataSource;
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 @@ public class PushFieldAccessRule implements IAlgebraicRewriteRule {
}
}
- 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 cd177f77b9..5754b6d01e 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 @@ distribute result [$$51] [cardinality: 136.0, doc-size: 0.0, op-cost: 0.0, total
-- 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 b0291375b2..8ab2f2aa52 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 @@ public class MetadataProvider implements IMetadataProvider<DataSourceId, String>
.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 55f42599ca..c39395b094 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 @@ public class DatasetUtil {
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);