HDFS-4307. SocketCache should use monotonic time. Contributed by Colin Patrick McCabe.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1421572 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Aaron Myers 2012-12-13 22:09:02 +00:00
parent 23586e1ae5
commit f6f7152995
2 changed files with 9 additions and 5 deletions

View File

@ -610,6 +610,9 @@ Release 2.0.3-alpha - Unreleased
HDFS-2264. NamenodeProtocol has the wrong value for clientPrincipal in HDFS-2264. NamenodeProtocol has the wrong value for clientPrincipal in
KerberosInfo annotation. (atm) KerberosInfo annotation. (atm)
HDFS-4307. SocketCache should use monotonic time. (Colin Patrick McCabe
via atm)
BREAKDOWN OF HDFS-3077 SUBTASKS BREAKDOWN OF HDFS-3077 SUBTASKS
HDFS-3077. Quorum-based protocol for reading and writing edit logs. HDFS-3077. Quorum-based protocol for reading and writing edit logs.

View File

@ -37,6 +37,7 @@ import org.apache.hadoop.hdfs.protocol.datatransfer.IOStreamPair;
import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Daemon; import org.apache.hadoop.util.Daemon;
import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.StringUtils;
import org.apache.hadoop.util.Time;
/** /**
* A cache of input stream sockets to Data Node. * A cache of input stream sockets to Data Node.
@ -53,7 +54,7 @@ class SocketCache {
public SocketAndStreams(Socket s, IOStreamPair ioStreams) { public SocketAndStreams(Socket s, IOStreamPair ioStreams) {
this.sock = s; this.sock = s;
this.ioStreams = ioStreams; this.ioStreams = ioStreams;
this.createTime = System.currentTimeMillis(); this.createTime = Time.monotonicNow();
} }
@Override @Override
@ -205,7 +206,7 @@ class SocketCache {
Entry<SocketAddress, SocketAndStreams> entry = iter.next(); Entry<SocketAddress, SocketAndStreams> entry = iter.next();
// if oldest socket expired, remove it // if oldest socket expired, remove it
if (entry == null || if (entry == null ||
System.currentTimeMillis() - entry.getValue().getCreateTime() < Time.monotonicNow() - entry.getValue().getCreateTime() <
expiryPeriod) { expiryPeriod) {
break; break;
} }
@ -236,13 +237,13 @@ class SocketCache {
* older than expiryPeriod minutes * older than expiryPeriod minutes
*/ */
private void run() throws InterruptedException { private void run() throws InterruptedException {
for(long lastExpiryTime = System.currentTimeMillis(); for(long lastExpiryTime = Time.monotonicNow();
!Thread.interrupted(); !Thread.interrupted();
Thread.sleep(expiryPeriod)) { Thread.sleep(expiryPeriod)) {
final long elapsed = System.currentTimeMillis() - lastExpiryTime; final long elapsed = Time.monotonicNow() - lastExpiryTime;
if (elapsed >= expiryPeriod) { if (elapsed >= expiryPeriod) {
evictExpired(expiryPeriod); evictExpired(expiryPeriod);
lastExpiryTime = System.currentTimeMillis(); lastExpiryTime = Time.monotonicNow();
} }
} }
clear(); clear();