Fix AsterixHyracksIntegrationUtil regressions
- indicate NCs are virtual on CC's ConfigManager instance
- properly fixup IO devices, after ConfigManager processes the config
Change-Id: I69ad013fcb383e671e879d6c7c3de1b79e52e070
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1764
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
BAD: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <bamousaa@gmail.com>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
index 28a42f5..8d60ec6 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
@@ -19,6 +19,7 @@
package org.apache.asterix.api.common;
import static org.apache.asterix.api.common.AsterixHyracksIntegrationUtil.LoggerHolder.LOGGER;
+import static org.apache.hyracks.util.file.FileUtil.joinPath;
import java.io.File;
import java.io.IOException;
@@ -47,8 +48,10 @@
import org.apache.hyracks.control.cc.ClusterControllerService;
import org.apache.hyracks.control.common.config.ConfigManager;
import org.apache.hyracks.control.common.controllers.CCConfig;
+import org.apache.hyracks.control.common.controllers.ControllerConfig;
import org.apache.hyracks.control.common.controllers.NCConfig;
import org.apache.hyracks.control.nc.NodeControllerService;
+import org.kohsuke.args4j.CmdLineException;
public class AsterixHyracksIntegrationUtil {
static class LoggerHolder {
@@ -58,7 +61,7 @@
}
}
- private static final String IO_DIR_KEY = "java.io.tmpdir";
+ protected static final String IO_DIR_KEY = "java.io.tmpdir";
public static final int DEFAULT_HYRACKS_CC_CLIENT_PORT = 1098;
public static final int DEFAULT_HYRACKS_CC_CLUSTER_PORT = 1099;
@@ -76,13 +79,16 @@
final CCConfig ccConfig = createCCConfig(configManager);
cc = new ClusterControllerService(ccConfig, ccApplication);
- nodeNames = ccConfig.getConfigManager().getNodeNames();
+
+ nodeNames = ccConfig.getConfigManager().getNodeNames();
if (deleteOldInstanceData) {
deleteTransactionLogs();
removeTestStorageFiles();
}
final List<NodeControllerService> nodeControllers = new ArrayList<>();
for (String nodeId : nodeNames) {
+ // mark this NC as virtual in the CC's config manager, so he doesn't try to contact NCService...
+ configManager.set(nodeId, NCConfig.Option.VIRTUAL_NC, true);
final INCApplication ncApplication = createNCApplication();
ConfigManager ncConfigManager = new ConfigManager();
ncApplication.registerConfig(ncConfigManager);
@@ -113,13 +119,6 @@
for (Thread thread : startupThreads) {
thread.join();
}
- for (NodeControllerService nc : nodeControllers) {
- for (String ioDevice : nc.getConfiguration().getIODevices()) {
- if (!new File(ioDevice).isAbsolute()) {
- throw new IllegalStateException("iodevice not absolute: " + ioDevice);
- }
- }
- }
// Wait until cluster becomes active
ClusterStateManager.INSTANCE.waitForState(ClusterState.ACTIVE);
hcc = new HyracksConnection(cc.getConfig().getClientListenAddress(), cc.getConfig().getClientListenPort());
@@ -134,6 +133,7 @@
ccConfig.setClusterListenPort(DEFAULT_HYRACKS_CC_CLUSTER_PORT);
ccConfig.setResultTTL(120000L);
ccConfig.setResultSweepThreshold(1000L);
+ configManager.set(ControllerConfig.Option.DEFAULT_DIR, joinPath(System.getProperty(IO_DIR_KEY), "asterixdb"));
return ccConfig;
}
@@ -152,6 +152,8 @@
ncConfig.setResultTTL(120000L);
ncConfig.setResultSweepThreshold(1000L);
ncConfig.setVirtualNC(true);
+ configManager.set(ControllerConfig.Option.DEFAULT_DIR,
+ joinPath(System.getProperty(IO_DIR_KEY), "asterixdb", ncName));
return ncConfig;
}
@@ -159,32 +161,22 @@
return new NCApplication();
}
- private NCConfig fixupIODevices(NCConfig ncConfig) throws IOException, AsterixException {
- PropertiesAccessor accessor = PropertiesAccessor.getInstance(ncConfig.getAppConfig());
- String tempPath = System.getProperty(IO_DIR_KEY);
- if (tempPath.endsWith(File.separator)) {
- tempPath = tempPath.substring(0, tempPath.length() - 1);
- }
- LOGGER.info("Using the temp path: " + tempPath);
- // get initial partitions from properties
- String[] nodeStores = accessor.getStores().get(ncConfig.getNodeId());
+ private NCConfig fixupIODevices(NCConfig ncConfig) throws IOException, AsterixException, CmdLineException {
+ // we have to first process the config
+ ncConfig.getConfigManager().processConfig();
+
+ // get initial partitions from config
+ String[] nodeStores = ncConfig.getAppConfig().getStringArray(NCConfig.Option.IODEVICES);
if (nodeStores == null) {
throw new IllegalStateException("Couldn't find stores for NC: " + ncConfig.getNodeId());
}
String tempDirPath = System.getProperty(IO_DIR_KEY);
- if (!tempDirPath.endsWith(File.separator)) {
- tempDirPath += File.separator;
- }
- List<String> ioDevices = new ArrayList<>();
- for (String nodeStore : nodeStores) {
+ LOGGER.info("Using the temp path: " + tempDirPath);
+ for (int i = 0; i < nodeStores.length; i++) {
// create IO devices based on stores
- String iodevicePath = tempDirPath + ncConfig.getNodeId() + File.separator + nodeStore;
- File ioDeviceDir = new File(iodevicePath);
- ioDeviceDir.mkdirs();
- ioDevices.add(iodevicePath);
+ nodeStores[i] = joinPath(tempDirPath, ncConfig.getNodeId(), nodeStores[i]);
}
- ncConfig.getConfigManager().set(ncConfig.getNodeId(), NCConfig.Option.IODEVICES,
- ioDevices.toArray(new String[0]));
+ ncConfig.getConfigManager().set(ncConfig.getNodeId(), NCConfig.Option.IODEVICES, nodeStores);
return ncConfig;
}
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
index 233daa7..1ea512a 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/PropertiesAccessor.java
@@ -134,6 +134,8 @@
stores.put(store.getNcId(), nodeStores);
nodePartitionsMap.put(store.getNcId(), nodePartitions);
configManager.registerVirtualNode(store.getNcId());
+ // push the store info to the config manager
+ configManager.set(store.getNcId(), NCConfig.Option.IODEVICES, nodeStores);
// marking node as virtual, as we're not using NCServices with old-style config
configManager.set(store.getNcId(), NCConfig.Option.VIRTUAL_NC, true);
}
diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
index 585e8ec..8d3e0a7 100644
--- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
+++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
@@ -70,7 +70,7 @@
checkpointDir = new File(checkpointDirPath);
// Create the checkpoint directory if missing
if (!checkpointDir.exists()) {
- (new File(checkpointDirPath)).mkdir();
+ checkpointDir.mkdirs();
}
lsnThreshold = checkpointProperties.getLsnThreshold();
pollFrequency = checkpointProperties.getPollFrequency();