[ https://issues.apache.org/jira/browse/HIVE-13953?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jesus Camacho Rodriguez updated HIVE-13953: ------------------------------------------- Fix Version/s: (was: 2.1.1) (was: 2.2.0) 2.1.0 > Issues in HiveLockObject equals method > -------------------------------------- > > Key: HIVE-13953 > URL: https://issues.apache.org/jira/browse/HIVE-13953 > Project: Hive > Issue Type: Bug > Components: Locking > Reporter: Chaoyu Tang > Assignee: Chaoyu Tang > Fix For: 2.1.0 > > Attachments: HIVE-13953.patch > > > There are two issues in equals method in HiveLockObject: > {code} > @Override > public boolean equals(Object o) { > if (!(o instanceof HiveLockObject)) { > return false; > } > HiveLockObject tgt = (HiveLockObject) o; > return Arrays.equals(pathNames, tgt.pathNames) && > data == null ? tgt.getData() == null : > tgt.getData() != null && data.equals(tgt.getData()); > } > {code} > 1. Arrays.equals(pathNames, tgt.pathNames) might return false for the same > path in HiveLockObject since in current Hive, the pathname components might > be stored in two ways, taking a dynamic partition path db/tbl/part1/part2 as > an example, it might be stored in the pathNames as an array of four elements, > db, tbl, part1, and part2 or as an array only having one element > db/tbl/part1/part2. It will be safer to comparing the pathNames using > StringUtils.equals(this.getName(), tgt.getName()) > 2. The comparison logic is not right. > {code} > @Override > public boolean equals(Object o) { > if (!(o instanceof HiveLockObject)) { > return false; > } > HiveLockObject tgt = (HiveLockObject) o; > return StringUtils.equals(this.getName(), tgt.getName()) && > (data == null ? tgt.getData() == null : data.equals(tgt.getData())); > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)