>From Janhavi Tripurwar <[email protected]>:

Janhavi Tripurwar has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20572?usp=email )


Change subject: [ASTERIXDB-3673]: Fix: Prevent CBO failure when samples are 
empty
......................................................................

[ASTERIXDB-3673]: Fix: Prevent CBO failure when samples are empty

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fallback to RBO when samples are empty.
- Moved issueWarning method to OperatorUtil for better accessibility.
- Added warning log for visibility.

Change-Id: Iad996433d22308f8f4096e30a0b04be27c58c020
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
3 files changed, 23 insertions(+), 2 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/72/20572/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index 0d0c984..4f6db11 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -1591,11 +1591,19 @@
                 continue;
             }
             Index index = handle.findSampleIndex(scanOp, context);
+            Index.SampleIndexDetails idxDetails = (Index.SampleIndexDetails) 
index.getIndexDetails();
+            double origDatasetCard = idxDetails.getSourceCardinality();
             if (index == null) {
                 return false;
             }
+            if (origDatasetCard == 0) {
+                double sampleCard = 
Math.min(idxDetails.getSampleCardinalityTarget(), origDatasetCard);
+                OperatorUtils.issueWarning(sampleCard, scanOp, context);
+                return false;
+            }
             n++;
         }
+
         return (leafInputs.size() == n);
     }
 }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java
index 27c37d7..68aff90 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java
@@ -44,7 +44,9 @@
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.api.exceptions.Warning;

 public class OperatorUtils {

@@ -324,4 +326,15 @@

         return distinctOp;
     }
+
+    protected static void issueWarning(double sampleCard, 
DataSourceScanOperator scanOp, IOptimizationContext optCtx) {
+        if (sampleCard == 0) {
+            sampleCard = 1;
+            IWarningCollector warningCollector = optCtx.getWarningCollector();
+            if (warningCollector.shouldWarn()) {
+                warningCollector.warn(Warning.of(scanOp.getSourceLocation(),
+                        
org.apache.asterix.common.exceptions.ErrorCode.SAMPLE_HAS_ZERO_ROWS));
+            }
+        }
+    }
 }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
index 78cf365..4f96207 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
@@ -592,7 +592,7 @@
         Index.SampleIndexDetails idxDetails = (Index.SampleIndexDetails) 
index.getIndexDetails();
         double origDatasetCard = idxDetails.getSourceCardinality();
         double sampleCard = Math.min(idxDetails.getSampleCardinalityTarget(), 
origDatasetCard);
-        issueWarning(sampleCard, scanOp);
+        OperatorUtils.issueWarning(sampleCard, scanOp, optCtx);

         // replace the dataScanSourceOperator with the sampling source
         SampleDataSource sampledatasource = 
joinEnum.getSampleDataSource(scanOp);
@@ -797,7 +797,7 @@
         Index.SampleIndexDetails idxDetails = (Index.SampleIndexDetails) 
index.getIndexDetails();
         double origDatasetCard = idxDetails.getSourceCardinality();
         double sampleCard = Math.min(idxDetails.getSampleCardinalityTarget(), 
origDatasetCard);
-        issueWarning(sampleCard, scanOp);
+        OperatorUtils.issueWarning(sampleCard, scanOp, optCtx);
         return index;
     }


--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20572?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: phoenix
Gerrit-Change-Id: Iad996433d22308f8f4096e30a0b04be27c58c020
Gerrit-Change-Number: 20572
Gerrit-PatchSet: 1
Gerrit-Owner: Janhavi Tripurwar <[email protected]>

Reply via email to