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

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


The following commit(s) were added to refs/heads/master by this push:
     new 404314ee98 [ASTERIXDB-3259][MTD] update MetadataCache's 
addDatabaseIfNotExists
404314ee98 is described below

commit 404314ee98ccc443bb2a27de5ea53869269f746e
Author: Ali Alsuliman <[email protected]>
AuthorDate: Fri Oct 20 15:37:49 2023 -0700

    [ASTERIXDB-3259][MTD] update MetadataCache's addDatabaseIfNotExists
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    update MetadataCache's addDatabaseIfNotExists to be
    similar to addDataverseIfNotExists
    
    - MetadataNode:
      add adapter check when confirming database drop.
    - fix error used for dropping unknown database.
    - minor refactoring in drop database in QueryTranslator.
    
    Change-Id: I4a55c8b6d3606046183305891a8be7fed362c66a
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17870
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
---
 .../asterix/app/translator/QueryTranslator.java    | 180 +++----
 .../asterix/common/exceptions/ErrorCode.java       |   1 +
 .../src/main/resources/asx_errormsg/en.properties  |   1 +
 .../org/apache/asterix/metadata/MetadataCache.java |  80 +--
 .../apache/asterix/metadata/MetadataManager.java   |   1 +
 .../org/apache/asterix/metadata/MetadataNode.java  | 553 +++++++++++----------
 .../metadata/bootstrap/MetadataBootstrap.java      |   2 +
 .../asterix/metadata/entities/DependencyKind.java  |   1 +
 8 files changed, 438 insertions(+), 381 deletions(-)

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 f43fbdec37..917d752ca4 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
@@ -650,14 +650,13 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         }
     }
 
-    protected boolean doCreateDatabaseStatement(MetadataProvider 
metadataProvider,
-            CreateDatabaseStatement stmtCreateDatabase, IRequestParameters 
requestParameters) throws Exception {
+    protected boolean doCreateDatabaseStatement(MetadataProvider mdProvider, 
CreateDatabaseStatement stmtCreateDatabase,
+            IRequestParameters requestParameters) throws Exception {
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        mdProvider.setMetadataTxnContext(mdTxnCtx);
         try {
             String databaseName = 
stmtCreateDatabase.getDatabaseName().getValue();
-            Database database =
-                    
MetadataManager.INSTANCE.getDatabase(metadataProvider.getMetadataTxnContext(), 
databaseName);
+            Database database = MetadataManager.INSTANCE.getDatabase(mdTxnCtx, 
databaseName);
             if (database != null) {
                 if (stmtCreateDatabase.ifNotExists()) {
                     MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -667,7 +666,7 @@ public class QueryTranslator extends AbstractLangTranslator 
implements IStatemen
                             databaseName);
                 }
             }
-            
MetadataManager.INSTANCE.addDatabase(metadataProvider.getMetadataTxnContext(),
+            MetadataManager.INSTANCE.addDatabase(mdTxnCtx,
                     new Database(databaseName, false, 
MetadataUtil.PENDING_NO_OP));
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return true;
@@ -1956,17 +1955,16 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         }
     }
 
-    protected boolean doDropDatabase(DatabaseDropStatement stmtDropDatabase, 
MetadataProvider metadataProvider,
+    protected boolean doDropDatabase(DatabaseDropStatement stmtDropDatabase, 
MetadataProvider mdProvider,
             IHyracksClientConnection hcc, IRequestParameters 
requestParameters) throws Exception {
-        SourceLocation sourceLoc = stmtDropDatabase.getSourceLocation();
+        SourceLocation srcLoc = stmtDropDatabase.getSourceLocation();
         String databaseName = stmtDropDatabase.getDatabaseName().getValue();
         ProgressState progress = ProgressState.NO_PROGRESS;
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
         boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        List<FeedEventsListener> feedsToStop = new ArrayList<>();
-        List<JobSpecification> jobsToExecute = new ArrayList<>();
-        //TODO(DB): resolve database directory
+        mdProvider.setMetadataTxnContext(mdTxnCtx);
+        List<FeedEventsListener> stopFeeds = new ArrayList<>();
+        List<JobSpecification> dropJobs = new ArrayList<>();
         try {
             Database database = MetadataManager.INSTANCE.getDatabase(mdTxnCtx, 
databaseName);
             if (database == null) {
@@ -1974,57 +1972,14 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                     MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
                     return false;
                 } else {
-                    throw new 
CompilationException(ErrorCode.UNKNOWN_DATAVERSE, sourceLoc, databaseName);
+                    throw new CompilationException(ErrorCode.UNKNOWN_DATABASE, 
srcLoc, databaseName);
                 }
             }
 
-            validateDatabaseStateBeforeDrop(metadataProvider, database, 
sourceLoc);
+            validateDatabaseStateBeforeDrop(mdProvider, database, srcLoc);
 
-            // #. prepare jobs which will drop corresponding feed storage
-            ActiveNotificationHandler activeEventHandler =
-                    (ActiveNotificationHandler) 
appCtx.getActiveNotificationHandler();
-            IActiveEntityEventsListener[] activeListeners = 
activeEventHandler.getEventListeners();
-            for (IActiveEntityEventsListener listener : activeListeners) {
-                EntityId activeEntityId = listener.getEntityId();
-                if 
(activeEntityId.getExtensionName().equals(Feed.EXTENSION_NAME)
-                        && 
activeEntityId.getDatabaseName().equals(databaseName)) {
-                    FeedEventsListener feedListener = (FeedEventsListener) 
listener;
-                    feedsToStop.add(feedListener);
-                    jobsToExecute
-                            
.add(FeedOperations.buildRemoveFeedStorageJob(metadataProvider, 
feedListener.getFeed()));
-                }
-            }
-
-            // #. prepare jobs which will drop corresponding datasets with 
indexes
-            List<Dataset> datasets = 
MetadataManager.INSTANCE.getDatabaseDatasets(mdTxnCtx, databaseName);
-            for (Dataset dataset : datasets) {
-                String datasetName = dataset.getDatasetName();
-                DatasetType dsType = dataset.getDatasetType();
-                switch (dsType) {
-                    case INTERNAL:
-                        List<Index> indexes = 
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, databaseName,
-                                dataset.getDataverseName(), datasetName);
-                        for (Index index : indexes) {
-                            jobsToExecute
-                                    
.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, dataset, 
sourceLoc));
-                        }
-                        break;
-                    case EXTERNAL:
-                    case VIEW:
-                        break;
-                }
-            }
-
-            // #. prepare jobs which will drop corresponding libraries
-            //TODO(DB): library database
-            List<Library> libraries = 
MetadataManager.INSTANCE.getDatabaseLibraries(mdTxnCtx, databaseName);
-            for (Library library : libraries) {
-                
jobsToExecute.add(ExternalLibraryJobUtils.buildDropLibraryJobSpec(library.getDataverseName(),
-                        library.getName(), metadataProvider));
-            }
-
-            // #. prepare jobs which will drop the database
-            jobsToExecute.add(DataverseUtil.dropDatabaseJobSpec(databaseName, 
metadataProvider));
+            List<Dataset> datasets =
+                    prepareDatabaseDropJobs(mdProvider, srcLoc, databaseName, 
mdTxnCtx, stopFeeds, dropJobs);
 
             // #. mark PendingDropOp on the database record by
             // first, deleting the database record from the 'Database' 
collection
@@ -2038,20 +1993,11 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             bActiveTxn = false;
             progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
 
-            for (FeedEventsListener feedListener : feedsToStop) {
-                if (feedListener.getState() != ActivityState.STOPPED) {
-                    feedListener.stop(metadataProvider);
-                }
-                feedListener.unregister();
-            }
-
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec);
-            }
+            runDropJobs(mdProvider, hcc, stopFeeds, dropJobs);
 
             mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
             bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
+            mdProvider.setMetadataTxnContext(mdTxnCtx);
 
             // #. finally, delete the database
             MetadataManager.INSTANCE.dropDatabase(mdTxnCtx, databaseName);
@@ -2059,18 +2005,17 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             // drop all node groups that no longer needed
             for (Dataset dataset : datasets) {
                 String nodeGroup = dataset.getNodeGroupName();
-                
lockManager.acquireNodeGroupWriteLock(metadataProvider.getLocks(), nodeGroup);
+                lockManager.acquireNodeGroupWriteLock(mdProvider.getLocks(), 
nodeGroup);
                 if (MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodeGroup) 
!= null) {
                     MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, 
nodeGroup, true);
                 }
             }
 
-            //TODO(DB): switch active database to the DEFAULT if the dropped 
database is the currently active one
             if (activeNamespace.getDatabaseName().equals(databaseName)) {
                 activeNamespace = MetadataBuiltinEntities.DEFAULT_NAMESPACE;
             }
 
-            validateDatasetsStateAfterNamespaceDrop(metadataProvider, 
mdTxnCtx, datasets);
+            validateDatasetsStateAfterNamespaceDrop(mdProvider, mdTxnCtx, 
datasets);
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return true;
@@ -2087,7 +2032,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                 // #. execute compensation operations
                 // remove the all artifacts in NC
                 try {
-                    for (JobSpecification jobSpec : jobsToExecute) {
+                    for (JobSpecification jobSpec : dropJobs) {
                         runJob(hcc, jobSpec);
                     }
                 } catch (Exception e2) {
@@ -2235,16 +2180,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
             bActiveTxn = false;
             progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
 
-            for (FeedEventsListener feedListener : feedsToStop) {
-                if (feedListener.getState() != ActivityState.STOPPED) {
-                    feedListener.stop(metadataProvider);
-                }
-                feedListener.unregister();
-            }
-
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec);
-            }
+            runDropJobs(metadataProvider, hcc, feedsToStop, jobsToExecute);
 
             mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
             bActiveTxn = true;
@@ -5571,6 +5507,82 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         ExternalDataUtils.validateAdapterSpecificProperties(configuration, 
srcLoc, warningCollector, appCtx);
     }
 
+    private List<Dataset> prepareDatabaseDropJobs(MetadataProvider 
metadataProvider, SourceLocation sourceLoc,
+            String databaseName, MetadataTransactionContext mdTxnCtx, 
List<FeedEventsListener> feedsToStop,
+            List<JobSpecification> jobsToExecute) throws AlgebricksException {
+        // #. prepare jobs which will drop corresponding feed storage
+        addFeedDropJob(metadataProvider, databaseName, feedsToStop, 
jobsToExecute);
+
+        // #. prepare jobs which will drop corresponding datasets with indexes
+        List<Dataset> datasets = addDatasetDropJob(metadataProvider, 
sourceLoc, databaseName, mdTxnCtx, jobsToExecute);
+
+        // #. prepare jobs which will drop corresponding libraries
+        //TODO(DB): library database
+        List<Library> libraries = 
MetadataManager.INSTANCE.getDatabaseLibraries(mdTxnCtx, databaseName);
+        for (Library library : libraries) {
+            
jobsToExecute.add(ExternalLibraryJobUtils.buildDropLibraryJobSpec(library.getDataverseName(),
+                    library.getName(), metadataProvider));
+        }
+
+        // #. prepare jobs which will drop the database
+        jobsToExecute.add(DataverseUtil.dropDatabaseJobSpec(databaseName, 
metadataProvider));
+
+        return datasets;
+    }
+
+    private static List<Dataset> addDatasetDropJob(MetadataProvider 
metadataProvider, SourceLocation sourceLoc,
+            String databaseName, MetadataTransactionContext mdTxnCtx, 
List<JobSpecification> jobsToExecute)
+            throws AlgebricksException {
+        List<Dataset> datasets = 
MetadataManager.INSTANCE.getDatabaseDatasets(mdTxnCtx, databaseName);
+        for (Dataset dataset : datasets) {
+            String datasetName = dataset.getDatasetName();
+            DatasetType dsType = dataset.getDatasetType();
+            switch (dsType) {
+                case INTERNAL:
+                    List<Index> indexes = 
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, databaseName,
+                            dataset.getDataverseName(), datasetName);
+                    for (Index index : indexes) {
+                        
jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, 
dataset, sourceLoc));
+                    }
+                    break;
+                case EXTERNAL:
+                case VIEW:
+                    break;
+            }
+        }
+        return datasets;
+    }
+
+    private void addFeedDropJob(MetadataProvider metadataProvider, String 
databaseName,
+            List<FeedEventsListener> feedsToStop, List<JobSpecification> 
jobsToExecute) throws AlgebricksException {
+        ActiveNotificationHandler activeEventHandler =
+                (ActiveNotificationHandler) 
appCtx.getActiveNotificationHandler();
+        IActiveEntityEventsListener[] activeListeners = 
activeEventHandler.getEventListeners();
+        for (IActiveEntityEventsListener listener : activeListeners) {
+            EntityId activeEntityId = listener.getEntityId();
+            if (activeEntityId.getExtensionName().equals(Feed.EXTENSION_NAME)
+                    && activeEntityId.getDatabaseName().equals(databaseName)) {
+                FeedEventsListener feedListener = (FeedEventsListener) 
listener;
+                feedsToStop.add(feedListener);
+                
jobsToExecute.add(FeedOperations.buildRemoveFeedStorageJob(metadataProvider, 
feedListener.getFeed()));
+            }
+        }
+    }
+
+    private void runDropJobs(MetadataProvider mdProvider, 
IHyracksClientConnection hcc,
+            List<FeedEventsListener> feedsToStop, List<JobSpecification> 
jobsToExecute) throws Exception {
+        for (FeedEventsListener feedListener : feedsToStop) {
+            if (feedListener.getState() != ActivityState.STOPPED) {
+                feedListener.stop(mdProvider);
+            }
+            feedListener.unregister();
+        }
+
+        for (JobSpecification jobSpec : jobsToExecute) {
+            runJob(hcc, jobSpec);
+        }
+    }
+
     protected enum CreateResult {
         NOOP,
         CREATED,
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 83418a4ecc..9ac851373b 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -281,6 +281,7 @@ public enum ErrorCode implements IError {
     ILLEGAL_DML_OPERATION(1184),
     UNKNOWN_DATABASE(1185),
     DATABASE_EXISTS(1186),
+    CANNOT_DROP_DATABASE_DEPENDENT_EXISTS(1187),
 
     // Feed errors
     DATAFLOW_ILLEGAL_STATE(3001),
diff --git 
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties 
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index ab77067ca0..122bff6a70 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -283,6 +283,7 @@
 1184 = Compilation error: %1$s: %2$s dataset is not supported on datasets with 
meta records
 1185 = Cannot find database with name %1$s
 1186 = A database with this name %1$s already exists
+1187 = Cannot drop database: %1$s %2$s being used by %3$s %4$s
 
 # Feed Errors
 3001 = Illegal state.
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
index 4c6ac34512..3484cc1994 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
@@ -161,11 +161,21 @@ public class MetadataCache {
 
     public Database addDatabaseIfNotExists(Database database) {
         synchronized (databases) {
-            String databaseName = database.getDatabaseName();
-            if (!databases.containsKey(databaseName)) {
-                return databases.put(databaseName, database);
+            synchronized (dataverses) {
+                synchronized (datasets) {
+                    synchronized (datatypes) {
+                        String databaseName = database.getDatabaseName();
+                        if (!databases.containsKey(databaseName)) {
+                            dataverses.put(databaseName, new HashMap<>());
+                            datasets.put(databaseName, new HashMap<>());
+                            datatypes.put(databaseName, new HashMap<>());
+                            adapters.put(databaseName, new HashMap<>());
+                            return databases.put(databaseName, database);
+                        }
+                        return null;
+                    }
+                }
             }
-            return null;
         }
     }
 
@@ -259,21 +269,6 @@ public class MetadataCache {
         }
     }
 
-    public CompactionPolicy dropCompactionPolicy(CompactionPolicy 
compactionPolicy) {
-        synchronized (compactionPolicies) {
-            Map<DataverseName, Map<String, CompactionPolicy>> 
databaseDataverses =
-                    compactionPolicies.get(compactionPolicy.getDatabaseName());
-            if (databaseDataverses == null) {
-                return null;
-            }
-            Map<String, CompactionPolicy> p = 
databaseDataverses.get(compactionPolicy.getDataverseName());
-            if (p != null && p.get(compactionPolicy.getPolicyName()) != null) {
-                return p.remove(compactionPolicy.getPolicyName());
-            }
-            return null;
-        }
-    }
-
     public Database dropDatabase(Database database) {
         synchronized (databases) {
             synchronized (dataverses) {
@@ -484,6 +479,21 @@ public class MetadataCache {
         }
     }
 
+    public CompactionPolicy dropCompactionPolicy(CompactionPolicy 
compactionPolicy) {
+        synchronized (compactionPolicies) {
+            Map<DataverseName, Map<String, CompactionPolicy>> 
databaseDataverses =
+                    compactionPolicies.get(compactionPolicy.getDatabaseName());
+            if (databaseDataverses == null) {
+                return null;
+            }
+            Map<String, CompactionPolicy> p = 
databaseDataverses.get(compactionPolicy.getDataverseName());
+            if (p != null && p.get(compactionPolicy.getPolicyName()) != null) {
+                return p.remove(compactionPolicy.getPolicyName());
+            }
+            return null;
+        }
+    }
+
     public NodeGroup dropNodeGroup(NodeGroup nodeGroup) {
         synchronized (nodeGroups) {
             return nodeGroups.remove(nodeGroup.getNodeGroupName());
@@ -620,22 +630,6 @@ public class MetadataCache {
         }
     }
 
-    protected void doOperation(MetadataLogicalOperation op) {
-        if (op.isAdd) {
-            op.entity.addToCache(this);
-        } else {
-            op.entity.dropFromCache(this);
-        }
-    }
-
-    protected void undoOperation(MetadataLogicalOperation op) {
-        if (!op.isAdd) {
-            op.entity.addToCache(this);
-        } else {
-            op.entity.dropFromCache(this);
-        }
-    }
-
     public Function addFunctionIfNotExists(Function function) {
         synchronized (functions) {
             FunctionSignature signature = new 
FunctionSignature(function.getDatabaseName(), function.getDataverseName(),
@@ -938,6 +932,22 @@ public class MetadataCache {
         return null;
     }
 
+    protected void doOperation(MetadataLogicalOperation op) {
+        if (op.isAdd) {
+            op.entity.addToCache(this);
+        } else {
+            op.entity.dropFromCache(this);
+        }
+    }
+
+    protected void undoOperation(MetadataLogicalOperation op) {
+        if (!op.isAdd) {
+            op.entity.addToCache(this);
+        } else {
+            op.entity.dropFromCache(this);
+        }
+    }
+
     /**
      * Represents a logical operation against the metadata.
      */
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 2c71084cc3..b5abdf0a55 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
@@ -687,6 +687,7 @@ public abstract class MetadataManager implements 
IMetadataManager {
             // in the cache.
             return null;
         }
+        //TODO(DB): review this and other similar ones
         if (ctx.getDataverse(functionSignature.getDatabaseName(), 
functionSignature.getDataverseName()) != null) {
             // This transaction has dropped and subsequently created the same
             // dataverse.
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 0571eff339..7d85568839 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
@@ -20,6 +20,41 @@
 package org.apache.asterix.metadata;
 
 import static org.apache.asterix.common.api.IIdentifierMapper.Modifier.PLURAL;
+import static org.apache.asterix.common.exceptions.ErrorCode.ADAPTER_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATABASE_DEPENDENT_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.COMPACTION_POLICY_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.DATABASE_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.DATASET_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.DATAVERSE_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.EXTERNAL_FILE_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.FEED_CONNECTION_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.FEED_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.FEED_POLICY_EXISTS;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.FULL_TEXT_DEFAULT_CONFIG_CANNOT_BE_DELETED_OR_CREATED;
+import static org.apache.asterix.common.exceptions.ErrorCode.FUNCTION_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.INDEX_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.LIBRARY_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.METADATA_ERROR;
+import static org.apache.asterix.common.exceptions.ErrorCode.NODEGROUP_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.NODE_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.SYNONYM_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.TYPE_EXISTS;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_ADAPTER;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATABASE;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATASET_IN_DATAVERSE;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATAVERSE;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_EXTERNAL_FILE;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED_CONNECTION;
+import static 
org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED_POLICY;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FUNCTION;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_INDEX;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_LIBRARY;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_NODEGROUP;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_SYNONYM;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_TYPE;
 import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
 
 import java.rmi.RemoteException;
@@ -347,8 +382,7 @@ public class MetadataNode implements IMetadataNode {
             ExtensionMetadataDatasetId datasetId) throws AlgebricksException {
         ExtensionMetadataDataset<T> index = (ExtensionMetadataDataset<T>) 
extensionDatasets.get(datasetId);
         if (index == null) {
-            throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.METADATA_ERROR,
-                    "Metadata Extension Index: " + datasetId + " was not 
found");
+            throw new AsterixException(METADATA_ERROR, "Metadata Extension 
Index: " + datasetId + " was not found");
         }
         return index;
     }
@@ -364,10 +398,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getDatabaseEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.DATABASE_EXISTS,
 e,
-                        database.getDatabaseName());
+                throw new AsterixException(DATABASE_EXISTS, e, 
database.getDatabaseName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -380,10 +413,10 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getDataverseEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.DATAVERSE_EXISTS,
 e,
-                        dataverse.getDataverseName());
+                //TODO(DB): consider adding the database name to the error 
message?
+                throw new AsterixException(DATAVERSE_EXISTS, e, 
dataverse.getDataverseName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -406,10 +439,9 @@ public class MetadataNode implements IMetadataNode {
             }
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.DATASET_EXISTS, 
e,
-                        dataset.getDatasetName(), dataset.getDataverseName());
+                throw new AsterixException(DATASET_EXISTS, e, 
dataset.getDatasetName(), dataset.getDataverseName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -422,10 +454,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getIndexEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.INDEX_EXISTS, e,
-                        index.getIndexName());
+                throw new AsterixException(INDEX_EXISTS, e, 
index.getIndexName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -438,10 +469,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getNodeEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.NODE_EXISTS, e,
-                        node.getNodeName());
+                throw new AsterixException(NODE_EXISTS, e, node.getNodeName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -454,10 +484,9 @@ public class MetadataNode implements IMetadataNode {
             modifyMetadataIndex(modificationOp, txnId, 
mdIndexesProvider.getNodeGroupEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.NODEGROUP_EXISTS,
 e,
-                        nodeGroup.getNodeGroupName());
+                throw new AsterixException(NODEGROUP_EXISTS, e, 
nodeGroup.getNodeGroupName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -471,10 +500,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getDatatypeEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.TYPE_EXISTS, e,
-                        datatype.getDatatypeName());
+                throw new AsterixException(TYPE_EXISTS, e, 
datatype.getDatatypeName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -489,10 +517,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFunctionEntity().getIndex(), functionTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.FUNCTION_EXISTS,
 e,
-                        function.getName());
+                throw new AsterixException(FUNCTION_EXISTS, e, 
function.getName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -520,7 +547,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -539,7 +566,7 @@ public class MetadataNode implements IMetadataNode {
             ITupleReference key = createTuple(database, dataverseName, 
filterName);
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFullTextFilterEntity().getIndex(), key);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -551,7 +578,7 @@ public class MetadataNode implements IMetadataNode {
             ITupleReference configTuple = 
tupleReaderWriter.getTupleFromMetadataEntity(config);
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFullTextConfigEntity().getIndex(), configTuple);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -563,18 +590,14 @@ public class MetadataNode implements IMetadataNode {
             ITupleReference filterTuple = 
tupleReaderWriter.getTupleFromMetadataEntity(filter);
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFullTextFilterEntity().getIndex(), filterTuple);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
     @Override
     public void addFullTextConfig(TxnId txnId, FullTextConfigMetadataEntity 
config)
             throws AlgebricksException, RemoteException {
-        try {
-            insertFullTextConfigMetadataEntityToCatalog(txnId, config);
-        } catch (AlgebricksException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PROCESSING_TUPLE);
-        }
+        insertFullTextConfigMetadataEntityToCatalog(txnId, config);
     }
 
     @Override
@@ -592,7 +615,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFullTextConfigEntity().getIndex(), searchKey, 
valueExtractor,
                     results);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
 
         if (results.isEmpty()) {
@@ -618,7 +641,7 @@ public class MetadataNode implements IMetadataNode {
             ITupleReference key = createTuple(database, dataverseName, 
configName);
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFullTextConfigEntity().getIndex(), key);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -632,6 +655,11 @@ public class MetadataNode implements IMetadataNode {
         modifyMetadataIndex(Operation.UPSERT, txnId, metadataIndex, tuple);
     }
 
+    private void deleteTupleFromIndex(TxnId txnId, IMetadataIndex 
metadataIndex, ITupleReference tuple)
+            throws HyracksDataException {
+        modifyMetadataIndex(Operation.DELETE, txnId, metadataIndex, tuple);
+    }
+
     private void modifyMetadataIndex(Operation op, TxnId txnId, IMetadataIndex 
metadataIndex, ITupleReference tuple)
             throws HyracksDataException {
         String resourceName = metadataIndex.getFile().getRelativePath();
@@ -711,16 +739,7 @@ public class MetadataNode implements IMetadataNode {
 
             // Drop all feeds and connections in this database.
             // Feeds may depend on datatypes and adapters
-            List<Feed> databaseFeeds = getDatabaseFeeds(txnId, databaseName);
-            for (Feed feed : databaseFeeds) {
-                List<FeedConnection> feedConnections =
-                        getFeedConnections(txnId, databaseName, 
feed.getDataverseName(), feed.getFeedName());
-                for (FeedConnection feedConnection : feedConnections) {
-                    dropFeedConnection(txnId, databaseName, 
feedConnection.getDataverseName(), feed.getFeedName(),
-                            feedConnection.getDatasetName());
-                }
-                dropFeed(txnId, databaseName, feed.getDataverseName(), 
feed.getFeedName());
-            }
+            dropDatabaseFeeds(txnId, databaseName);
 
             // Drop all feed ingestion policies in this database.
             List<FeedPolicyEntity> feedPolicies = 
getDatabaseFeedPolicies(txnId, databaseName);
@@ -748,7 +767,7 @@ public class MetadataNode implements IMetadataNode {
             // Drop all libraries in this database.
             List<Library> databaseLibraries = getDatabaseLibraries(txnId, 
databaseName);
             for (Library lib : databaseLibraries) {
-                dropLibrary(txnId, lib.getDatabaseName(), 
lib.getDataverseName(), lib.getName());
+                dropLibrary(txnId, lib.getDatabaseName(), 
lib.getDataverseName(), lib.getName(), true);
             }
 
             // Drop all synonyms in this database.
@@ -804,14 +823,26 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getDatabaseEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATAVERSE,
 e,
-                        databaseName);
+                throw new AsterixException(UNKNOWN_DATABASE, e, databaseName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
 
+    private void dropDatabaseFeeds(TxnId txnId, String databaseName) throws 
AlgebricksException {
+        List<Feed> databaseFeeds = getDatabaseFeeds(txnId, databaseName);
+        for (Feed feed : databaseFeeds) {
+            List<FeedConnection> feedConnections =
+                    getFeedConnections(txnId, databaseName, 
feed.getDataverseName(), feed.getFeedName());
+            for (FeedConnection feedConnection : feedConnections) {
+                dropFeedConnection(txnId, databaseName, 
feedConnection.getDataverseName(), feed.getFeedName(),
+                        feedConnection.getDatasetName());
+            }
+            dropFeed(txnId, databaseName, feed.getDataverseName(), 
feed.getFeedName());
+        }
+    }
+
     @Override
     public void dropDataverse(TxnId txnId, String database, DataverseName 
dataverseName) throws AlgebricksException {
         try {
@@ -853,6 +884,7 @@ public class MetadataNode implements IMetadataNode {
             }
 
             // Drop all libraries in this dataverse.
+            //TODO(DB): should may be check the library dependency above
             List<Library> dataverseLibraries = getDataverseLibraries(txnId, 
database, dataverseName);
             for (Library lib : dataverseLibraries) {
                 dropLibrary(txnId, lib.getDatabaseName(), 
lib.getDataverseName(), lib.getName());
@@ -903,10 +935,9 @@ public class MetadataNode implements IMetadataNode {
             forceDropDataverse(txnId, database, dataverseName);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATAVERSE,
 e,
-                        dataverseName);
+                throw new AsterixException(UNKNOWN_DATAVERSE, e, 
dataverseName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -939,8 +970,7 @@ public class MetadataNode implements IMetadataNode {
             boolean force) throws AlgebricksException {
         Dataset dataset = getDataset(txnId, database, dataverseName, 
datasetName);
         if (dataset == null) {
-            throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATASET_IN_DATAVERSE,
-                    datasetName, dataverseName);
+            throw new AsterixException(UNKNOWN_DATASET_IN_DATAVERSE, 
datasetName, dataverseName);
         }
         if (!force) {
             String datasetTypeDisplayName = 
DatasetUtil.getDatasetTypeDisplayName(dataset.getDatasetType());
@@ -990,16 +1020,15 @@ public class MetadataNode implements IMetadataNode {
                         break;
                 }
             } catch (HyracksDataException hde) {
-                // ignore this exception and continue deleting all relevant
-                // artifacts.
+                // ignore this exception and continue deleting all relevant 
artifacts
                 if (!hde.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) 
{
-                    throw new AlgebricksException(hde);
+                    throw new AsterixException(METADATA_ERROR, hde, 
hde.getMessage());
                 }
             } finally {
                 deleteTupleFromIndex(txnId, 
mdIndexesProvider.getDatasetEntity().getIndex(), datasetTuple);
             }
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1015,9 +1044,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getIndexEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_INDEX, 
e, indexName);
+                throw new AsterixException(UNKNOWN_INDEX, e, indexName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -1029,9 +1058,8 @@ public class MetadataNode implements IMetadataNode {
             if (failSilently) {
                 return false;
             }
-            throw new AsterixException(
-                    
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "node group",
-                    nodeGroupName, dataset(PLURAL),
+            throw new AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, 
"node group", nodeGroupName,
+                    dataset(PLURAL),
                     
datasets.stream().map(DatasetUtil::getFullyQualifiedDisplayName).collect(Collectors.joining(",
 ")));
         }
         try {
@@ -1044,10 +1072,9 @@ public class MetadataNode implements IMetadataNode {
             return true;
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_NODEGROUP,
 e,
-                        nodeGroupName);
+                throw new AsterixException(UNKNOWN_NODEGROUP, e, 
nodeGroupName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -1082,10 +1109,9 @@ public class MetadataNode implements IMetadataNode {
             }
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_TYPE, e,
-                        datatypeName);
+                throw new AsterixException(UNKNOWN_TYPE, e, datatypeName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -1101,19 +1127,13 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getDatatypeEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_TYPE, e,
-                        datatypeName);
+                throw new AsterixException(UNKNOWN_TYPE, e, datatypeName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
 
-    private void deleteTupleFromIndex(TxnId txnId, IMetadataIndex 
metadataIndex, ITupleReference tuple)
-            throws HyracksDataException {
-        modifyMetadataIndex(Operation.DELETE, txnId, metadataIndex, tuple);
-    }
-
     @Override
     public List<Database> getDatabases(TxnId txnId) throws 
AlgebricksException, RemoteException {
         try {
@@ -1123,7 +1143,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatabaseEntity().getIndex(), null, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1136,7 +1156,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDataverseEntity().getIndex(), null, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1156,7 +1176,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1174,7 +1194,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1189,7 +1209,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatasetEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1202,7 +1222,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDataverseEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1216,7 +1236,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatasetEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1231,7 +1251,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, mdIndexesProvider.getFeedEntity().getIndex(), 
searchKey, valueExtractor, results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1244,7 +1264,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, mdIndexesProvider.getFeedEntity().getIndex(), 
searchKey, valueExtractor, results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1259,7 +1279,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getLibraryEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1273,7 +1293,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getLibraryEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1288,7 +1308,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatatypeEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1302,7 +1322,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatatypeEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1318,7 +1338,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFullTextConfigEntity().getIndex(), searchKey, 
valueExtractor,
                     results);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
         return results;
     }
@@ -1335,7 +1355,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFullTextConfigEntity().getIndex(), searchKey, 
valueExtractor,
                     results);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
         return results;
     }
@@ -1352,7 +1372,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFullTextFilterEntity().getIndex(), searchKey, 
valueExtractor,
                     results);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
         return results;
     }
@@ -1369,7 +1389,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFullTextFilterEntity().getIndex(), searchKey, 
valueExtractor,
                     results);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
         return results;
     }
@@ -1388,7 +1408,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1400,7 +1420,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatasetEntity().getIndex(), null, valueExtractor, results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1417,7 +1437,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getDatatypeEntity().getIndex(), null, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1431,7 +1451,7 @@ public class MetadataNode implements IMetadataNode {
                     results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1444,51 +1464,61 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFeedConnectionEntity().getIndex(), null, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
     private void confirmDatabaseCanBeDeleted(TxnId txnId, String database) 
throws AlgebricksException {
-        // if a dataset from a DIFFERENT database uses a type from this 
database throw an error
-        List<Dataset> datasets = getAllDatasets(txnId);
-        for (Dataset otherDataset : datasets) {
-            if (otherDataset.getDatabaseName().equals(database)) {
+        // if a dataset/view from a DIFFERENT database uses a type from this 
database throw an error
+        ensureNoDatasetUsingDatabase(txnId, database);
+
+        // if a function from a DIFFERENT database uses datasets, functions, 
datatypes, or synonyms from this database
+        // throw an error
+        ensureNoFunctionUsingDatabase(txnId, database);
+
+        // if a feed connection from a DIFFERENT database applies a function 
from this database then throw an error
+        ensureNoFeedUsingDatabase(txnId, database);
+
+        // if an adapter from a DIFFERENT database uses a library from this 
database then throw an error
+        ensureNoAdapterUsingDatabase(txnId, database);
+    }
+
+    private void ensureNoAdapterUsingDatabase(TxnId txnId, String database) 
throws AlgebricksException {
+        List<DatasourceAdapter> adapters = getAllAdapters(txnId);
+        for (DatasourceAdapter adapter : adapters) {
+            if 
(database.equals(adapter.getAdapterIdentifier().getDatabaseName())) {
+                // skip adapters in self database
                 continue;
             }
-            if (otherDataset.getItemTypeDatabaseName().equals(database)) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
 "type",
-                        
TypeUtil.getFullyQualifiedDisplayName(otherDataset.getItemTypeDataverseName(),
-                                otherDataset.getItemTypeName()),
-                        dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
+            if (database.equals(adapter.getLibraryDatabaseName())) {
+                throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, "library",
+                        
MetadataUtil.getFullyQualifiedDisplayName(adapter.getLibraryDatabaseName(),
+                                adapter.getLibraryDataverseName(), 
adapter.getLibraryName()),
+                        "adapter",
+                        
MetadataUtil.getFullyQualifiedDisplayName(adapter.getAdapterIdentifier().getDataverseName(),
+                                adapter.getAdapterIdentifier().getName()));
             }
-            if (otherDataset.hasMetaPart() && 
otherDataset.getMetaItemTypeDatabaseName().equals(database)) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
 "type",
-                        
TypeUtil.getFullyQualifiedDisplayName(otherDataset.getMetaItemTypeDataverseName(),
-                                otherDataset.getMetaItemTypeName()),
-                        dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
+        }
+    }
+
+    private void ensureNoFeedUsingDatabase(TxnId txnId, String database) 
throws AlgebricksException {
+        List<FeedConnection> feedConnections = getAllFeedConnections(txnId);
+        for (FeedConnection feedConnection : feedConnections) {
+            if (database.equals(feedConnection.getDatabaseName())) {
+                continue;
             }
-            if (otherDataset.getDatasetType() == DatasetType.VIEW) {
-                ViewDetails viewDetails = (ViewDetails) 
otherDataset.getDatasetDetails();
-                List<DependencyKind> dependenciesSchema = 
ViewDetails.DEPENDENCIES_SCHEMA;
-                List<List<DependencyFullyQualifiedName>> dependencies = 
viewDetails.getDependencies();
-                for (int i = 0, n = dependencies.size(); i < n; i++) {
-                    for (DependencyFullyQualifiedName dependency : 
dependencies.get(i)) {
-                        if (dependency.getDatabaseName().equals(database)) {
-                            DependencyKind dependencyKind = 
dependenciesSchema.get(i);
-                            throw new AsterixException(
-                                    
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                                    dependencyKind, 
dependencyKind.getDependencyDisplayName(dependency), "view",
-                                    
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
-                        }
-                    }
+            for (FunctionSignature functionSignature : 
feedConnection.getAppliedFunctions()) {
+                if (database.equals(functionSignature.getDatabaseName())) {
+                    throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, "function", 
functionSignature,
+                            "feed connection",
+                            
MetadataUtil.getFullyQualifiedDisplayName(feedConnection.getDatabaseName(),
+                                    feedConnection.getDataverseName(), 
feedConnection.getFeedName()));
                 }
             }
         }
+    }
 
-        // if a function from a DIFFERENT database uses datasets, functions, 
datatypes, or synonyms from this database
-        // throw an error
+    private void ensureNoFunctionUsingDatabase(TxnId txnId, String database) 
throws AlgebricksException {
         List<Function> functions = getAllFunctions(txnId);
         for (Function otherFunction : functions) {
             if (otherFunction.getDatabaseName().equals(database)) {
@@ -1500,27 +1530,53 @@ public class MetadataNode implements IMetadataNode {
                 for (DependencyFullyQualifiedName dependency : 
dependencies.get(i)) {
                     if (dependency.getDatabaseName().equals(database)) {
                         DependencyKind dependencyKind = 
dependenciesSchema.get(i);
-                        throw new AsterixException(
-                                
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                                dependencyKind, 
dependencyKind.getDependencyDisplayName(dependency), "function",
+                        throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, dependencyKind,
+                                
dependencyKind.getDependencyDisplayName(dependency), "function",
                                 otherFunction.getSignature());
                     }
                 }
             }
+            if (database.equals(otherFunction.getLibraryDatabaseName())) {
+                throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, "library",
+                        
MetadataUtil.getFullyQualifiedDisplayName(otherFunction.getLibraryDatabaseName(),
+                                otherFunction.getLibraryDataverseName(), 
otherFunction.getLibraryName()),
+                        "function", otherFunction.getSignature());
+            }
         }
+    }
 
-        // if a feed connection from a DIFFERENT database applies a function 
from this database then throw an error
-        List<FeedConnection> feedConnections = getAllFeedConnections(txnId);
-        for (FeedConnection feedConnection : feedConnections) {
-            if (database.equals(feedConnection.getDatabaseName())) {
+    private void ensureNoDatasetUsingDatabase(TxnId txnId, String database) 
throws AlgebricksException {
+        List<Dataset> datasets = getAllDatasets(txnId);
+        for (Dataset otherDataset : datasets) {
+            if (otherDataset.getDatabaseName().equals(database)) {
                 continue;
             }
-            for (FunctionSignature functionSignature : 
feedConnection.getAppliedFunctions()) {
-                if (database.equals(functionSignature.getDatabaseName())) {
-                    throw new AsterixException(
-                            
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                            "function", functionSignature, "feed connection", 
MetadataUtil.getFullyQualifiedDisplayName(
-                                    feedConnection.getDataverseName(), 
feedConnection.getFeedName()));
+            if (otherDataset.getItemTypeDatabaseName().equals(database)) {
+                //TODO(DB): fix display to include the database conditionally
+                throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, "type",
+                        
MetadataUtil.getFullyQualifiedDisplayName(otherDataset.getItemTypeDatabaseName(),
+                                otherDataset.getItemTypeDataverseName(), 
otherDataset.getItemTypeName()),
+                        dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
+            }
+            if (otherDataset.hasMetaPart() && 
otherDataset.getMetaItemTypeDatabaseName().equals(database)) {
+                throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, "type",
+                        
MetadataUtil.getFullyQualifiedDisplayName(otherDataset.getItemTypeDatabaseName(),
+                                otherDataset.getMetaItemTypeDataverseName(), 
otherDataset.getMetaItemTypeName()),
+                        dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
+            }
+            if (otherDataset.getDatasetType() == DatasetType.VIEW) {
+                ViewDetails viewDetails = (ViewDetails) 
otherDataset.getDatasetDetails();
+                List<DependencyKind> dependenciesSchema = 
ViewDetails.DEPENDENCIES_SCHEMA;
+                List<List<DependencyFullyQualifiedName>> dependencies = 
viewDetails.getDependencies();
+                for (int i = 0, n = dependencies.size(); i < n; i++) {
+                    for (DependencyFullyQualifiedName dependency : 
dependencies.get(i)) {
+                        if (dependency.getDatabaseName().equals(database)) {
+                            DependencyKind dependencyKind = 
dependenciesSchema.get(i);
+                            throw new 
AsterixException(CANNOT_DROP_DATABASE_DEPENDENT_EXISTS, dependencyKind,
+                                    
dependencyKind.getDependencyDisplayName(dependency), "view",
+                                    
DatasetUtil.getFullyQualifiedDisplayName(otherDataset));
+                        }
+                    }
                 }
             }
         }
@@ -1536,16 +1592,14 @@ public class MetadataNode implements IMetadataNode {
             }
             if (dataset.getItemTypeDataverseName().equals(dataverseName)
                     && dataset.getItemTypeDatabaseName().equals(database)) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
 "type",
+                throw new 
AsterixException(CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, "type",
                         
TypeUtil.getFullyQualifiedDisplayName(dataset.getItemTypeDataverseName(),
                                 dataset.getItemTypeName()),
                         dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(dataset));
             }
             if (dataset.hasMetaPart() && 
dataset.getMetaItemTypeDataverseName().equals(dataverseName)
                     && dataset.getMetaItemTypeDatabaseName().equals(database)) 
{
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
 "type",
+                throw new 
AsterixException(CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, "type",
                         
TypeUtil.getFullyQualifiedDisplayName(dataset.getMetaItemTypeDataverseName(),
                                 dataset.getMetaItemTypeName()),
                         dataset(), 
DatasetUtil.getFullyQualifiedDisplayName(dataset));
@@ -1559,9 +1613,8 @@ public class MetadataNode implements IMetadataNode {
                         if (dependency.getDataverseName().equals(dataverseName)
                                 && 
dependency.getDatabaseName().equals(database)) {
                             DependencyKind dependencyKind = 
dependenciesSchema.get(i);
-                            throw new AsterixException(
-                                    
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                                    dependencyKind, 
dependencyKind.getDependencyDisplayName(dependency), "view",
+                            throw new 
AsterixException(CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, dependencyKind,
+                                    
dependencyKind.getDependencyDisplayName(dependency), "view",
                                     
DatasetUtil.getFullyQualifiedDisplayName(dataset));
                         }
                     }
@@ -1583,9 +1636,8 @@ public class MetadataNode implements IMetadataNode {
                     if (dependency.getDataverseName().equals(dataverseName)
                             && dependency.getDatabaseName().equals(database)) {
                         DependencyKind dependencyKind = 
dependenciesSchema.get(i);
-                        throw new AsterixException(
-                                
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                                dependencyKind, 
dependencyKind.getDependencyDisplayName(dependency), "function",
+                        throw new 
AsterixException(CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, dependencyKind,
+                                
dependencyKind.getDependencyDisplayName(dependency), "function",
                                 function.getSignature());
                     }
                 }
@@ -1602,13 +1654,13 @@ public class MetadataNode implements IMetadataNode {
             for (FunctionSignature functionSignature : 
feedConnection.getAppliedFunctions()) {
                 if (dataverseName.equals(functionSignature.getDataverseName())
                         && 
database.equals(functionSignature.getDatabaseName())) {
-                    throw new AsterixException(
-                            
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
-                            "function", functionSignature, "feed connection", 
MetadataUtil.getFullyQualifiedDisplayName(
+                    throw new 
AsterixException(CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS, "function", 
functionSignature,
+                            "feed connection", 
MetadataUtil.getFullyQualifiedDisplayName(
                                     feedConnection.getDataverseName(), 
feedConnection.getFeedName()));
                 }
             }
         }
+        //TODO(DB): should check entities depending on libraries in this 
dataverse
     }
 
     private void confirmFunctionCanBeDeleted(TxnId txnId, FunctionSignature 
signature) throws AlgebricksException {
@@ -1619,10 +1671,9 @@ public class MetadataNode implements IMetadataNode {
         List<FeedConnection> feedConnections = getAllFeedConnections(txnId);
         for (FeedConnection feedConnection : feedConnections) {
             if (feedConnection.containsFunction(signature)) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "function",
-                        signature, "feed connection", 
MetadataUtil.getFullyQualifiedDisplayName(
-                                feedConnection.getDataverseName(), 
feedConnection.getFeedName()));
+                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "function", signature,
+                        "feed connection", 
MetadataUtil.getFullyQualifiedDisplayName(feedConnection.getDataverseName(),
+                                feedConnection.getFeedName()));
             }
         }
     }
@@ -1667,10 +1718,9 @@ public class MetadataNode implements IMetadataNode {
                                 && 
dependency.getDatabaseName().equals(database)
                                 && dependency.getSubName1().equals(objectName)
                                 && (objectArg == null || 
objectArg.equals(dependency.getSubName2()))) {
-                            throw new AsterixException(
-                                    
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
-                                    objectKindDisplayName, 
dependencyKind.getDependencyDisplayName(dependency),
-                                    "function", function.getSignature());
+                            throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, objectKindDisplayName,
+                                    
dependencyKind.getDependencyDisplayName(dependency), "function",
+                                    function.getSignature());
                         }
                     }
                 }
@@ -1706,10 +1756,9 @@ public class MetadataNode implements IMetadataNode {
                                     && 
dependency.getDatabaseName().equals(database)
                                     && 
dependency.getSubName1().equals(objectName)
                                     && (objectArg == null || 
objectArg.equals(dependency.getSubName2()))) {
-                                throw new AsterixException(
-                                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
-                                        objectKindDisplayName, 
dependencyKind.getDependencyDisplayName(dependency),
-                                        "view", 
DatasetUtil.getFullyQualifiedDisplayName(dataset));
+                                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, objectKindDisplayName,
+                                        
dependencyKind.getDependencyDisplayName(dependency), "view",
+                                        
DatasetUtil.getFullyQualifiedDisplayName(dataset));
                             }
                         }
                     }
@@ -1721,8 +1770,7 @@ public class MetadataNode implements IMetadataNode {
     private void confirmFullTextConfigCanBeDeleted(TxnId txnId, String 
database,
             DataverseName dataverseNameFullTextConfig, String configName) 
throws AlgebricksException {
         if (Strings.isNullOrEmpty(configName)) {
-            throw new MetadataException(
-                    
org.apache.asterix.common.exceptions.ErrorCode.FULL_TEXT_DEFAULT_CONFIG_CANNOT_BE_DELETED_OR_CREATED);
+            throw new 
MetadataException(FULL_TEXT_DEFAULT_CONFIG_CANNOT_BE_DELETED_OR_CREATED);
         }
 
         // If any index uses this full-text config, throw an error
@@ -1740,9 +1788,7 @@ public class MetadataNode implements IMetadataNode {
                     if 
(index.getDataverseName().equals(dataverseNameFullTextConfig)
                             && index.getDatabaseName().equals(database) && 
!Strings.isNullOrEmpty(indexConfigName)
                             && indexConfigName.equals(configName)) {
-                        throw new AsterixException(
-                                
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
-                                "full-text config",
+                        throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "full-text config",
                                 
MetadataUtil.getFullyQualifiedDisplayName(dataverseNameFullTextConfig, 
configName),
                                 "index", 
DatasetUtil.getFullyQualifiedDisplayName(index.getDataverseName(),
                                         index.getDatasetName()) + "." + 
index.getIndexName());
@@ -1782,8 +1828,7 @@ public class MetadataNode implements IMetadataNode {
         for (Function function : functions) {
             if (libraryName.equals(function.getLibraryName()) && 
database.equals(function.getLibraryDatabaseName())
                     && 
dataverseName.equals(function.getLibraryDataverseName())) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "library",
+                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "library",
                         
MetadataUtil.getFullyQualifiedDisplayName(dataverseName, libraryName), 
"function",
                         function.getSignature());
             }
@@ -1796,8 +1841,7 @@ public class MetadataNode implements IMetadataNode {
         for (DatasourceAdapter adapter : adapters) {
             if (libraryName.equals(adapter.getLibraryName()) && 
database.equals(adapter.getLibraryDatabaseName())
                     && 
dataverseName.equals(adapter.getLibraryDataverseName())) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "library",
+                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "library",
                         
MetadataUtil.getFullyQualifiedDisplayName(dataverseName, libraryName), 
"adapter",
                         
MetadataUtil.getFullyQualifiedDisplayName(adapter.getAdapterIdentifier().getDataverseName(),
                                 adapter.getAdapterIdentifier().getName()));
@@ -1823,8 +1867,7 @@ public class MetadataNode implements IMetadataNode {
                     || ((dataset.hasMetaPart() && 
dataset.getMetaItemTypeName().equals(datatypeName)
                             && 
dataset.getMetaItemTypeDataverseName().equals(dataverseName)
                             && 
dataset.getMetaItemTypeDatabaseName().equals(database)))) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "type",
+                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "type",
                         TypeUtil.getFullyQualifiedDisplayName(dataverseName, 
datatypeName), dataset(),
                         DatasetUtil.getFullyQualifiedDisplayName(dataset));
             }
@@ -1848,14 +1891,14 @@ public class MetadataNode implements IMetadataNode {
         for (Datatype dataType : datatypes) {
 
             // skip types in different dataverses as well as the type to be 
dropped itself
+            //TODO(DB): review this
             if (!dataType.getDataverseName().equals(dataverseName) || 
!dataType.getDatabaseName().equals(database)
                     || 
dataType.getDatatype().getTypeName().equals(datatypeName)) {
                 continue;
             }
             AbstractComplexType recType = (AbstractComplexType) 
dataType.getDatatype();
             if (recType.containsType(typeToBeDropped)) {
-                throw new AsterixException(
-                        
org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
 "type",
+                throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "type",
                         TypeUtil.getFullyQualifiedDisplayName(dataverseName, 
datatypeName), "type",
                         TypeUtil.getFullyQualifiedDisplayName(dataverseName, 
recType.getTypeName()));
             }
@@ -1876,10 +1919,9 @@ public class MetadataNode implements IMetadataNode {
             FullTextConfigDescriptor config = 
configMetadataEntity.getFullTextConfig();
             for (String filterName : config.getFilterNames()) {
                 if (filterName.equals(fullTextFilterName)) {
-                    throw new AlgebricksException("Cannot drop full-text 
filter "
-                            + 
TypeUtil.getFullyQualifiedDisplayName(dataverseName, fullTextFilterName)
-                            + " being used by full-text config "
-                            + 
TypeUtil.getFullyQualifiedDisplayName(dataverseName, config.getName()));
+                    throw new 
AsterixException(CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "full-text filter",
+                            
TypeUtil.getFullyQualifiedDisplayName(dataverseName, fullTextFilterName),
+                            "full-text config", 
TypeUtil.getFullyQualifiedDisplayName(dataverseName, config.getName()));
                 }
             }
         }
@@ -1943,7 +1985,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1959,7 +2001,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, mdIndexesProvider.getIndexEntity().getIndex(), 
searchKey, valueExtractor, results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1978,7 +2020,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -1995,7 +2037,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2027,7 +2069,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFunctionEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2052,10 +2094,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFunctionEntity().getIndex(), functionTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FUNCTION,
 e,
-                        functionSignature.toString());
+                throw new AsterixException(UNKNOWN_FUNCTION, e, 
functionSignature.toString());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2156,7 +2197,7 @@ public class MetadataNode implements IMetadataNode {
             IValueExtractor<T> valueExtractor, List<T> results) throws 
AlgebricksException, HyracksDataException {
         IBinaryComparatorFactory[] comparatorFactories = 
index.getKeyBinaryComparatorFactory();
         if (index.getFile() == null) {
-            throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.METADATA_ERROR,
+            throw new AsterixException(METADATA_ERROR,
                     "No file for Index " + index.getDataverseName() + "." + 
index.getIndexName());
         }
         String resourceName = index.getFile().getRelativePath();
@@ -2218,7 +2259,7 @@ public class MetadataNode implements IMetadataNode {
                 datasetLifecycleManager.close(resourceName);
             }
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
         DatasetIdFactory.initialize(mostRecentDatasetId);
     }
@@ -2330,10 +2371,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getDatasourceAdapterEntity().getIndex(), adapterTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.ADAPTER_EXISTS, 
e,
-                        adapter.getAdapterIdentifier().getName());
+                throw new AsterixException(ADAPTER_EXISTS, e, 
adapter.getAdapterIdentifier().getName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2351,10 +2391,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getDatasourceAdapterEntity().getIndex(), datasetTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_ADAPTER,
 e,
-                        adapterName);
+                throw new AsterixException(UNKNOWN_ADAPTER, e, adapterName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2375,7 +2414,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2390,10 +2429,9 @@ public class MetadataNode implements IMetadataNode {
                     compactionPolicyTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.COMPACTION_POLICY_EXISTS,
 e,
-                        compactionPolicy.getPolicyName());
+                throw new AsterixException(COMPACTION_POLICY_EXISTS, e, 
compactionPolicy.getPolicyName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2414,7 +2452,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return null;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2431,7 +2469,7 @@ public class MetadataNode implements IMetadataNode {
                     results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2446,7 +2484,7 @@ public class MetadataNode implements IMetadataNode {
                     results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2459,10 +2497,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getLibraryEntity().getIndex(), libraryTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.LIBRARY_EXISTS, 
e,
-                        library.getName());
+                throw new AsterixException(LIBRARY_EXISTS, e, 
library.getName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2487,10 +2524,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getLibraryEntity().getIndex(), datasetTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_LIBRARY,
 e,
-                        libraryName);
+                throw new AsterixException(UNKNOWN_LIBRARY, e, libraryName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2509,7 +2545,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2527,10 +2563,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFeedPolicyEntity().getIndex(), feedPolicyTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.FEED_POLICY_EXISTS,
 e,
-                        feedPolicy.getPolicyName());
+                throw new AsterixException(FEED_POLICY_EXISTS, e, 
feedPolicy.getPolicyName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2549,7 +2584,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return null;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2562,10 +2597,10 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFeedConnectionEntity().getIndex(), feedConnTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.FEED_CONNECTION_EXISTS,
 e,
-                        feedConnection.getFeedName(), 
feedConnection.getDatasetName());
+                throw new AsterixException(FEED_CONNECTION_EXISTS, e, 
feedConnection.getFeedName(),
+                        feedConnection.getDatasetName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2583,7 +2618,7 @@ public class MetadataNode implements IMetadataNode {
                     results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2603,7 +2638,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return null;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2617,10 +2652,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFeedConnectionEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED_CONNECTION,
 e,
-                        feedName, datasetName);
+                throw new AsterixException(UNKNOWN_FEED_CONNECTION, e, 
feedName, datasetName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2634,10 +2668,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getFeedEntity().getIndex(), feedTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.FEED_EXISTS, e,
-                        feed.getFeedName());
+                throw new AsterixException(FEED_EXISTS, e, feed.getFeedName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2656,7 +2689,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return null;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2670,7 +2703,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, mdIndexesProvider.getFeedEntity().getIndex(), 
searchKey, valueExtractor, results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2685,9 +2718,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFeedEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED, 
e, feedName);
+                throw new AsterixException(UNKNOWN_FEED, e, feedName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2702,10 +2735,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getFeedPolicyEntity().getIndex(), tuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_FEED_POLICY,
 e,
-                        policyName);
+                throw new AsterixException(UNKNOWN_FEED_POLICY, e, policyName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2721,7 +2753,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFeedPolicyEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2734,7 +2766,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getFeedPolicyEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2748,10 +2780,10 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getExternalFileEntity().getIndex(), externalFileTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.EXTERNAL_FILE_EXISTS,
 e,
-                        externalFile.getFileNumber(), 
externalFile.getDatasetName());
+                throw new AsterixException(EXTERNAL_FILE_EXISTS, e, 
externalFile.getFileNumber(),
+                        externalFile.getDatasetName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2769,7 +2801,7 @@ public class MetadataNode implements IMetadataNode {
                     results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2786,10 +2818,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getExternalFileEntity().getIndex(), datasetTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_EXTERNAL_FILE,
 e,
-                        fileNumber, datasetName);
+                throw new AsterixException(UNKNOWN_EXTERNAL_FILE, e, 
fileNumber, datasetName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2857,7 +2888,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2870,10 +2901,9 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getSynonymEntity().getIndex(), synonymTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.DUPLICATE_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.SYNONYM_EXISTS, 
e,
-                        synonym.getSynonymName());
+                throw new AsterixException(SYNONYM_EXISTS, e, 
synonym.getSynonymName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2900,10 +2930,9 @@ public class MetadataNode implements IMetadataNode {
             deleteTupleFromIndex(txnId, 
mdIndexesProvider.getSynonymEntity().getIndex(), synonymTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_SYNONYM,
 e,
-                        synonymName);
+                throw new AsterixException(UNKNOWN_SYNONYM, e, synonymName);
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
@@ -2940,7 +2969,7 @@ public class MetadataNode implements IMetadataNode {
             }
             return results.get(0);
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2955,7 +2984,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getSynonymEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2968,7 +2997,7 @@ public class MetadataNode implements IMetadataNode {
             searchIndex(txnId, 
mdIndexesProvider.getSynonymEntity().getIndex(), searchKey, valueExtractor, 
results);
             return results;
         } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+            throw new AsterixException(METADATA_ERROR, e, e.getMessage());
         }
     }
 
@@ -2989,10 +3018,10 @@ public class MetadataNode implements IMetadataNode {
             insertTupleIntoIndex(txnId, 
mdIndexesProvider.getDatasetEntity().getIndex(), datasetTuple);
         } catch (HyracksDataException e) {
             if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
-                throw new 
AsterixException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_DATASET_IN_DATAVERSE,
-                        e, dataset.getDatasetName(), 
dataset.getDataverseName());
+                throw new AsterixException(UNKNOWN_DATASET_IN_DATAVERSE, e, 
dataset.getDatasetName(),
+                        dataset.getDataverseName());
             } else {
-                throw new AlgebricksException(e);
+                throw new AsterixException(METADATA_ERROR, e, e.getMessage());
             }
         }
     }
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 b154287168..843d7c3b11 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
@@ -472,6 +472,8 @@ public class MetadataBootstrap {
      * Perform recovery of DDL operations metadata records
      */
     public static void startDDLRecovery() throws AlgebricksException {
+        //TODO(DB): include database in recovery
+
         // #. clean up any record which has pendingAdd/DelOp flag
         // as traversing all records from DATAVERSE_DATASET to 
DATASET_DATASET, and then
         // to INDEX_DATASET.
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
index 555d1c7f9a..50311837e6 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
@@ -28,6 +28,7 @@ import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.metadata.utils.TypeUtil;
 
 public enum DependencyKind {
+    //TODO(DB): fix display to include the database conditionally
     DATASET(
             dependency -> 
DatasetUtil.getFullyQualifiedDisplayName(dependency.getDataverseName(),
                     dependency.getSubName1())),

Reply via email to