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:
Suresh Srinivas 2012-08-31 17:01:25 +00:00
parent d8ce3bee58
commit e5a9d672f0
2 changed files with 10 additions and 9 deletions

View File

@ -197,6 +197,9 @@ Trunk (unreleased changes)
HADOOP-8623. hadoop jar command should respect HADOOP_OPTS.
(Steven Willis via suresh)
HADOOP-8684. Deadlock between WritableComparator and WritableComparable.
(Jing Zhao via suresh)
OPTIMIZATIONS
HADOOP-7761. Improve the performance of raw comparisons. (todd)

View File

@ -18,8 +18,9 @@
package org.apache.hadoop.io;
import java.io.*;
import java.util.*;
import java.io.DataInput;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
@ -38,12 +39,11 @@ import org.apache.hadoop.util.ReflectionUtils;
@InterfaceStability.Stable
public class WritableComparator implements RawComparator {
private static HashMap<Class, WritableComparator> comparators =
new HashMap<Class, WritableComparator>(); // registry
private static final ConcurrentHashMap<Class, WritableComparator> comparators
= new ConcurrentHashMap<Class, WritableComparator>(); // registry
/** Get a comparator for a {@link WritableComparable} implementation. */
public static synchronized
WritableComparator get(Class<? extends WritableComparable> c) {
public static WritableComparator get(Class<? extends WritableComparable> c) {
WritableComparator comparator = comparators.get(c);
if (comparator == null) {
// force the static initializers to run
@ -76,12 +76,10 @@ public class WritableComparator implements RawComparator {
/** Register an optimized comparator for a {@link WritableComparable}
* implementation. Comparators registered with this method must be
* thread-safe. */
public static synchronized void define(Class c,
WritableComparator comparator) {
public static void define(Class c, WritableComparator comparator) {
comparators.put(c, comparator);
}
private final Class<? extends WritableComparable> keyClass;
private final WritableComparable key1;
private final WritableComparable key2;