hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeffrey Zhong (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-8393) Testcase TestHeapSize#testMutations is wrong
Date Tue, 23 Apr 2013 17:35:17 GMT

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

Jeffrey Zhong commented on HBASE-8393:
--------------------------------------

[~ted_yu] The problem for Increment class is that it has a new reference field. Because Mutation.MUTATION_OVERHEAD
rounds up partial reference fields while ClassSize.estimateBase round up the sum of length
of reference fields + primitive fields + Array. Therefore, there will be round up differences
when the test case runs on a 32bit and 64 bit system. 

I can add special logic inside the test case for different OS while it's prone to fail in
the future when a new field is introduced again.

                
> Testcase TestHeapSize#testMutations is wrong
> --------------------------------------------
>
>                 Key: HBASE-8393
>                 URL: https://issues.apache.org/jira/browse/HBASE-8393
>             Project: HBase
>          Issue Type: Bug
>          Components: test
>            Reporter: Jeffrey Zhong
>            Assignee: Jeffrey Zhong
>         Attachments: hbase-8393.patch
>
>
> I happened to check this test case and there are several existing errors to make it pass.
You can reproduce the test case failure by adding a new field into Mutation, the test case
will either fail on a 64 bit system or 32 bit one.
> Below are errors I found in the test case:
> 1) The test case is using {code}row=new byte[]{0}{code} which is an array with length=1
while ClassSize.estimateBase can only calculate base class size(without counting field array
length)
> 2) Add ClassSize.REFERENCE twice in the following code because ClassSize.estimateBase
adds all reference fields already. {code}expected += ClassSize.align(ClassSize.TREEMAP + ClassSize.REFERENCE);{code}
> 3) ClassSize.estimateBase round up the sum of length of reference fields + primitive
fields + Array while Mutation.MUTATION_OVERHEAD aligns the sum of length of a different set
of fields. Therefore, there will be round up differences for class Increment because it introduces
a new reference field TimeRange tr when the test case runs on a 32bit and 64 bit system. 
 
> {code}
> ...
>     long prealign_size = coeff[0] + align(coeff[1] * ARRAY) + coeff[2] * REFERENCE;
>     // Round up to a multiple of 8
>     long size = align(prealign_size);
> ...
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message