You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sz...@apache.org on 2013/11/13 23:50:58 UTC
svn commit: r1541750 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/java/org/apache/hadoop/io/compress/CodecPool.java
Author: szetszwo
Date: Wed Nov 13 22:50:58 2013
New Revision: 1541750
URL: http://svn.apache.org/r1541750
Log:
HADOOP-10095. In CodecPool, synchronize pool and codecList separately in order to reduce lock contention. Contributed by Nicolas Liochon
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/CodecPool.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1541750&r1=1541749&r2=1541750&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Wed Nov 13 22:50:58 2013
@@ -378,6 +378,9 @@ Release 2.3.0 - UNRELEASED
HADOOP-9594. Update apache commons math dependency (Timothy St. Clair via
stevel)
+ HADOOP-10095. In CodecPool, synchronize pool and codecList separately in
+ order to reduce lock contention. (Nicolas Liochon via szetszwo)
+
OPTIMIZATIONS
HADOOP-9748. Reduce blocking on UGI.ensureInitialized (daryn)
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/CodecPool.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/CodecPool.java?rev=1541750&r1=1541749&r2=1541750&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/CodecPool.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/CodecPool.java Wed Nov 13 22:50:58 2013
@@ -85,16 +85,15 @@ public class CodecPool {
T codec = null;
// Check if an appropriate codec is available
+ List<T> codecList;
synchronized (pool) {
- if (pool.containsKey(codecClass)) {
- List<T> codecList = pool.get(codecClass);
-
- if (codecList != null) {
- synchronized (codecList) {
- if (!codecList.isEmpty()) {
- codec = codecList.remove(codecList.size()-1);
- }
- }
+ codecList = pool.get(codecClass);
+ }
+
+ if (codecList != null) {
+ synchronized (codecList) {
+ if (!codecList.isEmpty()) {
+ codec = codecList.remove(codecList.size() - 1);
}
}
}
@@ -105,15 +104,17 @@ public class CodecPool {
private static <T> void payback(Map<Class<T>, List<T>> pool, T codec) {
if (codec != null) {
Class<T> codecClass = ReflectionUtils.getClass(codec);
+ List<T> codecList;
synchronized (pool) {
- if (!pool.containsKey(codecClass)) {
- pool.put(codecClass, new ArrayList<T>());
+ codecList = pool.get(codecClass);
+ if (codecList == null) {
+ codecList = new ArrayList<T>();
+ pool.put(codecClass, codecList);
}
+ }
- List<T> codecList = pool.get(codecClass);
- synchronized (codecList) {
- codecList.add(codec);
- }
+ synchronized (codecList) {
+ codecList.add(codec);
}
}
}