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;
+    }
 }

Reply via email to