You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by st...@apache.org on 2016/08/30 01:03:55 UTC
cassandra git commit: avoid deleting non existing sstable files and
improve related log messages
Repository: cassandra
Updated Branches:
refs/heads/trunk 5db696339 -> 9ccccf28d
avoid deleting non existing sstable files and improve related log messages
patch by Stefania Alborghetti; reviewed by Benjamin Lerer for CASSANDRA-12261
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9ccccf28
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9ccccf28
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9ccccf28
Branch: refs/heads/trunk
Commit: 9ccccf28dc38ec932f9debcecbcb46f41a7f1ffe
Parents: 5db6963
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Thu Jul 28 11:12:48 2016 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Tue Aug 30 09:02:57 2016 +0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/lifecycle/LogFile.java | 6 ++++++
.../cassandra/db/lifecycle/LogTransaction.java | 18 ++++++++++++++++--
3 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ccccf28/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5d665b4..67f7786 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.10
+ * avoid deleting non existing sstable files and improve related log messages (CASSANDRA-12261)
* json/yaml output format for nodetool compactionhistory (CASSANDRA-12486)
* Retry all internode messages once after a connection is
closed and reopened (CASSANDRA-12192)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ccccf28/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
index a4f9869..f23613f 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
@@ -113,6 +113,12 @@ final class LogFile implements AutoCloseable
{
try
{
+ // we sync the parent directories before content deletion to ensure
+ // any previously deleted files (see SSTableTider) are not
+ // incorrectly picked up by record.getExistingFiles() in
+ // deleteRecordFiles(), see CASSANDRA-12261
+ Throwables.maybeFail(syncDirectory(accumulate));
+
deleteFilesForRecordsOfType(committed() ? Type.REMOVE : Type.ADD);
// we sync the parent directories between contents and log deletion
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ccccf28/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
index f99f432..27c7955 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
@@ -17,8 +17,10 @@
*/
package org.apache.cassandra.db.lifecycle;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.util.*;
@@ -202,7 +204,15 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
}
catch (NoSuchFileException e)
{
- logger.error("Unable to delete {} as it does not exist", file);
+ logger.error("Unable to delete {} as it does not exist, see debug log file for stack trace", file);
+ if (logger.isDebugEnabled())
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream ps = new PrintStream(baos);
+ e.printStackTrace(ps);
+ ps.close();
+ logger.debug("Unable to delete {} as it does not exist, stack trace:\n {}", file, baos.toString());
+ }
}
catch (IOException e)
{
@@ -313,7 +323,11 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
// If we can't successfully delete the DATA component, set the task to be retried later: see TransactionTidier
File datafile = new File(desc.filenameFor(Component.DATA));
- delete(datafile);
+ if (datafile.exists())
+ delete(datafile);
+ else if (!wasNew)
+ logger.error("SSTableTidier ran with no existing data file for an sstable that was not new");
+
// let the remainder be cleaned up by delete
SSTable.delete(desc, SSTable.discoverComponentsFor(desc));
}