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

Branimir Lambov commented on CASSANDRA-17298:
---------------------------------------------

Thank you for the very detailed investigation.

This has been a source of annoyance, with many attempts to fix since the test 
was first introduced, but it's necessary because before the test we had reached 
about 2x difference between the memtable's understanding of its on-heap size 
and what it actually used. One consideration we've previously had around this 
is that adjusting the memory usage reporting may cause memtables to flush 
earlier and change the behavior of existing clusters too much for a patch 
release. In this case it looks like the difference is on the order of 10%, 
which I personally would not see as a problem.

I wonder if it we shouldn't backport most of that 5.0 patch so that we start 
testing all allocation strategies in 4.x as well. Also, am I understanding 
correctly that there is also something (EMPTY_LEAF?) that we are not tracking 
correctly in 5.0?

On the open question, there may be a reason to use both  {{BTree.sizeOnHeapOf}} 
and {{BTree.sizeOfStructureOnHeap}} (e.g. some BTree-building methods always 
share the size map, others never, and if the caller knows which one it is it 
could choose between the two). From a quick glance it looks like we use the 
latter version for {{Columns}}, and these are built from sorted using shared 
size maps, thus this appears to be the right thing to do. However, the names of 
the two methods should reflect this difference and they it should also be 
explained in javaDoc.

> Test Failure: org.apache.cassandra.cql3.MemtableSizeTest
> --------------------------------------------------------
>
>                 Key: CASSANDRA-17298
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-17298
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Test/unit
>            Reporter: Josh McKenzie
>            Assignee: Dmitry Konstantinov
>            Priority: Normal
>             Fix For: 4.0.x, 4.1.x
>
>         Attachments: analyzed_objects.svg, structure_example.svg
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> [https://ci-cassandra.apache.org/job/Cassandra-4.0/313/testReport/org.apache.cassandra.cql3/MemtableSizeTest/testTruncationReleasesLogSpace_2/]
>  Failed 4 times in the last 30 runs. Flakiness: 27%, Stability: 86%
> Error Message
> Expected heap usage close to 49.930MiB, got 41.542MiB.
> {code}
> Stacktrace
> junit.framework.AssertionFailedError: Expected heap usage close to 49.930MiB, 
> got 41.542MiB.
>       at 
> org.apache.cassandra.cql3.MemtableSizeTest.testSize(MemtableSizeTest.java:130)
>       at org.apache.cassandra.Util.runCatchingAssertionError(Util.java:644)
>       at org.apache.cassandra.Util.flakyTest(Util.java:669)
>       at 
> org.apache.cassandra.cql3.MemtableSizeTest.testTruncationReleasesLogSpace(MemtableSizeTest.java:61)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  {code}
> *UPDATE:* It was discovered that unit tests were running with 
> memtable_allocation_type: offheap_objects when we ship C* with heap_buffers.
> So we changed that in CASSANDRA-19326, now we test with 
> memtable_allocation_type: heap_buffers. As a result, this test now fails all 
> the time on 4.0 and 4.1. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to