>From Murtadha Hubail <[email protected]>: Murtadha Hubail has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/12645 )
Change subject: [NO ISSUE][RT] Introduce query compilation lock ...................................................................... [NO ISSUE][RT] Introduce query compilation lock - user model changes: no - storage format changes: no - interface changes: yes Details: - Add query compilation lock that can be used to ensure no queries are currently running in the cluster. Change-Id: I663458df62040c0c01a13afde36b5cf765e57929 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/12645 Integration-Tests: Jenkins <[email protected]> Tested-by: Murtadha Hubail <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> Reviewed-by: Ian Maxon <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java M asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java 3 files changed, 23 insertions(+), 0 deletions(-) Approvals: Ian Maxon: Looks good to me, approved Murtadha Hubail: Looks good to me, but someone else must approve; Verified 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 267bd76..e79a4fd 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 @@ -42,6 +42,7 @@ import java.util.Properties; import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.stream.Collectors; import org.apache.asterix.active.ActivityState; @@ -283,6 +284,7 @@ protected final IMetadataLockUtil lockUtil; protected final IResponsePrinter responsePrinter; protected final WarningCollector warningCollector; + protected final ReentrantReadWriteLock compilationLock; public QueryTranslator(ICcApplicationContext appCtx, List<Statement> statements, SessionOutput output, ILangCompilationProvider compilationProvider, ExecutorService executorService, @@ -301,6 +303,7 @@ this.executorService = executorService; this.responsePrinter = responsePrinter; this.warningCollector = new WarningCollector(); + this.compilationLock = appCtx.getCompilationLock(); if (appCtx.getServiceContext().getAppConfig().getBoolean(CCConfig.Option.ENFORCE_FRAME_WRITER_PROTOCOL)) { this.jobFlags.add(JobFlag.ENFORCE_CONTRACT); } @@ -3392,12 +3395,14 @@ final IMetadataLocker locker = new IMetadataLocker() { @Override public void lock() throws AlgebricksException { + compilationLock.readLock().lock(); lockUtil.insertDeleteUpsertBegin(lockManager, metadataProvider.getLocks(), dataverseName, datasetName); } @Override public void unlock() { metadataProvider.getLocks().unlock(); + compilationLock.readLock().unlock(); } }; final IStatementCompiler compiler = () -> { @@ -3987,6 +3992,7 @@ final IMetadataLocker locker = new IMetadataLocker() { @Override public void lock() { + compilationLock.readLock().lock(); } @Override @@ -3994,6 +4000,7 @@ metadataProvider.getLocks().unlock(); // release external datasets' locks acquired during compilation of the query ExternalDatasetsRegistry.INSTANCE.releaseAcquiredLocks(metadataProvider); + compilationLock.readLock().unlock(); } }; final IStatementCompiler compiler = () -> { diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java index ad90814..c22ac4c 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/ICcApplicationContext.java @@ -18,6 +18,8 @@ */ package org.apache.asterix.common.dataflow; +import java.util.concurrent.locks.ReentrantReadWriteLock; + import org.apache.asterix.common.api.IApplicationContext; import org.apache.asterix.common.api.ICoordinationService; import org.apache.asterix.common.api.IMetadataLockManager; @@ -149,4 +151,11 @@ * @return the adapter factory service */ IAdapterFactoryService getAdapterFactoryService(); + + /** + * Gets the cluster query compilation lock + * + * @return the cluster query compilation lock + */ + ReentrantReadWriteLock getCompilationLock(); } diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java index 9099c88..66f0e73 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/CcApplicationContext.java @@ -19,6 +19,7 @@ package org.apache.asterix.runtime.utils; import java.io.IOException; +import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.Supplier; import org.apache.asterix.common.api.IConfigValidator; @@ -100,6 +101,7 @@ private final IRequestTracker requestTracker; private final IConfigValidator configValidator; private final IAdapterFactoryService adapterFactoryService; + private final ReentrantReadWriteLock compilationLock = new ReentrantReadWriteLock(true); public CcApplicationContext(ICCServiceContext ccServiceCtx, IHyracksClientConnection hcc, Supplier<IMetadataBootstrap> metadataBootstrapSupplier, IGlobalRecoveryManager globalRecoveryManager, @@ -314,4 +316,9 @@ public IAdapterFactoryService getAdapterFactoryService() { return adapterFactoryService; } + + @Override + public ReentrantReadWriteLock getCompilationLock() { + return compilationLock; + } } -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/12645 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: I663458df62040c0c01a13afde36b5cf765e57929 Gerrit-Change-Number: 12645 Gerrit-PatchSet: 3 Gerrit-Owner: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Ian Maxon <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-MessageType: merged
