Yiqun Lin created HDFS-10448:
--------------------------------
Summary: CacheManager#checkLimit not correctly
Key: HDFS-10448
URL: https://issues.apache.org/jira/browse/HDFS-10448
Project: Hadoop HDFS
Issue Type: Bug
Components: caching
Affects Versions: 2.7.1
Reporter: Yiqun Lin
Assignee: Yiqun Lin
The logic in {{CacheManager#checkLimit}} is not correct. In this method, it
does with these three logic:
First, it will compute needed bytes for the specific path.
{code}
CacheDirectiveStats stats = computeNeeded(path, replication);
{code}
But the param {{replication}} is not used here. And the bytesNeeded is just one
replication's vaue.
{code}
return new CacheDirectiveStats.Builder()
.setBytesNeeded(requestedBytes)
.setFilesCached(requestedFiles)
.build();
{code}
Second, then it should be multiply by the replication to compare the limit size
because the method {{computeNeeded}} was not used replication.
{code}
pool.getBytesNeeded() + (stats.getBytesNeeded() * replication) > pool.getLimit()
{code}
Third, if we find the size was more than the limit value and then print warning
info. It divided by replication here, while the {{stats.getBytesNeeded()}} was
just one replication value.
{code}
throw new InvalidRequestException("Caching path " + path + " of size "
+ stats.getBytesNeeded() / replication + " bytes at replication "
+ replication + " would exceed pool " + pool.getPoolName()
+ "'s remaining capacity of "
+ (pool.getLimit() - pool.getBytesNeeded()) + " bytes.");
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]