From bcef03ddc0161336316ec28d251001092e5cd61b Mon Sep 17 00:00:00 2001 From: samelamin Date: Wed, 29 Mar 2017 22:26:04 +0100 Subject: [PATCH 1/6] SPARK-19999 - fix jdk bug --- .../org/apache/spark/unsafe/Platform.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index 671b8c7475943..d0ea68e50a485 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -46,18 +46,22 @@ public final class Platform { private static final boolean unaligned; static { boolean _unaligned; - // use reflection to access unaligned field - try { - Class bitsClass = - Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); - Method unalignedMethod = bitsClass.getDeclaredMethod("unaligned"); - unalignedMethod.setAccessible(true); - _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); - } catch (Throwable t) { - // We at least know x86 and x64 support unaligned access. - String arch = System.getProperty("os.arch", ""); - //noinspection DynamicRegexReplaceableByCompiledPattern - _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$"); + if (arch.matches("^(ppc64le | ppc64)$")) { + _unaligned = true; + } else { + //Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231) + try { + Class bitsClass = + Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); + Method unalignedMethod = bitsClass.getDeclaredMethod("unaligned"); + unalignedMethod.setAccessible(true); + _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); + } catch (Throwable t) { + // We at least know x86 and x64 support unaligned access. + String arch = System.getProperty("os.arch", ""); + //noinspection DynamicRegexReplaceableByCompiledPattern + _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$"); + } } unaligned = _unaligned; } From 8785664b7528e032b36b9c80ac528a3984fd206a Mon Sep 17 00:00:00 2001 From: samelamin Date: Wed, 29 Mar 2017 22:27:40 +0100 Subject: [PATCH 2/6] indentation keeps changing because of intellij --- .../unsafe/src/main/java/org/apache/spark/unsafe/Platform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index d0ea68e50a485..4ce02198d01b6 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -52,7 +52,7 @@ public final class Platform { //Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231) try { Class bitsClass = - Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); + Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); Method unalignedMethod = bitsClass.getDeclaredMethod("unaligned"); unalignedMethod.setAccessible(true); _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); From 799effae411f2aa61e207c6282c3c4ab137db991 Mon Sep 17 00:00:00 2001 From: samelamin Date: Wed, 29 Mar 2017 22:47:54 +0100 Subject: [PATCH 3/6] set default indentation to 2 --- .../org/apache/spark/unsafe/Platform.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index 4ce02198d01b6..2befeaf7de683 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -47,21 +47,21 @@ public final class Platform { static { boolean _unaligned; if (arch.matches("^(ppc64le | ppc64)$")) { - _unaligned = true; + _unaligned = true; } else { - //Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231) - try { - Class bitsClass = - Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); - Method unalignedMethod = bitsClass.getDeclaredMethod("unaligned"); - unalignedMethod.setAccessible(true); - _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); - } catch (Throwable t) { - // We at least know x86 and x64 support unaligned access. - String arch = System.getProperty("os.arch", ""); - //noinspection DynamicRegexReplaceableByCompiledPattern - _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$"); - } + //Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231) + try { + Class bitsClass = + Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); + Method unalignedMethod = bitsClass.getDeclaredMethod("unaligned"); + unalignedMethod.setAccessible(true); + _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); + } catch (Throwable t) { + // We at least know x86 and x64 support unaligned access. + String arch = System.getProperty("os.arch", ""); + //noinspection DynamicRegexReplaceableByCompiledPattern + _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$"); + } } unaligned = _unaligned; } From bf7cc24f213a2cf043a579846859647da850f1f8 Mon Sep 17 00:00:00 2001 From: samelamin Date: Wed, 29 Mar 2017 23:06:11 +0100 Subject: [PATCH 4/6] move and clarify comment --- .../unsafe/src/main/java/org/apache/spark/unsafe/Platform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index 2befeaf7de683..d03546b590f6e 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -47,9 +47,9 @@ public final class Platform { static { boolean _unaligned; if (arch.matches("^(ppc64le | ppc64)$")) { + // Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231), but ppc64 and ppc64le support it _unaligned = true; } else { - //Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231) try { Class bitsClass = Class.forName("java.nio.Bits", false, ClassLoader.getSystemClassLoader()); From 77777e96a627d72ff7a74043a14e7baa9d70bb04 Mon Sep 17 00:00:00 2001 From: samelamin Date: Thu, 30 Mar 2017 07:33:57 +0100 Subject: [PATCH 5/6] define arch befote if statement --- .../unsafe/src/main/java/org/apache/spark/unsafe/Platform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index d03546b590f6e..f1d6c8917b925 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -46,6 +46,7 @@ public final class Platform { private static final boolean unaligned; static { boolean _unaligned; + String arch = System.getProperty("os.arch", ""); if (arch.matches("^(ppc64le | ppc64)$")) { // Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231), but ppc64 and ppc64le support it _unaligned = true; @@ -58,7 +59,6 @@ public final class Platform { _unaligned = Boolean.TRUE.equals(unalignedMethod.invoke(null)); } catch (Throwable t) { // We at least know x86 and x64 support unaligned access. - String arch = System.getProperty("os.arch", ""); //noinspection DynamicRegexReplaceableByCompiledPattern _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$"); } From 632161b299ac37a598083b1c2995e9becbddc33c Mon Sep 17 00:00:00 2001 From: samelamin Date: Thu, 30 Mar 2017 10:58:05 +0100 Subject: [PATCH 6/6] use equals as per feedback from pr --- .../unsafe/src/main/java/org/apache/spark/unsafe/Platform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java index f1d6c8917b925..ba35cf250e482 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java @@ -47,7 +47,7 @@ public final class Platform { static { boolean _unaligned; String arch = System.getProperty("os.arch", ""); - if (arch.matches("^(ppc64le | ppc64)$")) { + if (arch.equals("ppc64le") || arch.equals("ppc64")) { // Since java.nio.Bits.unaligned() doesn't return true on ppc (See JDK-8165231), but ppc64 and ppc64le support it _unaligned = true; } else {