hadoop-hdfs-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daryn Sharp (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HDFS-12201) INode#getSnapshotINode() should get INodeAttributes from INodeAttributesProvider for the current INode
Date Thu, 27 Jul 2017 14:06:00 GMT

    [ https://issues.apache.org/jira/browse/HDFS-12201?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16103241#comment-16103241

Daryn Sharp commented on HDFS-12201:

Initial feeling w/o studying the code is if the issue is specific to snapshot diffs, that
is where calls to {{FSDirectory#getAttributes}} should occur.  That's for instance what file
status does.

Intermingling inodes (model objects) with specific control logic of an external plugin attributes
provider violates abstractions.  This could easily have unforeseen subtle problems (now or
in the future).  One of the worst cases may be the NN inadvertently edit log the "fake" attributes.

> INode#getSnapshotINode() should get INodeAttributes from INodeAttributesProvider for
the current INode
> ------------------------------------------------------------------------------------------------------
>                 Key: HDFS-12201
>                 URL: https://issues.apache.org/jira/browse/HDFS-12201
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: snapshots
>    Affects Versions: 2.8.0
>            Reporter: Manoj Govindassamy
>            Assignee: Manoj Govindassamy
>         Attachments: HDFS-12201.test.01.patch
> Problem: When an external INodeAttributesProvider is enabled, SnapshotDiff is not detecting
changes in files when the external ACL/XAttr attributes change. 
> {{FileWithSnapshotFeature#changedBetweenSnapshots()}} when trying to detect changes in
snapshots for the given file, does meta data comparison which takes in the attributes retrieved
from {{INode#getSnapshotINode()}}
> {{INodeFile}}
> {noformat}
>   @Override
>   public INodeFileAttributes getSnapshotINode(final int snapshotId) {
>     FileWithSnapshotFeature sf = this.getFileWithSnapshotFeature();
>     if (sf != null) {
>       return sf.getDiffs().getSnapshotINode(snapshotId, this);
>     } else {
>       return this;
>     }
>   }
> {noformat}
> {{AbstractINodeDiffList#getSnapshotINode}}
> {noformat}
>   public A getSnapshotINode(final int snapshotId, final A currentINode) {
>     final D diff = getDiffById(snapshotId);
>     final A inode = diff == null? null: diff.getSnapshotINode();
>     return inode == null? currentINode: inode;
>   }
> {noformat}
> But, INodeFile, INodeDirectory #getSnapshotINode() returns the current INode's local
INodeAttributes if there is anything available for the given snapshot id. When there is an
INodeAttributesProvider configured, attributes provided by the external provider could be
different from the local. But, getSnapshotINode() always returns the local attributes without
retrieving them from attributes provider. 

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org

View raw message