You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Nicholas Telford (Updated) (JIRA)" <ji...@apache.org> on 2011/12/06 19:35:39 UTC

[jira] [Updated] (HBASE-4966) Put/Delete values cannot be tested with MRUnit

     [ https://issues.apache.org/jira/browse/HBASE-4966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicholas Telford updated HBASE-4966:
------------------------------------

    Description: 
When using the IdentityTableReducer, which expects input values of either a Put or Delete object, testing with MRUnit the Mapper with MRUnit is not possible because neither Put nor Delete implement equals().

We should implement equals() on both such that equality means:
* Both objects are of the same class (in this case, Put or Delete)
* Both objects are for the same key.
* Both objects contain an equal set of KeyValues (applicable only to Put)

KeyValue.equals() appears to already be implemented, but only checks for equality of row key, column family and column qualifier - two KeyValues can be considered "equal" if they contain different values. This won't work for testing.

Instead, the Put.equals() and Delete.equals() implementations should do a "deep" equality check on their KeyValues, like this:

{code:java}
myKv.equals(theirKv) && Bytes.equals(myKv.getValue(), theirKv.getValue());
{code}

NOTE: This would impact any code that relies on the existing "identity" implementation of Put.equals() and Delete.equals(), therefore cannot be guaranteed to be backwards-compatible.

  was:
When using the IdentityTableReducer, which expects input values of either a Put or Delete object, testing with MRUnit the Mapper with MRUnit is not possible because neither Put nor Delete implement equals().

We should implement equals() on both such that equality means:
* Both objects are of the same class (in this case, Put or Delete)
* Both objects are for the same key.
* Both objects contain an equal set of KeyValues (applicable only to Put)

KeyValue.equals() appears to already be implemented, but only checks for equality of row key, column family and column qualifier - two KeyValues can be considered "equal" if they contain different values. This won't work for testing.

Instead, the Put.equals() and Delete.equals() implementations should do a "deep" equality check on their KeyValues, like this:

    myKv.equals(theirKv) && Bytes.equals(myKv.getValue(), theirKv.getValue());

NOTE: This would impact any code that relies on the existing "identity" implementation of Put.equals() and Delete.equals(), therefore cannot be guaranteed to be backwards-compatible.

    
> Put/Delete values cannot be tested with MRUnit
> ----------------------------------------------
>
>                 Key: HBASE-4966
>                 URL: https://issues.apache.org/jira/browse/HBASE-4966
>             Project: HBase
>          Issue Type: Bug
>          Components: client, mapreduce
>    Affects Versions: 0.90.4
>            Reporter: Nicholas Telford
>            Priority: Minor
>
> When using the IdentityTableReducer, which expects input values of either a Put or Delete object, testing with MRUnit the Mapper with MRUnit is not possible because neither Put nor Delete implement equals().
> We should implement equals() on both such that equality means:
> * Both objects are of the same class (in this case, Put or Delete)
> * Both objects are for the same key.
> * Both objects contain an equal set of KeyValues (applicable only to Put)
> KeyValue.equals() appears to already be implemented, but only checks for equality of row key, column family and column qualifier - two KeyValues can be considered "equal" if they contain different values. This won't work for testing.
> Instead, the Put.equals() and Delete.equals() implementations should do a "deep" equality check on their KeyValues, like this:
> {code:java}
> myKv.equals(theirKv) && Bytes.equals(myKv.getValue(), theirKv.getValue());
> {code}
> NOTE: This would impact any code that relies on the existing "identity" implementation of Put.equals() and Delete.equals(), therefore cannot be guaranteed to be backwards-compatible.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira