Michael Blow has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2686
Change subject: [ASTERIXDB-2397][*DB] Enable execution on Java 9/10
......................................................................
[ASTERIXDB-2397][*DB] Enable execution on Java 9/10
Change-Id: I720507856c235443d64b6024b75f931656badc6d
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
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/NCApplication.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
M
asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/pom.xml
M
asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/EvaluatorMissingCheckVisitor.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/config/ConfigManager.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NodeRegistration.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
10 files changed, 85 insertions(+), 41 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/86/2686/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
index adb3c18..c76d9b8 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
@@ -24,14 +24,21 @@
import java.util.Properties;
import org.apache.asterix.common.config.AsterixProperties;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.hyracks.api.config.IConfigManager;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
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.common.utils.ConfigurationUtil;
import org.apache.hyracks.util.file.FileUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
class ApplicationConfigurator {
+ private static final Logger LOGGER = LogManager.getLogger();
+
private ApplicationConfigurator() {
}
@@ -56,4 +63,24 @@
}
}
+
+ public static void validateJavaRuntime() throws HyracksDataException {
+ final String javaVersion = System.getProperty("java.version");
+ LOGGER.info("Found JRE version " + javaVersion);
+ String[] splits = javaVersion.split("\\.");
+ if ("1".equals(splits[0])) {
+ switch (splits[1]) {
+ case "9":
+ LOGGER.warn("JRE version \"" + javaVersion + "\" is
untested");
+ //fall-through
+ case "8":
+ return;
+ default:
+ throw
RuntimeDataException.create(ErrorCode.UNSUPPORTED_JRE,
+ "a minimum version of JRE of 1.8 is required, but
is currently: \"" + javaVersion + "\"");
+ }
+ } else {
+ LOGGER.warn("JRE version \"" + javaVersion + "\" is untested");
+ }
+ }
}
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 037edd0..b180ef0 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
@@ -65,7 +65,6 @@
import org.apache.asterix.common.config.ReplicationProperties;
import org.apache.asterix.common.context.IStorageComponentProvider;
import org.apache.asterix.common.dataflow.ICcApplicationContext;
-import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.common.library.ILibraryManager;
import org.apache.asterix.common.replication.INcLifecycleCoordinator;
import org.apache.asterix.common.utils.Servlets;
@@ -87,6 +86,7 @@
import org.apache.hyracks.api.client.HyracksConnection;
import org.apache.hyracks.api.client.IHyracksClientConnection;
import org.apache.hyracks.api.config.IConfigManager;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.job.resource.IJobCapacityController;
import org.apache.hyracks.api.lifecycle.LifeCycleComponentManager;
import org.apache.hyracks.control.cc.BaseCCApplication;
@@ -118,6 +118,7 @@
ccServiceCtx = (ICCServiceContext) serviceCtx;
ccServiceCtx.setThreadFactory(
new AsterixThreadFactory(ccServiceCtx.getThreadFactory(), new
LifeCycleComponentManager()));
+ validateEnvironment();
}
@Override
@@ -336,4 +337,13 @@
public IHyracksClientConnection getHcc() {
return hcc;
}
+
+ protected void validateEnvironment() throws HyracksDataException {
+ validateJavaVersion();
+ }
+
+ protected void validateJavaVersion() throws HyracksDataException {
+ ApplicationConfigurator.validateJavaRuntime();
+ }
+
}
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
index b8c7e15..01bdd62 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
@@ -95,6 +95,7 @@
((NodeControllerService)
serviceCtx.getControllerService()).setNodeStatus(NodeStatus.IDLE);
ncServiceCtx.setThreadFactory(
new AsterixThreadFactory(ncServiceCtx.getThreadFactory(),
ncServiceCtx.getLifeCycleComponentManager()));
+ validateEnvironment();
}
@Override
@@ -275,4 +276,13 @@
}
return state;
}
+
+ protected void validateEnvironment() throws HyracksDataException {
+ validateJavaRuntime();
+ }
+
+ protected void validateJavaRuntime() throws HyracksDataException {
+ ApplicationConfigurator.validateJavaRuntime();
+ }
+
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 807b3e8..de399eb 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -76,7 +76,7 @@
public static final int REJECT_NODE_UNREGISTERED = 33;
public static final int DIVISION_BY_ZERO = 34;
- public static final int INSTANTIATION_ERROR = 100;
+ public static final int UNSUPPORTED_JRE = 100;
public static final int EXTERNAL_UDF_RESULT_TYPE_ERROR = 200;
diff --git
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 2fcb85d..f0a36bf 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -69,7 +69,7 @@
33 = Node is not registered with the CC
34 = Division by Zero.
-100 = Unable to instantiate class %1$s
+100 = Unsupported JRE: %1$s
200 = External UDF cannot produce expected result. Please check the UDF
configuration
diff --git
a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/pom.xml
b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/pom.xml
index 16b09cb..5b680b2 100644
---
a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/pom.xml
+++
b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/pom.xml
@@ -78,8 +78,13 @@
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
- <artifactId>asm-all</artifactId>
- <version>5.1</version>
+ <artifactId>asm</artifactId>
+ <version>6.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm-tree</artifactId>
+ <version>6.2</version>
</dependency>
</dependencies>
</project>
diff --git
a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/EvaluatorMissingCheckVisitor.java
b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/EvaluatorMissingCheckVisitor.java
index 9339e8b..38b9751 100644
---
a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/EvaluatorMissingCheckVisitor.java
+++
b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/EvaluatorMissingCheckVisitor.java
@@ -109,7 +109,7 @@
// Duplicate the top operand.
mv.visitInsn(Opcodes.DUP);
// Invoke the constructor of TypeChecker.
- mv.visitMethodInsn(Opcodes.INVOKESPECIAL, TYPE_CHECKER_CLASS,
CONSTRUCTOR, "()V", true);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, TYPE_CHECKER_CLASS,
CONSTRUCTOR, "()V", false);
// Putfield for the field typeChecker.
mv.visitFieldInsn(Opcodes.PUTFIELD, className, TYPE_CHECKER_NAME,
TYPE_CHECKER_DESC);
// RETURN.
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/config/ConfigManager.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/config/ConfigManager.java
index 8dd95e1..b49dc20 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/config/ConfigManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/config/ConfigManager.java
@@ -103,7 +103,6 @@
public ConfigManager(String[] args) {
this.args = args;
- checkJavaVersion();
for (Section section : Section.values()) {
allSections.add(section.sectionName());
}
@@ -111,14 +110,6 @@
addConfigurator(ConfiguratorMetric.PARSE_INI, this::parseIni);
addConfigurator(ConfiguratorMetric.PARSE_COMMAND_LINE,
this::processCommandLine);
addConfigurator(ConfiguratorMetric.APPLY_DEFAULTS,
this::applyDefaults);
- }
-
- static void checkJavaVersion() {
- final String javaVersion = System.getProperty("java.version");
- LOGGER.info("Found JRE version " + javaVersion);
- if (!javaVersion.startsWith("1.8")) {
- throw new IllegalStateException("JRE version 1.8 is required");
- }
}
@Override
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NodeRegistration.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NodeRegistration.java
index 76f5ad8..0149210 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NodeRegistration.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NodeRegistration.java
@@ -18,6 +18,9 @@
*/
package org.apache.hyracks.control.common.controllers;
+import static org.apache.hyracks.util.MXHelper.osMXBean;
+import static org.apache.hyracks.util.MXHelper.runtimeMXBean;
+
import java.io.Serializable;
import java.net.InetSocketAddress;
import java.util.List;
@@ -26,6 +29,7 @@
import org.apache.hyracks.api.comm.NetworkAddress;
import org.apache.hyracks.api.job.resource.NodeCapacity;
import org.apache.hyracks.control.common.heartbeat.HeartbeatSchema;
+import org.apache.hyracks.util.PidHelper;
public final class NodeRegistration implements Serializable {
private static final long serialVersionUID = 1L;
@@ -73,31 +77,35 @@
private final NodeCapacity capacity;
public NodeRegistration(InetSocketAddress ncAddress, String nodeId,
NCConfig ncConfig, NetworkAddress dataPort,
- NetworkAddress datasetPort, String osName, String arch, String
osVersion, int nProcessors, String vmName,
- String vmVersion, String vmVendor, String classpath, String
libraryPath, String bootClasspath,
- List<String> inputArguments, Map<String, String> systemProperties,
HeartbeatSchema hbSchema,
- NetworkAddress messagingPort, NodeCapacity capacity, int pid) {
+ NetworkAddress datasetPort, HeartbeatSchema hbSchema,
NetworkAddress messagingPort, NodeCapacity capacity) {
this.ncAddress = ncAddress;
this.nodeId = nodeId;
this.ncConfig = ncConfig;
this.dataPort = dataPort;
this.datasetPort = datasetPort;
- this.osName = osName;
- this.arch = arch;
- this.osVersion = osVersion;
- this.nProcessors = nProcessors;
- this.vmName = vmName;
- this.vmVersion = vmVersion;
- this.vmVendor = vmVendor;
- this.classpath = classpath;
- this.libraryPath = libraryPath;
- this.bootClasspath = bootClasspath;
- this.inputArguments = inputArguments;
- this.systemProperties = systemProperties;
this.hbSchema = hbSchema;
this.messagingPort = messagingPort;
this.capacity = capacity;
- this.pid = pid;
+ this.osName = osMXBean.getName();
+ this.arch = osMXBean.getArch();
+ this.osVersion = osMXBean.getVersion();
+ this.nProcessors = osMXBean.getAvailableProcessors();
+ this.vmName = runtimeMXBean.getVmName();
+ this.vmVersion = runtimeMXBean.getVmVersion();
+ this.vmVendor = runtimeMXBean.getVmVendor();
+ this.classpath = runtimeMXBean.getClassPath();
+ this.libraryPath = runtimeMXBean.getLibraryPath();
+ String bootCp;
+ try {
+ bootCp = runtimeMXBean.getBootClassPath();
+ } catch (UnsupportedOperationException e) {
+ // boot classpath is not supported in Java 9 and later
+ bootCp = null;
+ }
+ this.bootClasspath = bootCp;
+ this.inputArguments = runtimeMXBean.getInputArguments();
+ this.systemProperties = runtimeMXBean.getSystemProperties();
+ this.pid = PidHelper.getPid();
}
public InetSocketAddress getNodeControllerAddress() {
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 aa2320a..804bacd 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
@@ -20,8 +20,6 @@
import static org.apache.hyracks.util.MXHelper.gcMXBeans;
import static org.apache.hyracks.util.MXHelper.memoryMXBean;
-import static org.apache.hyracks.util.MXHelper.osMXBean;
-import static org.apache.hyracks.util.MXHelper.runtimeMXBean;
import java.io.File;
import java.io.IOException;
@@ -94,7 +92,6 @@
import
org.apache.hyracks.net.protocols.muxdemux.FullFrameChannelInterfaceFactory;
import org.apache.hyracks.util.ExitUtil;
import org.apache.hyracks.util.MaintainedThreadNameExecutorService;
-import org.apache.hyracks.util.PidHelper;
import org.apache.hyracks.util.trace.ITracer;
import org.apache.hyracks.util.trace.TraceUtils;
import org.apache.hyracks.util.trace.Tracer;
@@ -330,12 +327,8 @@
NetworkAddress netAddress = netManager.getPublicNetworkAddress();
NetworkAddress messagingAddress =
messagingNetManager != null ?
messagingNetManager.getPublicNetworkAddress() : null;
- nodeRegistration = new NodeRegistration(ncAddress, id, ncConfig,
netAddress, datasetAddress, osMXBean.getName(),
- osMXBean.getArch(), osMXBean.getVersion(),
osMXBean.getAvailableProcessors(), runtimeMXBean.getVmName(),
- runtimeMXBean.getVmVersion(), runtimeMXBean.getVmVendor(),
runtimeMXBean.getClassPath(),
- runtimeMXBean.getLibraryPath(),
runtimeMXBean.getBootClassPath(), runtimeMXBean.getInputArguments(),
- runtimeMXBean.getSystemProperties(), hbSchema,
messagingAddress, application.getCapacity(),
- PidHelper.getPid());
+ nodeRegistration = new NodeRegistration(ncAddress, id, ncConfig,
netAddress, datasetAddress, hbSchema,
+ messagingAddress, application.getCapacity());
ncData = new NodeControllerData(nodeRegistration);
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2686
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I720507856c235443d64b6024b75f931656badc6d
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow <[email protected]>