aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorsamelamin <hussam.elamin@gmail.com>2017-03-30 16:08:26 +0100
committerSean Owen <sowen@cloudera.com>2017-03-30 16:08:26 +0100
commit258bff2c3f54490ddca898e276029db9adf575d9 (patch)
tree6fd2d896b549ea66e93afb7206c8191fddcf1387 /common
parent0197262a358fd174a188f8246ae777e53157610e (diff)
downloadspark-258bff2c3f54490ddca898e276029db9adf575d9.tar.gz
spark-258bff2c3f54490ddca898e276029db9adf575d9.tar.bz2
spark-258bff2c3f54490ddca898e276029db9adf575d9.zip
[SPARK-19999] Workaround JDK-8165231 to identify PPC64 architectures as supporting unaligned access
java.nio.Bits.unaligned() does not return true for the ppc64le arch. see https://bugs.openjdk.java.net/browse/JDK-8165231 ## What changes were proposed in this pull request? check architecture ## How was this patch tested? unit test Author: samelamin <hussam.elamin@gmail.com> Author: samelamin <sam_elamin@discovery.com> Closes #17472 from samelamin/SPARK-19999.
Diffstat (limited to 'common')
-rw-r--r--common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java28
1 files 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 f13c24ae5e..1321b83181 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)$");
+ String arch = System.getProperty("os.arch", "");
+ 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 {
+ 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.
+ //noinspection DynamicRegexReplaceableByCompiledPattern
+ _unaligned = arch.matches("^(i[3-6]86|x86(_64)?|x64|amd64|aarch64)$");
+ }
}
unaligned = _unaligned;
}