You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Hu Liu, (JIRA)" <ji...@apache.org> on 2014/10/27 11:01:34 UTC
[jira] [Created] (HDFS-7294) Use stored timestamp instead of
timestamp provided by client in FsDatasetImpl#getBlockLocalPathInfo
Hu Liu, created HDFS-7294:
-----------------------------
Summary: Use stored timestamp instead of timestamp provided by client in FsDatasetImpl#getBlockLocalPathInfo
Key: HDFS-7294
URL: https://issues.apache.org/jira/browse/HDFS-7294
Project: Hadoop HDFS
Issue Type: Bug
Affects Versions: 2.5.1
Reporter: Hu Liu,
In current implementation, datanode use the timestamp provided by client without checking:
{code}
public BlockLocalPathInfo getBlockLocalPathInfo(ExtendedBlock block)
throws IOException {
File datafile = getBlockFile(block);
File metafile = FsDatasetUtil.getMetaFile(datafile, block.getGenerationStamp());
{code}
But in some scenario, the client may provide wrong timestamp and the getBlockLocalPathInfo will return wrong path to client. We can fix it by using timestamp of stored block.
Meanwhile, we should also check the meta file like data file if there is disk failure.
{code}
File validateBlockFile(String bpid, Block b) {
//Should we check for metadata file too?
final File f;
synchronized(this) {
f = getFile(bpid, b.getBlockId());
}
if(f != null ) {
if(f.exists())
return f;
// if file is not null, but doesn't exist - possibly disk failed
datanode.checkDiskError();
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)