Jon Haddad created CASSANDRA-12979:
--------------------------------------
Summary: checkAvailableDiskSpace doesn't update expectedWriteSize
when reducing thread scope
Key: CASSANDRA-12979
URL: https://issues.apache.org/jira/browse/CASSANDRA-12979
Project: Cassandra
Issue Type: Bug
Reporter: Jon Haddad
Assignee: Jon Haddad
If a compaction occurs that looks like it'll take up more space than remaining
disk available, the compaction manager attempts to reduce the scope of the
compaction by calling {{reduceScopeForLimitedSpace()}} repeatedly.
Unfortunately, the while loop passes the {{estimatedWriteSize}} calculated from
the original call to {{hasAvailableDiskSpace}}, so the comparisons that are
done will always be against the size of the original compaction, rather than
the reduced scope one.
Full method below:
{code}
protected void checkAvailableDiskSpace(long estimatedSSTables, long
expectedWriteSize)
{
if(!cfs.isCompactionDiskSpaceCheckEnabled() && compactionType ==
OperationType.COMPACTION)
{
logger.info("Compaction space check is disabled");
return;
}
while (!getDirectories().hasAvailableDiskSpace(estimatedSSTables,
expectedWriteSize))
{
if (!reduceScopeForLimitedSpace())
throw new RuntimeException(String.format("Not enough space for
compaction, estimated sstables = %d, expected write size = %d",
estimatedSSTables, expectedWriteSize));
}
}
{code}
I'm proposing to recalculate the {{estimatedSSTables}} and
{{expectedWriteSize}} after each iteration of {{reduceScopeForLimitedSpace}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)