Michael Blow has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1706
Change subject: Cleanup Logging, Report Joined Nodes, Misc Cleanup
......................................................................
Cleanup Logging, Report Joined Nodes, Misc Cleanup
- Minor refactoring of NodeControllerService startup
- Cleanup logging in GlobalRecoveryManager / LifeCycleComponentManager
- Enable TestExecutor to accept non-200 status codes
- Use ExecutorService for GlobalRecovery thread
Change-Id: I87b6b45e1a0cdc7a8b77d80b4e603d927aa60b8a
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/GlobalRecoveryManager.java
M
asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
M
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/ICCServiceContext.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/lifecycle/LifeCycleComponentManager.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCDriver.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
8 files changed, 166 insertions(+), 161 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/06/1706/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index 9c66f57..bf7d5eb 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -123,7 +123,7 @@
.create(ClusterProperties.INSTANCE.getCluster(), repStrategy,
ccServiceCtx);
ExternalLibraryUtils.setUpExternaLibraries(libraryManager, false);
componentProvider = new StorageComponentProvider();
- GlobalRecoveryManager.instantiate((HyracksConnection) getHcc(),
componentProvider);
+ GlobalRecoveryManager.instantiate(ccServiceCtx, getHcc(),
componentProvider);
appCtx = new CcApplicationContext(ccServiceCtx, getHcc(),
libraryManager, resourceIdManager,
() -> MetadataManager.INSTANCE,
GlobalRecoveryManager.instance(), ftStrategy,
new ActiveLifecycleListener());
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 722bb78..51f6357 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
@@ -45,7 +45,8 @@
import org.apache.asterix.metadata.utils.ExternalIndexingOperations;
import org.apache.asterix.metadata.utils.MetadataConstants;
import org.apache.asterix.runtime.utils.ClusterStateManager;
-import org.apache.hyracks.api.client.HyracksConnection;
+import org.apache.hyracks.api.application.ICCServiceContext;
+import org.apache.hyracks.api.client.IHyracksClientConnection;
import org.apache.hyracks.api.job.JobId;
import org.apache.hyracks.api.job.JobSpecification;
@@ -55,10 +56,13 @@
private static GlobalRecoveryManager instance;
private static ClusterState state;
private final IStorageComponentProvider componentProvider;
- private HyracksConnection hcc;
+ private final ICCServiceContext ccServiceCtx;
+ private IHyracksClientConnection hcc;
- private GlobalRecoveryManager(HyracksConnection hcc,
IStorageComponentProvider componentProvider) {
+ private GlobalRecoveryManager(ICCServiceContext ccServiceCtx,
IHyracksClientConnection hcc,
+ IStorageComponentProvider componentProvider)
{
setState(ClusterState.UNUSABLE);
+ this.ccServiceCtx = ccServiceCtx;
this.hcc = hcc;
this.componentProvider = componentProvider;
}
@@ -97,133 +101,129 @@
final ClusterState newState = ClusterStateManager.INSTANCE.getState();
boolean needToRecover = !newState.equals(state) && (newState ==
ClusterState.ACTIVE);
if (needToRecover) {
- Thread recoveryThread = new Thread(new Runnable() {
- @Override
- public void run() {
- LOGGER.info("Starting AsterixDB's Global Recovery");
- MetadataTransactionContext mdTxnCtx = null;
- try {
- Thread.sleep(4000);
- MetadataManager.INSTANCE.init();
- // Loop over datasets
- mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
- List<Dataverse> dataverses =
MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
- for (Dataverse dataverse : dataverses) {
- if
(!dataverse.getDataverseName().equals(MetadataConstants.METADATA_DATAVERSE_NAME))
{
- MetadataProvider metadataProvider =
- new MetadataProvider(appCtx,
dataverse, componentProvider);
- try {
- List<Dataset> datasets =
MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx,
- dataverse.getDataverseName());
- for (Dataset dataset : datasets) {
- if (dataset.getDatasetType() ==
DatasetType.EXTERNAL) {
- // External dataset
- // Get indexes
- List<Index> indexes =
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx,
-
dataset.getDataverseName(), dataset.getDatasetName());
- // Get the state of the dataset
- ExternalDatasetDetails dsd =
- (ExternalDatasetDetails)
dataset.getDatasetDetails();
- TransactionState datasetState =
dsd.getState();
- if (!indexes.isEmpty()) {
- if (datasetState ==
TransactionState.BEGIN) {
- List<ExternalFile> files =
MetadataManager.INSTANCE
-
.getDatasetExternalFiles(mdTxnCtx, dataset);
- // if persumed abort, roll
backward
- // 1. delete all pending
files
- for (ExternalFile file :
files) {
- if
(file.getPendingOp() != ExternalFilePendingOp.NO_OP) {
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
+ setState(newState);
+ ccServiceCtx.getControllerService().getExecutor().submit(() -> {
+ LOGGER.info("Starting Global Recovery");
+ MetadataTransactionContext mdTxnCtx = null;
+ try {
+ Thread.sleep(4000);
+ MetadataManager.INSTANCE.init();
+ // Loop over datasets
+ mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+ List<Dataverse> dataverses =
MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
+ for (Dataverse dataverse : dataverses) {
+ if
(!dataverse.getDataverseName().equals(MetadataConstants.METADATA_DATAVERSE_NAME))
{
+ MetadataProvider metadataProvider =
+ new MetadataProvider(appCtx, dataverse,
componentProvider);
+ try {
+ List<Dataset> datasets =
MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx,
+ dataverse.getDataverseName());
+ for (Dataset dataset : datasets) {
+ if (dataset.getDatasetType() ==
DatasetType.EXTERNAL) {
+ // External dataset
+ // Get indexes
+ List<Index> indexes =
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx,
+ dataset.getDataverseName(),
dataset.getDatasetName());
+ // Get the state of the dataset
+ ExternalDatasetDetails dsd =
+ (ExternalDatasetDetails)
dataset.getDatasetDetails();
+ TransactionState datasetState =
dsd.getState();
+ if (!indexes.isEmpty()) {
+ if (datasetState ==
TransactionState.BEGIN) {
+ List<ExternalFile> files =
MetadataManager.INSTANCE
+
.getDatasetExternalFiles(mdTxnCtx, dataset);
+ // if persumed abort, roll
backward
+ // 1. delete all pending files
+ for (ExternalFile file :
files) {
+ if (file.getPendingOp() !=
ExternalFilePendingOp.NO_OP) {
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
+ }
+ }
+ }
+ // 2. clean artifacts in NCs
+
metadataProvider.setMetadataTxnContext(mdTxnCtx);
+ JobSpecification jobSpec =
ExternalIndexingOperations
+ .buildAbortOp(dataset,
indexes, metadataProvider);
+ executeHyracksJob(jobSpec);
+ // 3. correct the dataset state
+ ((ExternalDatasetDetails)
dataset.getDatasetDetails())
+
.setState(TransactionState.COMMIT);
+
MetadataManager.INSTANCE.updateDataset(mdTxnCtx, dataset);
+
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+ mdTxnCtx =
MetadataManager.INSTANCE.beginTransaction();
+ } else if (datasetState ==
TransactionState.READY_TO_COMMIT) {
+ List<ExternalFile> files =
MetadataManager.INSTANCE
+
.getDatasetExternalFiles(mdTxnCtx, dataset);
+ // if ready to commit, roll forward
+ // 1. commit indexes in NCs
+
metadataProvider.setMetadataTxnContext(mdTxnCtx);
+ JobSpecification jobSpec =
ExternalIndexingOperations
+ .buildRecoverOp(dataset,
indexes, metadataProvider);
+ executeHyracksJob(jobSpec);
+ // 2. add pending files in metadata
+ for (ExternalFile file : files) {
+ if (file.getPendingOp() ==
ExternalFilePendingOp.ADD_OP) {
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
+
file.setPendingOp(ExternalFilePendingOp.NO_OP);
+
MetadataManager.INSTANCE.addExternalFile(mdTxnCtx, file);
+ } else if (file.getPendingOp()
== ExternalFilePendingOp.DROP_OP) {
+ // find original file
+ for (ExternalFile
originalFile : files) {
+ if
(originalFile.getFileName().equals(file.getFileName())) {
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
+ file);
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
+
originalFile);
+ break;
+ }
+ }
+ } else if (file.getPendingOp()
== ExternalFilePendingOp.APPEND_OP) {
+ // find original file
+ for (ExternalFile
originalFile : files) {
+ if
(originalFile.getFileName().equals(file.getFileName())) {
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
+ file);
+
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
+
originalFile);
+
originalFile.setSize(file.getSize());
+
MetadataManager.INSTANCE.addExternalFile(mdTxnCtx,
+
originalFile);
}
}
}
- // 2. clean artifacts in NCs
-
metadataProvider.setMetadataTxnContext(mdTxnCtx);
- JobSpecification jobSpec =
ExternalIndexingOperations
- .buildAbortOp(dataset,
indexes, metadataProvider);
- executeHyracksJob(jobSpec);
// 3. correct the dataset state
((ExternalDatasetDetails)
dataset.getDatasetDetails())
.setState(TransactionState.COMMIT);
MetadataManager.INSTANCE.updateDataset(mdTxnCtx, dataset);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
mdTxnCtx =
MetadataManager.INSTANCE.beginTransaction();
- } else if (datasetState ==
TransactionState.READY_TO_COMMIT) {
- List<ExternalFile> files =
MetadataManager.INSTANCE
-
.getDatasetExternalFiles(mdTxnCtx, dataset);
- // if ready to commit, roll
forward
- // 1. commit indexes in NCs
-
metadataProvider.setMetadataTxnContext(mdTxnCtx);
- JobSpecification jobSpec =
ExternalIndexingOperations
-
.buildRecoverOp(dataset, indexes, metadataProvider);
- executeHyracksJob(jobSpec);
- // 2. add pending files in
metadata
- for (ExternalFile file :
files) {
- if (file.getPendingOp() ==
ExternalFilePendingOp.ADD_OP) {
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx, file);
-
file.setPendingOp(ExternalFilePendingOp.NO_OP);
-
MetadataManager.INSTANCE.addExternalFile(mdTxnCtx, file);
- } else if
(file.getPendingOp() == ExternalFilePendingOp.DROP_OP) {
- // find original file
- for (ExternalFile
originalFile : files) {
- if
(originalFile.getFileName().equals(file.getFileName())) {
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
- file);
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
-
originalFile);
- break;
- }
- }
- } else if
(file.getPendingOp() == ExternalFilePendingOp.APPEND_OP) {
- // find original file
- for (ExternalFile
originalFile : files) {
- if
(originalFile.getFileName().equals(file.getFileName())) {
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
- file);
-
MetadataManager.INSTANCE.dropExternalFile(mdTxnCtx,
-
originalFile);
-
originalFile.setSize(file.getSize());
-
MetadataManager.INSTANCE.addExternalFile(mdTxnCtx,
-
originalFile);
- }
- }
- }
- // 3. correct the dataset
state
- ((ExternalDatasetDetails)
dataset.getDatasetDetails())
-
.setState(TransactionState.COMMIT);
-
MetadataManager.INSTANCE.updateDataset(mdTxnCtx, dataset);
-
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
- mdTxnCtx =
MetadataManager.INSTANCE.beginTransaction();
- }
}
}
}
- } finally {
- metadataProvider.getLocks().unlock();
}
+ } finally {
+ metadataProvider.getLocks().unlock();
}
}
- MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
- } catch (Exception e) {
- // This needs to be fixed <-- Needs to shutdown the
system -->
- /*
- * Note: Throwing this illegal state exception will
terminate this thread
- * and feeds listeners will not be notified.
- */
- LOGGER.log(Level.SEVERE, "Global recovery was not
completed successfully: ", e);
- try {
-
MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
- } catch (Exception e1) {
- LOGGER.log(Level.SEVERE, "Exception in aborting",
e1);
- throw new IllegalStateException(e1);
- }
}
-
ClusterStateManager.INSTANCE.setGlobalRecoveryCompleted(true);
- LOGGER.info("Global Recovery Completed");
+ MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+ } catch (Exception e) {
+ // This needs to be fixed <-- Needs to shutdown the system
-->
+ /*
+ * Note: Throwing this illegal state exception will
terminate this thread
+ * and feeds listeners will not be notified.
+ */
+ LOGGER.log(Level.SEVERE, "Global recovery was not
completed successfully: ", e);
+ try {
+ MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
+ } catch (Exception e1) {
+ LOGGER.log(Level.SEVERE, "Exception in aborting", e1);
+ throw new IllegalStateException(e1);
+ }
}
- }, "RecoveryThread");
- setState(newState);
- recoveryThread.start();
+ ClusterStateManager.INSTANCE.setGlobalRecoveryCompleted(true);
+ LOGGER.info("Global Recovery Completed");
+ });
}
}
@@ -231,8 +231,9 @@
return instance;
}
- public static synchronized void instantiate(HyracksConnection hcc,
IStorageComponentProvider componentProvider) {
- instance = new GlobalRecoveryManager(hcc, componentProvider);
+ public static synchronized void instantiate(ICCServiceContext
ccServiceCtx, IHyracksClientConnection hcc,
+ IStorageComponentProvider
componentProvider) {
+ instance = new GlobalRecoveryManager(ccServiceCtx, hcc,
componentProvider);
}
public static synchronized void setState(ClusterState state) {
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index 8457681..e88f647 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -45,6 +45,7 @@
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
@@ -404,7 +405,12 @@
}
protected HttpResponse executeAndCheckHttpRequest(HttpUriRequest method)
throws Exception {
- return checkResponse(executeHttpRequest(method));
+ return checkResponse(executeHttpRequest(method), code -> code ==
HttpStatus.SC_OK);
+ }
+
+ protected HttpResponse executeAndCheckHttpRequest(HttpUriRequest method,
Predicate<Integer> responseCodeValidator)
+ throws Exception {
+ return checkResponse(executeHttpRequest(method),
responseCodeValidator);
}
protected HttpResponse executeHttpRequest(HttpUriRequest method) throws
Exception {
@@ -418,8 +424,9 @@
}
}
- protected HttpResponse checkResponse(HttpResponse httpResponse) throws
Exception {
- if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+ protected HttpResponse checkResponse(HttpResponse httpResponse,
Predicate<Integer> responseCodeValidator)
+ throws Exception {
+ if
(!responseCodeValidator.test(httpResponse.getStatusLine().getStatusCode())) {
String errorBody = EntityUtils.toString(httpResponse.getEntity());
String exceptionMsg;
try {
@@ -582,8 +589,13 @@
}
public InputStream executeJSONPost(OutputFormat fmt, URI uri) throws
Exception {
+ return executeJSONPost(fmt, uri, code -> code == HttpStatus.SC_OK);
+ }
+
+ public InputStream executeJSONPost(OutputFormat fmt, URI uri,
Predicate<Integer> responseCodeValidator)
+ throws Exception {
HttpUriRequest request = constructPostMethod(uri, fmt, new
ArrayList<>());
- HttpResponse response = executeAndCheckHttpRequest(request);
+ HttpResponse response = executeAndCheckHttpRequest(request,
responseCodeValidator);
return response.getEntity().getContent();
}
diff --git
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
index 2d8a04d..b475fb9 100644
---
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
+++
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
@@ -41,6 +41,7 @@
import org.apache.hyracks.api.config.IOption;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.exceptions.HyracksException;
+import org.apache.hyracks.control.cc.ClusterControllerService;
import org.apache.hyracks.control.common.controllers.NCConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -303,24 +304,27 @@
stateDescription.put("metadata_node", currentMetadataNode);
ArrayNode ncs = om.createArrayNode();
stateDescription.set("ncs", ncs);
- for (Map.Entry<String, ClusterPartition[]> entry :
node2PartitionsMap.entrySet()) {
+ for (String node : ((ClusterControllerService)
appCtx.getServiceContext().getControllerService())
+ .getNodeManager().getAllNodeIds()) {
ObjectNode nodeJSON = om.createObjectNode();
- nodeJSON.put("node_id", entry.getKey());
+ nodeJSON.put("node_id", node);
boolean allActive = true;
boolean anyActive = false;
Set<Map<String, Object>> partitions = new HashSet<>();
- for (ClusterPartition part : entry.getValue()) {
- HashMap<String, Object> partition = new HashMap<>();
- partition.put("partition_id", "partition_" +
part.getPartitionId());
- partition.put("active", part.isActive());
- partitions.add(partition);
- allActive = allActive && part.isActive();
- if (allActive) {
- anyActive = true;
+ if (node2PartitionsMap.containsKey(node)) {
+ for (ClusterPartition part : node2PartitionsMap.get(node)) {
+ HashMap<String, Object> partition = new HashMap<>();
+ partition.put("partition_id", "partition_" +
part.getPartitionId());
+ partition.put("active", part.isActive());
+ partitions.add(partition);
+ allActive = allActive && part.isActive();
+ if (allActive) {
+ anyActive = true;
+ }
}
}
- nodeJSON.put("state", failedNodes.contains(entry.getKey()) ?
"FAILED"
- : allActive ? "ACTIVE" : anyActive ? "PARTIALLY_ACTIVE" :
"INACTIVE");
+ nodeJSON.put("state", failedNodes.contains(node) ? "FAILED"
+ : allActive && anyActive ? "ACTIVE" : anyActive ?
"PARTIALLY_ACTIVE" : "INACTIVE");
nodeJSON.putPOJO("partitions", partitions);
ncs.add(nodeJSON);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/ICCServiceContext.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/ICCServiceContext.java
index c0e9834..94ebcfe 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/ICCServiceContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/application/ICCServiceContext.java
@@ -22,6 +22,7 @@
import org.apache.hyracks.api.context.ICCContext;
import org.apache.hyracks.api.job.IJobLifecycleListener;
+import org.apache.hyracks.api.service.IControllerService;
/**
* Service Context at the Cluster Controller for an application.
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/lifecycle/LifeCycleComponentManager.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/lifecycle/LifeCycleComponentManager.java
index d6961b3..4674f9a 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/lifecycle/LifeCycleComponentManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/lifecycle/LifeCycleComponentManager.java
@@ -43,7 +43,7 @@
private boolean configured;
public LifeCycleComponentManager() {
- components = new ArrayList<ILifeCycleComponent>();
+ components = new ArrayList<>();
stopInitiated = false;
configured = false;
stopped = false;
@@ -51,16 +51,11 @@
@Override
public void uncaughtException(Thread t, Throwable e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.severe("Uncaught Exception from thread " + t.getName() + "
message: " + e.getMessage());
- e.printStackTrace();
- }
+ LOGGER.log(Level.SEVERE, "Uncaught Exception from thread " +
t.getName(), e);
try {
stopAll(true);
} catch (IOException e1) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.severe("Exception in stopping Asterix. " +
e1.getMessage());
- }
+ LOGGER.log(Level.SEVERE, "Exception in stopping instance", e1);
}
}
@@ -79,31 +74,25 @@
@Override
public synchronized void stopAll(boolean dumpState) throws IOException {
if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.severe("Attempting to stop " + this);
+ LOGGER.info("Attempting to stop " + this);
}
if (stopped) {
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.severe("Lifecycle management was already stopped");
- }
+ LOGGER.info("Lifecycle management was already stopped");
return;
}
if (stopInitiated) {
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.severe("Stop already in progress");
- }
+ LOGGER.info("Stop already in progress");
return;
}
if (!configured) {
if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.severe("Lifecycle management not configured" + this);
+ LOGGER.severe("Lifecycle management not configured " + this);
}
return;
}
stopInitiated = true;
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.severe("Stopping Asterix instance");
- }
+ LOGGER.severe("Stopping instance");
FileOutputStream componentDumpStream = null;
String componentDumpPath = null;
@@ -120,14 +109,12 @@
componentDumpStream = new FileOutputStream(f);
}
if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Stopping component instance " +
component.getClass().getName() + " dump state "
- + dumpState + " dump path " + componentDumpPath);
+ LOGGER.info("Stopping component instance " +
component.getClass().getName() + "; dump state: "
+ + dumpState + ", dump path: " + componentDumpPath);
}
component.stop(dumpState, componentDumpStream);
} catch (Exception e) {
- if (LOGGER.isLoggable(Level.SEVERE)) {
- LOGGER.severe("Exception in stopping component " +
component.getClass().getName() + e.getMessage());
- }
+ LOGGER.log(Level.SEVERE, "Exception in stopping component " +
component.getClass().getName(), e);
} finally {
if (componentDumpStream != null) {
componentDumpStream.close();
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCDriver.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCDriver.java
index 9d649f6..11df079 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCDriver.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCDriver.java
@@ -44,12 +44,7 @@
application.registerConfig(configManager);
NCConfig ncConfig = new NCConfig(nodeId, configManager);
final NodeControllerService ncService = new
NodeControllerService(ncConfig, application);
- if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info("Setting uncaught exception handler " +
ncService.getLifeCycleComponentManager());
- }
-
Thread.currentThread().setUncaughtExceptionHandler(ncService.getLifeCycleComponentManager());
ncService.start();
- Runtime.getRuntime().addShutdownHook(new
NCShutdownHook(ncService));
while (true) {
Thread.sleep(10000);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
index 9242bba..be24dbe 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
@@ -256,6 +256,11 @@
@Override
public void start() throws Exception {
LOGGER.log(Level.INFO, "Starting NodeControllerService");
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.info("Setting uncaught exception handler " +
getLifeCycleComponentManager());
+ }
+
Thread.currentThread().setUncaughtExceptionHandler(getLifeCycleComponentManager());
+ Runtime.getRuntime().addShutdownHook(new NCShutdownHook(this));
ipc = new IPCSystem(new
InetSocketAddress(ncConfig.getClusterListenAddress(),
ncConfig.getClusterListenPort()),
new NodeControllerIPCI(this), new
CCNCFunctions.SerializerDeserializer());
ipc.start();
--
To view, visit https://asterix-gerrit.ics.uci.edu/1706
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I87b6b45e1a0cdc7a8b77d80b4e603d927aa60b8a
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow <[email protected]>