You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by vo...@apache.org on 2018/11/26 16:03:55 UTC
[drill] 01/15: DRILL-6349: Drill JDBC driver fails on Java 1.9+
with NoClassDefFoundError: sun/misc/VM
This is an automated email from the ASF dual-hosted git repository.
volodymyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
commit 639be6c1cdb2747e3d4a7d04ce5966d27d1f3102
Author: ozinoviev <oz...@solit-clouds.ru>
AuthorDate: Mon Aug 27 15:48:52 2018 +0300
DRILL-6349: Drill JDBC driver fails on Java 1.9+ with NoClassDefFoundError: sun/misc/VM
closes #1446
---
.../apache/drill/common/config/DrillConfig.java | 3 +-
contrib/storage-jdbc/pom.xml | 3 +-
distribution/src/resources/drill-config.sh | 11 +++++
distribution/src/resources/sqlline.bat | 12 +++++
exec/java-exec/pom.xml | 20 +++-----
.../drill/exec/compile/CompilationConfig.java | 2 +-
.../compile/bytecode/ReplacingInterpreter.java | 2 +
.../org/apache/drill/exec/expr/ClassGenerator.java | 4 +-
.../planner/FileSystemPartitionDescriptor.java | 2 +-
.../apache/drill/TestUtf8SupportInQueryString.java | 3 --
.../drill/exec/fn/impl/TestCastFunctions.java | 4 --
.../drill/exec/fn/impl/TestDateFunctions.java | 3 --
.../exec/fn/impl/testing/TestDateConversions.java | 3 --
.../drill/exec/fn/interp/TestConstantFolding.java | 3 --
.../impersonation/TestImpersonationMetadata.java | 4 +-
.../drill/exec/store/avro/AvroFormatTest.java | 4 --
.../vector/complex/writer/TestExtendedTypes.java | 3 --
.../java-exec/src/test/resources/drill-udf/pom.xml | 4 +-
exec/jdbc-all/pom.xml | 5 +-
.../org/apache/drill/jdbc/ITTestShadedJar.java | 14 ++----
...rill2489CallsAfterCloseThrowExceptionsTest.java | 56 +++++++++++++++++++++-
.../drill/exec/memory/BoundsCheckingTest.java | 1 +
logical/pom.xml | 1 -
pom.xml | 24 ++++++----
24 files changed, 123 insertions(+), 68 deletions(-)
diff --git a/common/src/main/java/org/apache/drill/common/config/DrillConfig.java b/common/src/main/java/org/apache/drill/common/config/DrillConfig.java
index 423d4f0..d7d7340 100644
--- a/common/src/main/java/org/apache/drill/common/config/DrillConfig.java
+++ b/common/src/main/java/org/apache/drill/common/config/DrillConfig.java
@@ -27,6 +27,7 @@ import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
+import io.netty.util.internal.PlatformDependent;
import org.apache.drill.common.exceptions.DrillConfigurationException;
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.common.scanner.ClassPathScanner;
@@ -46,7 +47,7 @@ public class DrillConfig extends NestedConfig {
private final ImmutableList<String> startupArguments;
@SuppressWarnings("restriction")
- private static final long MAX_DIRECT_MEMORY = sun.misc.VM.maxDirectMemory();
+ private static final long MAX_DIRECT_MEMORY = PlatformDependent.maxDirectMemory();
@VisibleForTesting
public DrillConfig(Config config) {
diff --git a/contrib/storage-jdbc/pom.xml b/contrib/storage-jdbc/pom.xml
index 7de89f0..ad139d4 100755
--- a/contrib/storage-jdbc/pom.xml
+++ b/contrib/storage-jdbc/pom.xml
@@ -104,7 +104,7 @@
<!-- Because the JDBC tests are somewhat heavyweight, we only run them in the 'verify' phase -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
- <version>2.18.1</version>
+ <version>2.22.0</version>
<configuration>
<forkCount combine.self="override">1</forkCount>
<systemPropertyVariables>
@@ -115,6 +115,7 @@
<includes>
<include>**/*IT.java</include>
</includes>
+ <useSystemClassLoader>false</useSystemClassLoader>
</configuration>
<executions>
<execution>
diff --git a/distribution/src/resources/drill-config.sh b/distribution/src/resources/drill-config.sh
index d23788b..8f32a47 100644
--- a/distribution/src/resources/drill-config.sh
+++ b/distribution/src/resources/drill-config.sh
@@ -302,6 +302,17 @@ export DRILLBIT_CODE_CACHE_SIZE=${DRILLBIT_CODE_CACHE_SIZE:-"1G"}
export DRILLBIT_OPTS="-Xms$DRILL_HEAP -Xmx$DRILL_HEAP -XX:MaxDirectMemorySize=$DRILL_MAX_DIRECT_MEMORY"
export DRILLBIT_OPTS="$DRILLBIT_OPTS -XX:ReservedCodeCacheSize=$DRILLBIT_CODE_CACHE_SIZE -Ddrill.exec.enable-epoll=false"
+# Check that java is newer than 1.8
+"$JAVA" -version 2>&1 | grep "version" | egrep -e "1\.8" > /dev/null
+if [ $? -gt 0 ]; then
+ # Allow reflective access on Java 9+
+ export DRILLBIT_OPTS="$DRILLBIT_OPTS --add-opens java.base/java.lang=ALL-UNNAMED"
+ export DRILLBIT_OPTS="$DRILLBIT_OPTS --add-opens java.base/sun.nio.ch=ALL-UNNAMED"
+ export DRILLBIT_OPTS="$DRILLBIT_OPTS --add-opens java.base/java.nio=ALL-UNNAMED"
+ export DRILLBIT_OPTS="$DRILLBIT_OPTS --add-opens java.security.jgss/sun.security.krb5=ALL-UNNAMED"
+ export DRILLBIT_OPTS="$DRILLBIT_OPTS --illegal-access=permit"
+fi
+
# Under YARN, the log directory is usually YARN-provided. Replace any
# value that may have been set in drill-env.sh.
diff --git a/distribution/src/resources/sqlline.bat b/distribution/src/resources/sqlline.bat
index 7821efa..40f2771 100755
--- a/distribution/src/resources/sqlline.bat
+++ b/distribution/src/resources/sqlline.bat
@@ -205,6 +205,18 @@ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% -Dlog.path="%DRILL_LOG_DIR%\sq
SET JAVA_CMD=%JAVA_HOME%\bin\%JAVA_EXE%
if "%JAVA_HOME%" == "" (set JAVA_CMD=%JAVA_EXE%)
set ERROR_CODE=0
+
+rem Check that java is newer than 1.8
+"%JAVA_CMD%" -version 2>&1 | findstr "1.8" > nul 2>&1
+if errorlevel 1 (
+ rem allow reflective access on Java 9+
+ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% --add-opens java.base/java.lang=ALL-UNNAMED
+ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% --add-opens java.base/sun.nio.ch=ALL-UNNAMED
+ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% --add-opens java.base/java.nio=ALL-UNNAMED
+ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% --add-opens java.security.jgss/sun.security.krb5=ALL-UNNAMED
+ set DRILL_SHELL_JAVA_OPTS=%DRILL_SHELL_JAVA_OPTS% --illegal-access=permit
+)
+
set SQLLINE_CALL=sqlline.SqlLine -ac org.apache.drill.exec.client.DrillSqlLineApplication -d org.apache.drill.jdbc.Driver
if NOT "test%QUERY%"=="test" (
echo %QUERY% | "%JAVA_CMD%" %DRILL_SHELL_JAVA_OPTS% %DRILL_JAVA_OPTS% -cp "%DRILL_CP%" %SQLLINE_CALL% %DRILL_ARGS%
diff --git a/exec/java-exec/pom.xml b/exec/java-exec/pom.xml
index 43897ef..cbe2285 100644
--- a/exec/java-exec/pom.xml
+++ b/exec/java-exec/pom.xml
@@ -64,16 +64,15 @@
<version>${kerby.version}</version>
<scope>test</scope>
</dependency>
- <!-- <dependency> -->
- <!-- <groupId>org.ow2.asm</groupId> -->
- <!-- <artifactId>asm-util</artifactId> -->
- <!-- <version>5.0.3</version> -->
- <!-- </dependency> -->
<dependency>
<groupId>org.ow2.asm</groupId>
- <artifactId>asm-debug-all</artifactId>
- <version>5.0.3</version>
- <!-- <scope>test</scope> -->
+ <artifactId>asm-commons</artifactId>
+ <version>${asm.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm-util</artifactId>
+ <version>${asm.version}</version>
</dependency>
<dependency>
<groupId>org.apache.drill.contrib.data</groupId>
@@ -81,11 +80,6 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
- <!-- <dependency> -->
- <!-- <groupId>org.ow2.asm</groupId> -->
- <!-- <artifactId>asm-commons</artifactId> -->
- <!-- <version>5.0.3</version> -->
- <!-- </dependency> -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/CompilationConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/CompilationConfig.java
index 7d7180d..6240813 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/CompilationConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/CompilationConfig.java
@@ -24,5 +24,5 @@ public class CompilationConfig {
* Never use asm.Opcodes values directly in calls that require them. Use ASM_OPCODES
* instead, so that we can change it here once for all references.
*/
- public final static int ASM_API_VERSION = Opcodes.ASM5;
+ public final static int ASM_API_VERSION = Opcodes.ASM7;
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/bytecode/ReplacingInterpreter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/bytecode/ReplacingInterpreter.java
index 93828c1..13063c8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/compile/bytecode/ReplacingInterpreter.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/compile/bytecode/ReplacingInterpreter.java
@@ -19,6 +19,7 @@ package org.apache.drill.exec.compile.bytecode;
import java.util.List;
+import org.apache.drill.exec.compile.CompilationConfig;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.AbstractInsnNode;
@@ -40,6 +41,7 @@ public class ReplacingInterpreter extends BasicInterpreter {
private final List<ReplacingBasicValue> valueList;
public ReplacingInterpreter(final String className, final List<ReplacingBasicValue> valueList) {
+ super(CompilationConfig.ASM_API_VERSION);
this.className = className;
this.valueList = valueList;
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
index 5b33acf..969b506 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
@@ -161,7 +161,7 @@ public class ClassGenerator<T>{
// from the JDK Modifier values to the JCodeModel JMod values: the
// values are different.
- int mods = JMod.PRIVATE + JMod.FINAL;
+ int mods = JMod.FINAL;
if ((innerClass.getModifiers() & Modifier.STATIC) != 0) {
mods += JMod.STATIC;
}
@@ -370,7 +370,7 @@ public class ClassGenerator<T>{
// all new fields will be declared in the class from innerClassGenerator
if (innerClassGenerator == null) {
try {
- JDefinedClass innerClazz = clazz._class(JMod.PRIVATE, clazz.name() + "0");
+ JDefinedClass innerClazz = clazz._class(JMod.NONE, clazz.name() + "0");
innerClassGenerator = new ClassGenerator<>(codeGenerator, mappings, sig, evaluationVisitor, innerClazz, model, optionManager);
} catch (JClassAlreadyExistsException e) {
throw new DrillRuntimeException(e);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
index 2d45701..c38cc5a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
@@ -180,7 +180,7 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor {
// build a list of DFSDirPartitionLocation.
for (final List<String> dirs : dirToFileMap.keySet()) {
- locations.add( new DFSDirPartitionLocation((String [])dirs.toArray(), dirToFileMap.get(dirs)));
+ locations.add( new DFSDirPartitionLocation(dirs.toArray(new String[dirs.size()]), dirToFileMap.get(dirs)));
}
locationSuperList = Lists.partition(locations, PartitionDescriptor.PARTITION_BATCH_SIZE);
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestUtf8SupportInQueryString.java b/exec/java-exec/src/test/java/org/apache/drill/TestUtf8SupportInQueryString.java
index d6a02f8..523b15b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestUtf8SupportInQueryString.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestUtf8SupportInQueryString.java
@@ -19,19 +19,16 @@ package org.apache.drill;
import mockit.Mock;
import mockit.MockUp;
-import mockit.integration.junit4.JMockit;
import org.apache.calcite.util.Util;
import org.apache.drill.common.exceptions.UserRemoteException;
import org.apache.drill.test.BaseTestQuery;
import org.junit.Test;
-import org.junit.runner.RunWith;
import java.nio.charset.Charset;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
-@RunWith(JMockit.class)
public class TestUtf8SupportInQueryString extends BaseTestQuery {
@Test
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
index 7768909..37b260c 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
@@ -38,17 +38,13 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
import org.apache.drill.shaded.guava.com.google.common.collect.Lists;
import org.apache.drill.shaded.guava.com.google.common.collect.Maps;
-import mockit.integration.junit4.JMockit;
-
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.hasItem;
-@RunWith(JMockit.class)
@Category({UnlikelyTest.class, SqlFunctionTest.class})
public class TestCastFunctions extends BaseTestQuery {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestDateFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestDateFunctions.java
index d61c729..8c4bf8e 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestDateFunctions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestDateFunctions.java
@@ -19,7 +19,6 @@ package org.apache.drill.exec.fn.impl;
import org.apache.drill.shaded.guava.com.google.common.base.Charsets;
import org.apache.drill.shaded.guava.com.google.common.io.Files;
-import mockit.integration.junit4.JMockit;
import org.apache.drill.categories.SqlFunctionTest;
import org.apache.drill.categories.UnlikelyTest;
import org.apache.drill.common.util.DrillFileUtils;
@@ -37,12 +36,10 @@ import org.joda.time.LocalTime;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-@RunWith(JMockit.class)
@Category({UnlikelyTest.class, SqlFunctionTest.class})
public class TestDateFunctions extends PopUnitTestBase {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/testing/TestDateConversions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/testing/TestDateConversions.java
index e0121e6..363d326 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/testing/TestDateConversions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/testing/TestDateConversions.java
@@ -17,7 +17,6 @@
*/
package org.apache.drill.exec.fn.impl.testing;
-import mockit.integration.junit4.JMockit;
import org.apache.drill.test.BaseTestQuery;
import org.apache.drill.categories.SqlFunctionTest;
import org.apache.drill.categories.UnlikelyTest;
@@ -25,7 +24,6 @@ import org.apache.drill.common.exceptions.UserException;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
@@ -37,7 +35,6 @@ import java.time.LocalTime;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.junit.Assert.assertThat;
-@RunWith(JMockit.class)
@Category({UnlikelyTest.class, SqlFunctionTest.class})
public class TestDateConversions extends BaseTestQuery {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/interp/TestConstantFolding.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/interp/TestConstantFolding.java
index c1fea16..879dc4b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/interp/TestConstantFolding.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/interp/TestConstantFolding.java
@@ -19,19 +19,16 @@ package org.apache.drill.exec.fn.interp;
import org.apache.drill.shaded.guava.com.google.common.base.Joiner;
import org.apache.drill.shaded.guava.com.google.common.collect.Lists;
-import mockit.integration.junit4.JMockit;
import org.apache.drill.PlanTestBase;
import org.apache.drill.categories.SqlTest;
import org.apache.drill.exec.planner.physical.PlannerSettings;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
import java.io.File;
import java.io.PrintWriter;
import java.util.List;
-@RunWith(JMockit.class)
@Category(SqlTest.class)
public class TestConstantFolding extends PlanTestBase {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/impersonation/TestImpersonationMetadata.java b/exec/java-exec/src/test/java/org/apache/drill/exec/impersonation/TestImpersonationMetadata.java
index 9acd015..6dc3615 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/impersonation/TestImpersonationMetadata.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/impersonation/TestImpersonationMetadata.java
@@ -280,7 +280,7 @@ public class TestImpersonationMetadata extends BaseTestImpersonation {
final String query = "CREATE VIEW " + viewName + " AS SELECT " +
"c_custkey, c_nationkey FROM cp.`tpch/customer.parquet` ORDER BY c_custkey;";
- final String expErrorMsg = "PERMISSION ERROR: Permission denied: user=drillTestUser2, access=WRITE, inode=\"/drill_test_grp_0_755/";
+ final String expErrorMsg = "PERMISSION ERROR: Permission denied: user=drillTestUser2, access=WRITE, inode=\"/drill_test_grp_0_755";
errorMsgTestHelper(query, expErrorMsg);
// SHOW TABLES is expected to return no records as view creation fails above.
@@ -351,7 +351,7 @@ public class TestImpersonationMetadata extends BaseTestImpersonation {
thrown.expect(UserRemoteException.class);
thrown.expectMessage(containsString("Permission denied: user=drillTestUser2, " +
- "access=WRITE, inode=\"/drill_test_grp_0_755/"));
+ "access=WRITE, inode=\"/drill_test_grp_0_755"));
test("CREATE TABLE %s AS SELECT c_custkey, c_nationkey " +
"FROM cp.`tpch/customer.parquet` ORDER BY c_custkey", tableName);
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/avro/AvroFormatTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/avro/AvroFormatTest.java
index 2b7edc9..8f2339b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/avro/AvroFormatTest.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/avro/AvroFormatTest.java
@@ -56,16 +56,12 @@ import org.apache.drill.test.BaseTestQuery;
import org.apache.drill.test.TestBuilder;
import org.junit.Assert;
import org.junit.Test;
-import org.junit.runner.RunWith;
import org.apache.drill.shaded.guava.com.google.common.collect.Lists;
-import mockit.integration.junit4.JMockit;
-
/**
* Unit tests for Avro record reader.
*/
-@RunWith(JMockit.class)
public class AvroFormatTest extends BaseTestQuery {
// XXX
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestExtendedTypes.java b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestExtendedTypes.java
index c2d3f9a..bc27e88 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestExtendedTypes.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestExtendedTypes.java
@@ -17,7 +17,6 @@
*/
package org.apache.drill.exec.vector.complex.writer;
-import mockit.integration.junit4.JMockit;
import static org.junit.Assert.assertEquals;
import java.nio.file.Files;
@@ -30,9 +29,7 @@ import org.apache.drill.exec.rpc.user.QueryDataBatch;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.junit.runner.RunWith;
-@RunWith(JMockit.class)
public class TestExtendedTypes extends BaseTestQuery {
@BeforeClass
public static void setupTestFiles() {
diff --git a/exec/java-exec/src/test/resources/drill-udf/pom.xml b/exec/java-exec/src/test/resources/drill-udf/pom.xml
index 7361845..931abed 100644
--- a/exec/java-exec/src/test/resources/drill-udf/pom.xml
+++ b/exec/java-exec/src/test/resources/drill-udf/pom.xml
@@ -63,12 +63,14 @@
<includes>
<include>${include.files}</include>
</includes>
+ <source>1.8</source>
+ <target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
- <version>2.4</version>
+ <version>3.0.1</version>
<configuration>
<finalName>${jar.finalName}</finalName>
<includes>
diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml
index 7be43ab..e0ae482 100644
--- a/exec/jdbc-all/pom.xml
+++ b/exec/jdbc-all/pom.xml
@@ -241,7 +241,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
- <version>2.18.1</version>
+ <version>2.22.0</version>
<executions>
<execution>
<goals>
@@ -268,6 +268,7 @@
<app.class.path>${app.class.path}</app.class.path>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
+ <useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
@@ -333,6 +334,7 @@
<exclude>commons-beanutils:commons-beanutils-core:jar:*</exclude>
<exclude>commons-beanutils:commons-beanutils:jar:*</exclude>
<exclude>io.netty:netty-tcnative:jar:*</exclude>
+ <exclude>org.honton.chas.hocon:jackson-dataformat-hocon:*</exclude>
</excludes>
</artifactSet>
<relocations>
@@ -648,6 +650,7 @@
<exclude>commons-io:commons-io</exclude>
<exclude>commons-beanutils:commons-beanutils-core:jar:*</exclude>
<exclude>commons-beanutils:commons-beanutils:jar:*</exclude>
+ <exclude>org.honton.chas.hocon:jackson-dataformat-hocon:*</exclude>
</excludes>
</artifactSet>
<relocations>
diff --git a/exec/jdbc-all/src/test/java/org/apache/drill/jdbc/ITTestShadedJar.java b/exec/jdbc-all/src/test/java/org/apache/drill/jdbc/ITTestShadedJar.java
index 6319cb3..4fed146 100644
--- a/exec/jdbc-all/src/test/java/org/apache/drill/jdbc/ITTestShadedJar.java
+++ b/exec/jdbc-all/src/test/java/org/apache/drill/jdbc/ITTestShadedJar.java
@@ -42,7 +42,7 @@ public class ITTestShadedJar {
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ITTestShadedJar.class);
private static DrillbitClassLoader drillbitLoader;
- private static URLClassLoader rootClassLoader;
+ private static ClassLoader rootClassLoader;
private static int userPort;
@ClassRule
@@ -55,7 +55,7 @@ public class ITTestShadedJar {
try {
drillbitLoader = new DrillbitClassLoader();
drillbitLoader.loadClass("org.apache.commons.io.FileUtils");
- rootClassLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();
+ rootClassLoader = Thread.currentThread().getContextClassLoader();
Class<?> clazz = drillbitLoader.loadClass("org.apache.drill.test.BaseTestQuery");
Class<?> watcherClazz = drillbitLoader.loadClass("org.apache.drill.test.BaseDirTestWatcher");
@@ -134,10 +134,7 @@ public class ITTestShadedJar {
@Test
public void testDatabaseVersion() throws Exception {
- final URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
- Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
- method.setAccessible(true);
- method.invoke(loader, getJdbcUrl());
+ final URLClassLoader loader = URLClassLoader.newInstance(new URL[] {getJdbcUrl()});
Class<?> clazz = loader.loadClass("org.apache.drill.jdbc.Driver");
try {
@@ -155,10 +152,7 @@ public class ITTestShadedJar {
@Test
public void executeJdbcAllQuery() throws Exception {
- final URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
- Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
- method.setAccessible(true);
- method.invoke(loader, getJdbcUrl());
+ final URLClassLoader loader = URLClassLoader.newInstance(new URL[] {getJdbcUrl()});
Class<?> clazz = loader.loadClass("org.apache.drill.jdbc.Driver");
try {
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/Drill2489CallsAfterCloseThrowExceptionsTest.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/Drill2489CallsAfterCloseThrowExceptionsTest.java
index 303565f..b868cf5 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/Drill2489CallsAfterCloseThrowExceptionsTest.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/Drill2489CallsAfterCloseThrowExceptionsTest.java
@@ -41,6 +41,7 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
@@ -413,6 +414,15 @@ public class Drill2489CallsAfterCloseThrowExceptionsTest extends JdbcTestBase {
}
@Override
+ protected boolean isOkayNonthrowingMethod(Method method) {
+ return
+ super.isOkayNonthrowingMethod(method)
+ // New Java 9 methods not implemented in Avatica.
+ || method.getName().equals("beginRequest")
+ || method.getName().equals("endRequest");
+ }
+
+ @Override
protected boolean isOkaySpecialCaseException(Method method, Throwable cause) {
final boolean result;
if (super.isOkaySpecialCaseException(method, cause)) {
@@ -424,6 +434,12 @@ public class Drill2489CallsAfterCloseThrowExceptionsTest extends JdbcTestBase {
|| method.getName().equals("getClientInfo"))) {
// Special good case--we had to use SQLClientInfoException from those.
result = true;
+ }
+ else if (SQLFeatureNotSupportedException.class == cause.getClass()
+ && (method.getName().equals("setShardingKeyIfValid")
+ || method.getName().equals("setShardingKey"))) {
+ // New Java 9 methods not implemented in Avatica.
+ result = true;
} else {
result = false;
}
@@ -453,6 +469,24 @@ public class Drill2489CallsAfterCloseThrowExceptionsTest extends JdbcTestBase {
ClosedPlainStatementChecker(Class<Statement> intf, Statement jdbcObject) {
super(intf, jdbcObject, PLAIN_STATEMENT_CLOSED_MESSAGE);
}
+
+ @Override
+ protected boolean isOkaySpecialCaseException(Method method, Throwable cause) {
+ final boolean result;
+ if (super.isOkaySpecialCaseException(method, cause)) {
+ result = true;
+ } else if (NullPointerException.class == cause.getClass()
+ && (method.getName().equals("enquoteIdentifier")
+ || method.getName().equals("enquoteLiteral")
+ || method.getName().equals("enquoteNCharLiteral")
+ || method.getName().equals("isSimpleIdentifier"))) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ return result;
+ }
} // class ClosedPlainStatementChecker
@Test
@@ -477,6 +511,24 @@ public class Drill2489CallsAfterCloseThrowExceptionsTest extends JdbcTestBase {
PreparedStatement jdbcObject) {
super(intf, jdbcObject, PREPAREDSTATEMENT_CLOSED_MESSAGE);
}
+
+ @Override
+ protected boolean isOkaySpecialCaseException(Method method, Throwable cause) {
+ final boolean result;
+ if (super.isOkaySpecialCaseException(method, cause)) {
+ result = true;
+ } else if (NullPointerException.class == cause.getClass()
+ && (method.getName().equals("enquoteIdentifier")
+ || method.getName().equals("enquoteLiteral")
+ || method.getName().equals("enquoteNCharLiteral")
+ || method.getName().equals("isSimpleIdentifier"))) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ return result;
+ }
} // class closedPreparedStmtOfOpenConnChecker
@Test
@@ -587,7 +639,9 @@ public class Drill2489CallsAfterCloseThrowExceptionsTest extends JdbcTestBase {
|| method.getName().equals("getConnection")
// TODO: New Java 8 methods not implemented in Avatica.
|| method.getName().equals("getMaxLogicalLobSize")
- || method.getName().equals("supportsRefCursors");
+ || method.getName().equals("supportsRefCursors")
+ // New Java 9 methods not implemented in Avatica.
+ || method.getName().equals("supportsSharding");
}
@Override
diff --git a/exec/memory/base/src/test/java/org/apache/drill/exec/memory/BoundsCheckingTest.java b/exec/memory/base/src/test/java/org/apache/drill/exec/memory/BoundsCheckingTest.java
index 5d2853b..8021228 100644
--- a/exec/memory/base/src/test/java/org/apache/drill/exec/memory/BoundsCheckingTest.java
+++ b/exec/memory/base/src/test/java/org/apache/drill/exec/memory/BoundsCheckingTest.java
@@ -46,6 +46,7 @@ public class BoundsCheckingTest
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
boolean old = field.getBoolean(null);
+ field.setAccessible(true);
field.set(null, enabled);
return old;
}
diff --git a/logical/pom.xml b/logical/pom.xml
index ed9abb7..aa8fb06 100644
--- a/logical/pom.xml
+++ b/logical/pom.xml
@@ -105,7 +105,6 @@
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.15</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
diff --git a/pom.xml b/pom.xml
index d69c679..0cc2527 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
<maven.embedder.version>3.5.3</maven.embedder.version>
<curator.version>2.7.1</curator.version>
<wiremock.standalone.version>2.5.1</wiremock.standalone.version>
- <jmockit.version>1.39</jmockit.version>
+ <jmockit.version>1.43</jmockit.version>
<logback.version>1.0.13</logback.version>
<mockito.version>2.18.3</mockito.version>
<!--
@@ -72,15 +72,16 @@
Apache Hive 2.3.2. If the version is changed, make sure the jars and their dependencies are updated.
-->
<hive.version>2.3.2</hive.version>
- <hadoop.version>2.7.1</hadoop.version>
- <hbase.version>1.1.3</hbase.version>
+ <hadoop.version>2.7.4</hadoop.version>
+ <hbase.version>2.1.0</hbase.version>
<fmpp.version>1.0</fmpp.version>
<freemarker.version>2.3.26-incubating</freemarker.version>
- <javassist.version>3.22.0-GA</javassist.version>
+ <javassist.version>3.24.0-GA</javassist.version>
<msgpack.version>0.6.6</msgpack.version>
<reflections.version>0.9.10</reflections.version>
<avro.version>1.8.2</avro.version>
<metrics.version>4.0.2</metrics.version>
+ <asm.version>7.0</asm.version>
<excludedGroups />
<memoryMb>4096</memoryMb>
<directMemoryMb>4096</directMemoryMb>
@@ -492,7 +493,7 @@
<version>[3.3.1,4)</version>
</requireMavenVersion>
<requireJavaVersion>
- <version>[1.8,1.9)</version>
+ <version>[1.8,12)</version>
</requireJavaVersion>
</rules>
</configuration>
@@ -681,11 +682,11 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.2</version>
+ <version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
- <version>1.3.1</version>
+ <version>3.0.0-M1</version>
</plugin>
<plugin> <!-- classpath scanning -->
<groupId>org.codehaus.mojo</groupId>
@@ -710,7 +711,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.17</version>
+ <version>2.21.0</version>
<executions>
<execution>
<id>default-test</id>
@@ -722,7 +723,7 @@
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
- <version>2.19.1</version>
+ <version>2.21.0</version>
</dependency>
</dependencies>
<configuration>
@@ -735,6 +736,8 @@
-Djava.net.preferIPv4Stack=true
-Djava.awt.headless=true
-XX:+CMSClassUnloadingEnabled -ea
+ -Djdk.attach.allowAttachSelf=true
+ -javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
</argLine>
<forkCount>${forkCount}</forkCount>
<reuseForks>true</reuseForks>
@@ -745,6 +748,7 @@
<java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
</systemPropertyVariables>
<excludedGroups>${excludedGroups}</excludedGroups>
+ <useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
@@ -925,7 +929,7 @@
<!-- JMockit needs to be on class path before JUnit. -->
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
- <version>1.39</version>
+ <version>${jmockit.version}</version>
<scope>test</scope>
</dependency>
<dependency>