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

Uma Maheswara Rao G commented on HDFS-6258:
-------------------------------------------

I think the patch is straightforward to review as a whole but I am not against 
to split into small JIRAs if needed. :-)
Much of the code goes into PB related as well. so, separating that protocol 
things with core logics would be good thing to do for more focus on core logic.
But I don't see a strong reason for splitting persistence and implementations 
here, as we have just 3 APIs implemented to support and much of the code 
already simplified as we just as INodeFature.

BTW, Here is my early review comments on the patch attached. 
FsNameSystem and ClientProtocol:
- Can we keep one getXattr at ClientPRotocol level instead of having more 
overloaded APIs?
  When we validate the xattrs parameter for null and empty, we retun from 
clinet side itself. Need not pass such calls to server and validate.
  This will help for reducing the one overloaded API because if the xattrs 
parameter is null we treat the API like getXattrs(path)

XAttr.java :
- {noformat}
/**
 * XAttr is POSIX Extended Attribute model, similar to the one in traditional 
Operating Systems.
 * Extended Attribute consists of a name and associated data, and 4 namespaces 
are defined: user, 
 * trusted, security and system.
 *   1). USER namespace extended attribute may be assigned for storing 
arbitrary additional 
 *   information, and its access permissions are defined by file/directory 
permission bits.
 *   2). TRUSTED namespace extended attribute are visible and accessible only 
to privilege user 
 *   (file/directory owner or fs admin), and it is available from both user 
space (filesystem 
 *   API) and fs kernel.
 *   3). SYSTEM namespace extended attribute is used by fs kernel to store 
system objects, 
 *   and only available in fs kernel. It's not visible to users.
 *   4). SECURITY namespace extended attribute is used by fs kernel for 
security features, and 
 *   it's not visible to users.
 * <p/>
 * @see <a 
href="http://en.wikipedia.org/wiki/Extended_file_attributes";>http://en.wikipedia.org/wiki/Extended_file_attributes</a>
 *
 */
 {noformat}
 Please use appropriate line breaks in the java doc. 

 And I don't think . is necessary after each point number

 - {code}
 if (name == null) {
+      if (other.name != null) {
+        return false;
+      }
+    } else if (!name.equals(other.name)) {
+      return false;
+    }
{code}
Commons StringUtils does the null safe comparision. SO, can we use


DFSClient.java:
{code}
if (prefixIndex == -1) {
+      throw new IllegalArgumentException("XAttr name must be prefixed with 
user/trusted/security/system which followed by '.'");
+    }
{code}
Good to use HadoopIllegalArgumentException

{code}
else {
+      throw new IllegalArgumentException("XAttr name must be prefixed with 
user/trusted/security/system which followed by '.'");
+    }
{code}
Same as above.

- Seems like we allow empty names ex: "user." ?

- {code}
 xAttrMap.put(name, xAttr.getValue());
 {code}
 Seems like we are allowing null xattr values? I did not see a validation for 
not having it. If so, while getting we may hit null pointer here I think.

 XAttrStorage.java:

 - Why can't we validate this much earlier. Why do we need to carry this 
validation parameter till the storage?
 - I would like to see the Xattr storage format on the java doc of XattrStorage 
class.



General:
- I don't see any failure audit logs
- I think we may need to add the layout version in NamenodeLayoutVersion as the 
aplit happend as part of RollingUpgrades I guess. Even I see ACL version number 
tracked there in NamenodeLayoutversion as well. Please check this.


XAttrConfigFlag.java:
I don't have strong feeliong to have a separate class for config parameter and 
for a small check.

 Tests:

 - Can the tests in TestXAttr and TestXAttrs into one class?
 - I don't see any javadoc for tests
 
Some key cases to cover
 - I don't see NN restart cases. Check after restart wether the NN is able to 
get the xattrs which was set before restart.
 - Please include some test cases for HA failover and getxattrs from other node
 - See if they are loosing after a checkpoint etc in HA
 And I did not see a test for validating the behaviour that no flags API is 
behaving same as multi-flagged API here. But no force on this as the API is 
just delegation with multiflags.

 Yes, I agree with others that we should have a separate JIRA for covering XML 
based test cases for command line usage. Much of the cli cases can cover there 
in tests.
 I remember Liu also has a thought on filing JIRA for it once the core part is 
in.
 If you want you can take out hdfs.java into separate jira  and you can add 
tests for supporting this via FileContext APIs.


> Support XAttrs from NameNode and implements XAttr APIs for 
> DistributedFileSystem
> --------------------------------------------------------------------------------
>
>                 Key: HDFS-6258
>                 URL: https://issues.apache.org/jira/browse/HDFS-6258
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: namenode
>    Affects Versions: HDFS XAttrs (HDFS-2006)
>            Reporter: Yi Liu
>            Assignee: Yi Liu
>         Attachments: HDFS-6258.1.patch, HDFS-6258.2.patch, HDFS-6258.3.patch, 
> HDFS-6258.patch
>
>
> This JIRA is to implement extended attributes in HDFS: support XAttrs from 
> NameNode, implements XAttr APIs for DistributedFileSystem and so on.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to