hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chaoyu Tang (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-13953) Issues in HiveLockObject equals method
Date Tue, 07 Jun 2016 03:23:20 GMT

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

Chaoyu Tang commented on HIVE-13953:
------------------------------------

The eight failed tests are not related to this patch. the test stats_list_bucket.q fails even
without this patch applied. Other seven failed tests are aged.

> 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
>         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)

Mime
View raw message