You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2015/08/25 15:24:28 UTC

[1/2] cassandra git commit: Follow up to avoid mutating row while read repair is happening

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.2 d1d10fae0 -> a69558b00


Follow up to avoid mutating row while read repair is happening

Patch by tjake; reviewed by Stefania for CASSANDRA-9460


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/147fe6d6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/147fe6d6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/147fe6d6

Branch: refs/heads/cassandra-2.2
Commit: 147fe6d69d2efac8db47da9058e9a19f8ddc99fd
Parents: 978660d
Author: T Jake Luciani <ja...@apache.org>
Authored: Mon Aug 24 15:49:18 2015 -0400
Committer: T Jake Luciani <ja...@apache.org>
Committed: Tue Aug 25 09:19:52 2015 -0400

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/ReadCommand.java    |  4 ++--
 .../cassandra/db/SliceFromReadCommand.java      |  6 +++---
 .../cassandra/db/filter/SliceQueryFilter.java   | 20 ++++++++++++--------
 .../apache/cassandra/service/StorageProxy.java  |  4 ++--
 5 files changed, 20 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/147fe6d6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d6a0af9..dcae493 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.9
+ * Avoid race condition during read repair (CASSANDRA-9460)
  * (cqlsh) default load-from-file encoding to utf-8 (CASSANDRA-9898)
  * Avoid returning Permission.NONE when failing to query users table (CASSANDRA-10168)
  * (cqlsh) Allow encoding to be set through command line (CASSANDRA-10004)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/147fe6d6/src/java/org/apache/cassandra/db/ReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ReadCommand.java b/src/java/org/apache/cassandra/db/ReadCommand.java
index dedff6f..cd86336 100644
--- a/src/java/org/apache/cassandra/db/ReadCommand.java
+++ b/src/java/org/apache/cassandra/db/ReadCommand.java
@@ -118,9 +118,9 @@ public abstract class ReadCommand implements IReadCommand, Pageable
     }
 
     // maybeTrim removes columns from a response that is too long
-    public void maybeTrim(Row row)
+    public Row maybeTrim(Row row)
     {
-        // noop
+        return row;
     }
 
     public long getTimeout()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/147fe6d6/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
index 6995193..461a3a1 100644
--- a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
@@ -113,12 +113,12 @@ public class SliceFromReadCommand extends ReadCommand
     }
 
     @Override
-    public void maybeTrim(Row row)
+    public Row maybeTrim(Row row)
     {
         if ((row == null) || (row.cf == null))
-            return;
+            return row;
 
-        filter.trim(row.cf, getOriginalRequestedCount(), timestamp);
+        return new Row(row.key, filter.trim(row.cf, getOriginalRequestedCount(), timestamp));
     }
 
     public IDiskAtomFilter filter()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/147fe6d6/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java b/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
index 65925b1..973477f 100644
--- a/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
@@ -342,14 +342,17 @@ public class SliceQueryFilter implements IDiskAtomFilter
             return new ColumnCounter.GroupByPrefix(now, comparator, compositesToGroup);
     }
 
-    public void trim(ColumnFamily cf, int trimTo, long now)
+    public ColumnFamily trim(ColumnFamily cf, int trimTo, long now)
     {
         // each cell can increment the count by at most one, so if we have fewer cells than trimTo, we can skip trimming
         if (cf.getColumnCount() < trimTo)
-            return;
+            return cf;
 
         ColumnCounter counter = columnCounter(cf.getComparator(), now);
 
+        ColumnFamily trimmedCf = cf.getFactory().create(cf.metadata(), reversed, trimTo);
+        trimmedCf.delete(cf);
+
         Collection<Cell> cells = reversed
                                    ? cf.getReverseSortedColumns()
                                    : cf.getSortedColumns();
@@ -363,14 +366,15 @@ public class SliceQueryFilter implements IDiskAtomFilter
 
             if (counter.live() > trimTo)
             {
-                iter.remove();
-                while (iter.hasNext())
-                {
-                    iter.next();
-                    iter.remove();
-                }
+                break;
+            }
+            else
+            {
+                trimmedCf.addColumn(cell);
             }
         }
+
+        return trimmedCf;
     }
 
     public Composite start()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/147fe6d6/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 1536427..161bec8 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -1347,7 +1347,7 @@ public class StorageProxy implements StorageProxyMBean
                     Row row = exec.get();
                     if (row != null)
                     {
-                        exec.command.maybeTrim(row);
+                        row = exec.command.maybeTrim(row);
                         rows.add(row);
                     }
 
@@ -1466,7 +1466,7 @@ public class StorageProxy implements StorageProxyMBean
 
                     if (row != null)
                     {
-                        command.maybeTrim(row);
+                        row = command.maybeTrim(row);
                         rows.add(row);
                     }
                 }


[2/2] cassandra git commit: Merge branch 'cassandra-2.1' into cassandra-2.2

Posted by ja...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2

Conflicts:
	CHANGES.txt


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a69558b0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a69558b0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a69558b0

Branch: refs/heads/cassandra-2.2
Commit: a69558b00067e00d1c4de5806c80fc8314e3538c
Parents: d1d10fa 147fe6d
Author: T Jake Luciani <ja...@apache.org>
Authored: Tue Aug 25 09:24:17 2015 -0400
Committer: T Jake Luciani <ja...@apache.org>
Committed: Tue Aug 25 09:24:17 2015 -0400

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/ReadCommand.java    |  4 ++--
 .../cassandra/db/SliceFromReadCommand.java      |  6 +++---
 .../cassandra/db/filter/SliceQueryFilter.java   | 20 ++++++++++++--------
 .../apache/cassandra/service/StorageProxy.java  |  4 ++--
 5 files changed, 20 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a69558b0/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 34615db,dcae493..3065d0b
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,17 -1,5 +1,18 @@@
 -2.1.9
 +2.2.1
 + * add CLEAR cqlsh command (CASSANDRA-10086)
 + * Support string literals as Role names for compatibility (CASSANDRA-10135)
 + * Allow count(*) and count(1) to be use as normal aggregation (CASSANDRA-10114)
 + * An NPE is thrown if the column name is unknown for an IN relation (CASSANDRA-10043)
 + * Apply commit_failure_policy to more errors on startup (CASSANDRA-9749)
 + * Fix histogram overflow exception (CASSANDRA-9973)
 + * Route gossip messages over dedicated socket (CASSANDRA-9237)
 + * Add checksum to saved cache files (CASSANDRA-9265)
 + * Log warning when using an aggregate without partition key (CASSANDRA-9737)
 + * Avoid grouping sstables for anticompaction with DTCS (CASSANDRA-9900)
 + * UDF / UDA execution time in trace (CASSANDRA-9723)
 + * Fix broken internode SSL (CASSANDRA-9884)
 +Merged from 2.1:
+  * Avoid race condition during read repair (CASSANDRA-9460)
   * (cqlsh) default load-from-file encoding to utf-8 (CASSANDRA-9898)
   * Avoid returning Permission.NONE when failing to query users table (CASSANDRA-10168)
   * (cqlsh) Allow encoding to be set through command line (CASSANDRA-10004)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a69558b0/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a69558b0/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------