This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 11e90feb2066a25bb15d85c841502053e21f21a6 Author: Michael Blow <[email protected]> AuthorDate: Wed Sep 17 20:02:44 2025 -0400 [NO ISSUE][*DB] += valid tx check, allow active setRunning to throw - user model changes: no - storage format changes: no - interface changes: yes (cherry picked from commit ce802f827d) Ext-ref: MB-68784 Change-Id: Ifdf8a55ea4290257492ba021396def3dd3b204d7 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20431 Integration-Tests: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> Reviewed-by: Hussain Towaileb <[email protected]> Tested-by: Jenkins <[email protected]> --- .../asterix/app/active/ActiveEntityEventsListener.java | 2 +- .../java/org/apache/asterix/app/active/RecoveryTask.java | 3 ++- .../java/org/apache/asterix/metadata/MetadataManager.java | 9 +++++++++ .../main/java/org/apache/asterix/metadata/MetadataNode.java | 12 ++++++++++++ .../org/apache/asterix/metadata/api/IMetadataManager.java | 3 +++ .../java/org/apache/asterix/metadata/api/IMetadataNode.java | 2 ++ 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java index 339331c496..2e65722c61 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java @@ -520,7 +520,7 @@ public abstract class ActiveEntityEventsListener implements IActiveEntityControl protected abstract void doResume(MetadataProvider metadataProvider) throws HyracksDataException; - protected abstract void setRunning(MetadataProvider metadataProvider, boolean running); + protected abstract void setRunning(MetadataProvider metadataProvider, boolean running) throws HyracksDataException; @Override public final synchronized void stop(MetadataProvider metadataProvider) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java index b2e6204838..5fbc180af7 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java @@ -118,7 +118,8 @@ public class RecoveryTask { } } - protected Void doRecover(IRetryPolicy policy) throws AlgebricksException, InterruptedException { + protected Void doRecover(IRetryPolicy policy) + throws AlgebricksException, InterruptedException, HyracksDataException { LOGGER.log(level, "Actual Recovery task has started"); Exception failure; long prevSuspendCount; 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 254c372471..a64661722e 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 @@ -1217,6 +1217,15 @@ public abstract class MetadataManager implements IMetadataManager { INSTANCE = new NCMetadataManagerImpl(proxies, metadataNode); } + @Override + public boolean isActive(TxnId txnId) throws AlgebricksException { + try { + return metadataNode.isActive(txnId); + } catch (RemoteException e) { + throw new MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e); + } + } + private static class CCMetadataManagerImpl extends MetadataManager { private final MetadataProperties metadataProperties; private final ICcApplicationContext appCtx; 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 f64d53ffff..b69b4ebd72 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 @@ -35,6 +35,7 @@ import org.apache.asterix.common.api.IDatasetLifecycleManager; import org.apache.asterix.common.api.INcApplicationContext; import org.apache.asterix.common.config.DatasetConfig.DatasetType; import org.apache.asterix.common.dataflow.LSMIndexUtil; +import org.apache.asterix.common.exceptions.ACIDException; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.common.exceptions.MetadataException; import org.apache.asterix.common.functions.FunctionSignature; @@ -1106,6 +1107,17 @@ public class MetadataNode implements IMetadataNode { } } + @Override + public boolean isActive(TxnId txnId) { + // TODO(mblow): avoid using exceptions for control flow + try { + transactionSubsystem.getTransactionManager().getTransactionContext(txnId); + return true; + } catch (ACIDException ignore) { + return false; + } + } + public List<Function> getAllFunctions(TxnId txnId) throws AlgebricksException { return getFunctionsImpl(txnId, null); } 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 d08578af95..9a22404e5a 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 @@ -26,6 +26,7 @@ import org.apache.asterix.common.exceptions.ACIDException; import org.apache.asterix.common.functions.FunctionSignature; import org.apache.asterix.common.metadata.DataverseName; import org.apache.asterix.common.metadata.IMetadataBootstrap; +import org.apache.asterix.common.transactions.TxnId; import org.apache.asterix.external.indexing.ExternalFile; import org.apache.asterix.metadata.MetadataTransactionContext; import org.apache.asterix.metadata.entities.CompactionPolicy; @@ -901,4 +902,6 @@ public interface IMetadataManager extends IMetadataBootstrap { throws AlgebricksException; long getMaxTxnId(); + + boolean isActive(TxnId txnId) throws AlgebricksException; } 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 378cf47ed1..1a5b4b9e1e 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 @@ -996,4 +996,6 @@ public interface IMetadataNode extends Remote, Serializable { List<FeedConnection> getFeedConnections(TxnId txnId, DataverseName dataverseName, String feedName) throws AlgebricksException, RemoteException; + + boolean isActive(TxnId txnId) throws RemoteException; }
