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

Aaron T. Myers commented on HDFS-4148:
--------------------------------------

Hi Brandon,

One high-level comment:

In general I'm a little leery of adding these methods which are getters but 
also have the side effect of checking for the presence of RO snapshots and 
throwing an exception. Perhaps better would be to leave the getter methods 
alone and instead add a function along the lines 
"ensureNotInROSnapshot(INodesInPath)" which would either be a no-op or throw a 
SnapshotAccessControlException. I think that'd make the code clearer. What do 
you think?

One specific example of where this is unclear is that the method name 
"isDirMutable" seems like it's returning true if the dir is mutable, when in 
fact it's semantics are "isDirAndCheckMutable". If we choose to stick with the 
getter-with-check option, I think we should change the names to 
"getXAndEsnureMutable", instead of just "getXMutable".

A few little specific comments:

# The class comment in TestDisallowModifyROSnapshot is copied from TestSnapshot 
and isn't accurate.
# Why was it necessary to use raw DFSClients in testCreate and 
testCreateSymlink? Couldn't we have just used FileSystem (or FileContext) as 
was done in the rest of the test cases? If indeed this isn't possible, it would 
be good to add a comment explaining why.
# I don't understand this comment:
{code}
+    // TODO: if link is objInSnapshot, ParentNotDirectoryException got thrown
+    // first by verifyParentDir()
{code}
What's left to be done here?
# The method comment for ClientProtocol#createSymlink says "@throws 
SnapshotAccessControlException if path is in RO snapshot." I think we should 
make it clear that this is only if the _link path_ is in the RO snapshot. No 
exception should be thrown if the _target path_ is in an RO snapshot.
# This patch copy/pastes the message "Modification on RO snapshot is 
disallowed" in three places. I recommend you add a no-args constructor to 
SnapshotAccessControlException with this message as the default, much as the 
existing AccessControlException has done. I also recommend changing the message 
to "Permission denied: cannot modify read-only snapshot."
# I'd recommend adding a method comment to FSDirectory#existsMutable, much as 
you've done for FSDirectory#getMutableINode.
# There's some inconsistency in naming some of the getter methods along the 
lines of "getXMutable" versus "getMutableX". Per my high-level comment above I 
recommend we change all of these to "getXAndEnsureMutable".

Sorry that I'm providing this review so late. Given that this patch was just 
committed, we can either revert the commit and update the patch, or address 
this feedback in a follow-up JIRA. Either way is fine by me.
                
>  Disallow write/modify operations on files and directories in a snapshot
> ------------------------------------------------------------------------
>
>                 Key: HDFS-4148
>                 URL: https://issues.apache.org/jira/browse/HDFS-4148
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: name-node
>    Affects Versions: Snapshot (HDFS-2802)
>            Reporter: Brandon Li
>            Assignee: Brandon Li
>             Fix For: Snapshot (HDFS-2802)
>
>         Attachments: HDFS-4148.patch, HDFS-4148.patch, HDFS-4148.patch, 
> HDFS-4148.patch, HDFS-4148.patch
>
>
> disallow modification on RO snapshots, including create, append, 
> setReplication/Permission/Owner, rename, delete, makedir, setQuota/Time, 
> createSymlink. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to