HADOOP-8684. Deadlock between WritableComparator and WritableComparable. Contributed by Jing Zhao
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1379506 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d8ce3bee58
commit
e5a9d672f0
@ -197,6 +197,9 @@ Trunk (unreleased changes)
|
|||||||
HADOOP-8623. hadoop jar command should respect HADOOP_OPTS.
|
HADOOP-8623. hadoop jar command should respect HADOOP_OPTS.
|
||||||
(Steven Willis via suresh)
|
(Steven Willis via suresh)
|
||||||
|
|
||||||
|
HADOOP-8684. Deadlock between WritableComparator and WritableComparable.
|
||||||
|
(Jing Zhao via suresh)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-7761. Improve the performance of raw comparisons. (todd)
|
HADOOP-7761. Improve the performance of raw comparisons. (todd)
|
||||||
|
@ -18,8 +18,9 @@
|
|||||||
|
|
||||||
package org.apache.hadoop.io;
|
package org.apache.hadoop.io;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.DataInput;
|
||||||
import java.util.*;
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
import org.apache.hadoop.classification.InterfaceStability;
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
@ -38,12 +39,11 @@
|
|||||||
@InterfaceStability.Stable
|
@InterfaceStability.Stable
|
||||||
public class WritableComparator implements RawComparator {
|
public class WritableComparator implements RawComparator {
|
||||||
|
|
||||||
private static HashMap<Class, WritableComparator> comparators =
|
private static final ConcurrentHashMap<Class, WritableComparator> comparators
|
||||||
new HashMap<Class, WritableComparator>(); // registry
|
= new ConcurrentHashMap<Class, WritableComparator>(); // registry
|
||||||
|
|
||||||
/** Get a comparator for a {@link WritableComparable} implementation. */
|
/** Get a comparator for a {@link WritableComparable} implementation. */
|
||||||
public static synchronized
|
public static WritableComparator get(Class<? extends WritableComparable> c) {
|
||||||
WritableComparator get(Class<? extends WritableComparable> c) {
|
|
||||||
WritableComparator comparator = comparators.get(c);
|
WritableComparator comparator = comparators.get(c);
|
||||||
if (comparator == null) {
|
if (comparator == null) {
|
||||||
// force the static initializers to run
|
// force the static initializers to run
|
||||||
@ -76,12 +76,10 @@ private static void forceInit(Class<?> cls) {
|
|||||||
/** Register an optimized comparator for a {@link WritableComparable}
|
/** Register an optimized comparator for a {@link WritableComparable}
|
||||||
* implementation. Comparators registered with this method must be
|
* implementation. Comparators registered with this method must be
|
||||||
* thread-safe. */
|
* thread-safe. */
|
||||||
public static synchronized void define(Class c,
|
public static void define(Class c, WritableComparator comparator) {
|
||||||
WritableComparator comparator) {
|
|
||||||
comparators.put(c, comparator);
|
comparators.put(c, comparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private final Class<? extends WritableComparable> keyClass;
|
private final Class<? extends WritableComparable> keyClass;
|
||||||
private final WritableComparable key1;
|
private final WritableComparable key1;
|
||||||
private final WritableComparable key2;
|
private final WritableComparable key2;
|
||||||
|
Loading…
Reference in New Issue
Block a user