Yingyi Bu has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1769

Change subject: Enforce two-phase locking in LockList.
......................................................................

Enforce two-phase locking in LockList.

- Enforce two-phase locking through a state;
- Clear the lock list in unlock().

Change-Id: I6fd8ddf62e5cbd5500e84a3acdbdb680ac068748
---
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/exceptions/ErrorCode.java
M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/LockList.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java
5 files changed, 94 insertions(+), 64 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/69/1769/1

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 6a2b4e0..e9c8cf7 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
@@ -31,9 +31,9 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Random;
+import java.util.Map.Entry;
 import java.util.concurrent.ExecutorService;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -52,15 +52,16 @@
 import org.apache.asterix.app.result.ResultHandle;
 import org.apache.asterix.app.result.ResultReader;
 import org.apache.asterix.common.config.ClusterProperties;
+import org.apache.asterix.common.config.ExternalProperties;
+import org.apache.asterix.common.config.GlobalConfig;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.common.config.DatasetConfig.ExternalFilePendingOp;
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.config.DatasetConfig.TransactionState;
-import org.apache.asterix.common.config.ExternalProperties;
-import org.apache.asterix.common.config.GlobalConfig;
 import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.ACIDException;
+import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.functions.FunctionSignature;
@@ -153,16 +154,16 @@
 import org.apache.asterix.om.types.TypeSignature;
 import 
org.apache.asterix.transaction.management.service.transaction.DatasetIdFactory;
 import org.apache.asterix.translator.AbstractLangTranslator;
-import 
org.apache.asterix.translator.CompiledStatements.CompiledDeleteStatement;
-import 
org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement;
-import 
org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
-import 
org.apache.asterix.translator.CompiledStatements.CompiledUpsertStatement;
-import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement;
 import org.apache.asterix.translator.IStatementExecutor;
 import org.apache.asterix.translator.IStatementExecutorContext;
 import org.apache.asterix.translator.SessionConfig;
 import org.apache.asterix.translator.SessionOutput;
 import org.apache.asterix.translator.TypeTranslator;
+import 
org.apache.asterix.translator.CompiledStatements.CompiledDeleteStatement;
+import 
org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement;
+import 
org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
+import 
org.apache.asterix.translator.CompiledStatements.CompiledUpsertStatement;
+import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement;
 import org.apache.asterix.translator.util.ValidateUtil;
 import org.apache.asterix.utils.DataverseUtil;
 import org.apache.asterix.utils.FeedOperations;
@@ -1719,7 +1720,7 @@
         String dataverseName = 
getActiveDataverse(stmtInsertUpsert.getDataverseName());
         final IMetadataLocker locker = new IMetadataLocker() {
             @Override
-            public void lock() {
+            public void lock() throws AsterixException {
                 
MetadataLockManager.INSTANCE.insertDeleteUpsertBegin(metadataProvider.getLocks(),
                         dataverseName + "." + 
stmtInsertUpsert.getDatasetName());
             }
@@ -2277,9 +2278,9 @@
     }
 
     private interface IMetadataLocker {
-        void lock();
+        void lock() throws AsterixException;
 
-        void unlock();
+        void unlock() throws AsterixException;
     }
 
     private interface IResultPrinter {
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 23d6727..122fdf4 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -99,6 +99,7 @@
     public static final int UNKNOWN_SEARCH_MODIFIER = 1036;
     public static final int COMPILATION_BAD_QUERY_PARAMETER_VALUE = 1037;
     public static final int COMPILATION_ILLEGAL_STATE = 1038;
+    public static final int COMPILATION_TWO_PHASE_LOCKING_VIOLATION = 1038;
 
     // Feed errors
     public static final int DATAFLOW_ILLEGAL_STATE = 3001;
diff --git 
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties 
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index e1a54cf..7ee2820 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -85,6 +85,7 @@
 1036 = Unknown search modifier type %1$s
 1037 = Invalid query parameter %1$s -- value has to be greater than or equal 
to %2$s bytes
 1038 = Illegal state. %1$s
+1039 = Two phase locking violation -- locks can not be acquired after unlocking
 
 # Feed Errors
 3001 = Illegal state.
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/LockList.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/LockList.java
index 6e6f086..9813fa7 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/LockList.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/LockList.java
@@ -21,25 +21,51 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.asterix.metadata.lock.IMetadataLock.Mode;
+import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.commons.lang3.tuple.Pair;
 
+/**
+ * The LockList is used for two phase locking.
+ */
 public class LockList {
-    List<Pair<IMetadataLock.Mode, IMetadataLock>> locks = new ArrayList<>();
+    private List<Pair<IMetadataLock.Mode, IMetadataLock>> locks = new 
ArrayList<>();
+    private boolean lockPhase = true;
 
-    public void add(IMetadataLock.Mode mode, IMetadataLock lock) {
+    /**
+     * Acquire a lock.
+     *
+     * @param mode
+     *            the lock mode.
+     * @param lock
+     *            the lock object.
+     */
+    public void add(IMetadataLock.Mode mode, IMetadataLock lock) throws 
AsterixException {
+        if (!lockPhase) {
+            throw new 
AsterixException(ErrorCode.COMPILATION_TWO_PHASE_LOCKING_VIOLATION);
+        }
         lock.acquire(mode);
         locks.add(Pair.of(mode, lock));
     }
 
+    /**
+     * Once unlock() is called, no caller can call add(IMetadataLock.Mode 
mode, IMetadataLock lock),
+     * except that reset() is called.
+     */
     public void unlock() {
         for (int i = locks.size() - 1; i >= 0; i--) {
             Pair<IMetadataLock.Mode, IMetadataLock> pair = locks.get(i);
             pair.getRight().release(pair.getLeft());
         }
+        locks.clear();
+        lockPhase = false;
     }
 
+    /**
+     * Clears the state and starts another pass of two phase locking again.
+     */
     public void reset() {
-        locks.clear();
+        unlock();
+        lockPhase = true;
     }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java
index 5ae3aa4..6c8999a 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/lock/MetadataLockManager.java
@@ -22,6 +22,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 
+import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.metadata.entities.FeedConnection;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 
@@ -54,115 +55,104 @@
     }
 
     // Dataverse
-    public void acquireDataverseReadLock(LockList locks, String dataverseName) 
{
+    public void acquireDataverseReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = dataversesLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireDataverseWriteLock(LockList locks, String 
dataverseName) {
+    public void acquireDataverseWriteLock(LockList locks, String 
dataverseName) throws AsterixException {
         MetadataLock lock = dataversesLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
     // Dataset
-    public void acquireDatasetReadLock(LockList locks, String datasetName) {
+    public void acquireDatasetReadLock(LockList locks, String datasetName) 
throws AsterixException {
         DatasetLock lock = datasetsLocks.computeIfAbsent(datasetName, 
DATASET_LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireDatasetWriteLock(LockList locks, String datasetName) {
+    public void acquireDatasetWriteLock(LockList locks, String datasetName) 
throws AsterixException {
         DatasetLock lock = datasetsLocks.computeIfAbsent(datasetName, 
DATASET_LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
-    public void acquireDatasetModifyLock(LockList locks, String datasetName) {
+    public void acquireDatasetModifyLock(LockList locks, String datasetName) 
throws AsterixException {
         DatasetLock lock = datasetsLocks.computeIfAbsent(datasetName, 
DATASET_LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.MODIFY, lock);
     }
 
-    public void acquireDatasetCreateIndexLock(LockList locks, String 
datasetName) {
+    public void acquireDatasetCreateIndexLock(LockList locks, String 
datasetName) throws AsterixException {
         DatasetLock lock = datasetsLocks.computeIfAbsent(datasetName, 
DATASET_LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.INDEX_BUILD, lock);
     }
 
-    public void acquireExternalDatasetRefreshLock(LockList locks, String 
datasetName) {
+    public void acquireExternalDatasetRefreshLock(LockList locks, String 
datasetName) throws AsterixException {
         DatasetLock lock = datasetsLocks.computeIfAbsent(datasetName, 
DATASET_LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.INDEX_BUILD, lock);
     }
 
     // Function
-    public void acquireFunctionReadLock(LockList locks, String dataverseName) {
+    public void acquireFunctionReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = functionsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireFunctionWriteLock(LockList locks, String dataverseName) 
{
+    public void acquireFunctionWriteLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = functionsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
     // Node Group
-    public void acquireNodeGroupReadLock(LockList locks, String dataverseName) 
{
+    public void acquireNodeGroupReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = nodeGroupsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireNodeGroupWriteLock(LockList locks, String 
dataverseName) {
+    public void acquireNodeGroupWriteLock(LockList locks, String 
dataverseName) throws AsterixException {
         MetadataLock lock = nodeGroupsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
     // Feeds
-    public void acquireFeedReadLock(LockList locks, String dataverseName) {
+    public void acquireFeedReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = feedsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireFeedWriteLock(LockList locks, String dataverseName) {
+    public void acquireFeedWriteLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = feedsLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
-    // Feed Policies
-    public void acquireFeedPolicyReadLock(LockList locks, String 
dataverseName) {
-        MetadataLock lock = feedPolicyLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
-        locks.add(IMetadataLock.Mode.READ, lock);
-    }
-
-    public void acquireFeedPolicyWriteLock(LockList locks, String 
dataverseName) {
+    public void acquireFeedPolicyWriteLock(LockList locks, String 
dataverseName) throws AsterixException {
         MetadataLock lock = feedPolicyLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
     // CompactionPolicy
-    public void acquireCompactionPolicyReadLock(LockList locks, String 
dataverseName) {
+    public void acquireCompactionPolicyReadLock(LockList locks, String 
dataverseName) throws AsterixException {
         MetadataLock lock = 
compactionPolicyLocks.computeIfAbsent(dataverseName, LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireCompactionPolicyWriteLock(LockList locks, String 
dataverseName) {
-        MetadataLock lock = 
compactionPolicyLocks.computeIfAbsent(dataverseName, LOCK_FUNCTION);
-        locks.add(IMetadataLock.Mode.WRITE, lock);
-    }
-
     // DataType
-    public void acquireDataTypeReadLock(LockList locks, String dataverseName) {
+    public void acquireDataTypeReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = dataTypeLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireDataTypeWriteLock(LockList locks, String dataverseName) 
{
+    public void acquireDataTypeWriteLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = dataTypeLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
 
     // Extensions
-    public void acquireExtensionReadLock(LockList locks, String dataverseName) 
{
+    public void acquireExtensionReadLock(LockList locks, String dataverseName) 
throws AsterixException {
         MetadataLock lock = extensionLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.READ, lock);
     }
 
-    public void acquireExtensionWriteLock(LockList locks, String 
dataverseName) {
+    public void acquireExtensionWriteLock(LockList locks, String 
dataverseName) throws AsterixException {
         MetadataLock lock = extensionLocks.computeIfAbsent(dataverseName, 
LOCK_FUNCTION);
         locks.add(IMetadataLock.Mode.WRITE, lock);
     }
@@ -170,7 +160,7 @@
     public void createDatasetBegin(LockList locks, String dataverseName, 
String itemTypeDataverseName,
             String itemTypeFullyQualifiedName, String 
metaItemTypeDataverseName, String metaItemTypeFullyQualifiedName,
             String nodeGroupName, String compactionPolicyName, String 
datasetFullyQualifiedName,
-            boolean isDefaultCompactionPolicy) {
+            boolean isDefaultCompactionPolicy) throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         if (!dataverseName.equals(itemTypeDataverseName)) {
             acquireDataverseReadLock(locks, itemTypeDataverseName);
@@ -191,58 +181,66 @@
         acquireDatasetWriteLock(locks, datasetFullyQualifiedName);
     }
 
-    public void createIndexBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName) {
+    public void createIndexBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetCreateIndexLock(locks, datasetFullyQualifiedName);
     }
 
-    public void createTypeBegin(LockList locks, String dataverseName, String 
itemTypeFullyQualifiedName) {
+    public void createTypeBegin(LockList locks, String dataverseName, String 
itemTypeFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDataTypeWriteLock(locks, itemTypeFullyQualifiedName);
     }
 
-    public void dropDatasetBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName) {
+    public void dropDatasetBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetWriteLock(locks, datasetFullyQualifiedName);
     }
 
-    public void dropIndexBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName) {
+    public void dropIndexBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetWriteLock(locks, datasetFullyQualifiedName);
     }
 
-    public void dropTypeBegin(LockList locks, String dataverseName, String 
dataTypeFullyQualifiedName) {
+    public void dropTypeBegin(LockList locks, String dataverseName, String 
dataTypeFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDataTypeWriteLock(locks, dataTypeFullyQualifiedName);
     }
 
-    public void functionStatementBegin(LockList locks, String dataverseName, 
String functionFullyQualifiedName) {
+    public void functionStatementBegin(LockList locks, String dataverseName, 
String functionFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireFunctionWriteLock(locks, functionFullyQualifiedName);
     }
 
-    public void modifyDatasetBegin(LockList locks, String dataverseName, 
String datasetFullyQualifiedName) {
+    public void modifyDatasetBegin(LockList locks, String dataverseName, 
String datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetModifyLock(locks, datasetFullyQualifiedName);
     }
 
-    public void insertDeleteUpsertBegin(LockList locks, String 
datasetFullyQualifiedName) {
+    public void insertDeleteUpsertBegin(LockList locks, String 
datasetFullyQualifiedName) throws AsterixException {
         acquireDataverseReadLock(locks, 
DatasetUtil.getDataverseFromFullyQualifiedName(datasetFullyQualifiedName));
         acquireDatasetModifyLock(locks, datasetFullyQualifiedName);
     }
 
-    public void dropFeedBegin(LockList locks, String dataverseName, String 
feedFullyQualifiedName) {
+    public void dropFeedBegin(LockList locks, String dataverseName, String 
feedFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireFeedWriteLock(locks, feedFullyQualifiedName);
     }
 
-    public void dropFeedPolicyBegin(LockList locks, String dataverseName, 
String policyName) {
+    public void dropFeedPolicyBegin(LockList locks, String dataverseName, 
String policyName) throws AsterixException {
         acquireFeedWriteLock(locks, policyName);
         acquireDataverseReadLock(locks, dataverseName);
     }
 
     public void startFeedBegin(LockList locks, String dataverseName, String 
feedName,
-            List<FeedConnection> feedConnections) {
+            List<FeedConnection> feedConnections) throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireFeedReadLock(locks, feedName);
         for (FeedConnection feedConnection : feedConnections) {
@@ -252,43 +250,46 @@
         }
     }
 
-    public void stopFeedBegin(LockList locks, String dataverseName, String 
feedName) {
+    public void stopFeedBegin(LockList locks, String dataverseName, String 
feedName) throws AsterixException {
         // TODO: dataset lock?
         // Dataset locks are not required here since datasets are protected by 
the active event listener
         acquireDataverseReadLock(locks, dataverseName);
         acquireFeedReadLock(locks, feedName);
     }
 
-    public void createFeedBegin(LockList locks, String dataverseName, String 
feedFullyQualifiedName) {
+    public void createFeedBegin(LockList locks, String dataverseName, String 
feedFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireFeedWriteLock(locks, feedFullyQualifiedName);
     }
 
     public void connectFeedBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName,
-            String feedFullyQualifiedName) {
+            String feedFullyQualifiedName) throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetReadLock(locks, datasetFullyQualifiedName);
         acquireFeedReadLock(locks, feedFullyQualifiedName);
     }
 
-    public void createFeedPolicyBegin(LockList locks, String dataverseName, 
String policyName) {
+    public void createFeedPolicyBegin(LockList locks, String dataverseName, 
String policyName) throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireFeedPolicyWriteLock(locks, policyName);
     }
 
     public void disconnectFeedBegin(LockList locks, String dataverseName, 
String datasetFullyQualifiedName,
-            String feedFullyQualifiedName) {
+            String feedFullyQualifiedName) throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetReadLock(locks, datasetFullyQualifiedName);
         acquireFeedReadLock(locks, feedFullyQualifiedName);
     }
 
-    public void compactBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName) {
+    public void compactBegin(LockList locks, String dataverseName, String 
datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireDatasetReadLock(locks, datasetFullyQualifiedName);
     }
 
-    public void refreshDatasetBegin(LockList locks, String dataverseName, 
String datasetFullyQualifiedName) {
+    public void refreshDatasetBegin(LockList locks, String dataverseName, 
String datasetFullyQualifiedName)
+            throws AsterixException {
         acquireDataverseReadLock(locks, dataverseName);
         acquireExternalDatasetRefreshLock(locks, datasetFullyQualifiedName);
     }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1769
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6fd8ddf62e5cbd5500e84a3acdbdb680ac068748
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Yingyi Bu <[email protected]>

Reply via email to