>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]>

Reply via email to