[ASTERIXDB-3259][MTD] Add metadata API to get the databases
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
Add metadata API to get the databases.
Change-Id: Ia3767125e349d42bccabfc43e3f9fdb4506cc199
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17867
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
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 f404ca5..a792267 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
@@ -2015,6 +2015,7 @@
}
// #. 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(),
@@ -2214,7 +2215,7 @@
List<Library> libraries =
MetadataManager.INSTANCE.getDataverseLibraries(mdTxnCtx, databaseName, dataverseName);
for (Library library : libraries) {
- //TODO(DB):
+ //TODO(DB): library database
jobsToExecute.add(ExternalLibraryJobUtils.buildDropLibraryJobSpec(dataverseName, library.getName(),
metadataProvider));
}
@@ -2310,12 +2311,12 @@
}
protected void validateDatabaseStateBeforeDrop(MetadataProvider metadataProvider, Database database,
- SourceLocation sourceLoc) throws AlgebricksException {
+ SourceLocation sourceLoc) throws AlgebricksException, HyracksDataException {
// may be overridden by product extensions for additional checks before dropping the database
}
protected void validateDataverseStateBeforeDrop(MetadataProvider metadataProvider, Dataverse dataverse,
- SourceLocation sourceLoc) throws AlgebricksException {
+ SourceLocation sourceLoc) throws AlgebricksException, HyracksDataException {
// may be overridden by product extensions for additional checks before dropping the dataverse
}
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 ed3474d..2c71084 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
@@ -256,6 +256,15 @@
}
@Override
+ public List<Database> getDatabases(MetadataTransactionContext ctx) throws AlgebricksException {
+ try {
+ return metadataNode.getDatabases(ctx.getTxnId());
+ } catch (RemoteException e) {
+ throw new MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e);
+ }
+ }
+
+ @Override
public List<Dataverse> getDataverses(MetadataTransactionContext ctx) throws AlgebricksException {
try {
return metadataNode.getDataverses(ctx.getTxnId());
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 5383ac9..0571eff 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
@@ -1115,6 +1115,19 @@
}
@Override
+ public List<Database> getDatabases(TxnId txnId) throws AlgebricksException, RemoteException {
+ try {
+ DatabaseTupleTranslator tupleReaderWriter = tupleTranslatorProvider.getDatabaseTupleTranslator(false);
+ IValueExtractor<Database> valueExtractor = new MetadataEntityValueExtractor<>(tupleReaderWriter);
+ List<Database> results = new ArrayList<>();
+ searchIndex(txnId, mdIndexesProvider.getDatabaseEntity().getIndex(), null, valueExtractor, results);
+ return results;
+ } catch (HyracksDataException e) {
+ throw new AlgebricksException(e);
+ }
+ }
+
+ @Override
public List<Dataverse> getDataverses(TxnId txnId) throws AlgebricksException {
try {
DataverseTupleTranslator tupleReaderWriter = tupleTranslatorProvider.getDataverseTupleTranslator(false);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
index f3cc811..d5e0157 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataManager.java
@@ -108,6 +108,8 @@
*/
void addDataverse(MetadataTransactionContext ctx, Dataverse dataverse) throws AlgebricksException;
+ List<Database> getDatabases(MetadataTransactionContext ctx) throws AlgebricksException;
+
/**
* Retrieves all dataverses
*
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
index a4f2ca7..0d753d8 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
@@ -130,6 +130,8 @@
Dataverse getDataverse(TxnId txnId, String database, DataverseName dataverseName)
throws AlgebricksException, RemoteException;
+ List<Database> getDatabases(TxnId txnId) throws AlgebricksException, RemoteException;
+
/**
* Retrieves all dataverses, acquiring local locks on behalf of the given
* transaction id.