HDFS-6604. The short-circuit cache doesn't correctly time out replicas that haven't been used in a while (cmccabe)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1607456 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
130182df1b
commit
297e3c72fb
@ -750,6 +750,9 @@ Release 2.5.0 - UNRELEASED
|
||||
HDFS-6591. while loop is executed tens of thousands of times in Hedged Read
|
||||
(Liang Xie via cnauroth)
|
||||
|
||||
HDFS-6604. The short-circuit cache doesn't correctly time out replicas that
|
||||
haven't been used in a while (cmccabe)
|
||||
|
||||
BREAKDOWN OF HDFS-2006 SUBTASKS AND RELATED JIRAS
|
||||
|
||||
HDFS-6299. Protobuf for XAttr and client-side implementation. (Yi Liu via umamahesh)
|
||||
|
@ -111,7 +111,7 @@ public void run() {
|
||||
Long evictionTimeNs = Long.valueOf(0);
|
||||
while (true) {
|
||||
Entry<Long, ShortCircuitReplica> entry =
|
||||
evictableMmapped.ceilingEntry(evictionTimeNs);
|
||||
evictable.ceilingEntry(evictionTimeNs);
|
||||
if (entry == null) break;
|
||||
evictionTimeNs = entry.getKey();
|
||||
long evictionTimeMs =
|
||||
@ -384,10 +384,6 @@ public ShortCircuitCache(int maxTotalSize, long maxNonMmappedEvictableLifespanMs
|
||||
this.shmManager = shmManager;
|
||||
}
|
||||
|
||||
public long getMmapRetryTimeoutMs() {
|
||||
return mmapRetryTimeoutMs;
|
||||
}
|
||||
|
||||
public long getStaleThresholdMs() {
|
||||
return staleThresholdMs;
|
||||
}
|
||||
@ -847,7 +843,7 @@ ClientMmap getOrCreateClientMmap(ShortCircuitReplica replica,
|
||||
} else if (replica.mmapData instanceof Long) {
|
||||
long lastAttemptTimeMs = (Long)replica.mmapData;
|
||||
long delta = Time.monotonicNow() - lastAttemptTimeMs;
|
||||
if (delta < staleThresholdMs) {
|
||||
if (delta < mmapRetryTimeoutMs) {
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace(this + ": can't create client mmap for " +
|
||||
replica + " because we failed to " +
|
||||
|
@ -197,11 +197,12 @@ public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
|
||||
@Test(timeout=60000)
|
||||
public void testExpiry() throws Exception {
|
||||
final ShortCircuitCache cache =
|
||||
new ShortCircuitCache(2, 1, 1, 10000000, 1, 10000, 0);
|
||||
new ShortCircuitCache(2, 1, 1, 10000000, 1, 10000000, 0);
|
||||
final TestFileDescriptorPair pair = new TestFileDescriptorPair();
|
||||
ShortCircuitReplicaInfo replicaInfo1 =
|
||||
cache.fetchOrCreate(
|
||||
new ExtendedBlockId(123, "test_bp1"), new SimpleReplicaCreator(123, cache, pair));
|
||||
new ExtendedBlockId(123, "test_bp1"),
|
||||
new SimpleReplicaCreator(123, cache, pair));
|
||||
Preconditions.checkNotNull(replicaInfo1.getReplica());
|
||||
Preconditions.checkState(replicaInfo1.getInvalidTokenException() == null);
|
||||
pair.compareWith(replicaInfo1.getReplica().getDataStream(),
|
||||
|
Loading…
Reference in New Issue
Block a user