Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Not A Bug
-
2.8.0
-
None
Description
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
@Override public INodeFileAttributes getSnapshotINode(final int snapshotId) { FileWithSnapshotFeature sf = this.getFileWithSnapshotFeature(); if (sf != null) { return sf.getDiffs().getSnapshotINode(snapshotId, this); } else { return this; } }
AbstractINodeDiffList#getSnapshotINode
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; }
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.