Hi wenli,

I think, this is a bug. Could you please file a jira on the Hadoop project
so that we can try fix it if its really a bug. Please let me know the
jiraand I'll review it.

thanks ,
benoy

On Sat, Oct 17, 2015 at 7:06 AM, Wangwenli <wangwe...@huawei.com> wrote:

>
> Hi all,
>
>       my question is    why UserGroupInformation equals method depend on
> the subject object?
>
>
>        try below code which is extract from HiveMetaStore:
>
> 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();
>
> }
>
>
>       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?*
>
>
>
>
>
> ------------------------------
> wenli
> Regards
>

Reply via email to