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 >