This is an automated email from the ASF dual-hosted git repository. mhubail pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit ed4a9a96596d7ed3c48edd91eac3011c8958b527 Author: Ali Alsuliman <[email protected]> AuthorDate: Fri Mar 21 16:35:25 2025 -0700 [ASTERIXDB-3580][COMP] Ensure the computation locations are sorted - user model changes: no - storage format changes: no - interface changes: no Details: The cluster locations used by datasets are on sorted nodes. The computation locations should also be made sorted. Ext-ref: MB-63354, MB-65314 Change-Id: Id7463f54455ce1e5f874b75399c1ec9b96250b5f Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19543 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> Reviewed-by: Ian Maxon <[email protected]> --- .../org/apache/asterix/api/common/APIFramework.java | 4 +++- .../asterix/metadata/declared/MetadataProvider.java | 2 +- .../algebra/properties/DefaultNodeGroupDomain.java | 21 ++++++++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java index c5fc39527c..b30a900985 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java @@ -535,7 +535,9 @@ public class APIFramework { locations.add(nodeId); } }); - return new AlgebricksAbsolutePartitionConstraint(locations.toArray(new String[0])); + String[] sortedLocations = locations.toArray(new String[0]); + Arrays.sort(sortedLocations); + return new AlgebricksAbsolutePartitionConstraint(sortedLocations); } // Gets the total number of available cores in the cluster. 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 6ed0af96fc..66c184b153 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 @@ -1881,7 +1881,7 @@ public class MetadataProvider implements IMetadataProvider<DataSourceId, String> if (!(nodeDomain instanceof DefaultNodeGroupDomain inputDomain)) { return null; } - String[] inputLocations = inputDomain.getNodes(); + String[] inputLocations = inputDomain.getSortedNodes(); AlgebricksAbsolutePartitionConstraint locations = dataPartitioningProvider.getClusterLocations(); String[] clusterLocations = locations.getLocations(); if (!Arrays.equals(inputLocations, clusterLocations)) { diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/DefaultNodeGroupDomain.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/DefaultNodeGroupDomain.java index a0ef64edba..5921eea161 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/DefaultNodeGroupDomain.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/DefaultNodeGroupDomain.java @@ -18,6 +18,7 @@ */ package org.apache.hyracks.algebricks.core.algebra.properties; +import java.util.Arrays; import java.util.List; import org.apache.commons.collections4.MultiSet; @@ -28,16 +29,12 @@ import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConst public class DefaultNodeGroupDomain implements INodeDomain { - private MultiSet<String> nodes = new HashMultiSet<>(); + private final MultiSet<String> nodes = new HashMultiSet<>(); public DefaultNodeGroupDomain(List<String> nodes) { this.nodes.addAll(nodes); } - public DefaultNodeGroupDomain(DefaultNodeGroupDomain domain) { - this.nodes.addAll(domain.nodes); - } - public DefaultNodeGroupDomain(AlgebricksPartitionConstraint clusterLocations) { if (clusterLocations.getPartitionConstraintType() == PartitionConstraintType.ABSOLUTE) { AlgebricksAbsolutePartitionConstraint absPc = (AlgebricksAbsolutePartitionConstraint) clusterLocations; @@ -52,10 +49,10 @@ public class DefaultNodeGroupDomain implements INodeDomain { @Override public boolean sameAs(INodeDomain domain) { - if (!(domain instanceof DefaultNodeGroupDomain)) { + if (!(domain instanceof DefaultNodeGroupDomain nodeDomain)) { return false; } - DefaultNodeGroupDomain nodeDomain = (DefaultNodeGroupDomain) domain; + // TODO(ali): this should be revisited. it does not check for order of the nodes. return nodes.equals(nodeDomain.nodes); } @@ -69,7 +66,17 @@ public class DefaultNodeGroupDomain implements INodeDomain { return nodes.size(); } + /** + * Returns the nodes in the domain. The order of the nodes is arbitrary on each invocation. + * @return returns the nodes in the domain. + */ public String[] getNodes() { return nodes.toArray(new String[0]); } + + public String[] getSortedNodes() { + String[] sortedNodes = nodes.toArray(new String[0]); + Arrays.sort(sortedNodes); + return sortedNodes; + } }
