You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2021/04/14 22:20:03 UTC
[asterixdb] 05/07: [NO ISSUE][*DB] Handle unchecked exceptions
during global recovery
This is an automated email from the ASF dual-hosted git repository.
dlych pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 1940f26a56508e06774f98f76d6fb37d65178051
Author: Michael Blow <mb...@apache.org>
AuthorDate: Tue Apr 13 17:41:26 2021 -0400
[NO ISSUE][*DB] Handle unchecked exceptions during global recovery
Change-Id: If4766f783a0e1b398d81681be8bc70b8a507d673
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11046
Reviewed-by: Michael Blow <mb...@apache.org>
Reviewed-by: Ian Maxon <im...@uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
---
.../hyracks/bootstrap/GlobalRecoveryManager.java | 42 +++++++++++-----------
1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
index 5870d3a..e1c39a0 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
@@ -47,11 +47,9 @@ import org.apache.asterix.metadata.utils.ExternalIndexingOperations;
import org.apache.asterix.metadata.utils.MetadataConstants;
import org.apache.hyracks.api.application.ICCServiceContext;
import org.apache.hyracks.api.client.IHyracksClientConnection;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.job.JobId;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.util.ExitUtil;
-import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -95,15 +93,19 @@ public class GlobalRecoveryManager implements IGlobalRecoveryManager {
synchronized (this) {
if (!recovering) {
recovering = true;
- /**
+ /*
* Perform recovery on a different thread to avoid deadlocks in
* {@link org.apache.asterix.common.cluster.IClusterStateManager}
*/
serviceCtx.getControllerService().getExecutor().submit(() -> {
try {
recover(appCtx);
- } catch (HyracksDataException e) {
- LOGGER.log(Level.ERROR, "Global recovery failed. Shutting down...", e);
+ } catch (Throwable e) {
+ try {
+ LOGGER.fatal("Global recovery failed. Shutting down...", e);
+ } catch (Throwable ignore) {
+ // ignoring exception trying to log, just do the halt
+ }
ExitUtil.exit(ExitUtil.EC_FAILED_TO_RECOVER);
}
});
@@ -112,24 +114,20 @@ public class GlobalRecoveryManager implements IGlobalRecoveryManager {
}
}
- protected void recover(ICcApplicationContext appCtx) throws HyracksDataException {
- try {
- LOGGER.info("Starting Global Recovery");
- MetadataManager.INSTANCE.init();
- MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
- if (appCtx.getStorageProperties().isStorageGlobalCleanup()) {
- int storageGlobalCleanupTimeout = appCtx.getStorageProperties().getStorageGlobalCleanupTimeout();
- performGlobalStorageCleanup(mdTxnCtx, storageGlobalCleanupTimeout);
- }
- mdTxnCtx = doRecovery(appCtx, mdTxnCtx);
- MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
- recoveryCompleted = true;
- recovering = false;
- LOGGER.info("Global Recovery Completed. Refreshing cluster state...");
- appCtx.getClusterStateManager().refreshState();
- } catch (Exception e) {
- throw HyracksDataException.create(e);
+ protected void recover(ICcApplicationContext appCtx) throws Exception {
+ LOGGER.info("Starting Global Recovery");
+ MetadataManager.INSTANCE.init();
+ MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+ if (appCtx.getStorageProperties().isStorageGlobalCleanup()) {
+ int storageGlobalCleanupTimeout = appCtx.getStorageProperties().getStorageGlobalCleanupTimeout();
+ performGlobalStorageCleanup(mdTxnCtx, storageGlobalCleanupTimeout);
}
+ mdTxnCtx = doRecovery(appCtx, mdTxnCtx);
+ MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+ recoveryCompleted = true;
+ recovering = false;
+ LOGGER.info("Global Recovery Completed. Refreshing cluster state...");
+ appCtx.getClusterStateManager().refreshState();
}
protected void performGlobalStorageCleanup(MetadataTransactionContext mdTxnCtx, int storageGlobalCleanupTimeoutSecs)