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;
 }

Reply via email to