Hao Zhong created CASSANDRA-13692:
-------------------------------------
Summary: CompactionAwareWriter_getWriteDirectory throws
incompatible exceptions
Key: CASSANDRA-13692
URL: https://issues.apache.org/jira/browse/CASSANDRA-13692
Project: Cassandra
Issue Type: Bug
Components: Compaction
Reporter: Hao Zhong
The CompactionAwareWriter_getWriteDirectory throws RuntimeException:
{code}
public Directories.DataDirectory getWriteDirectory(Iterable<SSTableReader>
sstables, long estimatedWriteSize)
{
File directory = null;
for (SSTableReader sstable : sstables)
{
if (directory == null)
directory = sstable.descriptor.directory;
if (!directory.equals(sstable.descriptor.directory))
{
logger.trace("All sstables not from the same disk - putting
results in {}", directory);
break;
}
}
Directories.DataDirectory d =
getDirectories().getDataDirectoryForFile(directory);
if (d != null)
{
long availableSpace = d.getAvailableSpace();
if (availableSpace < estimatedWriteSize)
throw new RuntimeException(String.format("Not enough space to
write %s to %s (%s available)",
FBUtilities.prettyPrintMemory(estimatedWriteSize),
d.location,
FBUtilities.prettyPrintMemory(availableSpace)));
logger.trace("putting compaction results in {}", directory);
return d;
}
d = getDirectories().getWriteableLocation(estimatedWriteSize);
if (d == null)
throw new RuntimeException(String.format("Not enough disk space to
store %s",
FBUtilities.prettyPrintMemory(estimatedWriteSize)));
return d;
}
{code}
However, the thrown exception does not trigger the failure policy.
CASSANDRA-11448 fixed a similar problem. The buggy code is:
{code}
protected Directories.DataDirectory getWriteDirectory(long writeSize)
{
Directories.DataDirectory directory =
getDirectories().getWriteableLocation(writeSize);
if (directory == null)
throw new RuntimeException("Insufficient disk space to write " +
writeSize + " bytes");
return directory;
}
{code}
The fixed code is:
{code}
protected Directories.DataDirectory getWriteDirectory(long writeSize)
{
Directories.DataDirectory directory =
getDirectories().getWriteableLocation(writeSize);
if (directory == null)
throw new FSWriteError(new IOException("Insufficient disk space to
write " + writeSize + " bytes"), "");
return directory;
}
{code}
The fixed code throws FSWE and triggers the failure policy.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]