Repository: asterixdb Updated Branches: refs/heads/master ce062ba29 -> 392e5f2f1
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataverse/single_dataverse.9.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataverse/single_dataverse.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataverse/single_dataverse.9.adm index 9eb181a..6461f3c 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataverse/single_dataverse.9.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataverse/single_dataverse.9.adm @@ -1 +1 @@ -{ "DatasetName": "Orders", "GroupName": "Orders_1", "rebalanceCount": 1 } \ No newline at end of file +{ "DatasetName": "Orders", "GroupName": "tpch.Orders_1", "rebalanceCount": 1 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml ---------------------------------------------------------------------- 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> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java ---------------------------------------------------------------------- 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.common.exceptions.CompilationException; 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 @@ public class DatasetDecl implements Statement { } 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; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java ---------------------------------------------------------------------- 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.TypeReferenceExpression; 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.OperatorType; 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 @@ public class FormatPrintVisitor implements ILangVisitor<Void, Integer> { 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(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataManager.java ---------------------------------------------------------------------- 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 @@ public class MetadataManager implements IMetadataManager { } @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 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java ---------------------------------------------------------------------- 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 @@ public class MetadataNode implements IMetadataNode { } @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 @@ public class MetadataNode implements IMetadataNode { 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) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java ---------------------------------------------------------------------- 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 @@ public interface IMetadataManager extends IMetadataBootstrap { * 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). http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java ---------------------------------------------------------------------- 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 @@ public interface IMetadataNode extends Remote, Serializable { * 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 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java ---------------------------------------------------------------------- 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.List; 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.btree.dataflow.LSMBTreeLocalResourceFac 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 class MetadataBootstrap { 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 @@ public class MetadataBootstrap { /** * bootstrap metadata * - * @param asterixPropertiesProvider * @param ncServiceContext * @param isNewUniverse * @throws ACIDException @@ -146,10 +137,7 @@ public class MetadataBootstrap { 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 @@ public class MetadataBootstrap { 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 { @@ -380,14 +364,6 @@ public class MetadataBootstrap { } } - public static String getOutputDir() { - return outputDir; - } - - public static String getMetadataNodeName() { - return metadataNodeName; - } - /** * Perform recovery of DDL operations metadata records */ http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java ---------------------------------------------------------------------- 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..3aed427 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 @@ -56,11 +56,11 @@ import org.apache.asterix.metadata.api.IMetadataEntity; import org.apache.asterix.metadata.declared.BTreeResourceFactoryProvider; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.metadata.lock.ExternalDatasetsRegistry; +import org.apache.asterix.metadata.lock.MetadataLockManager; import org.apache.asterix.metadata.utils.DatasetUtil; 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; @@ -320,7 +320,7 @@ public class Dataset implements IMetadataEntity<Dataset>, IDataset { */ public void drop(MetadataProvider metadataProvider, MutableObject<MetadataTransactionContext> mdTxnCtx, List<JobSpecification> jobsToExecute, MutableBoolean bActiveTxn, MutableObject<ProgressState> progress, - IHyracksClientConnection hcc) throws Exception { + IHyracksClientConnection hcc, boolean dropCorrespondingNodeGroup) throws Exception { Map<FeedConnectionId, Pair<JobSpecification, Boolean>> disconnectJobList = new HashMap<>(); if (getDatasetType() == DatasetType.INTERNAL) { // prepare job spec(s) that would disconnect any active feeds involving the dataset. @@ -408,10 +408,11 @@ public class Dataset implements IMetadataEntity<Dataset>, IDataset { // #. 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); + + // Drops the associated nodegroup if it is no longer used by any other dataset. + if (dropCorrespondingNodeGroup) { + MetadataLockManager.INSTANCE.acquireNodeGroupWriteLock(metadataProvider.getLocks(), nodeGroupName); + MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx.getValue(), nodeGroupName, true); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java index 6c8999a..9815f6f 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java @@ -108,8 +108,8 @@ public class MetadataLockManager { locks.add(IMetadataLock.Mode.READ, lock); } - public void acquireNodeGroupWriteLock(LockList locks, String dataverseName) throws AsterixException { - MetadataLock lock = nodeGroupsLocks.computeIfAbsent(dataverseName, LOCK_FUNCTION); + public void acquireNodeGroupWriteLock(LockList locks, String nodeGroupName) throws AsterixException { + MetadataLock lock = nodeGroupsLocks.computeIfAbsent(nodeGroupName, LOCK_FUNCTION); locks.add(IMetadataLock.Mode.WRITE, lock); } @@ -174,7 +174,9 @@ public class MetadataLockManager { && !metaItemTypeFullyQualifiedName.equals(itemTypeFullyQualifiedName)) { acquireDataTypeReadLock(locks, metaItemTypeFullyQualifiedName); } - acquireNodeGroupReadLock(locks, nodeGroupName); + if (nodeGroupName != null) { + acquireNodeGroupReadLock(locks, nodeGroupName); + } if (!isDefaultCompactionPolicy) { acquireCompactionPolicyReadLock(locks, compactionPolicyName); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java ---------------------------------------------------------------------- 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 6801427..154e1b5 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 @@ -20,8 +20,11 @@ package org.apache.asterix.metadata.utils; import java.io.DataOutput; import java.rmi.RemoteException; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.logging.Logger; import org.apache.asterix.builders.IARecordBuilder; @@ -47,6 +50,8 @@ import org.apache.asterix.metadata.entities.Dataset; import org.apache.asterix.metadata.entities.Dataverse; import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.entities.InternalDatasetDetails; +import org.apache.asterix.metadata.entities.NodeGroup; +import org.apache.asterix.metadata.lock.MetadataLockManager; import org.apache.asterix.om.base.AMutableString; import org.apache.asterix.om.base.AString; import org.apache.asterix.om.types.ARecordType; @@ -505,4 +510,53 @@ public class DatasetUtil { int idx = datasetName.indexOf('.'); return datasetName.substring(0, idx); } + + /*** + * Creates a node group that is associated with a new dataset. + * + * @param dataverseName, + * the dataverse name of the dataset. + * @param datasetName, + * the name of the dataset. + * @param ncNames, + * the set of node names. + * @param metadataProvider, + * the metadata provider. + * @return the name of the created node group. + * @throws Exception + */ + public static String createNodeGroupForNewDataset(String dataverseName, String datasetName, Set<String> ncNames, + MetadataProvider metadataProvider) throws Exception { + return createNodeGroupForNewDataset(dataverseName, datasetName, 0L, ncNames, metadataProvider); + } + + /*** + * Creates a node group that is associated with a new dataset. + * + * @param dataverseName, + * the dataverse name of the dataset. + * @param datasetName, + * the name of the dataset. + * @param rebalanceCount + * , the rebalance count of the dataset. + * @param ncNames, + * the set of node names. + * @param metadataProvider, + * the metadata provider. + * @return the name of the created node group. + * @throws Exception + */ + public static String createNodeGroupForNewDataset(String dataverseName, String datasetName, long rebalanceCount, + Set<String> ncNames, MetadataProvider metadataProvider) throws Exception { + String nodeGroup = dataverseName + "." + datasetName + (rebalanceCount == 0L ? "" : "_" + rebalanceCount); + MetadataTransactionContext mdTxnCtx = metadataProvider.getMetadataTxnContext(); + MetadataLockManager.INSTANCE.acquireNodeGroupWriteLock(metadataProvider.getLocks(), nodeGroup); + NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodeGroup); + if (ng != null) { + nodeGroup = nodeGroup + "_" + UUID.randomUUID().toString(); + MetadataLockManager.INSTANCE.acquireNodeGroupWriteLock(metadataProvider.getLocks(), nodeGroup); + } + MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new NodeGroup(nodeGroup, new ArrayList<>(ncNames))); + return nodeGroup; + } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/392e5f2f/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java ---------------------------------------------------------------------- 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 @@ public class MetadataConstants { // 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() { } }