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())),