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

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

commit 30c4a78fcecf8d81a3cc070e348a38cae5600d1a
Author: Ali Alsuliman <ali.al.solai...@gmail.com>
AuthorDate: Thu May 6 01:39:41 2021 +0300

    [NO ISSUE][OTH] Only order nodes in node group for new datasets
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Revert the change that sorts the cluster partitions.
    - Order the nodes in the node group for newly created datasets.
    - Make dump index function use the same locations as the index
      split files in the index dataflow helper.
    
    Change-Id: Id90a9c88ed44655631e44155c737459e4501c081
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11343
    Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Michael Blow <mb...@apache.org>
---
 .../asterix/app/function/DumpIndexDatasource.java      | 14 +++++++++++---
 .../apache/asterix/app/function/DumpIndexRewriter.java |  6 +++++-
 .../apache/asterix/metadata/entities/NodeGroup.java    | 18 +++++++++---------
 .../org/apache/asterix/metadata/utils/DatasetUtil.java |  2 +-
 .../metadata/utils/SecondaryIndexOperationsHelper.java |  4 ++++
 .../asterix/runtime/utils/ClusterStateManager.java     |  2 --
 6 files changed, 30 insertions(+), 16 deletions(-)

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexDatasource.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexDatasource.java
index 6318f8e..3351075 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexDatasource.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexDatasource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.app.function;
 
+import org.apache.asterix.common.cluster.IClusterStateManager;
 import org.apache.asterix.metadata.api.IDatasourceFunction;
 import org.apache.asterix.metadata.declared.DataSourceId;
 import org.apache.asterix.metadata.declared.FunctionDataSource;
@@ -36,19 +37,26 @@ public class DumpIndexDatasource extends FunctionDataSource 
{
     private final IndexDataflowHelperFactory indexDataflowHelperFactory;
     private final RecordDescriptor recDesc;
     private final IBinaryComparatorFactory[] comparatorFactories;
+    private final AlgebricksAbsolutePartitionConstraint storageLocations;
 
     public DumpIndexDatasource(INodeDomain domain, IndexDataflowHelperFactory 
indexDataflowHelperFactory,
-            RecordDescriptor recDesc, IBinaryComparatorFactory[] 
comparatorFactories) throws AlgebricksException {
+            RecordDescriptor recDesc, IBinaryComparatorFactory[] 
comparatorFactories,
+            AlgebricksAbsolutePartitionConstraint storageLocations) throws 
AlgebricksException {
         super(DUMP_INDEX_DATASOURCE_ID, DumpIndexRewriter.DUMP_INDEX, domain);
         this.indexDataflowHelperFactory = indexDataflowHelperFactory;
         this.recDesc = recDesc;
         this.comparatorFactories = comparatorFactories;
+        this.storageLocations = storageLocations;
+    }
+
+    @Override
+    protected AlgebricksAbsolutePartitionConstraint 
getLocations(IClusterStateManager csm) {
+        return storageLocations;
     }
 
     @Override
     protected IDatasourceFunction createFunction(MetadataProvider 
metadataProvider,
             AlgebricksAbsolutePartitionConstraint locations) {
-        return new DumpIndexFunction(metadataProvider.getClusterLocations(), 
indexDataflowHelperFactory, recDesc,
-                comparatorFactories);
+        return new DumpIndexFunction(locations, indexDataflowHelperFactory, 
recDesc, comparatorFactories);
     }
 }
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexRewriter.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexRewriter.java
index 000e910..30eaf93 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexRewriter.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DumpIndexRewriter.java
@@ -26,6 +26,7 @@ import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.Index;
 import org.apache.asterix.metadata.utils.SecondaryIndexOperationsHelper;
+import 
org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
@@ -67,7 +68,10 @@ public class DumpIndexRewriter extends FunctionRewriter {
         IndexDataflowHelperFactory indexDataflowHelperFactory =
                 new 
IndexDataflowHelperFactory(metadataProvider.getStorageComponentProvider().getStorageManager(),
                         secondaryIndexHelper.getSecondaryFileSplitProvider());
+        AlgebricksAbsolutePartitionConstraint secondaryPartitionConstraint =
+                (AlgebricksAbsolutePartitionConstraint) 
secondaryIndexHelper.getSecondaryPartitionConstraint();
         return new DumpIndexDatasource(context.getComputationNodeDomain(), 
indexDataflowHelperFactory,
-                secondaryIndexHelper.getSecondaryRecDesc(), 
secondaryIndexHelper.getSecondaryComparatorFactories());
+                secondaryIndexHelper.getSecondaryRecDesc(), 
secondaryIndexHelper.getSecondaryComparatorFactories(),
+                secondaryPartitionConstraint);
     }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/NodeGroup.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/NodeGroup.java
index 1c4ec64..a8d027f 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/NodeGroup.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/NodeGroup.java
@@ -22,8 +22,6 @@ package org.apache.asterix.metadata.entities;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
 
 import org.apache.asterix.metadata.MetadataCache;
 import org.apache.asterix.metadata.api.IMetadataEntity;
@@ -33,19 +31,21 @@ import org.apache.asterix.metadata.api.IMetadataEntity;
  */
 public class NodeGroup implements IMetadataEntity<NodeGroup> {
 
-    private static final long serialVersionUID = 2L;
+    private static final long serialVersionUID = 1L;
 
     // Enforced to be unique within an Asterix cluster.
     private final String groupName;
-    private final Set<String> nodeNames;
+    private final List<String> nodeNames;
 
     public NodeGroup(String groupName, List<String> nodeNames) {
         this.groupName = groupName;
-        if (nodeNames != null) {
-            this.nodeNames = new TreeSet<>(nodeNames);
-        } else {
-            this.nodeNames = Collections.emptySet();
-        }
+        this.nodeNames = nodeNames;
+    }
+
+    public static NodeGroup createOrdered(String groupName, List<String> 
nodeNames) {
+        List<String> sortedNodeNames = new ArrayList<>(nodeNames);
+        Collections.sort(sortedNodeNames);
+        return new NodeGroup(groupName, sortedNodeNames);
     }
 
     public String getNodeGroupName() {
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
index 4ef349b..2e10d77 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
@@ -617,7 +617,7 @@ public class DatasetUtil {
             nodeGroup = nodeGroup + "_" + UUID.randomUUID().toString();
             
appCtx.getMetadataLockManager().acquireNodeGroupWriteLock(metadataProvider.getLocks(),
 nodeGroup);
         }
-        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new 
NodeGroup(nodeGroup, new ArrayList<>(ncNames)));
+        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, 
NodeGroup.createOrdered(nodeGroup, new ArrayList<>(ncNames)));
         return nodeGroup;
     }
 
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
index fd45ff4..3586c21 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
@@ -517,4 +517,8 @@ public abstract class SecondaryIndexOperationsHelper {
     public IFileSplitProvider getSecondaryFileSplitProvider() {
         return secondaryFileSplitProvider;
     }
+
+    public AlgebricksPartitionConstraint getSecondaryPartitionConstraint() {
+        return secondaryPartitionConstraint;
+    }
 }
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
index bf7ca34..98a97b0 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
@@ -301,8 +301,6 @@ public class ClusterStateManager implements 
IClusterStateManager {
             }
         }
         clusterActiveLocations.removeAll(pendingRemoval);
-        // for operators attempting to access storage, order the nodes list 
similar to a nodegroup
-        Collections.sort(clusterActiveLocations);
         clusterPartitionConstraint =
                 new 
AlgebricksAbsolutePartitionConstraint(clusterActiveLocations.toArray(new 
String[] {}));
     }

Reply via email to