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

Chris Nauroth commented on HADOOP-12529:
----------------------------------------

[~vinayrpet], unfortunately, we cannot switch UGI to use value equality instead 
of reference equality.  The current behavior is by design as per HADOOP-6670.  
Since UGI is mutable, use of value equality on the {{Subject}} had been causing 
other problems for the caches that use UGI as a part of the key.

Looking more closely at HADOOP-6670, I also see that tests were written as part 
of that patch, and those tests assert the current behavior.  I expect the 
changes proposed here would cause those tests to fail.

> UserGroupInformation equals method depend on the subject object address
> -----------------------------------------------------------------------
>
>                 Key: HADOOP-12529
>                 URL: https://issues.apache.org/jira/browse/HADOOP-12529
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: security
>    Affects Versions: 2.7.1
>            Reporter: wangwenli
>
>  my question is    why UserGroupInformation equals method depend on the 
> subject object?
>        try below code which is extract from HiveMetaStore:
> {code:title=TestUgi.java|borderStyle=solid}
> UserGroupInformation clientUgi = null;
> UserGroupInformation clientUgi2 = null;
> try {
> clientUgi = UserGroupInformation.createProxyUser("user2", 
> UserGroupInformation.getLoginUser());
> clientUgi2 = UserGroupInformation.createProxyUser("user2", 
> UserGroupInformation.getLoginUser());
> if (clientUgi.equals(clientUgi2)) {
> System.out.println("==");
> } else {
> System.out.println("!=");           //  strangely  this will be hit
> }
> } catch (IOException e1) {
> e1.printStackTrace();
> }
> {code}
>       i found that it is because the equal method from UserGroupInformation 
> is compare on subject object ref : subject == ((UserGroupInformation) 
> o).subject;  .    
>      as you know,   ipc.Client connect to namenode,   
> connections.get(ConnectionId)    this code will try to reuse the same socket 
> to namenode, but because of ConnectionId's equal depend on ugi equal, which 
> will cause connections.get(ConnectionId) cann't get the same socket,   
> suppose many connect to HiveMetaStore, then many connection to Namenode will 
> established.
>       so my doubts is why UserGroupInformation is compare on subject object 
> ref : subject == ((UserGroupInformation) o).subject,   it should compare on 
> subject's principal,  am i right?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to