You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ad...@apache.org on 2021/06/16 16:58:31 UTC

[cassandra] branch cassandra-3.0 updated: Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel

This is an automated email from the ASF dual-hosted git repository.

adelapena pushed a commit to branch cassandra-3.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-3.0 by this push:
     new e97b8fb  Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel
e97b8fb is described below

commit e97b8fba1180b0326c28d5223453be5cd7a5d483
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Wed Jun 16 17:40:08 2021 +0100

    Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel
    
    patch by Andrés de la Peña; reviewed by Berenguer Blasi and Stefania Alborghetti for CASSANDRA-12519
---
 CHANGES.txt                                                    | 1 +
 src/java/org/apache/cassandra/tools/SSTableLevelResetter.java  | 7 ++++++-
 src/java/org/apache/cassandra/tools/SSTableOfflineRelevel.java | 4 ++++
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index c3461e3..1029892 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.25:
+ * Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel (CASSANDRA-12519)
  * CQL shell should prefer newer TLS version by default (CASSANDRA-16695)
  * Ensure that existing empty rows are properly returned (CASSANDRA-16671)
  * Invalidate prepared statements on DROP COMPACT (CASSANDRA-16712)
diff --git a/src/java/org/apache/cassandra/tools/SSTableLevelResetter.java b/src/java/org/apache/cassandra/tools/SSTableLevelResetter.java
index 915edf1..e7d04f1 100644
--- a/src/java/org/apache/cassandra/tools/SSTableLevelResetter.java
+++ b/src/java/org/apache/cassandra/tools/SSTableLevelResetter.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.db.lifecycle.LifecycleTransaction;
 import org.apache.cassandra.db.ColumnFamilyStore;
 import org.apache.cassandra.db.Directories;
 import org.apache.cassandra.db.Keyspace;
@@ -75,10 +76,14 @@ public class SSTableLevelResetter
                 System.exit(1);
             }
 
+            // remove any leftovers in the transaction log
             Keyspace keyspace = Keyspace.openWithoutSSTables(keyspaceName);
             ColumnFamilyStore cfs = keyspace.getColumnFamilyStore(columnfamily);
+            LifecycleTransaction.removeUnfinishedLeftovers(cfs.metadata);
+
+            Directories.SSTableLister lister = cfs.getDirectories().sstableLister(Directories.OnTxnErr.THROW).skipTemporary(true);
             boolean foundSSTable = false;
-            for (Map.Entry<Descriptor, Set<Component>> sstable : cfs.getDirectories().sstableLister(Directories.OnTxnErr.THROW).list().entrySet())
+            for (Map.Entry<Descriptor, Set<Component>> sstable : lister.list().entrySet())
             {
                 if (sstable.getValue().contains(Component.STATS))
                 {
diff --git a/src/java/org/apache/cassandra/tools/SSTableOfflineRelevel.java b/src/java/org/apache/cassandra/tools/SSTableOfflineRelevel.java
index b27b07a..e5eb187 100644
--- a/src/java/org/apache/cassandra/tools/SSTableOfflineRelevel.java
+++ b/src/java/org/apache/cassandra/tools/SSTableOfflineRelevel.java
@@ -31,6 +31,7 @@ import java.util.Set;
 import com.google.common.base.Throwables;
 
 import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.db.lifecycle.LifecycleTransaction;
 import org.apache.cassandra.db.ColumnFamilyStore;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.Directories;
@@ -93,8 +94,11 @@ public class SSTableOfflineRelevel
                     keyspace,
                     columnfamily));
 
+        // remove any leftovers in the transaction log
         Keyspace ks = Keyspace.openWithoutSSTables(keyspace);
         ColumnFamilyStore cfs = ks.getColumnFamilyStore(columnfamily);
+        LifecycleTransaction.removeUnfinishedLeftovers(cfs.metadata);
+
         Directories.SSTableLister lister = cfs.getDirectories().sstableLister(Directories.OnTxnErr.THROW).skipTemporary(true);
         Set<SSTableReader> sstables = new HashSet<>();
         for (Map.Entry<Descriptor, Set<Component>> sstable : lister.list().entrySet())

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org