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)

Reply via email to