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 c1e772c..77f2b23 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
@@ -53,7 +53,6 @@
 import org.apache.asterix.translator.IStatementExecutor;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.job.JobId;
@@ -381,18 +380,18 @@
         }
     }
 
-    protected abstract void doStart(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException;
+    protected abstract void doStart(MetadataProvider metadataProvider) throws HyracksDataException;
 
-    protected abstract Void doStop(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException;
+    protected abstract Void doStop(MetadataProvider metadataProvider) throws HyracksDataException;
 
     protected abstract Void doSuspend(MetadataProvider metadataProvider)
-            throws HyracksDataException, AlgebricksException;
+            throws HyracksDataException;
 
     protected abstract void doResume(MetadataProvider metadataProvider)
-            throws HyracksDataException, AlgebricksException;
+            throws HyracksDataException;
 
     protected abstract void setRunning(MetadataProvider metadataProvider, boolean running)
-            throws HyracksDataException, AlgebricksException;
+            throws HyracksDataException;
 
     @Override
     public synchronized void stop(MetadataProvider metadataProvider) throws HyracksDataException, InterruptedException {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/FeedEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/FeedEventsListener.java
index c01bcbc..38e8a21 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/FeedEventsListener.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/FeedEventsListener.java
@@ -80,7 +80,7 @@
     }
 
     @Override
-    protected void doStart(MetadataProvider mdProvider) throws HyracksDataException, AlgebricksException {
+    protected void doStart(MetadataProvider mdProvider) throws HyracksDataException {
         try {
             ILangCompilationProvider compilationProvider = new AqlCompilationProvider();
             IStorageComponentProvider storageComponentProvider = new StorageComponentProvider();
@@ -106,15 +106,13 @@
                         EnumSet.of(ActivityState.STOPPED, ActivityState.PERMANENTLY_FAILED));
                 stoppedSubscriber.sync();
             }
-        } catch (AlgebricksException e) {
-            throw e;
         } catch (Exception e) {
             throw HyracksDataException.create(e);
         }
     }
 
     @Override
-    protected Void doStop(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected Void doStop(MetadataProvider metadataProvider) throws HyracksDataException {
         IActiveEntityEventSubscriber eventSubscriber =
                 new WaitForStateSubscriber(this, EnumSet.of(ActivityState.STOPPED, ActivityState.PERMANENTLY_FAILED));
         try {
@@ -125,8 +123,6 @@
                         i);
             }
             eventSubscriber.sync();
-        } catch (AlgebricksException e) {
-            throw e;
         } catch (Exception e) {
             throw HyracksDataException.create(e);
         }
@@ -135,17 +131,17 @@
 
     @Override
     protected void setRunning(MetadataProvider metadataProvider, boolean running)
-            throws HyracksDataException, AlgebricksException {
+            throws HyracksDataException {
         // No op
     }
 
     @Override
-    protected Void doSuspend(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected Void doSuspend(MetadataProvider metadataProvider) throws HyracksDataException {
         throw new RuntimeDataException(ErrorCode.OPERATION_NOT_SUPPORTED);
     }
 
     @Override
-    protected void doResume(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected void doResume(MetadataProvider metadataProvider) throws HyracksDataException {
         throw new RuntimeDataException(ErrorCode.OPERATION_NOT_SUPPORTED);
     }
 }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/DummyFeedEventsListener.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/DummyFeedEventsListener.java
index 4de5813..c269803 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/DummyFeedEventsListener.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/DummyFeedEventsListener.java
@@ -50,7 +50,7 @@
     }
 
     @Override
-    protected void doStart(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected void doStart(MetadataProvider metadataProvider) throws HyracksDataException {
         WaitForStateSubscriber eventSubscriber =
                 new WaitForStateSubscriber(this, Collections.singleton(ActivityState.RUNNING));
         try {
@@ -64,7 +64,7 @@
     }
 
     @Override
-    protected Void doStop(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected Void doStop(MetadataProvider metadataProvider) throws HyracksDataException {
         IActiveEntityEventSubscriber eventSubscriber =
                 new WaitForStateSubscriber(this, EnumSet.of(ActivityState.RUNNING, ActivityState.PERMANENTLY_FAILED));
         try {
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/TestEventsListener.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/TestEventsListener.java
index c8d4b53..90880aa 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/TestEventsListener.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/TestEventsListener.java
@@ -105,7 +105,7 @@
 
     @SuppressWarnings("deprecation")
     @Override
-    protected void doStart(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected void doStart(MetadataProvider metadataProvider) throws HyracksDataException {
         step(onStart);
         failCompile(onStart);
         JobId jobId = jobIdFactory.create();
@@ -178,7 +178,7 @@
 
     @Override
     protected void setRunning(MetadataProvider metadataProvider, boolean running)
-            throws HyracksDataException, AlgebricksException {
+            throws HyracksDataException {
         try {
             IMetadataLockManager lockManager = metadataProvider.getApplicationContext().getMetadataLockManager();
             LockList locks = metadataProvider.getLocks();
@@ -191,12 +191,12 @@
     }
 
     @Override
-    protected Void doSuspend(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected Void doSuspend(MetadataProvider metadataProvider) throws HyracksDataException {
         return doStop(metadataProvider);
     }
 
     @Override
-    protected void doResume(MetadataProvider metadataProvider) throws HyracksDataException, AlgebricksException {
+    protected void doResume(MetadataProvider metadataProvider) throws HyracksDataException {
         doStart(metadataProvider);
     }
 }
