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

Dominic Letz updated CASSANDRA-8559:
------------------------------------
    Description: 
When running with high amount of tombstones the error message generation from 
CASSANDRA-6117 can lead to out of memory situation with the default setting.

Attached a heapdump viewed in visualvm showing how this construct created two 
777mb strings to print the error message for a read query and then crashed OOM.

{code}
        if (respectTombstoneThresholds() && columnCounter.ignored() > 
DatabaseDescriptor.getTombstoneWarnThreshold())
        {
            StringBuilder sb = new StringBuilder();
            CellNameType type = container.metadata().comparator;
            for (ColumnSlice sl : slices)
            {
                assert sl != null;

                sb.append('[');
                sb.append(type.getString(sl.start));
                sb.append('-');
                sb.append(type.getString(sl.finish));
                sb.append(']');
            }

            logger.warn("Read {} live and {} tombstoned cells in {}.{} (see 
tombstone_warn_threshold). {} columns was requested, slices={}, delInfo={}",
                        columnCounter.live(), columnCounter.ignored(), 
container.metadata().ksName, container.metadata().cfName, count, sb, 
container.deletionInfo());
        }
{code}



  was:
When running with high amount of tombstones the error message generation from 
CASSANDRA-6117 can lead to out of memory situation with the default setting.

Attached a heapdump viewed in visualvm showing how this construct is create a 
777mb string to print the error message for a single read query.

{code}
        if (respectTombstoneThresholds() && columnCounter.ignored() > 
DatabaseDescriptor.getTombstoneWarnThreshold())
        {
            StringBuilder sb = new StringBuilder();
            CellNameType type = container.metadata().comparator;
            for (ColumnSlice sl : slices)
            {
                assert sl != null;

                sb.append('[');
                sb.append(type.getString(sl.start));
                sb.append('-');
                sb.append(type.getString(sl.finish));
                sb.append(']');
            }

            logger.warn("Read {} live and {} tombstoned cells in {}.{} (see 
tombstone_warn_threshold). {} columns was requested, slices={}, delInfo={}",
                        columnCounter.live(), columnCounter.ignored(), 
container.metadata().ksName, container.metadata().cfName, count, sb, 
container.deletionInfo());
        }
{code}




> OOM caused by large tombstone warning.
> --------------------------------------
>
>                 Key: CASSANDRA-8559
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8559
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: 2.0.11 / 2.1
>            Reporter: Dominic Letz
>         Attachments: Selection_048.png
>
>
> When running with high amount of tombstones the error message generation from 
> CASSANDRA-6117 can lead to out of memory situation with the default setting.
> Attached a heapdump viewed in visualvm showing how this construct created two 
> 777mb strings to print the error message for a read query and then crashed 
> OOM.
> {code}
>         if (respectTombstoneThresholds() && columnCounter.ignored() > 
> DatabaseDescriptor.getTombstoneWarnThreshold())
>         {
>             StringBuilder sb = new StringBuilder();
>             CellNameType type = container.metadata().comparator;
>             for (ColumnSlice sl : slices)
>             {
>                 assert sl != null;
>                 sb.append('[');
>                 sb.append(type.getString(sl.start));
>                 sb.append('-');
>                 sb.append(type.getString(sl.finish));
>                 sb.append(']');
>             }
>             logger.warn("Read {} live and {} tombstoned cells in {}.{} (see 
> tombstone_warn_threshold). {} columns was requested, slices={}, delInfo={}",
>                         columnCounter.live(), columnCounter.ignored(), 
> container.metadata().ksName, container.metadata().cfName, count, sb, 
> container.deletionInfo());
>         }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to