>From Hussain Towaileb <[email protected]>: Hussain Towaileb has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20953?usp=email )
Change subject: [NO ISSUE][EXT]: Make catalog methods extendable ...................................................................... [NO ISSUE][EXT]: Make catalog methods extendable Ext-ref: MB-70760 Change-Id: Ie4328e05b951500da6272bb6a013fd3a7a0dcd19 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20953 Integration-Tests: Jenkins <[email protected]> Reviewed-by: Hussain Towaileb <[email protected]> Reviewed-by: Janhavi Tripurwar <[email protected]> Tested-by: Hussain Towaileb <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java 4 files changed, 31 insertions(+), 15 deletions(-) Approvals: Hussain Towaileb: Looks good to me, but someone else must approve; Verified Janhavi Tripurwar: Looks good to me, approved Jenkins: Verified 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 4b43845..b1caaf5 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 @@ -1074,7 +1074,7 @@ ExternalDataUtils.normalize(properties); ExternalDataUtils.validate(properties); ExternalDataUtils.validateType(properties, (ARecordType) itemType); - validateIfIcebergTable(metadataProvider, properties, mdTxnCtx, sourceLoc); + validateIfIcebergTable(metadataProvider, requestParameters, properties, mdTxnCtx, sourceLoc); validateExternalDatasetProperties(externalDetails, properties, dd.getSourceLocation(), mdTxnCtx, appCtx, metadataProvider); datasetDetails = new ExternalDatasetDetails(externalDetails.getAdapter(), properties, new Date(), @@ -1187,8 +1187,9 @@ return Optional.of(dataset); } - protected void validateIfIcebergTable(MetadataProvider metadataProvider, Map<String, String> properties, - MetadataTransactionContext mdTxnCtx, SourceLocation srcLoc) throws AlgebricksException { + protected void validateIfIcebergTable(MetadataProvider metadataProvider, IRequestParameters requestParameters, + Map<String, String> properties, MetadataTransactionContext mdTxnCtx, SourceLocation srcLoc) + throws AlgebricksException { IcebergStatementValidationHelper.validateIfIcebergTable(appCtx, metadataProvider, mdTxnCtx, properties, srcLoc); } @@ -5891,8 +5892,8 @@ protected void handleCatalogStatement(Statement.Kind kind, MetadataProvider metadataProvider, Statement stmt, IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception { - IcebergCatalogStatementHandler statement = new IcebergCatalogStatementHandler(kind, metadataProvider, stmt, - Creator.DEFAULT_CREATOR, sessionConfig, lockUtil, lockManager); + IcebergCatalogStatementHandler statement = new IcebergCatalogStatementHandler(appCtx, kind, metadataProvider, + stmt, Creator.DEFAULT_CREATOR, sessionConfig, lockUtil, lockManager, requestParameters); statement.handle(); } diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java index e0e9d02..03454ef 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java @@ -19,12 +19,14 @@ package org.apache.asterix.app.translator.handlers; import static org.apache.asterix.app.translator.QueryTranslator.abort; +import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_CATALOG; import java.util.HashMap; import java.util.Map; import org.apache.asterix.common.api.IMetadataLockManager; import org.apache.asterix.common.config.CatalogConfig; +import org.apache.asterix.common.dataflow.ICcApplicationContext; import org.apache.asterix.common.exceptions.CompilationException; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.common.metadata.IMetadataLockUtil; @@ -47,22 +49,26 @@ import org.apache.asterix.metadata.entities.IcebergCatalogDetails; import org.apache.asterix.metadata.utils.Creator; import org.apache.asterix.object.base.AdmObjectNode; +import org.apache.asterix.translator.IRequestParameters; import org.apache.asterix.translator.SessionConfig; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; public class IcebergCatalogStatementHandler { + protected final ICcApplicationContext appCtx; + protected final MetadataProvider metadataProvider; private final Statement.Kind kind; - private final MetadataProvider metadataProvider; private final CatalogStatement statement; private final Creator creator; private final SessionConfig sessionConfig; private final IMetadataLockUtil lockUtil; private final IMetadataLockManager lockManager; + protected IRequestParameters requestParameters; - public IcebergCatalogStatementHandler(Statement.Kind kind, MetadataProvider metadataProvider, Statement statement, - Creator creator, SessionConfig sessionConfig, IMetadataLockUtil lockUtil, - IMetadataLockManager lockManager) { + public IcebergCatalogStatementHandler(ICcApplicationContext ccAppCtx, Statement.Kind kind, + MetadataProvider metadataProvider, Statement statement, Creator creator, SessionConfig sessionConfig, + IMetadataLockUtil lockUtil, IMetadataLockManager lockManager, IRequestParameters requestParameters) { + this.appCtx = ccAppCtx; this.kind = kind; this.metadataProvider = metadataProvider; this.statement = (CatalogStatement) statement; @@ -70,6 +76,7 @@ this.sessionConfig = sessionConfig; this.lockUtil = lockUtil; this.lockManager = lockManager; + this.requestParameters = requestParameters; } public void handle() throws Exception { @@ -99,7 +106,7 @@ } } - private boolean doHandleCreate(CatalogCreateStatement statement) throws Exception { + protected boolean doHandleCreate(CatalogCreateStatement statement) throws Exception { MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); metadataProvider.setMetadataTxnContext(mdTxnCtx); try { @@ -137,17 +144,26 @@ } lockUtil.dropCatalogBegin(lockManager, metadataProvider.getLocks(), catalogName); try { - doDropCatalog(dropStatement); + doHandleDrop(dropStatement); } finally { metadataProvider.getLocks().unlock(); } } - private boolean doDropCatalog(CatalogDropStatement statement) throws Exception { + protected boolean doHandleDrop(CatalogDropStatement statement) throws Exception { MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); metadataProvider.setMetadataTxnContext(mdTxnCtx); try { String catalogName = statement.getCatalogName(); + Catalog catalog = MetadataManager.INSTANCE.getCatalog(mdTxnCtx, catalogName); + if (catalog == null) { + if (statement.getIfExists()) { + MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); + return false; + } else { + throw CompilationException.create(UNKNOWN_CATALOG, catalogName); + } + } MetadataManager.INSTANCE.dropCatalog(mdTxnCtx, catalogName); beforeDropTxnCommit(metadataProvider, creator, EntityDetails.newCatalog(catalogName)); MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj index 23105fd..b08750c 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -285,7 +285,7 @@ private static final String CONFIG = "CONFIG"; private static final String STATISTICS = "STATISTICS"; private static final String ADVISE = "ADVISE"; - private static final String CATALOG = "CATALOG"; + protected static final String CATALOG = "CATALOG"; private static final String SOURCE = "SOURCE"; private static final String CASCADE = "CASCADE"; 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 6060d94..fa7db2f 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 @@ -3198,8 +3198,7 @@ try { Catalog catalog = getCatalog(txnId, catalogName); if (catalog == null) { - throw new CompilationException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_CATALOG, - catalogName); + throw CompilationException.create(UNKNOWN_CATALOG, catalogName); } confirmCatalogIsUnusedByCollections(txnId, catalogName); -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20953?usp=email To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: asterixdb Gerrit-Branch: lumina Gerrit-Change-Id: Ie4328e05b951500da6272bb6a013fd3a7a0dcd19 Gerrit-Change-Number: 20953 Gerrit-PatchSet: 8 Gerrit-Owner: Hussain Towaileb <[email protected]> Gerrit-Reviewer: Hussain Towaileb <[email protected]> Gerrit-Reviewer: Janhavi Tripurwar <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]>
