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 <bamou...@gmail.com>

Reply via email to