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)