You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2022/09/23 21:42:35 UTC

Change in asterixdb[master]: WIP: minor clean-up and refactoring

From Ali Alsuliman <al...@gmail.com>:

Ali Alsuliman has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17234 )


Change subject: WIP: minor clean-up and refactoring
......................................................................

WIP: minor clean-up and refactoring

Change-Id: Iae95e5da91a391bc52a2dd90929516967ec13c93
---
M hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
1 file changed, 33 insertions(+), 26 deletions(-)



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

diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
index 3ae1218..0f707f4 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
@@ -213,7 +213,7 @@
         boolean loggerTraceEnabled = AlgebricksConfig.ALGEBRICKS_LOGGER.isTraceEnabled();
 
         // The child index of the child operator to optimize first.
-        int startChildIndex = getStartChildIndex(op, pr, nestedPlan);
+        int startChildIndex = getStartChildIndex(op, pr);
         IPartitioningProperty firstDeliveredPartitioning = null;
         // Enforce data properties in a top-down manner.
         for (j = 0; j < op.getInputs().size(); j++) {
@@ -258,6 +258,9 @@
                     delivered = newChild.getDeliveredPhysicalProperties();
                     IPhysicalPropertiesVector newDiff =
                             newPropertiesDiff(newChild, rqd, mayExpandPartitioningProperties, context);
+                    if (newDiff != null) {
+                        throw new IllegalStateException("Still not satisfied: " + newDiff);
+                    }
                     if (loggerTraceEnabled) {
                         AlgebricksConfig.ALGEBRICKS_LOGGER.trace(">>>> New properties diff: " + newDiff + "\n");
                     }
@@ -328,36 +331,31 @@
     // Gets the index of a child to start top-down data property enforcement.
     // If there is a partitioning-compatible child with the operator in opRef,
     // start from this child; otherwise, start from child zero.
-    private int getStartChildIndex(AbstractLogicalOperator op, PhysicalRequirements pr, boolean nestedPlan) {
-        IPhysicalPropertiesVector[] reqdProperties = null;
-        if (pr != null) {
-            reqdProperties = pr.getRequiredProperties();
+    private static int getStartChildIndex(AbstractLogicalOperator op, PhysicalRequirements pr) {
+        IPhysicalPropertiesVector[] requiredProps = pr == null ? null : pr.getRequiredProperties();
+        int firstChild = 0;
+        if (requiredProps == null) {
+            return firstChild;
         }
 
-        List<IPartitioningProperty> deliveredPartitioningPropertiesFromChildren = new ArrayList<>();
-        for (Mutable<ILogicalOperator> childRef : op.getInputs()) {
-            AbstractLogicalOperator child = (AbstractLogicalOperator) childRef.getValue();
-            deliveredPartitioningPropertiesFromChildren
-                    .add(child.getDeliveredPhysicalProperties().getPartitioningProperty());
-        }
-        int partitioningCompatibleChild = 0;
-        for (int i = 0; i < op.getInputs().size(); i++) {
-            IPartitioningProperty deliveredPropertyFromChild = deliveredPartitioningPropertiesFromChildren.get(i);
-            if (reqdProperties == null || reqdProperties[i] == null
-                    || reqdProperties[i].getPartitioningProperty() == null || deliveredPropertyFromChild == null
-                    || reqdProperties[i].getPartitioningProperty()
-                            .getPartitioningType() != deliveredPartitioningPropertiesFromChildren.get(i)
-                                    .getPartitioningType()) {
-                continue;
-            }
-            IPartitioningProperty requiredPropertyForChild = reqdProperties[i].getPartitioningProperty();
+        List<Mutable<ILogicalOperator>> inputs = op.getInputs();
+        for (int i = 0; i < inputs.size(); i++) {
             // If child i's delivered partitioning property already satisfies the required property, stop and return the child index.
-            if (PropertiesUtil.matchPartitioningProps(requiredPropertyForChild, deliveredPropertyFromChild, true)) {
-                partitioningCompatibleChild = i;
-                break;
+            if (requiredProps[i] != null) {
+                IPhysicalPropertiesVector childProp = inputs.get(i).getValue().getDeliveredPhysicalProperties();
+                IPartitioningProperty deliveredPartitioning = childProp.getPartitioningProperty();
+                IPartitioningProperty requiredPartitioning = requiredProps[i].getPartitioningProperty();
+                if (samePartitioningType(requiredPartitioning, deliveredPartitioning)
+                        && PropertiesUtil.matchPartitioningProps(requiredPartitioning, deliveredPartitioning, true)) {
+                    return i;
+                }
             }
         }
-        return partitioningCompatibleChild;
+        return firstChild;
+    }
+
+    private static boolean samePartitioningType(IPartitioningProperty p1, IPartitioningProperty p2) {
+        return p1 != null && p2 != null && p1.getPartitioningType() == p2.getPartitioningType();
     }
 
     private IPhysicalPropertiesVector newPropertiesDiff(AbstractLogicalOperator newChild,

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

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Iae95e5da91a391bc52a2dd90929516967ec13c93
Gerrit-Change-Number: 17234
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-MessageType: newchange