You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2017/06/28 15:42:53 UTC

[1/2] lucene-solr:branch_6x: Revert "SOLR-10951: Hadoop does not work on Java 9, disable tests that break"

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x c91864173 -> c30b776ef


Revert "SOLR-10951: Hadoop does not work on Java 9, disable tests that break"

This reverts commit e43253312f965ba838d80c2000dee761df1f25f5.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/5998ebb2
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/5998ebb2
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/5998ebb2

Branch: refs/heads/branch_6x
Commit: 5998ebb25056fdf134a591f1230c8bff15b55f0a
Parents: c918641
Author: Uwe Schindler <us...@apache.org>
Authored: Wed Jun 28 17:37:29 2017 +0200
Committer: Uwe Schindler <us...@apache.org>
Committed: Wed Jun 28 17:42:37 2017 +0200

----------------------------------------------------------------------
 solr/common-build.xml                                           | 5 +----
 .../apache/solr/cloud/TestSolrCloudWithDelegationTokens.java    | 3 ---
 .../solr/security/hadoop/TestDelegationWithHadoopAuth.java      | 1 -
 3 files changed, 1 insertion(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5998ebb2/solr/common-build.xml
----------------------------------------------------------------------
diff --git a/solr/common-build.xml b/solr/common-build.xml
index c593de7..3b459e7 100644
--- a/solr/common-build.xml
+++ b/solr/common-build.xml
@@ -155,10 +155,7 @@
     Cygwin users can explicitly set -Dtests.disableHdfs=false to enable Hdfs related testing.
   -->
   <condition property="tests.disableHdfs" value="true">
-    <or>
-      <os family="windows"/>
-      <equals arg1="${build.java.runtime}" arg2="9"/>
-    </or>
+    <os family="windows"/>
   </condition>
 
   <target name="validate" depends="compile-tools">

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5998ebb2/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
index 2f41390..21f5a18 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
@@ -18,7 +18,6 @@ package org.apache.solr.cloud;
 
 import junit.framework.Assert;
 import org.apache.hadoop.util.Time;
-import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -64,8 +63,6 @@ public class TestSolrCloudWithDelegationTokens extends SolrTestCaseJ4 {
 
   @BeforeClass
   public static void startup() throws Exception {
-    assumeFalse("SOLR-10951: Hadoop does not work on Java 9", Constants.JRE_IS_MINIMUM_JAVA9);
-    
     System.setProperty("authenticationPlugin", HttpParamDelegationTokenPlugin.class.getName());
     System.setProperty(KerberosPlugin.DELEGATION_TOKEN_ENABLED, "true");
     System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1");

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5998ebb2/solr/core/src/test/org/apache/solr/security/hadoop/TestDelegationWithHadoopAuth.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/security/hadoop/TestDelegationWithHadoopAuth.java b/solr/core/src/test/org/apache/solr/security/hadoop/TestDelegationWithHadoopAuth.java
index fa32460..c799296 100644
--- a/solr/core/src/test/org/apache/solr/security/hadoop/TestDelegationWithHadoopAuth.java
+++ b/solr/core/src/test/org/apache/solr/security/hadoop/TestDelegationWithHadoopAuth.java
@@ -52,7 +52,6 @@ public class TestDelegationWithHadoopAuth extends SolrCloudTestCase {
   @BeforeClass
   public static void setupClass() throws Exception {
     assumeFalse("Hadoop does not work on Windows", Constants.WINDOWS);
-    assumeFalse("SOLR-10951: Hadoop does not work on Java 9", Constants.JRE_IS_MINIMUM_JAVA9);
 
     configureCluster(NUM_SERVERS)// nodes
         .withSecurityJson(TEST_PATH().resolve("security").resolve("hadoop_simple_auth_with_delegation.json"))


[2/2] lucene-solr:branch_6x: SOLR-10951, HADOOP-14586: Add a hack to make Hadoop's Shell work with Java 9 release

Posted by us...@apache.org.
SOLR-10951, HADOOP-14586: Add a hack to make Hadoop's Shell work with Java 9 release


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c30b776e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c30b776e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c30b776e

Branch: refs/heads/branch_6x
Commit: c30b776efd7ef3156a7119b0f35dad000394dbbb
Parents: 5998ebb
Author: Uwe Schindler <us...@apache.org>
Authored: Wed Jun 28 17:41:28 2017 +0200
Committer: Uwe Schindler <us...@apache.org>
Committed: Wed Jun 28 17:42:38 2017 +0200

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 +
 .../org/apache/solr/servlet/BaseSolrFilter.java |  3 +
 .../apache/solr/servlet/BaseSolrServlet.java    |  3 +
 .../org/apache/solr/util/Java9InitHack.java     | 78 ++++++++++++++++++++
 .../java/org/apache/solr/SolrTestCaseJ4.java    |  6 ++
 5 files changed, 93 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c30b776e/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 177de0b..a7dae96 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -200,6 +200,9 @@ Other Changes
   with point fields and provides control over dynamic fields used for the raw amount and currency
   code sub-fields.  (hossman, Steve Rowe)
 
+* SOLR-10966: Add workaround for Hadoop-Common 2.7.2 incompatibility with Java 9.
+  (Uwe Schindler)
+
 ==================  6.6.1 ==================
 
 Bug Fixes

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c30b776e/solr/core/src/java/org/apache/solr/servlet/BaseSolrFilter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/servlet/BaseSolrFilter.java b/solr/core/src/java/org/apache/solr/servlet/BaseSolrFilter.java
index 6f9bbe6..40a2df2 100644
--- a/solr/core/src/java/org/apache/solr/servlet/BaseSolrFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/BaseSolrFilter.java
@@ -18,6 +18,8 @@ package org.apache.solr.servlet;
 
 import javax.servlet.Filter;
 
+import org.apache.solr.util.Java9InitHack;
+
 /**
  * All Solr filters available to the user's webapp should
  * extend this class and not just implement {@link Filter}.
@@ -28,6 +30,7 @@ abstract class BaseSolrFilter implements Filter {
   
   static {
     CheckLoggingConfiguration.check();
+    Java9InitHack.initJava9();
   }
   
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c30b776e/solr/core/src/java/org/apache/solr/servlet/BaseSolrServlet.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/servlet/BaseSolrServlet.java b/solr/core/src/java/org/apache/solr/servlet/BaseSolrServlet.java
index 5042e93..e175f8e 100644
--- a/solr/core/src/java/org/apache/solr/servlet/BaseSolrServlet.java
+++ b/solr/core/src/java/org/apache/solr/servlet/BaseSolrServlet.java
@@ -18,6 +18,8 @@ package org.apache.solr.servlet;
 
 import javax.servlet.http.HttpServlet;
 
+import org.apache.solr.util.Java9InitHack;
+
 /**
  * All Solr servlets available to the user's webapp should
  * extend this class and not {@link HttpServlet}.
@@ -29,6 +31,7 @@ abstract class BaseSolrServlet extends HttpServlet {
   
   static {
     CheckLoggingConfiguration.check();
+    Java9InitHack.initJava9();
   }
   
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c30b776e/solr/core/src/java/org/apache/solr/util/Java9InitHack.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/Java9InitHack.java b/solr/core/src/java/org/apache/solr/util/Java9InitHack.java
new file mode 100644
index 0000000..0565207
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/util/Java9InitHack.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.util;
+
+import java.lang.invoke.MethodHandles;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Objects;
+
+import org.apache.lucene.util.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class works around a bug in hadoop-common-2.7.2 where the Hadoop Shell class cannot
+ * initialize on Java 9 (due to a bug while parsing Java's version number).
+ * This class does some early checks and fakes the java version for a very short time
+ * during class loading of Solr's web application or Solr's test framework.
+ * <p>
+ * Be sure to run this only in static initializers, as soon as possible after JVM startup!
+ * <p>
+ * Related issues: HADOOP-14586, SOLR-10966
+ * <p>
+ * TODO: <b>Remove this ASAP, once we have upgraded Hadoop (SOLR-10951)!</b>
+ * 
+ * @lucene.internal
+ */
+public final class Java9InitHack {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+  
+  private static final String JAVA_VERSION_PROP = "java.version";
+  private static boolean done = false;
+
+  /**
+   * Runs the hack. Should be done as early as possible on JVM startup, from a static initializer
+   * to prevent concurrency issues - because we change temporarily some 'important' system properties.
+   */
+  public static synchronized void initJava9() {
+    if (Constants.JRE_IS_MINIMUM_JAVA9 && done == false) {
+      AccessController.doPrivileged((PrivilegedAction<Void>) Java9InitHack::initPrivileged);
+      done = true;
+    }
+  }
+     
+  private static Void initPrivileged() {
+    log.info("Adding temporary workaround for Hadoop's Shell class to allow running on Java 9 (please ignore any warnings/failures).");
+    String oldVersion = System.getProperty(JAVA_VERSION_PROP);
+    try {
+      System.setProperty(JAVA_VERSION_PROP, "1.9");
+      Class.forName("org.apache.hadoop.util.Shell");
+    } catch (Throwable t) {
+      log.warn("Cannot initialize Hadoop's Shell class on Java 9.", t);
+    } finally {
+      if (!Objects.equals(System.getProperty(JAVA_VERSION_PROP), oldVersion)) {
+        System.setProperty(JAVA_VERSION_PROP, oldVersion);
+      }
+    }
+    return null;
+  }
+  
+  private Java9InitHack() {}
+    
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c30b776e/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
index ed6a115..2ee8ff6 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -113,6 +113,7 @@ import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.servlet.DirectSolrConnection;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.util.Java9InitHack;
 import org.apache.solr.util.LogLevel;
 import org.apache.solr.util.RandomizeSSL;
 import org.apache.solr.util.RandomizeSSL.SSLRandomizer;
@@ -158,6 +159,11 @@ import static java.util.Objects.requireNonNull;
 public abstract class SolrTestCaseJ4 extends LuceneTestCase {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+  
+  // this must be a static init block to be safe!
+  static {
+    Java9InitHack.initJava9();
+  }
 
   private static final List<String> DEFAULT_STACK_FILTERS = Arrays.asList(new String [] {
       "org.junit.",