From 4e11f33ccc849355eaeb0694dbee702e34340a74 Mon Sep 17 00:00:00 2001 From: Colin Patrick Mccabe Date: Mon, 20 Jun 2016 18:25:09 -0700 Subject: [PATCH] HDFS-10448. CacheManager#addInternal tracks bytesNeeded incorrectly when dealing with replication factors other than 1 (Yiqun Lin via cmccabe) (cherry picked from commit 46f1602e896273b308fbd5df6c75f6c142828227) --- .../org/apache/hadoop/hdfs/server/namenode/CacheManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java index cd57c56ff17..366dd9b671a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java @@ -396,8 +396,7 @@ private void checkLimit(CachePool pool, String path, if (pool.getLimit() == CachePoolInfo.LIMIT_UNLIMITED) { return; } - if (pool.getBytesNeeded() + (stats.getBytesNeeded() * replication) > pool - .getLimit()) { + if (pool.getBytesNeeded() + stats.getBytesNeeded() > pool.getLimit()) { throw new InvalidRequestException("Caching path " + path + " of size " + stats.getBytesNeeded() / replication + " bytes at replication " + replication + " would exceed pool " + pool.getPoolName() @@ -441,7 +440,7 @@ private CacheDirectiveStats computeNeeded(String path, short replication) { } } return new CacheDirectiveStats.Builder() - .setBytesNeeded(requestedBytes) + .setBytesNeeded(requestedBytes * replication) .setFilesCached(requestedFiles) .build(); }