svn merge -c 1541750 from trunk for HADOOP-10095. In CodecPool, synchronize pool and codecList separately in order to reduce lock contention.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1541751 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d993d01cdf
commit
79e34c2a3c
|
@ -88,6 +88,9 @@ Release 2.3.0 - UNRELEASED
|
||||||
HADOOP-9594. Update apache commons math dependency (Timothy St. Clair via
|
HADOOP-9594. Update apache commons math dependency (Timothy St. Clair via
|
||||||
stevel)
|
stevel)
|
||||||
|
|
||||||
|
HADOOP-10095. In CodecPool, synchronize pool and codecList separately in
|
||||||
|
order to reduce lock contention. (Nicolas Liochon via szetszwo)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-9748. Reduce blocking on UGI.ensureInitialized (daryn)
|
HADOOP-9748. Reduce blocking on UGI.ensureInitialized (daryn)
|
||||||
|
|
|
@ -85,16 +85,15 @@ public class CodecPool {
|
||||||
T codec = null;
|
T codec = null;
|
||||||
|
|
||||||
// Check if an appropriate codec is available
|
// Check if an appropriate codec is available
|
||||||
|
List<T> codecList;
|
||||||
synchronized (pool) {
|
synchronized (pool) {
|
||||||
if (pool.containsKey(codecClass)) {
|
codecList = pool.get(codecClass);
|
||||||
List<T> codecList = pool.get(codecClass);
|
}
|
||||||
|
|
||||||
if (codecList != null) {
|
if (codecList != null) {
|
||||||
synchronized (codecList) {
|
synchronized (codecList) {
|
||||||
if (!codecList.isEmpty()) {
|
if (!codecList.isEmpty()) {
|
||||||
codec = codecList.remove(codecList.size()-1);
|
codec = codecList.remove(codecList.size() - 1);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,18 +104,20 @@ public class CodecPool {
|
||||||
private static <T> void payback(Map<Class<T>, List<T>> pool, T codec) {
|
private static <T> void payback(Map<Class<T>, List<T>> pool, T codec) {
|
||||||
if (codec != null) {
|
if (codec != null) {
|
||||||
Class<T> codecClass = ReflectionUtils.getClass(codec);
|
Class<T> codecClass = ReflectionUtils.getClass(codec);
|
||||||
|
List<T> codecList;
|
||||||
synchronized (pool) {
|
synchronized (pool) {
|
||||||
if (!pool.containsKey(codecClass)) {
|
codecList = pool.get(codecClass);
|
||||||
pool.put(codecClass, new ArrayList<T>());
|
if (codecList == null) {
|
||||||
|
codecList = new ArrayList<T>();
|
||||||
|
pool.put(codecClass, codecList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<T> codecList = pool.get(codecClass);
|
|
||||||
synchronized (codecList) {
|
synchronized (codecList) {
|
||||||
codecList.add(codec);
|
codecList.add(codec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private static <T> int getLeaseCount(
|
private static <T> int getLeaseCount(
|
||||||
|
|
Loading…
Reference in New Issue