HADOOP-11466. FastByteComparisons: do not use UNSAFE_COMPARER on the SPARC architecture because it is slower there (Suman Somasundar via Colin P. McCabe)
(cherry picked from commit ee7d22e90c
)
This commit is contained in:
parent
60dc848f23
commit
2c69f8cf81
|
@ -378,6 +378,10 @@ Release 2.7.0 - UNRELEASED
|
|||
HADOOP-11327. BloomFilter#not() omits the last bit, resulting in an
|
||||
incorrect filter (Eric Payne via jlowe)
|
||||
|
||||
HADOOP-11466. FastByteComparisons: do not use UNSAFE_COMPARER on the SPARC
|
||||
architecture because it is slower there (Suman Somasundar via Colin P.
|
||||
McCabe)
|
||||
|
||||
Release 2.6.0 - 2014-11-18
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -24,6 +24,9 @@ import java.security.PrivilegedAction;
|
|||
|
||||
import sun.misc.Unsafe;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import com.google.common.primitives.Longs;
|
||||
import com.google.common.primitives.UnsignedBytes;
|
||||
|
||||
|
@ -33,6 +36,7 @@ import com.google.common.primitives.UnsignedBytes;
|
|||
* class to be able to compare arrays that start at non-zero offsets.
|
||||
*/
|
||||
abstract class FastByteComparisons {
|
||||
static final Log LOG = LogFactory.getLog(FastByteComparisons.class);
|
||||
|
||||
/**
|
||||
* Lexicographically compare two byte arrays.
|
||||
|
@ -71,6 +75,13 @@ abstract class FastByteComparisons {
|
|||
* implementation if unable to do so.
|
||||
*/
|
||||
static Comparer<byte[]> getBestComparer() {
|
||||
if (System.getProperty("os.arch").equals("sparc")) {
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace("Lexicographical comparer selected for "
|
||||
+ "byte aligned system architecture");
|
||||
}
|
||||
return lexicographicalComparerJavaImpl();
|
||||
}
|
||||
try {
|
||||
Class<?> theClass = Class.forName(UNSAFE_COMPARER_NAME);
|
||||
|
||||
|
@ -78,8 +89,16 @@ abstract class FastByteComparisons {
|
|||
@SuppressWarnings("unchecked")
|
||||
Comparer<byte[]> comparer =
|
||||
(Comparer<byte[]>) theClass.getEnumConstants()[0];
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace("Unsafe comparer selected for "
|
||||
+ "byte unaligned system architecture");
|
||||
}
|
||||
return comparer;
|
||||
} catch (Throwable t) { // ensure we really catch *everything*
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace(t.getMessage());
|
||||
LOG.trace("Lexicographical comparer selected");
|
||||
}
|
||||
return lexicographicalComparerJavaImpl();
|
||||
}
|
||||
}
|
||||
|
@ -234,4 +253,4 @@ abstract class FastByteComparisons {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue