abdullah alamoudi has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1174
Change subject: Add Default Dataverse and AnyObject Datatype
......................................................................
Add Default Dataverse and AnyObject Datatype
Change-Id: Ie02c74c8b005dce73888afd4dfe19ede2c60a8e8
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
M
asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
M
asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
M
asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
A
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
7 files changed, 196 insertions(+), 107 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/74/1174/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
index c11b875..a8637cc 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
@@ -37,16 +37,15 @@
import org.apache.asterix.common.config.MessagingProperties;
import org.apache.asterix.common.replication.IRemoteRecoveryManager;
import org.apache.asterix.common.transactions.IRecoveryManager;
-import
org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
import org.apache.asterix.common.transactions.IRecoveryManager.SystemState;
import org.apache.asterix.common.utils.StoragePathUtil;
import org.apache.asterix.event.schema.cluster.Cluster;
import org.apache.asterix.event.schema.cluster.Node;
import org.apache.asterix.messaging.MessagingChannelInterfaceFactory;
import org.apache.asterix.messaging.NCMessageBroker;
-import org.apache.asterix.metadata.bootstrap.MetadataBootstrap;
import org.apache.asterix.runtime.message.ReportMaxResourceIdMessage;
import org.apache.asterix.runtime.util.AsterixClusterProperties;
+import
org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
import
org.apache.asterix.transaction.management.service.recovery.RecoveryManager;
import org.apache.commons.io.FileUtils;
import org.apache.hyracks.api.application.INCApplicationContext;
@@ -190,11 +189,6 @@
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info("Stopping Asterix node controller: " + nodeId);
}
-
- if (isMetadataNode) {
- MetadataBootstrap.stopUniverse();
- }
-
//Clean any temporary files
performLocalCleanUp();
diff --git
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
index e341727..313cefe 100644
---
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
+++
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
@@ -1,2 +1,3 @@
+{ "DataverseName": "Default", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Wed Sep
14 23:26:12 EEST 2016", "PendingOp": 0 }
{ "DataverseName": "Metadata", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Tue Jun
21 15:54:20 PDT 2016", "PendingOp": 0 }
{ "DataverseName": "testdv", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Tue Jun
21 15:54:27 PDT 2016", "PendingOp": 0 }
diff --git
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
index 1920bab..91639a8 100644
---
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
+++
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
@@ -1,3 +1,4 @@
+{ "DataverseName": "Metadata", "DatatypeName": "AnyObject", "Derived": {
"Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [
] } }, "Timestamp": "Wed Sep 14 23:26:12 EEST 2016" }
{ "DataverseName": "Metadata", "DatatypeName": "CompactionPolicyRecordType",
"Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true,
"Fields": [ { "FieldName": "DataverseName", "FieldType": "string",
"IsNullable": false }, { "FieldName": "CompactionPolicy", "FieldType":
"string", "IsNullable": false }, { "FieldName": "Classname", "FieldType":
"string", "IsNullable": false } ] } }, "Timestamp": "Wed Jul 27 00:27:47 AST
2016" }
{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType", "Derived":
{ "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields":
[ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false },
{ "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false }, {
"FieldName": "DatatypeDataverseName", "FieldType": "string", "IsNullable":
false }, { "FieldName": "DatatypeName", "FieldType": "string", "IsNullable":
false }, { "FieldName": "DatasetType", "FieldType": "string", "IsNullable":
false }, { "FieldName": "GroupName", "FieldType": "string", "IsNullable": false
}, { "FieldName": "CompactionPolicy", "FieldType": "string", "IsNullable":
false }, { "FieldName": "CompactionPolicyProperties", "FieldType":
"DatasetRecordType_CompactionPolicyProperties", "IsNullable": false }, {
"FieldName": "InternalDetails", "FieldType":
"DatasetRecordType_InternalDetails", "IsNullable": true }, { "FieldName":
"ExternalDetails", "FieldType":
"DatasetRecordType_ExternalDetails", "IsNullable": true }, { "FieldName":
"Hints", "FieldType": "DatasetRecordType_Hints", "IsNullable": false }, {
"FieldName": "Timestamp", "FieldType": "string", "IsNullable": false }, {
"FieldName": "DatasetId", "FieldType": "int32", "IsNullable": false }, {
"FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false } ] } },
"Timestamp": "Wed Jul 27 00:27:47 AST 2016" }
{ "DataverseName": "Metadata", "DatatypeName":
"DatasetRecordType_CompactionPolicyProperties", "Derived": { "Tag":
"ORDEREDLIST", "IsAnonymous": true, "OrderedList":
"DatasetRecordType_CompactionPolicyProperties_Item" }, "Timestamp": "Wed Jul 27
00:27:47 AST 2016" }
diff --git
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
index b301d59..519c800 100644
---
a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
+++
b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
@@ -1,3 +1,4 @@
+{ "DataverseName": "Default", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Wed Sep
14 23:26:12 EEST 2016", "PendingOp": 0 }
{ "DataverseName": "Metadata", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Tue Jun
21 15:54:20 PDT 2016", "PendingOp": 0 }
{ "DataverseName": "test", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Tue Jun
21 15:54:27 PDT 2016", "PendingOp": 0 }
{ "DataverseName": "testdv", "DataFormat":
"org.apache.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Tue Jun
21 15:54:28 PDT 2016", "PendingOp": 0 }
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 55b1045..cf215e0 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
@@ -19,6 +19,7 @@
package org.apache.asterix.metadata.bootstrap;
import java.io.File;
+import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -37,6 +38,7 @@
import org.apache.asterix.common.config.IAsterixPropertiesProvider;
import org.apache.asterix.common.context.BaseOperationTracker;
import org.apache.asterix.common.context.CorrelatedPrefixMergePolicyFactory;
+import org.apache.asterix.common.exceptions.ACIDException;
import
org.apache.asterix.common.ioopcallbacks.LSMBTreeIOOperationCallbackFactory;
import org.apache.asterix.common.utils.StoragePathUtil;
import org.apache.asterix.external.adapter.factory.GenericAdapterFactory;
@@ -104,7 +106,7 @@
* stopUniverse() should be called upon application undeployment.
*/
public class MetadataBootstrap {
- public static final boolean IS_DEBUG_MODE = false;// true
+ public static final boolean IS_DEBUG_MODE = false;
private static final Logger LOGGER =
Logger.getLogger(MetadataBootstrap.class.getName());
private static IAsterixAppRuntimeContext runtimeContext;
private static IBufferCache bufferCache;
@@ -116,7 +118,6 @@
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,
MetadataPrimaryIndexes.DATATYPE_DATASET,
MetadataPrimaryIndexes.INDEX_DATASET,
@@ -128,8 +129,23 @@
private static IAsterixPropertiesProvider propertiesProvider;
+ private MetadataBootstrap() {
+ }
+
+ /**
+ * bootstrap metadata
+ *
+ * @param asterixPropertiesProvider
+ * @param ncApplicationContext
+ * @param isNewUniverse
+ * @throws ACIDException
+ * @throws RemoteException
+ * @throws MetadataException
+ * @throws Exception
+ */
public static void startUniverse(IAsterixPropertiesProvider
asterixPropertiesProvider,
- INCApplicationContext ncApplicationContext, boolean isNewUniverse)
throws Exception {
+ INCApplicationContext ncApplicationContext, boolean isNewUniverse)
+ throws RemoteException, ACIDException, MetadataException {
MetadataBootstrap.setNewUniverse(isNewUniverse);
runtimeContext = (IAsterixAppRuntimeContext)
ncApplicationContext.getApplicationObject();
propertiesProvider = asterixPropertiesProvider;
@@ -175,33 +191,35 @@
} catch (Exception e) {
try {
if (IS_DEBUG_MODE) {
- e.printStackTrace();
+ LOGGER.log(Level.SEVERE, "Failure during metadata
bootstrap", e);
}
MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
} catch (Exception e2) {
e.addSuppressed(e2);
- // TODO
- // change the exception type to AbortFailureException
+ // TODO change the exception type to AbortFailureException
throw new MetadataException(e);
}
- throw e;
+ throw new MetadataException(e);
}
}
- public static void stopUniverse() {
- // Close all BTree files in BufferCache.
- // metadata datasets will be closed when the dataset life cycle manger
is closed
- }
-
- private static void insertInitialDataverses(MetadataTransactionContext
mdTxnCtx) throws Exception {
- String dataverseName =
MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
+ private static void insertInitialDataverses(MetadataTransactionContext
mdTxnCtx) throws MetadataException {
String dataFormat = NonTaggedDataFormat.NON_TAGGED_DATA_FORMAT;
MetadataManager.INSTANCE.addDataverse(mdTxnCtx,
- new Dataverse(dataverseName, dataFormat,
IMetadataEntity.PENDING_NO_OP));
+ new Dataverse(MetadataConstants.METADATA_DATAVERSE_NAME,
dataFormat, IMetadataEntity.PENDING_NO_OP));
+ MetadataManager.INSTANCE.addDataverse(mdTxnCtx,
MetadataBuiltinEntities.DEFAULT_DATAVERSE);
}
+ /**
+ * Inserts a metadata dataset to the physical dataset index
+ * Should be performed on a bootstrap of a new universe
+ *
+ * @param mdTxnCtx
+ * @param indexes
+ * @throws MetadataException
+ */
public static void insertMetadataDatasets(MetadataTransactionContext
mdTxnCtx, IMetadataIndex[] indexes)
- throws Exception {
+ throws MetadataException {
for (int i = 0; i < indexes.length; i++) {
IDatasetDetails id = new
InternalDatasetDetails(FileStructure.BTREE, PartitioningStrategy.HASH,
indexes[i].getPartitioningExpr(),
indexes[i].getPartitioningExpr(), null,
@@ -219,7 +237,7 @@
}
}
- public static void getBuiltinTypes(ArrayList<IAType> types) throws
Exception {
+ private static void getBuiltinTypes(List<IAType> types) {
Collection<BuiltinType> builtinTypes =
AsterixBuiltinTypeMap.getBuiltinTypes().values();
Iterator<BuiltinType> iter = builtinTypes.iterator();
while (iter.hasNext()) {
@@ -227,47 +245,47 @@
}
}
- public static void getMetadataTypes(ArrayList<IAType> types) throws
Exception {
+ private static void getMetadataTypes(ArrayList<IAType> types) {
for (int i = 0; i < PRIMARY_INDEXES.length; i++) {
types.add(PRIMARY_INDEXES[i].getPayloadRecordType());
}
}
- public static void insertMetadataDatatypes(MetadataTransactionContext
mdTxnCtx) throws Exception {
- String dataverseName =
MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
- ArrayList<IAType> types = new ArrayList<IAType>();
+ private static void insertMetadataDatatypes(MetadataTransactionContext
mdTxnCtx) throws MetadataException {
+ ArrayList<IAType> types = new ArrayList<>();
getBuiltinTypes(types);
getMetadataTypes(types);
for (int i = 0; i < types.size(); i++) {
MetadataManager.INSTANCE.addDatatype(mdTxnCtx,
- new Datatype(dataverseName, types.get(i).getTypeName(),
types.get(i), false));
+ new Datatype(MetadataConstants.METADATA_DATAVERSE_NAME,
types.get(i).getTypeName(), types.get(i),
+ false));
}
+ MetadataManager.INSTANCE.addDatatype(mdTxnCtx,
+ MetadataBuiltinEntities.ANY_OBJECT_DATATYPE);
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info("Finished inserting initial datatypes.");
}
}
- public static void insertNodes(MetadataTransactionContext mdTxnCtx) throws
Exception {
+ private static void insertNodes(MetadataTransactionContext mdTxnCtx)
throws MetadataException {
for (String nodesName : nodeNames) {
MetadataManager.INSTANCE.addNode(mdTxnCtx, new Node(nodesName, 0,
0));
}
}
- public static void insertInitialGroups(MetadataTransactionContext
mdTxnCtx) throws Exception {
- String groupName =
MetadataPrimaryIndexes.DATAVERSE_DATASET.getNodeGroupName();
- List<String> metadataGroupNodeNames = new ArrayList<String>();
+ private static void insertInitialGroups(MetadataTransactionContext
mdTxnCtx) throws MetadataException {
+ List<String> metadataGroupNodeNames = new ArrayList<>();
metadataGroupNodeNames.add(metadataNodeName);
- NodeGroup groupRecord = new NodeGroup(groupName,
metadataGroupNodeNames);
+ NodeGroup groupRecord = new
NodeGroup(MetadataConstants.METADATA_NODEGROUP_NAME, metadataGroupNodeNames);
MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, groupRecord);
-
- List<String> nodes = new ArrayList<String>();
+ 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 Exception {
+ private static void insertInitialAdapters(MetadataTransactionContext
mdTxnCtx)
+ throws MetadataException {
String[] builtInAdapterClassNames = new String[] {
GenericAdapterFactory.class.getName() };
DatasourceAdapter adapter;
for (String adapterClassName : builtInAdapterClassNames) {
@@ -279,7 +297,7 @@
}
}
- private static void insertInitialFeedPolicies(MetadataTransactionContext
mdTxnCtx) throws Exception {
+ private static void insertInitialFeedPolicies(MetadataTransactionContext
mdTxnCtx) throws MetadataException {
for (FeedPolicyEntity feedPolicy : BuiltinFeedPolicies.policies) {
MetadataManager.INSTANCE.addFeedPolicy(mdTxnCtx, feedPolicy);
}
@@ -288,29 +306,46 @@
}
}
- private static void
insertInitialCompactionPolicies(MetadataTransactionContext mdTxnCtx) throws
Exception {
+ private static void
insertInitialCompactionPolicies(MetadataTransactionContext mdTxnCtx) throws
MetadataException {
String[] builtInCompactionPolicyClassNames =
new String[] { ConstantMergePolicyFactory.class.getName(),
PrefixMergePolicyFactory.class.getName(),
NoMergePolicyFactory.class.getName(),
CorrelatedPrefixMergePolicyFactory.class.getName() };
- CompactionPolicy compactionPolicy;
for (String policyClassName : builtInCompactionPolicyClassNames) {
- compactionPolicy = getCompactionPolicyEntity(policyClassName);
+ CompactionPolicy compactionPolicy =
getCompactionPolicyEntity(policyClassName);
MetadataManager.INSTANCE.addCompactionPolicy(mdTxnCtx,
compactionPolicy);
}
}
- private static DatasourceAdapter getAdapter(String
adapterFactoryClassName) throws Exception {
- String adapterName = ((IAdapterFactory)
(Class.forName(adapterFactoryClassName).newInstance())).getAlias();
- return new DatasourceAdapter(new
AdapterIdentifier(MetadataConstants.METADATA_DATAVERSE_NAME, adapterName),
- adapterFactoryClassName,
IDataSourceAdapter.AdapterType.INTERNAL);
+ private static DatasourceAdapter getAdapter(String adapterFactoryClassName)
+ throws MetadataException {
+ try {
+ String adapterName = ((IAdapterFactory)
(Class.forName(adapterFactoryClassName).newInstance())).getAlias();
+ return new DatasourceAdapter(new
AdapterIdentifier(MetadataConstants.METADATA_DATAVERSE_NAME, adapterName),
+ adapterFactoryClassName,
IDataSourceAdapter.AdapterType.INTERNAL);
+ } catch (InstantiationException | IllegalAccessException |
ClassNotFoundException e) {
+ throw new MetadataException("Unable to instantiate builtin
Adapter", e);
+ }
}
- private static CompactionPolicy getCompactionPolicyEntity(String
compactionPolicyClassName) throws Exception {
- String policyName =
- ((ILSMMergePolicyFactory)
(Class.forName(compactionPolicyClassName).newInstance())).getName();
- return new CompactionPolicy(MetadataConstants.METADATA_DATAVERSE_NAME,
policyName, compactionPolicyClassName);
+ private static CompactionPolicy getCompactionPolicyEntity(String
compactionPolicyClassName)
+ throws MetadataException {
+ try {
+ String policyName =
+ ((ILSMMergePolicyFactory)
(Class.forName(compactionPolicyClassName).newInstance())).getName();
+ return new
CompactionPolicy(MetadataConstants.METADATA_DATAVERSE_NAME, policyName,
+ compactionPolicyClassName);
+ } catch (InstantiationException | IllegalAccessException |
ClassNotFoundException e) {
+ throw new MetadataException("Unable to instantiate builtin Merge
Policy Factory", e);
+ }
}
+ /**
+ * Enlist a metadata index so it is available for metadata operations
+ * should be performed upon bootstrapping
+ *
+ * @param index
+ * @throws HyracksDataException
+ */
public static void enlistMetadataDataset(IMetadataIndex index) throws
HyracksDataException {
ClusterPartition metadataPartition =
propertiesProvider.getMetadataProperties().getMetadataPartition();
int metadataDeviceId = metadataPartition.getIODeviceNum();
@@ -387,12 +422,12 @@
return metadataNodeName;
}
+ /**
+ * Perform recovery of DDL operations metadata records
+ */
public static void startDDLRecovery() throws MetadataException {
// #. clean up any record which has pendingAdd/DelOp flag
// as traversing all records from DATAVERSE_DATASET to
DATASET_DATASET, and then to INDEX_DATASET.
- String dataverseName = null;
- String datasetName = null;
- String indexName = null;
MetadataTransactionContext mdTxnCtx = null;
MetadataManager.INSTANCE.acquireWriteLatch();
if (LOGGER.isLoggable(Level.INFO)) {
@@ -401,59 +436,9 @@
try {
mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-
List<Dataverse> dataverses =
MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
for (Dataverse dataverse : dataverses) {
- dataverseName = dataverse.getDataverseName();
- if (dataverse.getPendingOp() != IMetadataEntity.PENDING_NO_OP)
{
- // drop pending dataverse
- MetadataManager.INSTANCE.dropDataverse(mdTxnCtx,
dataverseName);
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Dropped a pending dataverse: " +
dataverseName);
- }
- } else {
- List<Dataset> datasets =
MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverseName);
- for (Dataset dataset : datasets) {
- datasetName = dataset.getDatasetName();
- if (dataset.getPendingOp() !=
IMetadataEntity.PENDING_NO_OP) {
- // drop pending dataset
- MetadataManager.INSTANCE.dropDataset(mdTxnCtx,
dataverseName, datasetName);
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Dropped a pending dataset: " +
dataverseName + "." + datasetName);
- }
- } else {
- List<Index> indexes =
-
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName,
datasetName);
- for (Index index : indexes) {
- indexName = index.getIndexName();
- if (index.getPendingOp() !=
IMetadataEntity.PENDING_NO_OP) {
- // drop pending index
-
MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName,
indexName);
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Dropped a pending index:
" + dataverseName + "." + datasetName
- + "." + indexName);
- }
- }
- }
- }
- if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
- // if the dataset has no indexes, delete all its
files
- List<Index> indexes =
-
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName,
datasetName);
- if (indexes.size() == 0) {
- List<ExternalFile> files =
-
MetadataManager.INSTANCE.getDatasetExternalFiles(mdTxnCtx, dataset);
- for (ExternalFile file : files) {
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Dropped an external file:
" + dataverseName + "." + datasetName
- + "." + file.getFileNumber());
- }
- }
- }
- }
- }
- }
+ recoverDataverse(mdTxnCtx, dataverse);
}
// the commit wasn't there before. yet, everything was working
correctly!!!!!!!!!!!
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -463,7 +448,7 @@
} catch (Exception e) {
try {
if (IS_DEBUG_MODE) {
- e.printStackTrace();
+ LOGGER.log(Level.SEVERE, "Failure during DDL recovery", e);
}
MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
} catch (Exception e2) {
@@ -475,6 +460,68 @@
}
}
+ private static void recoverDataverse(MetadataTransactionContext mdTxnCtx,
Dataverse dataverse)
+ throws MetadataException {
+ if (dataverse.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+ // drop pending dataverse
+ MetadataManager.INSTANCE.dropDataverse(mdTxnCtx,
dataverse.getDataverseName());
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Dropped a pending dataverse: " +
dataverse.getDataverseName());
+ }
+ } else {
+ List<Dataset> datasets =
+ MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx,
dataverse.getDataverseName());
+ for (Dataset dataset : datasets) {
+ recoverDataset(mdTxnCtx, dataset);
+ }
+ }
+ }
+
+ private static void recoverDataset(MetadataTransactionContext mdTxnCtx,
Dataset dataset) throws MetadataException {
+ if (dataset.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+ // drop pending dataset
+ MetadataManager.INSTANCE.dropDataset(mdTxnCtx,
dataset.getDataverseName(), dataset.getDatasetName());
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info(
+ "Dropped a pending dataset: " +
dataset.getDataverseName() + "." + dataset.getDatasetName());
+ }
+ } else {
+ List<Index> indexes =
+ MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx,
dataset.getDataverseName(),
+ dataset.getDatasetName());
+ for (Index index : indexes) {
+ if (index.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+ // drop pending index
+ MetadataManager.INSTANCE.dropIndex(mdTxnCtx,
dataset.getDataverseName(), dataset.getDatasetName(),
+ index.getIndexName());
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Dropped a pending index: " +
dataset.getDataverseName() + "."
+ + dataset.getDatasetName()
+ + "." + index.getIndexName());
+ }
+ }
+ }
+ }
+ if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+ // if the dataset has no indexes, delete all its files
+ List<Index> indexes =
+ MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx,
dataset.getDataverseName(),
+ dataset.getDatasetName());
+ if (indexes.isEmpty()) {
+ List<ExternalFile> files =
+
MetadataManager.INSTANCE.getDatasetExternalFiles(mdTxnCtx, dataset);
+ for (ExternalFile file : files) {
+ MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Dropped an external file: " +
dataset.getDataverseName() + "."
+ + dataset.getDatasetName()
+ + "." + file.getFileNumber());
+ }
+ }
+ }
+ }
+ }
+
public static boolean isNewUniverse() {
return isNewUniverse;
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
new file mode 100644
index 0000000..eae94c1
--- /dev/null
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.metadata.bootstrap;
+
+import org.apache.asterix.metadata.api.IMetadataEntity;
+import org.apache.asterix.metadata.entities.Datatype;
+import org.apache.asterix.metadata.entities.Dataverse;
+import org.apache.asterix.metadata.utils.MetadataConstants;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.runtime.formats.NonTaggedDataFormat;
+
+public class MetadataBuiltinEntities {
+ //--------------------------------------- Dataverses
----------------------------------------//
+ public static final String DEFAULT_DATAVERSE_NAME = "Default";
+ public static final Dataverse DEFAULT_DATAVERSE =
+ new Dataverse(DEFAULT_DATAVERSE_NAME,
NonTaggedDataFormat.class.getName(),
+ IMetadataEntity.PENDING_NO_OP);
+ //--------------------------------------- Datatypes
-----------------------------------------//
+ public static final ARecordType ANY_OBJECT_RECORD_TYPE =
+ new ARecordType("AnyObject", new String[0], new IAType[0], true);
+ public static final Datatype ANY_OBJECT_DATATYPE =
+ new Datatype(MetadataConstants.METADATA_DATAVERSE_NAME,
ANY_OBJECT_RECORD_TYPE.getTypeName(),
+ ARecordType.FULLY_OPEN_RECORD_TYPE, false);
+}
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 fbd2380..1dc6657 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
@@ -19,9 +19,10 @@
package org.apache.asterix.metadata.utils;
+/**
+ * Contains metadata constants
+ */
public class MetadataConstants {
- private MetadataConstants() {
- }
// Name of the dataverse the metadata lives in.
public static final String METADATA_DATAVERSE_NAME = "Metadata";
@@ -32,4 +33,7 @@
// 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/1174
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie02c74c8b005dce73888afd4dfe19ede2c60a8e8
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>