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 ki...@apache.org on 2013/09/04 21:57:44 UTC
svn commit: r1520126 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/java/org/apache/hadoop/ipc/RetryCache.java
Author: kihwal
Date: Wed Sep 4 19:57:44 2013
New Revision: 1520126
URL: http://svn.apache.org/r1520126
Log:
HADOOP-9932. Improper synchronization in RetryCache. Contributed by Kihwal Lee.
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/ipc/RetryCache.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=1520126&r1=1520125&r2=1520126&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Wed Sep 4 19:57:44 2013
@@ -449,6 +449,8 @@ Release 2.1.1-beta - UNRELEASED
HADOOP-9924. FileUtil.createJarWithClassPath() does not generate relative
classpath correctly. (Shanyu Zhao via ivanmi)
+ HADOOP-9932. Improper synchronization in RetryCache. (kihwal)
+
Release 2.1.0-beta - 2013-08-22
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RetryCache.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RetryCache.java?rev=1520126&r1=1520125&r2=1520126&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RetryCache.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RetryCache.java Wed Sep 4 19:57:44 2013
@@ -76,6 +76,12 @@ public class RetryCache {
this.expirationTime = expirationTime;
}
+ CacheEntry(byte[] clientId, int callId, long expirationTime,
+ boolean success) {
+ this(clientId, callId, expirationTime);
+ this.state = success ? SUCCESS : FAILED;
+ }
+
private static int hashCode(long value) {
return (int)(value ^ (value >>> 32));
}
@@ -147,6 +153,12 @@ public class RetryCache {
this.payload = payload;
}
+ CacheEntryWithPayload(byte[] clientId, int callId, Object payload,
+ long expirationTime, boolean success) {
+ super(clientId, callId, expirationTime, success);
+ this.payload = payload;
+ }
+
/** Override equals to avoid findbugs warnings */
@Override
public boolean equals(Object obj) {
@@ -253,18 +265,20 @@ public class RetryCache {
*/
public void addCacheEntry(byte[] clientId, int callId) {
CacheEntry newEntry = new CacheEntry(clientId, callId, System.nanoTime()
- + expirationTime);
- newEntry.completed(true);
- set.put(newEntry);
+ + expirationTime, true);
+ synchronized(this) {
+ set.put(newEntry);
+ }
}
public void addCacheEntryWithPayload(byte[] clientId, int callId,
Object payload) {
- CacheEntry newEntry = new CacheEntryWithPayload(clientId, callId, payload,
- System.nanoTime() + expirationTime);
// since the entry is loaded from editlog, we can assume it succeeded.
- newEntry.completed(true);
- set.put(newEntry);
+ CacheEntry newEntry = new CacheEntryWithPayload(clientId, callId, payload,
+ System.nanoTime() + expirationTime, true);
+ synchronized(this) {
+ set.put(newEntry);
+ }
}
private static CacheEntry newEntry(long expirationTime) {