hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Valera V. Kharseko (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-12057) solaris -d64 jvm crash getLong workaround
Date Mon, 22 Sep 2014 23:00:38 GMT

     [ https://issues.apache.org/jira/browse/HBASE-12057?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Valera V. Kharseko updated HBASE-12057:
---------------------------------------
    Status: Patch Available  (was: Open)

https://github.com/openam-org-ru/org.apache.hbase/commit/618f1beb87ed5cfaa7923d6b3bf1afb5f5480613?diff=unified

{code}
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java
index 88f8b0c..0f68fc0 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java
@@ -1195,6 +1195,33 @@
         return (x1 + Long.MIN_VALUE) < (x2 + Long.MIN_VALUE);
       }
 
+      private static final boolean unaligned=!"sparcv9".equals(System.getProperty("os.arch"));
+
+      private long getLong(Object address, long offset) {
+          if (unaligned) {
+            return theUnsafe.getLong(address, offset);
+          } else {
+            if (littleEndian) {
+              return (((long) theUnsafe.getByte(address, offset + 7)       ) << 56)
|
+                     (((long) theUnsafe.getByte(address, offset + 6) & 0xff) <<
48) |
+                     (((long) theUnsafe.getByte(address, offset + 5) & 0xff) <<
40) |
+                     (((long) theUnsafe.getByte(address, offset + 4) & 0xff) <<
32) |
+                     (((long) theUnsafe.getByte(address, offset + 3) & 0xff) <<
24) |
+                     (((long) theUnsafe.getByte(address, offset + 2) & 0xff) <<
16) |
+                     (((long) theUnsafe.getByte(address, offset + 1) & 0xff) <<
 8) |
+                     (((long) theUnsafe.getByte(address, offset    ) & 0xff)      );
+            } else {
+              return (((long) theUnsafe.getByte(address, offset    )       ) << 56)
|
+                     (((long) theUnsafe.getByte(address, offset + 1) & 0xff) <<
48) |
+                     (((long) theUnsafe.getByte(address, offset + 2) & 0xff) <<
40) |
+                     (((long) theUnsafe.getByte(address, offset + 3) & 0xff) <<
32) |
+                     (((long) theUnsafe.getByte(address, offset + 4) & 0xff) <<
24) |
+                     (((long) theUnsafe.getByte(address, offset + 5) & 0xff) <<
16) |
+                     (((long) theUnsafe.getByte(address, offset + 6) & 0xff) <<
 8) |
+                     (((long) theUnsafe.getByte(address, offset + 7) & 0xff)      );
+            }
+          }
+        }
       /**
        * Lexicographically compare two arrays.
        *
@@ -1226,8 +1253,8 @@
          * On the other hand, it is substantially faster on 64-bit.
          */
         for (int i = 0; i < minWords * SIZEOF_LONG; i += SIZEOF_LONG) {
-          long lw = theUnsafe.getLong(buffer1, offset1Adj + (long) i);
-          long rw = theUnsafe.getLong(buffer2, offset2Adj + (long) i);
+          long lw = getLong(buffer1, offset1Adj + (long) i);
+          long rw = getLong(buffer2, offset2Adj + (long) i);
           long diff = lw ^ rw;
 
           if (diff != 0) {
{code}

> solaris -d64 jvm crash getLong workaround
> -----------------------------------------
>
>                 Key: HBASE-12057
>                 URL: https://issues.apache.org/jira/browse/HBASE-12057
>             Project: HBase
>          Issue Type: Bug
>          Components: util
>    Affects Versions: 0.98.6.1
>         Environment: solaris -d64 
>            Reporter: Valera V. Kharseko
>
> solaris 64 fix based on https://issues.apache.org/jira/secure/attachment/12625582/solaris_unsafe_fix.patch
> https://bugs.openjdk.java.net/browse/JDK-8021574?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message