Chaoyu Tang created HIVE-13953:
----------------------------------

             Summary: 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


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)

Reply via email to