From ab11d76036204fed3baa3f68109fb5e608020274 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Sun, 10 Apr 2011 13:53:22 +0000 Subject: [PATCH 1/5] update CHANGES git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1090802 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 0a11e6c56b..6a5971d7a4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -24,6 +24,7 @@ * fix race condition that could leave orphaned data files when dropping CF or KS (CASSANDRA-2381) * halve default memtable thresholds (CASSANDRA-2413) + * convert mmap assertion to if/throw so scrub can catch it (CASSANDRA-2417) * Try harder to close files after compaction (CASSANDRA-2431) From ef47618115159608aa276077a1004da404e8efce Mon Sep 17 00:00:00 2001 From: Sylvain Lebresne Date: Sun, 10 Apr 2011 18:49:54 +0000 Subject: [PATCH 2/5] Purge tombstone from row cache (0.7 version) patch by slebresne; reviewed by jbellis for CASSANDRA-2305 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1090867 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/cassandra/io/CompactionIterator.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/java/org/apache/cassandra/io/CompactionIterator.java b/src/java/org/apache/cassandra/io/CompactionIterator.java index 6bfadb34bd..f9cab864c9 100644 --- a/src/java/org/apache/cassandra/io/CompactionIterator.java +++ b/src/java/org/apache/cassandra/io/CompactionIterator.java @@ -32,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.db.ColumnFamily; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.io.sstable.SSTableIdentityIterator; import org.apache.cassandra.io.sstable.SSTableReader; @@ -112,10 +113,15 @@ implements Closeable, ICompactionInfo cfs.invalidateCachedRow(compactedRow.key); return null; } - else - { - return compactedRow; - } + + // If the raw is cached, we call removeDeleted on it to have/ coherent query returns. However it would look + // like some deleted columns lived longer than gc_grace + compaction. This can also free up big amount of + // memory on long running instances + ColumnFamily cachedRow = cfs.getRawCachedRow(compactedRow.key); + if (cachedRow != null) + ColumnFamilyStore.removeDeleted(cachedRow, gcBefore); + + return compactedRow; } finally { From 1e5f900646ab3e30de807e2f512cc6eec3ad4ae0 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Mon, 11 Apr 2011 03:10:12 +0000 Subject: [PATCH 3/5] re-set bootstrapped flag after move finishes patch by jbellis; reviewed by Peter Schuller and Nick Bailey for CASSANDRA-2435 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1090926 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/service/StorageService.java | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6a5971d7a4..42da0e5756 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -26,6 +26,7 @@ * halve default memtable thresholds (CASSANDRA-2413) * convert mmap assertion to if/throw so scrub can catch it (CASSANDRA-2417) * Try harder to close files after compaction (CASSANDRA-2431) + * re-set bootstrapped flag after move finishes (CASSANDRA-2435) 0.7.4 diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index f0acb0f3f4..dde38a44e0 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -203,6 +203,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe public void finishBootstrapping() { isBootstrapMode = false; + SystemTable.setBootstrapped(true); setToken(getLocalToken()); logger_.info("Bootstrap/move completed! Now serving reads."); } @@ -477,10 +478,9 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe { logger_.info("Using saved token " + token); } - } - - SystemTable.setBootstrapped(true); // first startup is only chance to bootstrap - setToken(token); + SystemTable.setBootstrapped(true); // first startup is only chance to bootstrap + setToken(token); + } assert tokenMetadata_.sortedTokens().size() > 0; } From 643ef396d7c95b0930cf4528a78182f8550736fd Mon Sep 17 00:00:00 2001 From: Sylvain Lebresne Date: Tue, 12 Apr 2011 17:13:13 +0000 Subject: [PATCH 4/5] Make clean compactions cleanup the row cache patch by slebresne; reviewed by jbellis for CASSANDRA-2451 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1091503 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/cassandra/db/CompactionManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java/org/apache/cassandra/db/CompactionManager.java b/src/java/org/apache/cassandra/db/CompactionManager.java index 5c911889c5..444d4d6b51 100644 --- a/src/java/org/apache/cassandra/db/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/CompactionManager.java @@ -721,6 +721,7 @@ public class CompactionManager implements CompactionManagerMBean } else { + cfs.invalidateCachedRow(row.getKey()); while (row.hasNext()) { IColumn column = row.next(); From c9499e85813970a65796356189e9356083018dbc Mon Sep 17 00:00:00 2001 From: Sylvain Lebresne Date: Tue, 12 Apr 2011 18:59:43 +0000 Subject: [PATCH 5/5] Better detect failure during streaming (always cleaning up tmp files as a consequence) patch by amorton and slebresne; reviewed by jbellis for (the first part of) CASSANDRA-2088 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1091542 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/cassandra/streaming/IncomingStreamReader.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java/org/apache/cassandra/streaming/IncomingStreamReader.java b/src/java/org/apache/cassandra/streaming/IncomingStreamReader.java index d26382bd23..ee793bb770 100644 --- a/src/java/org/apache/cassandra/streaming/IncomingStreamReader.java +++ b/src/java/org/apache/cassandra/streaming/IncomingStreamReader.java @@ -84,6 +84,11 @@ public class IncomingStreamReader { long toRead = Math.min(FileStreamTask.CHUNK_SIZE, length - bytesRead); long lastRead = fc.transferFrom(socketChannel, offset + bytesRead, toRead); + // if the other side fails, we will not get an exception, but instead transferFrom will constantly return 0 byte read + // and we would thus enter an infinite loop. So intead, if no bytes are tranferred we assume the other side is dead and + // raise an exception (that will be catch belove and 'the right thing' will be done). + if (lastRead == 0) + throw new IOException("Transfer failed for remote file " + remoteFile); bytesRead += lastRead; remoteFile.progress += lastRead; }