abdullah alamoudi has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2104
Change subject: [NO ISSUE][ING] Make resume attempt on the same suspend/resume
thread
......................................................................
[NO ISSUE][ING] Make resume attempt on the same suspend/resume thread
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Previously, the resume attempt happens in a different thread but
uses the same metadata provider used by the suspension thread.
Additional locks gets acquired during compilation and added to
the locklist of the metadata provider. When the locks are
released, we get illegal state exception due to releasing
locks acquired by other threads.
Change-Id: Icc801923b167862286a5104b199cdc43e76096c8
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/RecoveryTask.java
2 files changed, 14 insertions(+), 18 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/04/2104/1
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 e3c1fed..0d43375 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
@@ -388,14 +388,11 @@
protected abstract Void doStop(MetadataProvider metadataProvider) throws
HyracksDataException;
- protected abstract Void doSuspend(MetadataProvider metadataProvider)
- throws HyracksDataException;
+ protected abstract Void doSuspend(MetadataProvider metadataProvider)
throws HyracksDataException;
- protected abstract void doResume(MetadataProvider metadataProvider)
- throws HyracksDataException;
+ protected abstract void doResume(MetadataProvider metadataProvider) throws
HyracksDataException;
- protected abstract void setRunning(MetadataProvider metadataProvider,
boolean running)
- throws HyracksDataException;
+ protected abstract void setRunning(MetadataProvider metadataProvider,
boolean running) throws HyracksDataException;
@Override
public synchronized void stop(MetadataProvider metadataProvider) throws
HyracksDataException, InterruptedException {
@@ -505,21 +502,15 @@
return;
}
setState(ActivityState.RESUMING);
- WaitForStateSubscriber subscriber = new
WaitForStateSubscriber(this,
- EnumSet.of(ActivityState.RUNNING,
ActivityState.TEMPORARILY_FAILED));
rt = new RecoveryTask(appCtx, this, retryPolicyFactory);
-
metadataProvider.getApplicationContext().getServiceContext().getControllerService().getExecutor()
- .submit(() -> rt.resumeOrRecover(metadataProvider));
try {
- subscriber.sync();
- if (subscriber.getFailure() != null) {
- LOGGER.log(Level.WARNING, "Failure while attempting to
resume " + entityId,
- subscriber.getFailure());
- }
+ rt.resumeOrRecover(metadataProvider);
} catch (InterruptedException e) {
LOGGER.log(Level.WARNING, "Failure while attempting to resume
" + entityId, e);
Thread.currentThread().interrupt();
throw HyracksDataException.create(e);
+ } catch (Exception e) {
+ LOGGER.log(Level.WARNING, "Failure while attempting to resume
" + entityId, e);
}
} finally {
suspended = false;
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 73439ce..3059e41 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
@@ -80,7 +80,7 @@
}
protected Void resumeOrRecover(MetadataProvider metadataProvider)
- throws HyracksDataException, AlgebricksException,
InterruptedException {
+ throws HyracksDataException, InterruptedException {
try {
synchronized (listener) {
listener.doResume(metadataProvider);
@@ -103,9 +103,14 @@
}
}
} else {
- IRetryPolicy policy = retryPolicyFactory.create(listener);
- doRecover(policy);
+
metadataProvider.getApplicationContext().getServiceContext().getControllerService().getExecutor()
+ .submit(() -> {
+ IRetryPolicy policy =
retryPolicyFactory.create(listener);
+ doRecover(policy);
+ return null;
+ });
}
+ throw e;
}
return null;
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2104
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icc801923b167862286a5104b199cdc43e76096c8
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>