Author: gdusbabek
Date: Mon Oct 11 19:10:31 2010
New Revision: 1021467
URL: http://svn.apache.org/viewvc?rev=1021467&view=rev
Log:
abandon temp sstables on compaction error. patch by gdusbabek, reviewed by
jbellis. CASSANDRA-1596
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
Modified: cassandra/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1021467&r1=1021466&r2=1021467&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Mon Oct 11 19:10:31 2010
@@ -26,6 +26,7 @@ dev
* reduce index sample time by 75% (CASSANDRA-1572)
* add cli support for column metadata (CASSANDRA-1578)
* add cli support for schema modification (CASSANDRA-1584)
+ * delete temp files on failed compactions (CASSANDRA-1596)
0.7-beta2
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1021467&r1=1021466&r2=1021467&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Mon
Oct 11 19:10:31 2010
@@ -283,9 +283,16 @@ public class CompactionManager implement
while (nni.hasNext())
{
AbstractCompactedRow row = nni.next();
- long prevpos = writer.getFilePointer();
-
- writer.append(row);
+ try
+ {
+ writer.append(row);
+ }
+ catch (IOException ex)
+ {
+ writer.abort();
+ // rethrow the exception so that caller knows compaction
failed.
+ throw ex;
+ }
totalkeysWritten++;
}
}
Modified:
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java?rev=1021467&r1=1021466&r2=1021467&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
Mon Oct 11 19:10:31 2010
@@ -22,6 +22,7 @@ package org.apache.cassandra.io.sstable;
import java.io.*;
import java.util.Set;
+import org.apache.cassandra.io.util.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,6 +66,30 @@ public class SSTableWriter extends SSTab
components.add(Component.PRIMARY_INDEX);
components.add(Component.STATS);
}
+
+ /** something bad happened and the files associated with this writer need
to be deleted. */
+ public void abort()
+ {
+ try
+ {
+ dataFile.close();
+ FileUtils.deleteWithConfirm(dataFile.getPath());
+ }
+ catch (IOException ex)
+ {
+ logger.error(String.format("Caught exception while deleting
aborted sstable (%s). %s", dataFile.getPath(), ex.getMessage()));
+ }
+
+ try
+ {
+ iwriter.close();
+
FileUtils.deleteWithConfirm(descriptor.filenameFor(SSTable.COMPONENT_INDEX));
+ }
+ catch (IOException ex)
+ {
+ logger.error(String.format("Caught exception while deleting
aborted sstable (%s). %s", descriptor.filenameFor(SSTable.COMPONENT_INDEX),
ex.getMessage()));
+ }
+ }
private long beforeAppend(DecoratedKey decoratedKey) throws IOException
{