Repository: hbase Updated Branches: refs/heads/master 910980389 -> af604f0c0
HBASE-17869 UnsafeAvailChecker wrongly returns false on ppc Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/af604f0c Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/af604f0c Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/af604f0c Branch: refs/heads/master Commit: af604f0c0cf3c40c56746150ffa860aad07f128a Parents: 9109803 Author: Jerry He <jerry...@apache.org> Authored: Thu Apr 6 16:04:47 2017 -0700 Committer: Jerry He <jerry...@apache.org> Committed: Thu Apr 6 16:04:47 2017 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/util/UnsafeAvailChecker.java | 24 ++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/af604f0c/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAvailChecker.java ---------------------------------------------------------------------- diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAvailChecker.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAvailChecker.java index 90e6ec8..886cb3c 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAvailChecker.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/UnsafeAvailChecker.java @@ -51,15 +51,21 @@ public class UnsafeAvailChecker { }); // When Unsafe itself is not available/accessible consider unaligned as false. if (avail) { - try { - // Using java.nio.Bits#unaligned() to check for unaligned-access capability - Class<?> clazz = Class.forName("java.nio.Bits"); - Method m = clazz.getDeclaredMethod("unaligned"); - m.setAccessible(true); - unaligned = (Boolean) m.invoke(null); - } catch (Exception e) { - LOG.warn("java.nio.Bits#unaligned() check failed." - + "Unsafe based read/write of primitive types won't be used", e); + String arch = System.getProperty("os.arch"); + if ("ppc64".equals(arch) || "ppc64le".equals(arch)) { + // java.nio.Bits.unaligned() wrongly returns false on ppc (JDK-8165231), + unaligned = true; + } else { + try { + // Using java.nio.Bits#unaligned() to check for unaligned-access capability + Class<?> clazz = Class.forName("java.nio.Bits"); + Method m = clazz.getDeclaredMethod("unaligned"); + m.setAccessible(true); + unaligned = (Boolean) m.invoke(null); + } catch (Exception e) { + LOG.warn("java.nio.Bits#unaligned() check failed." + + "Unsafe based read/write of primitive types won't be used", e); + } } } }