Yingyi Bu has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1799

Change subject: Remove default node group.
......................................................................

Remove default node group.

In this way, CREATE DATASET statement can adjust to dynamic
cluster topology.

When we create a dataset:
- if the node group name is not given, we create a new node group
  using all currently available nodes;
- if the node group name is give, we use the given node group for
  the dataset.

When we drop a dataset:
- if no other dataset depends on the node group of the dataset to
  be dropped, we also drop the node group.

Change-Id: If68dc6a7c1270ab1f5049c9334e3318425fd8287
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-1/dataset_with_meta-1.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-2/dataset_with_meta-2.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-3/dataset_with_meta-2.3.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-4/dataset_with_meta-4.3.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-5/dataset_with_meta-5.3.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
M 
asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
M 
asterixdb/asterix-app/src/test/resources/runtimets/queries/index-selection/intersection_with_nodegroup/intersection_with_nodegroup.4.ddl.aql
M 
asterixdb/asterix-app/src/test/resources/runtimets/queries/open-index-enforced/index-selection/multi-index/multi-index.1.ddl.aql
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.1.ddl.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.2.query.sqlpp
M 
asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
M 
asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
M 
asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dataset_nodegroup/dataset_nodegroup.1.adm
M 
asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/empty_location/empty_location.3.adm
M 
asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/identical_location/identical_location.4.adm
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
35 files changed, 162 insertions(+), 145 deletions(-)


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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
index e2589da..eee6bdc 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java
@@ -33,7 +33,6 @@
 import org.apache.asterix.lang.common.statement.DeleteStatement;
 import org.apache.asterix.lang.common.statement.DropDatasetStatement;
 import org.apache.asterix.lang.common.statement.InsertStatement;
-import org.apache.asterix.lang.common.statement.NodeGroupDropStatement;
 import org.apache.asterix.metadata.dataset.hints.DatasetHints;
 import org.apache.asterix.metadata.entities.Dataverse;
 import org.apache.asterix.metadata.utils.MetadataConstants;
@@ -125,14 +124,6 @@
                 if (invalidOperation) {
                     message = "Delete operation is not permitted in dataverse "
                             + MetadataConstants.METADATA_DATAVERSE_NAME;
-                }
-                break;
-
-            case Statement.Kind.NODEGROUP_DROP:
-                String nodegroupName = ((NodeGroupDropStatement) 
stmt).getNodeGroupName().getValue();
-                invalidOperation = 
MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME.equals(nodegroupName);
-                if (invalidOperation) {
-                    message = "Cannot drop nodegroup:" + nodegroupName;
                 }
                 break;
 
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 90a07af..95d8e2d 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -26,6 +26,7 @@
 import java.io.InputStreamReader;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -33,7 +34,8 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
-import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.ExecutorService;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -151,6 +153,7 @@
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.TypeSignature;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
 import 
org.apache.asterix.transaction.management.service.transaction.DatasetIdFactory;
 import org.apache.asterix.translator.AbstractLangTranslator;
 import 
org.apache.asterix.translator.CompiledStatements.CompiledDeleteStatement;
@@ -701,24 +704,18 @@
         if (ngNameId != null) {
             return ngNameId.getValue();
         }
-        String hintValue = 
dd.getHints().get(DatasetNodegroupCardinalityHint.NAME);
-        if (hintValue == null) {
-            return MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME;
-        } else {
-            return dataverse + ":" + dd.getName().getValue();
-        }
+        return dataverse + "." + dd.getName().getValue();
     }
 
     protected static String configureNodegroupForDataset(ICcApplicationContext 
appCtx, Map<String, String> hints,
             String dataverseName, String datasetName, 
MetadataTransactionContext mdTxnCtx) throws CompilationException {
-        int nodegroupCardinality;
-        String nodegroupName;
+        Set<String> allNodes = 
ClusterStateManager.INSTANCE.getParticipantNodes();
+        List<String> selectedNodes = new ArrayList<>();
         String hintValue = hints.get(DatasetNodegroupCardinalityHint.NAME);
         if (hintValue == null) {
-            nodegroupName = MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME;
-            return nodegroupName;
+            selectedNodes.addAll(allNodes);
         } else {
-            int numChosen = 0;
+            int nodegroupCardinality;
             boolean valid = DatasetHints.validate(appCtx, 
DatasetNodegroupCardinalityHint.NAME,
                     hints.get(DatasetNodegroupCardinalityHint.NAME)).first;
             if (!valid) {
@@ -726,35 +723,20 @@
             } else {
                 nodegroupCardinality = 
Integer.parseInt(hints.get(DatasetNodegroupCardinalityHint.NAME));
             }
-            List<String> nodeNames = 
appCtx.getMetadataProperties().getNodeNames();
-            List<String> nodeNamesClone = new ArrayList<>(nodeNames);
-            String metadataNodeName = 
appCtx.getMetadataProperties().getMetadataNodeName();
-            List<String> selectedNodes = new ArrayList<>();
-            selectedNodes.add(metadataNodeName);
-            numChosen++;
-            nodeNamesClone.remove(metadataNodeName);
-
-            if (numChosen < nodegroupCardinality) {
-                Random random = new Random();
-                String[] nodes = nodeNamesClone.toArray(new String[] {});
-                int[] b = new int[nodeNamesClone.size()];
-                for (int i = 0; i < b.length; i++) {
-                    b[i] = i;
-                }
-
-                for (int i = 0; i < nodegroupCardinality - numChosen; i++) {
-                    int selected = i + random.nextInt(nodeNamesClone.size() - 
i);
-                    int selNodeIndex = b[selected];
-                    selectedNodes.add(nodes[selNodeIndex]);
-                    int temp = b[0];
-                    b[0] = b[selected];
-                    b[selected] = temp;
-                }
-            }
-            nodegroupName = dataverseName + ":" + datasetName;
-            MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new 
NodeGroup(nodegroupName, selectedNodes));
-            return nodegroupName;
+            List<String> allNodeList = new ArrayList<>(allNodes);
+            Collections.shuffle(allNodeList);
+            selectedNodes = allNodeList.subList(0, nodegroupCardinality);
         }
+
+        // Creates the associated node group for the dataset.
+        String nodeGroupName = dataverseName + "." + datasetName;
+        // Always use dataset name as the node group name.
+        // If the node group name exists, we append a UUID to the node group 
name.
+        if (MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodeGroupName) != 
null) {
+            nodeGroupName = nodeGroupName + "_" + UUID.randomUUID();
+        }
+        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new 
NodeGroup(nodeGroupName, selectedNodes));
+        return nodeGroupName;
 
     }
 
@@ -1184,19 +1166,15 @@
 
             // #. prepare jobs which will drop corresponding datasets with 
indexes.
             List<Dataset> datasets = 
MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverseName);
-            for (int j = 0; j < datasets.size(); j++) {
-                String datasetName = datasets.get(j).getDatasetName();
-                DatasetType dsType = datasets.get(j).getDatasetType();
+            for (Dataset dataset : datasets) {
+                String datasetName = dataset.getDatasetName();
+                DatasetType dsType = dataset.getDatasetType();
                 if (dsType == DatasetType.INTERNAL) {
                     List<Index> indexes =
                             
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, 
datasetName);
-                    for (int k = 0; k < indexes.size(); k++) {
-                        if (indexes.get(k).isSecondaryIndex()) {
-                            jobsToExecute.add(
-                                    
IndexUtil.buildDropIndexJobSpec(indexes.get(k), metadataProvider, 
datasets.get(j)));
-                        }
+                    for (Index index : indexes) {
+                        
jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, 
dataset));
                     }
-                    
jobsToExecute.add(DatasetUtil.dropDatasetJobSpec(datasets.get(j), 
metadataProvider));
                 } else {
                     // External dataset
                     List<Index> indexes =
@@ -1204,13 +1182,13 @@
                     for (int k = 0; k < indexes.size(); k++) {
                         if 
(ExternalIndexingOperations.isFileIndex(indexes.get(k))) {
                             
jobsToExecute.add(ExternalIndexingOperations.buildDropFilesIndexJobSpec(metadataProvider,
-                                    datasets.get(j)));
+                                    dataset));
                         } else {
                             jobsToExecute.add(
-                                    
IndexUtil.buildDropIndexJobSpec(indexes.get(k), metadataProvider, 
datasets.get(j)));
+                                    
IndexUtil.buildDropIndexJobSpec(indexes.get(k), metadataProvider, dataset));
                         }
                     }
-                    
ExternalDatasetsRegistry.INSTANCE.removeDatasetInfo(datasets.get(j));
+                    
ExternalDatasetsRegistry.INSTANCE.removeDatasetInfo(dataset);
                 }
             }
             jobsToExecute.add(DataverseUtil.dropDataverseJobSpec(dv, 
metadataProvider));
@@ -1236,6 +1214,15 @@
 
             // #. finally, delete the dataverse.
             MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
+
+            // Drops all node groups that no longer needed
+            for (Dataset dataset : datasets) {
+                String nodeGroup = dataset.getNodeGroupName();
+                if (MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodeGroup) 
!= null) {
+                    MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, 
nodeGroup, true);
+                }
+            }
+
             if (activeDataverse != null && activeDataverse.getDataverseName() 
== dataverseName) {
                 activeDataverse = null;
             }
@@ -1599,7 +1586,7 @@
                     throw new AlgebricksException("There is no nodegroup with 
this name " + nodegroupName + ".");
                 }
             } else {
-                MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, 
nodegroupName);
+                MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, 
nodegroupName, false);
             }
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
index d715410..da69eff 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
@@ -42,7 +42,6 @@
 import org.apache.asterix.metadata.lock.MetadataLockManager;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.metadata.utils.IndexUtil;
-import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
 import 
org.apache.asterix.transaction.management.service.transaction.JobIdFactory;
 import 
org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
@@ -197,9 +196,7 @@
 
         // Drops the metadata entry of source dataset's node group.
         String sourceNodeGroup = source.getNodeGroupName();
-        if 
(!sourceNodeGroup.equals(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME)) {
-            MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, sourceNodeGroup);
-        }
+        MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, sourceNodeGroup, 
true);
     }
 
     // Creates the files for the rebalance target dataset.
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-1/dataset_with_meta-1.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-1/dataset_with_meta-1.1.adm
index a644ebe..6615204 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-1/dataset_with_meta-1.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-1/dataset_with_meta-1.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:25 
PDT 2016", "DatasetId": 101, "PendingOp": 0, "MetatypeDataverseName": "test", 
"MetatypeName": "AuxiliaryType" }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:25 PDT 2016", "DatasetId": 101, "PendingOp": 
0, "MetatypeDataverseName": "test", "MetatypeName": "AuxiliaryType" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-2/dataset_with_meta-2.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-2/dataset_with_meta-2.1.adm
index 7160a28..94cc963 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-2/dataset_with_meta-2.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-2/dataset_with_meta-2.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:26 
PDT 2016", "DatasetId": 102, "PendingOp": 0, "MetatypeDataverseName": "meta", 
"MetatypeName": "AuxiliaryType" }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:26 PDT 2016", "DatasetId": 102, "PendingOp": 
0, "MetatypeDataverseName": "meta", "MetatypeName": "AuxiliaryType" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-3/dataset_with_meta-2.3.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-3/dataset_with_meta-2.3.adm
index 45fa2be..c8a4ce8 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-3/dataset_with_meta-2.3.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-3/dataset_with_meta-2.3.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:26 
PDT 2016", "DatasetId": 103, "PendingOp": 0, "MetatypeDataverseName": "test", 
"MetatypeName": "LineType" }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:26 PDT 2016", "DatasetId": 103, "PendingOp": 
0, "MetatypeDataverseName": "test", "MetatypeName": "LineType" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-4/dataset_with_meta-4.3.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-4/dataset_with_meta-4.3.adm
index b42a0c9..d58eaab 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-4/dataset_with_meta-4.3.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-4/dataset_with_meta-4.3.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false, "KeySourceIndicator": [ 1 ] }, "Hints": {{  }}, 
"Timestamp": "Tue Jun 21 15:54:26 PDT 2016", "DatasetId": 104, "PendingOp": 0, 
"MetatypeDataverseName": "test", "MetatypeName": "LineType" }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false, 
"KeySourceIndicator": [ 1 ] }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 
15:54:26 PDT 2016", "DatasetId": 104, "PendingOp": 0, "MetatypeDataverseName": 
"test", "MetatypeName": "LineType" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-5/dataset_with_meta-5.3.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-5/dataset_with_meta-5.3.adm
index ca2e7c0..5cffa59 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-5/dataset_with_meta-5.3.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/dataset_with_meta-5/dataset_with_meta-5.3.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "key" ] ], "PrimaryKey": [ [ "key" ] ], 
"Autogenerated": false, "KeySourceIndicator": [ 1 ] }, "Hints": {{  }}, 
"Timestamp": "Tue Jun 21 15:54:26 PDT 2016", "DatasetId": 105, "PendingOp": 0, 
"MetatypeDataverseName": "test", "MetatypeName": "AuxiliaryType" }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "key" ] ], "PrimaryKey": [ [ "key" ] ], "Autogenerated": false, 
"KeySourceIndicator": [ 1 ] }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 
15:54:26 PDT 2016", "DatasetId": 105, "PendingOp": 0, "MetatypeDataverseName": 
"test", "MetatypeName": "AuxiliaryType" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
index 1ad75f5..ea579ac 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{ { "Name": "CARDINALITY", "Value": "2000" 
} }}, "Timestamp": "Tue Jun 21 15:54:28 PDT 2016", "DatasetId": 114, 
"PendingOp": 0 }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{ { 
"Name": "CARDINALITY", "Value": "2000" } }}, "Timestamp": "Tue Jun 21 15:54:28 
PDT 2016", "DatasetId": 114, "PendingOp": 0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
index 9f2e9ea..2c9fc43 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{ { "Name": "CARDINALITY", "Value": "2000" 
} }}, "Timestamp": "Tue Jun 21 15:54:28 PDT 2016", "DatasetId": 115, 
"PendingOp": 0 }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{ { 
"Name": "CARDINALITY", "Value": "2000" } }}, "Timestamp": "Tue Jun 21 15:54:28 
PDT 2016", "DatasetId": 115, "PendingOp": 0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
index f59f892..d72c8bd 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:28 
PDT 2016", "DatasetId": 116, "PendingOp": 0 }
+{ "DataverseName": "test", "DatasetName": "Book", "DatatypeDataverseName": 
"test", "DatatypeName": "LineType", "DatasetType": "INTERNAL", "GroupName": 
"test.Book", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:28 PDT 2016", "DatasetId": 116, "PendingOp": 
0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
index 65ec178..7a24dab 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatasetName": "dst01", "DatatypeDataverseName": 
"testdv", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:27 
PDT 2016", "DatasetId": 108, "PendingOp": 0 }
+{ "DataverseName": "testdv", "DatasetName": "dst01", "DatatypeDataverseName": 
"testdv", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"testdv.dst01", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:27 PDT 2016", "DatasetId": 108, "PendingOp": 
0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
index fb590b3..f9158a4 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
@@ -1,2 +1 @@
-{ "GroupName": "DEFAULT_NG_ALL_NODES", "NodeNames": {{ "asterix_nc1", 
"asterix_nc2" }}, "Timestamp": "Mon Sep 17 12:31:45 PDT 2012" }
 { "GroupName": "MetadataGroup", "NodeNames": {{ "asterix_nc1" }}, "Timestamp": 
"Mon Sep 17 12:31:45 PDT 2012" }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
index 43f0487..a6c6bb1 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatasetName": "t1", "DatatypeDataverseName": 
"test", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 15:54:27 
PDT 2016", "DatasetId": 110, "PendingOp": 0 }
+{ "DataverseName": "test", "DatasetName": "t1", "DatatypeDataverseName": 
"test", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test.t1", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 15:54:27 PDT 2016", "DatasetId": 110, "PendingOp": 
0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
index bcf68bb..981fc7e 100644
--- 
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
@@ -1,2 +1,2 @@
-{ "GroupName": "DEFAULT_NG_ALL_NODES", "NodeNames": {{ "asterix_nc1", 
"asterix_nc2" }}, "Timestamp": "Thu Sep 13 11:42:20 PDT 2012" }
 { "GroupName": "MetadataGroup", "NodeNames": {{ "asterix_nc1" }}, "Timestamp": 
"Thu Sep 13 11:42:20 PDT 2012" }
+{ "GroupName": "testdv.t1", "NodeNames": {{ "asterix_nc1", "asterix_nc2" }}, 
"Timestamp": "Thu Jun 01 16:07:46 PDT 2017" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/index-selection/intersection_with_nodegroup/intersection_with_nodegroup.4.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/index-selection/intersection_with_nodegroup/intersection_with_nodegroup.4.ddl.aql
index 5e33117..058c36c 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/index-selection/intersection_with_nodegroup/intersection_with_nodegroup.4.ddl.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/index-selection/intersection_with_nodegroup/intersection_with_nodegroup.4.ddl.aql
@@ -18,4 +18,4 @@
  */
 drop dataverse TinySocial if exists;
 
-drop nodegroup group_test;
\ No newline at end of file
+drop nodegroup group_test if exists;
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/open-index-enforced/index-selection/multi-index/multi-index.1.ddl.aql
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/open-index-enforced/index-selection/multi-index/multi-index.1.ddl.aql
index 0efffb2..f32bae0 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries/open-index-enforced/index-selection/multi-index/multi-index.1.ddl.aql
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries/open-index-enforced/index-selection/multi-index/multi-index.1.ddl.aql
@@ -35,7 +35,7 @@
   misc: string
 }
 
-create nodegroup group1 if not exists on nc1, nc2;
+create nodegroup group1 if not exists on asterix_nc1, asterix_nc2;
 
 create dataset DBLP(DBLPType)
   primary key id on group1;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.1.ddl.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.1.ddl.sqlpp
new file mode 100644
index 0000000..1a9b76f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.1.ddl.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse twitter if exists;
+create  dataverse twitter;
+
+use twitter;
+
+create type Tweet as
+{
+  id : bigint,
+  tweetid : bigint,
+  loc : point,
+  time : datetime,
+  text : string
+}
+
+create dataset TwitterData(Tweet) primary key id;
+
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.2.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.2.query.sqlpp
new file mode 100644
index 0000000..77d9e14
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/dataset_nodegroup/dataset_nodegroup.2.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use twitter;
+
+SELECT ds.GroupName, ng.NodeNames
+FROM Metadata.`Dataset` ds, Metadata.`Nodegroup` ng
+WHERE ds.GroupName = ng.GroupName AND ds.DatasetName="TwitterData";
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
index d522a0a..b541030 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
@@ -1,4 +1,4 @@
-{ "DataverseName": "student", "DatasetName": "gdstd", "DatatypeDataverseName": 
"student", "DatatypeName": "stdType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1860, "PendingOp": 0 }
-{ "DataverseName": "teacher", "DatasetName": "prof", "DatatypeDataverseName": 
"teacher", "DatatypeName": "tchrType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1861, "PendingOp": 0 }
-{ "DataverseName": "teacher", "DatasetName": "pstdoc", 
"DatatypeDataverseName": "teacher", "DatatypeName": "tchrType", "DatasetType": 
"INTERNAL", "GroupName": "DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1862, "PendingOp": 0 }
-{ "DataverseName": "student", "DatasetName": "ugdstd", 
"DatatypeDataverseName": "student", "DatatypeName": "stdType", "DatasetType": 
"INTERNAL", "GroupName": "DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1859, "PendingOp": 0 }
+{ "DataverseName": "student", "DatasetName": "gdstd", "DatatypeDataverseName": 
"student", "DatatypeName": "stdType", "DatasetType": "INTERNAL", "GroupName": 
"student.gdstd", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ 
{ "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:36 PDT 2016", "DatasetId": 1860, 
"PendingOp": 0 }
+{ "DataverseName": "teacher", "DatasetName": "prof", "DatatypeDataverseName": 
"teacher", "DatatypeName": "tchrType", "DatasetType": "INTERNAL", "GroupName": 
"teacher.prof", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:36 PDT 2016", "DatasetId": 1861, 
"PendingOp": 0 }
+{ "DataverseName": "teacher", "DatasetName": "pstdoc", 
"DatatypeDataverseName": "teacher", "DatatypeName": "tchrType", "DatasetType": 
"INTERNAL", "GroupName": "teacher.pstdoc", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1862, "PendingOp": 0 }
+{ "DataverseName": "student", "DatasetName": "ugdstd", 
"DatatypeDataverseName": "student", "DatatypeName": "stdType", "DatasetType": 
"INTERNAL", "GroupName": "student.ugdstd", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:36 
PDT 2016", "DatasetId": 1859, "PendingOp": 0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
index c8f9ec7..4401cf4 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
@@ -1,4 +1,4 @@
-{ "DataverseName": "student", "DatasetName": "gdstd", "DatatypeDataverseName": 
"student", "DatatypeName": "stdType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1872, "PendingOp": 0 }
-{ "DataverseName": "teacher", "DatasetName": "prof", "DatatypeDataverseName": 
"teacher", "DatatypeName": "tchrType", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1873, "PendingOp": 0 }
-{ "DataverseName": "teacher", "DatasetName": "pstdoc", 
"DatatypeDataverseName": "teacher", "DatatypeName": "tchrType", "DatasetType": 
"INTERNAL", "GroupName": "DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1874, "PendingOp": 0 }
-{ "DataverseName": "student", "DatasetName": "ugdstd", 
"DatatypeDataverseName": "student", "DatatypeName": "stdType", "DatasetType": 
"INTERNAL", "GroupName": "DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1871, "PendingOp": 0 }
+{ "DataverseName": "student", "DatasetName": "gdstd", "DatatypeDataverseName": 
"student", "DatatypeName": "stdType", "DatasetType": "INTERNAL", "GroupName": 
"student.gdstd", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ 
{ "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:37 PDT 2016", "DatasetId": 1872, 
"PendingOp": 0 }
+{ "DataverseName": "teacher", "DatasetName": "prof", "DatatypeDataverseName": 
"teacher", "DatatypeName": "tchrType", "DatasetType": "INTERNAL", "GroupName": 
"teacher.prof", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:37 PDT 2016", "DatasetId": 1873, 
"PendingOp": 0 }
+{ "DataverseName": "teacher", "DatasetName": "pstdoc", 
"DatatypeDataverseName": "teacher", "DatatypeName": "tchrType", "DatasetType": 
"INTERNAL", "GroupName": "teacher.pstdoc", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1874, "PendingOp": 0 }
+{ "DataverseName": "student", "DatasetName": "ugdstd", 
"DatatypeDataverseName": "student", "DatatypeName": "stdType", "DatasetType": 
"INTERNAL", "GroupName": "student.ugdstd", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:37 
PDT 2016", "DatasetId": 1871, "PendingOp": 0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
index d007dd7..5bf8498 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
@@ -1,7 +1,7 @@
-{ "DataverseName": "test1", "DatasetName": "TwitterData", 
"DatatypeDataverseName": "test1", "DatatypeName": "Tweet", "DatasetType": 
"EXTERNAL", "GroupName": "DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "ExternalDetails": { "DatasourceAdapter": "localfs", "Properties": [ { 
"Name": "path", "Value": "asterix_nc1://data/twitter/extrasmalltweets.txt" }, { 
"Name": "format", "Value": "adm" } ], "LastRefreshTime": 
datetime("2016-06-21T23:06:38.287Z"), "TransactionState": 0 }, "Hints": {{  }}, 
"Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1882, "PendingOp": 0 }
-{ "DataverseName": "test1", "DatasetName": "t1", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1876, "PendingOp": 0 }
-{ "DataverseName": "test1", "DatasetName": "t2", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1879, "PendingOp": 0 }
-{ "DataverseName": "test1", "DatasetName": "t3", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1880, "PendingOp": 0 }
-{ "DataverseName": "test2", "DatasetName": "t2", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1877, "PendingOp": 0 }
-{ "DataverseName": "test2", "DatasetName": "t3", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1878, "PendingOp": 0 }
-{ "DataverseName": "test2", "DatasetName": "t4", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"DEFAULT_NG_ALL_NODES", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": 
"HASH", "PartitioningKey": [ [ "id" ] ], "PrimaryKey": [ [ "id" ] ], 
"Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Jun 21 16:06:38 
PDT 2016", "DatasetId": 1881, "PendingOp": 0 }
+{ "DataverseName": "test1", "DatasetName": "TwitterData", 
"DatatypeDataverseName": "test1", "DatatypeName": "Tweet", "DatasetType": 
"EXTERNAL", "GroupName": "test1.TwitterData", "CompactionPolicy": "prefix", 
"CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", 
"Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": 
"5" } ], "ExternalDetails": { "DatasourceAdapter": "localfs", "Properties": [ { 
"Name": "path", "Value": "asterix_nc1://data/twitter/extrasmalltweets.txt" }, { 
"Name": "format", "Value": "adm" } ], "LastRefreshTime": 
datetime("2016-06-21T23:06:38.287Z"), "TransactionState": 0 }, "Hints": {{  }}, 
"Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1882, "PendingOp": 0 }
+{ "DataverseName": "test1", "DatasetName": "t1", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test1.t1", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1876, 
"PendingOp": 0 }
+{ "DataverseName": "test1", "DatasetName": "t2", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test1.t2", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1879, 
"PendingOp": 0 }
+{ "DataverseName": "test1", "DatasetName": "t3", "DatatypeDataverseName": 
"test1", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test1.t3", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1880, 
"PendingOp": 0 }
+{ "DataverseName": "test2", "DatasetName": "t2", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test2.t2", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1877, 
"PendingOp": 0 }
+{ "DataverseName": "test2", "DatasetName": "t3", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test2.t3", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1878, 
"PendingOp": 0 }
+{ "DataverseName": "test2", "DatasetName": "t4", "DatatypeDataverseName": 
"test2", "DatatypeName": "testtype", "DatasetType": "INTERNAL", "GroupName": 
"test2.t4", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { 
"Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": 
"max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { 
"FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ 
[ "id" ] ], "PrimaryKey": [ [ "id" ] ], "Autogenerated": false }, "Hints": {{  
}}, "Timestamp": "Tue Jun 21 16:06:38 PDT 2016", "DatasetId": 1881, 
"PendingOp": 0 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dataset_nodegroup/dataset_nodegroup.1.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dataset_nodegroup/dataset_nodegroup.1.adm
new file mode 100644
index 0000000..26eff43
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/dataset_nodegroup/dataset_nodegroup.1.adm
@@ -0,0 +1 @@
+{ "GroupName": "twitter.TwitterData", "NodeNames": {{ "asterix_nc1", 
"asterix_nc2" }} }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/empty_location/empty_location.3.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/empty_location/empty_location.3.adm
index 398b082..7498ed7 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/empty_location/empty_location.3.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/empty_location/empty_location.3.adm
@@ -1 +1 @@
-{ "DatasetName": "LineItem", "GroupName": "DEFAULT_NG_ALL_NODES" }
\ No newline at end of file
+{ "DatasetName": "LineItem", "GroupName": "tpch.LineItem" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/identical_location/identical_location.4.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/identical_location/identical_location.4.adm
index 398b082..7498ed7 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/identical_location/identical_location.4.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/identical_location/identical_location.4.adm
@@ -1 +1 @@
-{ "DatasetName": "LineItem", "GroupName": "DEFAULT_NG_ALL_NODES" }
\ No newline at end of file
+{ "DatasetName": "LineItem", "GroupName": "tpch.LineItem" }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index f9ae2fa..4574c66 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3192,6 +3192,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
+      <compilation-unit name="dataset_nodegroup">
+        <output-dir compare="Text">dataset_nodegroup</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
       <compilation-unit name="partition-by-nonexistent-field">
         <output-dir compare="Text">partition-by-nonexistent-field</output-dir>
         <expected-error>Field "id" is not found</expected-error>
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
index 2eba48a..79d1774 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
@@ -25,7 +25,6 @@
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.lang.common.struct.Identifier;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-import org.apache.asterix.metadata.utils.MetadataConstants;
 
 public class DatasetDecl implements Statement {
     protected final Identifier name;
@@ -61,8 +60,7 @@
         } else {
             this.metaItemTypeDataverse = metaItemTypeDataverse;
         }
-        this.nodegroupName = nodeGroupName == null ? new 
Identifier(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME)
-                : nodeGroupName;
+        this.nodegroupName = nodeGroupName;
         this.compactionPolicy = compactionPolicy;
         this.compactionPolicyProperties = compactionPolicyProperties;
         this.hints = hints;
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
index 35d0a29..8b4cca1 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
@@ -60,7 +60,6 @@
 import org.apache.asterix.lang.common.expression.UnaryExpr;
 import org.apache.asterix.lang.common.expression.UnorderedListTypeDefinition;
 import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.literal.IntegerLiteral;
 import org.apache.asterix.lang.common.statement.CompactStatement;
 import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
 import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -98,7 +97,6 @@
 import org.apache.asterix.lang.common.struct.QuantifiedPair;
 import org.apache.asterix.lang.common.struct.UnaryExprType;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
 
@@ -490,8 +488,7 @@
             printConfiguration(externalDetails.getProperties());
         }
         Identifier nodeGroupName = dd.getNodegroupName();
-        if (nodeGroupName != null
-                && 
!nodeGroupName.getValue().equals(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME))
 {
+        if (nodeGroupName != null) {
             out.print(" on " + nodeGroupName.getValue());
         }
         Map<String, String> hints = dd.getHints();
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
index 0cc1958..11645e8 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java
@@ -515,13 +515,17 @@
     }
 
     @Override
-    public void dropNodegroup(MetadataTransactionContext ctx, String 
nodeGroupName) throws MetadataException {
+    public void dropNodegroup(MetadataTransactionContext ctx, String 
nodeGroupName, boolean failSilently)
+            throws MetadataException {
+        boolean dropped;
         try {
-            metadataNode.dropNodegroup(ctx.getJobId(), nodeGroupName);
+            dropped = metadataNode.dropNodegroup(ctx.getJobId(), 
nodeGroupName, failSilently);
         } catch (RemoteException e) {
             throw new MetadataException(e);
         }
-        ctx.dropNodeGroup(nodeGroupName);
+        if (dropped) {
+            ctx.dropNodeGroup(nodeGroupName);
+        }
     }
 
     @Override
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index ea7a47c..4880a73 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -645,10 +645,13 @@
     }
 
     @Override
-    public void dropNodegroup(JobId jobId, String nodeGroupName) throws 
MetadataException, RemoteException {
-        List<String> datasetNames;
-        datasetNames = getDatasetNamesPartitionedOnThisNodeGroup(jobId, 
nodeGroupName);
+    public boolean dropNodegroup(JobId jobId, String nodeGroupName, boolean 
failSilently)
+            throws MetadataException, RemoteException {
+        List<String> datasetNames = 
getDatasetNamesPartitionedOnThisNodeGroup(jobId, nodeGroupName);
         if (!datasetNames.isEmpty()) {
+            if (failSilently) {
+                return false;
+            }
             StringBuilder sb = new StringBuilder();
             sb.append("Nodegroup '" + nodeGroupName
                     + "' cannot be dropped; it was used for partitioning these 
datasets:");
@@ -665,6 +668,7 @@
             deleteTupleFromIndex(jobId, 
MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
             // TODO: Change this to be a BTree specific exception, e.g.,
             // BTreeKeyDoesNotExistException.
+            return true;
         } catch (HyracksDataException e) {
             if (e.getComponent().equals(ErrorCode.HYRACKS)
                     && e.getErrorCode() == 
ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
index f36d510..57fcc5e 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
@@ -349,11 +349,14 @@
      *            MetadataTransactionContext of an active metadata transaction.
      * @param nodeGroupName
      *            Name of node group to be deleted.
+     * @param failSilently
+     *            true means it's a no-op if the node group cannot be dropped; 
false means it will throw an exception.
      * @throws MetadataException
      *             For example, there are still datasets partitioned on the 
node
      *             group to be deleted.
      */
-    void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName) 
throws MetadataException;
+    void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName, 
boolean failSilently)
+            throws MetadataException;
 
     /**
      * Inserts a node (machine).
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
index c4ae70c..cfbbda3 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
@@ -367,12 +367,16 @@
      *            A globally unique id for an active metadata transaction.
      * @param nodeGroupName
      *            Name of node group to be deleted.
+     * @param failSilently
+     *            true means it's a no-op if the node group cannot be dropped; 
false means it will throw an exception.
+     * @return Whether the node group has been successfully dropped.
      * @throws MetadataException
      *             For example, there are still datasets partitioned on the 
node
      *             group to be deleted.
      * @throws RemoteException
      */
-    void dropNodegroup(JobId jobId, String nodeGroupName) throws 
MetadataException, RemoteException;
+    boolean dropNodegroup(JobId jobId, String nodeGroupName, boolean 
failSilently)
+            throws MetadataException, RemoteException;
 
     /**
      * Inserts a node (compute node), acquiring local locks on behalf of the
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
index 673a5ae..93b19f1 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
@@ -26,7 +26,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.asterix.common.api.IDatasetLifecycleManager;
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.cluster.ClusterPartition;
 import org.apache.asterix.common.config.ClusterProperties;
@@ -84,14 +83,11 @@
 import 
org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallbackFactory;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicyFactory;
 import 
org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTrackerFactory;
-import org.apache.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.ConstantMergePolicyFactory;
 import org.apache.hyracks.storage.am.lsm.common.impls.NoMergePolicyFactory;
 import org.apache.hyracks.storage.am.lsm.common.impls.PrefixMergePolicyFactory;
 import org.apache.hyracks.storage.common.ILocalResourceRepository;
 import org.apache.hyracks.storage.common.LocalResource;
-import org.apache.hyracks.storage.common.buffercache.IBufferCache;
-import org.apache.hyracks.storage.common.file.IFileMapProvider;
 
 /**
  * Initializes the remote metadata storage facilities ("universe") using a
@@ -106,14 +102,10 @@
     public static final boolean IS_DEBUG_MODE = false;
     private static final Logger LOGGER = 
Logger.getLogger(MetadataBootstrap.class.getName());
     private static INcApplicationContext appContext;
-    private static IBufferCache bufferCache;
-    private static IFileMapProvider fileMapProvider;
-    private static IDatasetLifecycleManager dataLifecycleManager;
     private static ILocalResourceRepository localResourceRepository;
     private static IIOManager ioManager;
     private static String metadataNodeName;
     private static List<String> nodeNames;
-    private static String outputDir;
     private static boolean isNewUniverse;
     private static final IMetadataIndex[] PRIMARY_INDEXES =
             new IMetadataIndex[] { MetadataPrimaryIndexes.DATAVERSE_DATASET, 
MetadataPrimaryIndexes.DATASET_DATASET,
@@ -130,7 +122,6 @@
     /**
      * bootstrap metadata
      *
-     * @param asterixPropertiesProvider
      * @param ncServiceContext
      * @param isNewUniverse
      * @throws ACIDException
@@ -146,10 +137,7 @@
         MetadataProperties metadataProperties = 
appContext.getMetadataProperties();
         metadataNodeName = metadataProperties.getMetadataNodeName();
         nodeNames = metadataProperties.getNodeNames();
-        dataLifecycleManager = appContext.getDatasetLifecycleManager();
         localResourceRepository = appContext.getLocalResourceRepository();
-        bufferCache = appContext.getBufferCache();
-        fileMapProvider = appContext.getFileMapManager();
         ioManager = ncServiceContext.getIoManager();
 
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
@@ -260,10 +248,6 @@
         metadataGroupNodeNames.add(metadataNodeName);
         NodeGroup groupRecord = new 
NodeGroup(MetadataConstants.METADATA_NODEGROUP_NAME, metadataGroupNodeNames);
         MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, groupRecord);
-        List<String> nodes = new ArrayList<>();
-        nodes.addAll(nodeNames);
-        NodeGroup defaultGroup = new 
NodeGroup(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME, nodes);
-        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, defaultGroup);
     }
 
     private static void insertInitialAdapters(MetadataTransactionContext 
mdTxnCtx) throws MetadataException {
@@ -378,14 +362,6 @@
             indexHelper.open(); // Opening the index through the helper will 
ensure it gets instantiated
             indexHelper.close();
         }
-    }
-
-    public static String getOutputDir() {
-        return outputDir;
-    }
-
-    public static String getMetadataNodeName() {
-        return metadataNodeName;
     }
 
     /**
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
index 4b31767..c564912 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
@@ -60,7 +60,6 @@
 import org.apache.asterix.metadata.utils.ExternalIndexingOperations;
 import org.apache.asterix.metadata.utils.IndexUtil;
 import org.apache.asterix.metadata.utils.InvertedIndexResourceFactoryProvider;
-import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.asterix.metadata.utils.MetadataUtil;
 import org.apache.asterix.metadata.utils.RTreeResourceFactoryProvider;
 import org.apache.asterix.om.types.ARecordType;
@@ -409,10 +408,7 @@
         // #. finally, delete the dataset.
         MetadataManager.INSTANCE.dropDataset(mdTxnCtx.getValue(), 
dataverseName, datasetName);
         // Drop the associated nodegroup
-        String nodegroup = getNodeGroupName();
-        if 
(!nodegroup.equalsIgnoreCase(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME))
 {
-            MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx.getValue(), 
nodegroup);
-        }
+        MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx.getValue(), 
getNodeGroupName(), true);
     }
 
     /**
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
index 1dc6657..6769770 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
@@ -30,10 +30,6 @@
     // Name of the node group where metadata is stored on.
     public static final String METADATA_NODEGROUP_NAME = "MetadataGroup";
 
-    // Name of the default nodegroup where internal/feed datasets will be 
partitioned
-    // if an explicit nodegroup is not specified at the time of creation of a 
dataset
-    public static final String METADATA_DEFAULT_NODEGROUP_NAME = 
"DEFAULT_NG_ALL_NODES";
-
     private MetadataConstants() {
     }
 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1799
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If68dc6a7c1270ab1f5049c9334e3318425fd8287
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Yingyi Bu <[email protected]>

Reply via email to