You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by al...@apache.org on 2019/09/26 17:21:18 UTC

[asterixdb] branch master updated: [ASTERIXDB-2647][COMP] Random partitioner shouldn't preserve input's properties

This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 2dff04c  [ASTERIXDB-2647][COMP] Random partitioner shouldn't preserve input's properties
2dff04c is described below

commit 2dff04c9fb460bde6c2df723054a617272d1062d
Author: Ali Alsuliman <al...@gmail.com>
AuthorDate: Wed Sep 25 11:31:11 2019 -0700

    [ASTERIXDB-2647][COMP] Random partitioner shouldn't preserve input's properties
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Random partitioner operator currently always propagates
    the local properties of its input. If the data of the
    input operator is partitioned, the random partitioner
    should not propagate the local properties of the input
    since the random partitioner destroys them.
    
    Change-Id: I0378597451b3e6b25e8b45295159efec262abae2
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3575
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
---
 .../physical/RandomPartitionExchangePOperator.java | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RandomPartitionExchangePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RandomPartitionExchangePOperator.java
index d17c0d9..844d2ec 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RandomPartitionExchangePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RandomPartitionExchangePOperator.java
@@ -18,6 +18,11 @@
  */
 package org.apache.hyracks.algebricks.core.algebra.operators.physical;
 
+import static org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningProperty.PartitioningType;
+
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder;
@@ -27,7 +32,9 @@ import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
+import org.apache.hyracks.algebricks.core.algebra.properties.ILocalStructuralProperty;
 import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningProperty;
 import org.apache.hyracks.algebricks.core.algebra.properties.IPhysicalPropertiesVector;
 import org.apache.hyracks.algebricks.core.algebra.properties.PhysicalRequirements;
 import org.apache.hyracks.algebricks.core.algebra.properties.RandomPartitioningProperty;
@@ -68,7 +75,7 @@ public class RandomPartitionExchangePOperator extends AbstractExchangePOperator
             ILogicalOperator op, IOperatorSchema opSchema, JobGenContext context) throws AlgebricksException {
         ITuplePartitionComputerFactory tpcf = new RandomPartitionComputerFactory();
         MToNPartitioningConnectorDescriptor conn = new MToNPartitioningConnectorDescriptor(spec, tpcf);
-        return new Pair<IConnectorDescriptor, TargetConstraint>(conn, null);
+        return new Pair<>(conn, null);
     }
 
     @Override
@@ -79,8 +86,16 @@ public class RandomPartitionExchangePOperator extends AbstractExchangePOperator
     @Override
     public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) {
         AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue();
-        this.deliveredProperties = new StructuralPropertiesVector(new RandomPartitioningProperty(domain),
-                op2.getDeliveredPhysicalProperties().getLocalProperties());
+        IPhysicalPropertiesVector childDeliveredProps = op2.getDeliveredPhysicalProperties();
+        IPartitioningProperty childPartitioning = childDeliveredProps.getPartitioningProperty();
+        List<ILocalStructuralProperty> localProps;
+        // local properties of child is preserved if child is unpartitioned. Otherwise, local props are destroyed.
+        if (childPartitioning != null && childPartitioning.getPartitioningType() == PartitioningType.UNPARTITIONED) {
+            localProps = childDeliveredProps.getLocalProperties();
+        } else {
+            localProps = Collections.emptyList();
+        }
+        this.deliveredProperties = new StructuralPropertiesVector(new RandomPartitioningProperty(domain), localProps);
     }
 
     @Override
@@ -88,5 +103,4 @@ public class RandomPartitionExchangePOperator extends AbstractExchangePOperator
             IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) {
         return emptyUnaryRequirements();
     }
-
 }