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

Enis Soztutar commented on HBASE-7579:
--------------------------------------

Sorry to come in late. 

This breaks the Comparable contract in HCD: 
{code}
+      if (!this.values.equals(o.values)) {
+        return 1;
+      }
{code}

We cannot always return positive if equals() is false. I guess we can use the 
old method of comparing the maps hashCodes if equals is false. 

> HTableDescriptor equals method fails if results are returned in a different 
> order
> ---------------------------------------------------------------------------------
>
>                 Key: HBASE-7579
>                 URL: https://issues.apache.org/jira/browse/HBASE-7579
>             Project: HBase
>          Issue Type: Bug
>          Components: Admin
>    Affects Versions: 0.94.6, 0.95.0
>            Reporter: Aleksandr Shulman
>            Assignee: Aleksandr Shulman
>            Priority: Minor
>             Fix For: 0.99.0
>
>         Attachments: HBASE-7579-0.94.patch, HBASE-7579-v1.patch, 
> HBASE-7579-v2.patch, HBASE-7579-v3.patch, HBASE-7579-v4.patch, 
> HBASE-7579-v5.patch
>
>
> HTableDescriptor's compareTo function compares a set of HColumnDescriptors 
> against another set of HColumnDescriptors. It iterates through both, relying 
> on the fact that they will be in the same order.
> In my testing, I may have seen this issue come up, so I decided to fix it.
> It's a straightforward fix. I convert the sets into a hashset for O(1) 
> lookups (at least in theory), then I check that all items in the first set 
> are found in the second.
> Since the sizes are the same, we know that if all elements showed up in the 
> second set, then they must be equal.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to