You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2014/04/22 14:34:37 UTC

[01/19] git commit: CHANGES

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 48d7e4080 -> 364282a7d
  refs/heads/cassandra-2.1 3e6b29925 -> a2e74354c
  refs/heads/trunk 68aa62bde -> 498eb2ab7


CHANGES


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

Branch: refs/heads/cassandra-2.0
Commit: 75b87ce86bb729c38832acfb0edb6ab84a0deefd
Parents: 655ae7a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 15:33:47 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/75b87ce8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 38a6c3c..b642908 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 2.0.7
- * Allow compaction of system tables during startup (CASSANDRA-6913)
+ * Avoid early loading of non-system keyspaces before compaction-leftovers 
+   cleanup at startup (CASSANDRA-6913)
  * Restrict Windows to parallel repairs (CASSANDRA-6907)
  * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
  * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[06/19] git commit: cleanup

Posted by jb...@apache.org.
cleanup


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

Branch: refs/heads/trunk
Commit: 655ae7a8f9c4582eb6c303e005df6edbe76bd732
Parents: 2dd0907
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 12:34:12 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/DeletionTime.java | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/655ae7a8/src/java/org/apache/cassandra/db/DeletionTime.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DeletionTime.java b/src/java/org/apache/cassandra/db/DeletionTime.java
index b80422c..a1b9f17 100644
--- a/src/java/org/apache/cassandra/db/DeletionTime.java
+++ b/src/java/org/apache/cassandra/db/DeletionTime.java
@@ -122,10 +122,9 @@ public class DeletionTime implements Comparable<DeletionTime>
         {
             int ldt = in.readInt();
             long mfda = in.readLong();
-            if (mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE)
-                return LIVE;
-            else
-                return new DeletionTime(mfda, ldt);
+            return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
+                 ? LIVE
+                 : new DeletionTime(mfda, ldt);
         }
 
         public long serializedSize(DeletionTime delTime, TypeSizes typeSizes)


[18/19] git commit: Add range tombstones to read repair digests patch by Oleg Anastasyev; reviewed by jbellis for CASSANDRA-6863

Posted by jb...@apache.org.
Add range tombstones to read repair digests
patch by Oleg Anastasyev; reviewed by jbellis for CASSANDRA-6863


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

Branch: refs/heads/trunk
Commit: a2e74354ca51809a11b62dd7995c026807683b0a
Parents: be2686d
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:27:20 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:27:20 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/ColumnFamily.java   |  5 ++
 .../org/apache/cassandra/db/DeletionInfo.java   | 34 +++++++++-
 .../apache/cassandra/db/RangeTombstoneList.java | 68 ++++++++++++++++++--
 .../apache/cassandra/net/MessagingService.java  | 32 ++++++++-
 test/unit/org/apache/cassandra/Util.java        |  7 ++
 .../apache/cassandra/db/ColumnFamilyTest.java   | 46 ++++++++++++-
 test/unit/org/apache/cassandra/db/RowTest.java  | 40 ++++++++++--
 8 files changed, 222 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ae7410e..495dab2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.0-beta2
+ * Add range tombstones to read repair digests (CASSANDRA-6863)
  * Fix BTree.clear for large updates (CASSANDRA-6943)
  * Fail write instead of logging a warning when unable to append to CL
    (CASSANDRA-6764)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/ColumnFamily.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamily.java b/src/java/org/apache/cassandra/db/ColumnFamily.java
index da404b0..4f85610 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamily.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamily.java
@@ -313,8 +313,11 @@ public abstract class ColumnFamily implements Iterable<Cell>, IRowCacheEntry
             }
         }
 
+        cfDiff.setDeletionInfo(deletionInfo().diff(cfComposite.deletionInfo()));
+
         if (!cfDiff.isEmpty())
             return cfDiff;
+        
         return null;
     }
 
@@ -385,6 +388,8 @@ public abstract class ColumnFamily implements Iterable<Cell>, IRowCacheEntry
     {
         for (Cell cell : this)
             cell.updateDigest(digest);
+        if (MessagingService.instance().areAllNodesAtLeast21())
+            deletionInfo().updateDigest(digest);
     }
 
     public static ColumnFamily diff(ColumnFamily cf1, ColumnFamily cf2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/DeletionInfo.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DeletionInfo.java b/src/java/org/apache/cassandra/db/DeletionInfo.java
index 8601bce..a167b85 100644
--- a/src/java/org/apache/cassandra/db/DeletionInfo.java
+++ b/src/java/org/apache/cassandra/db/DeletionInfo.java
@@ -19,7 +19,9 @@ package org.apache.cassandra.db;
 
 import java.io.DataInput;
 import java.io.IOException;
-import java.util.*;
+import java.security.MessageDigest;
+import java.util.Comparator;
+import java.util.Iterator;
 
 import com.google.common.base.Objects;
 import com.google.common.collect.Iterators;
@@ -29,6 +31,7 @@ import org.apache.cassandra.db.composites.CType;
 import org.apache.cassandra.db.composites.Composite;
 import org.apache.cassandra.io.IVersionedSerializer;
 import org.apache.cassandra.io.util.DataOutputPlus;
+import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.ObjectSizes;
 
 /**
@@ -168,6 +171,35 @@ public class DeletionInfo implements IMeasurableMemory
     }
 
     /**
+     * Evaluates difference between this deletion info and superset for read repair
+     *
+     * @return the difference between the two, or LIVE if no difference
+     */
+    public DeletionInfo diff(DeletionInfo superset)
+    {
+        RangeTombstoneList rangeDiff = superset.ranges == null || superset.ranges.isEmpty()
+                                     ? null
+                                     : ranges == null ? superset.ranges : ranges.diff(superset.ranges);
+
+        return topLevel.markedForDeleteAt != superset.topLevel.markedForDeleteAt || rangeDiff != null
+             ? new DeletionInfo(superset.topLevel, rangeDiff)
+             : DeletionInfo.live();
+    }
+
+
+    /**
+     * Digests deletion info. Used to trigger read repair on mismatch.
+     */
+    public void updateDigest(MessageDigest digest)
+    {
+        if (topLevel.markedForDeleteAt != Long.MIN_VALUE)
+            digest.update(ByteBufferUtil.bytes(topLevel.markedForDeleteAt));
+
+        if (ranges != null)
+            ranges.updateDigest(digest);
+    }
+
+    /**
      * Returns true if {@code purge} would remove the top-level tombstone or any of the range
      * tombstones, false otherwise.
      * @param gcBefore timestamp (in seconds) before which tombstones should be purged

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/RangeTombstoneList.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/RangeTombstoneList.java b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
index dd0b9a6..b06c520 100644
--- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java
+++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
@@ -19,12 +19,16 @@ package org.apache.cassandra.db;
 
 import java.io.DataInput;
 import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
 
 import com.google.common.collect.AbstractIterator;
 import com.google.common.collect.Iterators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.cache.IMeasurableMemory;
 import org.apache.cassandra.db.composites.CType;
@@ -32,10 +36,7 @@ import org.apache.cassandra.db.composites.Composite;
 import org.apache.cassandra.io.IVersionedSerializer;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.net.MessagingService;
-
 import org.apache.cassandra.utils.ObjectSizes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Data structure holding the range tombstones of a ColumnFamily.
@@ -384,6 +385,64 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
             }
         };
     }
+    
+    /**
+     * Evaluates a diff between superset (known to be all merged tombstones) and this list for read repair
+     *
+     * @return null if there is no difference
+     */
+    public RangeTombstoneList diff(RangeTombstoneList superset)
+    {
+        if (isEmpty())
+            return superset;
+
+        assert size <= superset.size;
+
+        RangeTombstoneList diff = null;
+
+        int j = 0; // index to iterate through our own list
+        for (int i = 0; i < superset.size; i++)
+        {
+            boolean sameStart = j < size && starts[j].equals(superset.starts[i]);
+            // don't care about local deletion time here. for RR it doesn't makes sense
+            if (!sameStart
+                || !ends[j].equals(superset.ends[i])
+                || markedAts[j] != superset.markedAts[i])
+            {
+                if (diff == null)
+                    diff = new RangeTombstoneList(comparator, Math.min(8, superset.size - i));
+                diff.add(superset.starts[i], superset.ends[i], superset.markedAts[i], superset.delTimes[i]);
+
+                if (sameStart)
+                    j++;
+            }
+            else
+            {
+                j++;
+            }
+        }
+
+        return diff;
+    }
+    
+    /**
+     * Calculates digest for triggering read repair on mismatch
+     */
+    public void updateDigest(MessageDigest digest)
+    {
+        ByteBuffer longBuffer = ByteBuffer.allocate(8);
+        for (int i = 0; i < size; i++)
+        {
+            for (int j = 0; j < starts[i].size(); j++)
+                digest.update(starts[i].get(j).duplicate());
+            for (int j = 0; j < ends[i].size(); j++)
+                digest.update(ends[i].get(j).duplicate());
+
+            longBuffer.putLong(0, markedAts[i]);
+            digest.update(longBuffer.array(), 0, 8);
+        }
+    }
+
 
     @Override
     public boolean equals(Object o)
@@ -393,7 +452,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
         RangeTombstoneList that = (RangeTombstoneList)o;
         if (size != that.size)
             return false;
-
+        
         for (int i = 0; i < size; i++)
         {
             if (!starts[i].equals(that.starts[i]))
@@ -779,4 +838,5 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
             return false;
         }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/net/MessagingService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java
index 6d9a1b5..4ef57d3 100644
--- a/src/java/org/apache/cassandra/net/MessagingService.java
+++ b/src/java/org/apache/cassandra/net/MessagingService.java
@@ -84,6 +84,8 @@ public final class MessagingService implements MessagingServiceMBean
      */
     public static final int PROTOCOL_MAGIC = 0xCA552DFA;
 
+    private boolean allNodesAtLeast21;
+
     /* All verb handler identifiers */
     public enum Verb
     {
@@ -760,20 +762,47 @@ public final class MessagingService implements MessagingServiceMBean
         return packed >>> (start + 1) - count & ~(-1 << count);
     }
 
+    public boolean areAllNodesAtLeast21()
+    {
+        return allNodesAtLeast21;
+    }
+
     /**
      * @return the last version associated with address, or @param version if this is the first such version
      */
     public int setVersion(InetAddress endpoint, int version)
     {
         logger.debug("Setting version {} for {}", version, endpoint);
+        if (version < VERSION_21)
+            allNodesAtLeast21 = false;
         Integer v = versions.put(endpoint, version);
+
+        // if the version was increased to 2.0 or later, see if all nodes are >= 2.0 now
+        if (v != null && v < VERSION_21 && version >= VERSION_21)
+            refreshAllNodesAtLeast21();
+
         return v == null ? version : v;
     }
 
     public void resetVersion(InetAddress endpoint)
     {
         logger.debug("Reseting version for {}", endpoint);
-        versions.remove(endpoint);
+        Integer removed = versions.remove(endpoint);
+        if (removed != null && removed <= VERSION_21)
+            refreshAllNodesAtLeast21();
+    }
+
+    private void refreshAllNodesAtLeast21()
+    {
+        for (Integer version: versions.values())
+        {
+            if (version < VERSION_21)
+            {
+                allNodesAtLeast21 = false;
+                return;
+            }
+        }
+        allNodesAtLeast21 = true;
     }
 
     public int getVersion(InetAddress endpoint)
@@ -807,6 +836,7 @@ public final class MessagingService implements MessagingServiceMBean
         return versions.containsKey(endpoint);
     }
 
+
     public void incrementDroppedMessages(Verb verb)
     {
         assert DROPPABLE_VERBS.contains(verb) : "Verb " + verb + " should not legally be dropped";

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/Util.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/Util.java b/test/unit/org/apache/cassandra/Util.java
index b74f2c9..fe80009 100644
--- a/test/unit/org/apache/cassandra/Util.java
+++ b/test/unit/org/apache/cassandra/Util.java
@@ -368,4 +368,11 @@ public class Util
             throw new RuntimeException(e);
         }
     }
+
+    public static RangeTombstone tombstone(String start, String finish, long timestamp, int localtime)
+    {
+        Composite startName = CellNames.simpleDense(ByteBufferUtil.bytes(start));
+        Composite endName = CellNames.simpleDense(ByteBufferUtil.bytes(finish));
+        return new RangeTombstone(startName, endName, timestamp , localtime);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
index b791b03..7f8da96 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
@@ -22,12 +22,13 @@ import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.*;
+import java.util.TreeMap;
 
 import com.google.common.collect.Iterables;
 import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
+import org.apache.cassandra.Util;
 import org.apache.cassandra.io.sstable.ColumnStats;
 import org.apache.cassandra.io.util.DataOutputBuffer;
 import org.apache.cassandra.net.MessagingService;
@@ -35,6 +36,7 @@ import org.apache.cassandra.utils.ByteBufferUtil;
 
 import static org.apache.cassandra.Util.column;
 import static org.apache.cassandra.Util.cellname;
+import static org.apache.cassandra.Util.tombstone;
 import static org.junit.Assert.assertEquals;
 
 public class ColumnFamilyTest extends SchemaLoader
@@ -105,6 +107,48 @@ public class ColumnFamilyTest extends SchemaLoader
     }
 
     @Test
+    public void testDigest()
+    {
+        ColumnFamily cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+        ColumnFamily cf2 = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+
+        ByteBuffer digest = ColumnFamily.digest(cf);
+
+        cf.addColumn(column("col1", "", 1));
+        cf2.addColumn(column("col1", "", 1));
+
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        assert digest.equals(ColumnFamily.digest(cf2));
+
+        cf.addColumn(column("col2", "", 2));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.addColumn(column("col1", "", 3));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(new DeletionTime(4, 4));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(tombstone("col1", "col11", 5, 5));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        assert digest.equals(ColumnFamily.digest(cf));
+
+        cf.delete(tombstone("col2", "col21", 5, 5));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(tombstone("col1", "col11", 5, 5)); // this does not change RangeTombstoneLList
+        assert digest.equals(ColumnFamily.digest(cf));
+    }
+
+    @Test
     public void testTimestamp()
     {
         ColumnFamily cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/db/RowTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RowTest.java b/test/unit/org/apache/cassandra/db/RowTest.java
index f024c44..3de7fdc 100644
--- a/test/unit/org/apache/cassandra/db/RowTest.java
+++ b/test/unit/org/apache/cassandra/db/RowTest.java
@@ -20,19 +20,19 @@ package org.apache.cassandra.db;
 
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
-import org.junit.Test;
 
 import com.google.common.util.concurrent.Uninterruptibles;
+import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
-import org.apache.cassandra.db.composites.*;
+import org.apache.cassandra.db.composites.CellNames;
 import org.apache.cassandra.utils.ByteBufferUtil;
 
+import static org.apache.cassandra.Util.column;
+import static org.apache.cassandra.Util.tombstone;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
-import static org.apache.cassandra.Util.column;
-
 public class RowTest extends SchemaLoader
 {
     @Test
@@ -48,6 +48,38 @@ public class RowTest extends SchemaLoader
         ColumnFamily cfDiff = cf1.diff(cf2);
         assertFalse(cfDiff.hasColumns());
         assertEquals(cfDiff.deletionInfo(), delInfo);
+
+        RangeTombstone tombstone1 = tombstone("1", "11", (long) 123, 123);
+        RangeTombstone tombstone1_2 = tombstone("111", "112", (long) 1230, 123);
+        RangeTombstone tombstone2_1 = tombstone("2", "22", (long) 123, 123);
+        RangeTombstone tombstone2_2 = tombstone("2", "24", (long) 123, 123);
+        RangeTombstone tombstone3_1 = tombstone("3", "31", (long) 123, 123);
+        RangeTombstone tombstone3_2 = tombstone("3", "31", (long) 1230, 123);
+        RangeTombstone tombstone4_1 = tombstone("4", "41", (long) 123, 123);
+        RangeTombstone tombstone4_2 = tombstone("4", "41", (long) 123, 1230);
+        RangeTombstone tombstone5_2 = tombstone("5", "51", (long) 123, 1230);
+        cf1.delete(tombstone1);
+        cf1.delete(tombstone2_1);
+        cf1.delete(tombstone3_1);
+        cf1.delete(tombstone4_1);
+
+        cf2.delete(tombstone1);
+        cf2.delete(tombstone1_2);
+        cf2.delete(tombstone2_2);
+        cf2.delete(tombstone3_2);
+        cf2.delete(tombstone4_2);
+        cf2.delete(tombstone5_2);
+
+        cfDiff = cf1.diff(cf2);
+        assertEquals(0, cfDiff.getColumnCount());
+
+        // only tmbstones which differ in superset or have more recent timestamp to be in diff
+        delInfo.add(tombstone1_2, cf1.getComparator());
+        delInfo.add(tombstone2_2, cf1.getComparator());
+        delInfo.add(tombstone3_2, cf1.getComparator());
+        delInfo.add(tombstone5_2, cf1.getComparator());
+
+        assertEquals(delInfo, cfDiff.deletionInfo());
     }
 
     @Test


[13/19] git commit: Merge branch 'cassandra-2.0' into cassandra-2.1

Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' into cassandra-2.1


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

Branch: refs/heads/cassandra-2.1
Commit: 4305bd40f619e1d4ebdfc5873c082deb82aac5f0
Parents: 3e6b299 364282a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:20:45 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:20:45 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        | 3 ++-
 src/java/org/apache/cassandra/db/DeletionTime.java | 7 +++----
 2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/4305bd40/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index d94f13b,791586c..ae7410e
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,55 -1,16 +1,56 @@@
 -2.0.8
 - * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
 - * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
 -Merged from 1.2:
 - * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
 - * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
 +2.1.0-beta2
 + * Fix BTree.clear for large updates (CASSANDRA-6943)
 + * Fail write instead of logging a warning when unable to append to CL
 +   (CASSANDRA-6764)
 + * Eliminate possibility of CL segment appearing twice in active list 
 +   (CASSANDRA-6557)
 + * Apply DONTNEED fadvise to commitlog segments (CASSANDRA-6759)
 + * Switch CRC component to Adler and include it for compressed sstables 
 +   (CASSANDRA-4165)
 + * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451)
 + * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899)
 + * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897)
 + * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573)
 + * Fix ABTC NPE and apply update function correctly (CASSANDRA-6692)
 + * Allow nodetool to use a file or prompt for password (CASSANDRA-6660)
 + * Fix AIOOBE when concurrently accessing ABSC (CASSANDRA-6742)
 + * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705)
 + * Scrub should not always clear out repaired status (CASSANDRA-5351)
 + * Improve handling of range tombstone for wide partitions (CASSANDRA-6446)
 + * Fix ClassCastException for compact table with composites (CASSANDRA-6738)
 + * Fix potentially repairing with wrong nodes (CASSANDRA-6808)
 + * Change caching option syntax (CASSANDRA-6745)
 + * Fix stress to do proper counter reads (CASSANDRA-6835)
 + * Fix help message for stress counter_write (CASSANDRA-6824)
 + * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848)
 + * Add logging levels (minimal, normal or verbose) to stress tool (CASSANDRA-6849)
 + * Fix race condition in Batch CLE (CASSANDRA-6860)
 + * Improve cleanup/scrub/upgradesstables failure handling (CASSANDRA-6774)
 + * ByteBuffer write() methods for serializing sstables (CASSANDRA-6781)
 + * Proper compare function for CollectionType (CASSANDRA-6783)
 + * Update native server to Netty 4 (CASSANDRA-6236)
 + * Fix off-by-one error in stress (CASSANDRA-6883)
 + * Make OpOrder AutoCloseable (CASSANDRA-6901)
 + * Remove sync repair JMX interface (CASSANDRA-6900)
 + * Add multiple memory allocation options for memtables (CASSANDRA-6689)
 + * Remove adjusted op rate from stress output (CASSANDRA-6921)
 + * Add optimized CF.hasColumns() implementations (CASSANDRA-6941)
 + * Serialize batchlog mutations with the version of the target node
 +   (CASSANDRA-6931)
 + * Optimize CounterColumn#reconcile() (CASSANDRA-6953)
 + * Properly remove 1.2 sstable support in 2.1 (CASSANDRA-6869)
 + * Lock counter cells, not partitions (CASSANDRA-6880)
 + * Track presence of legacy counter shards in sstables (CASSANDRA-6888)
 + * Ensure safe resource cleanup when replacing sstables (CASSANDRA-6912)
 + * Add failure handler to async callback (CASSANDRA-6747)
 + * Fix AE when closing SSTable without releasing reference (CASSANDRA-7000)
 + * Clean up IndexInfo on keyspace/table drops (CASSANDRA-6924)
 + * Only snapshot relative SSTables when sequential repair (CASSANDRA-7024)
   * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
 -
 -
 -2.0.7
 +Merged from 2.0:
   * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
-  * Allow compaction of system tables during startup (CASSANDRA-6913)
+  * Avoid early loading of non-system keyspaces before compaction-leftovers 
+    cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/4305bd40/src/java/org/apache/cassandra/db/DeletionTime.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DeletionTime.java
index e3e18f1,a1b9f17..f08196d
--- a/src/java/org/apache/cassandra/db/DeletionTime.java
+++ b/src/java/org/apache/cassandra/db/DeletionTime.java
@@@ -125,17 -122,11 +125,16 @@@ public class DeletionTime implements Co
          {
              int ldt = in.readInt();
              long mfda = in.readLong();
-             if (mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE)
-                 return LIVE;
-             else
-                 return new DeletionTime(mfda, ldt);
+             return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
+                  ? LIVE
+                  : new DeletionTime(mfda, ldt);
          }
  
 +        public void skip(DataInput in) throws IOException
 +        {
 +            FileUtils.skipBytesFully(in, 4 + 8);
 +        }
 +
          public long serializedSize(DeletionTime delTime, TypeSizes typeSizes)
          {
              return typeSizes.sizeof(delTime.localDeletionTime)


[16/19] git commit: remove invalid assert patch by Benedict Elliott Smith; reviewed by jbellis for CASSANDRA-6987

Posted by jb...@apache.org.
remove invalid assert
patch by Benedict Elliott Smith; reviewed by jbellis for CASSANDRA-6987


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

Branch: refs/heads/cassandra-2.1
Commit: be2686dd94582abbdd20e0b1b3088d52eae4fbf2
Parents: 4305bd4
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:23:30 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:23:30 2014 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/Keyspace.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/be2686dd/src/java/org/apache/cassandra/db/Keyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Keyspace.java b/src/java/org/apache/cassandra/db/Keyspace.java
index 1c3df77..31e68c1 100644
--- a/src/java/org/apache/cassandra/db/Keyspace.java
+++ b/src/java/org/apache/cassandra/db/Keyspace.java
@@ -99,9 +99,9 @@ public class Keyspace
         return open(keyspaceName, Schema.instance, true);
     }
 
+    // to only be used by org.apache.cassandra.tools.Standalone* classes
     public static Keyspace openWithoutSSTables(String keyspaceName)
     {
-        assert initialized || keyspaceName.equals(SYSTEM_KS);
         return open(keyspaceName, Schema.instance, false);
     }
 


[02/19] git commit: cleanup

Posted by jb...@apache.org.
cleanup


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

Branch: refs/heads/cassandra-2.0
Commit: 655ae7a8f9c4582eb6c303e005df6edbe76bd732
Parents: 2dd0907
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 12:34:12 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/DeletionTime.java | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/655ae7a8/src/java/org/apache/cassandra/db/DeletionTime.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DeletionTime.java b/src/java/org/apache/cassandra/db/DeletionTime.java
index b80422c..a1b9f17 100644
--- a/src/java/org/apache/cassandra/db/DeletionTime.java
+++ b/src/java/org/apache/cassandra/db/DeletionTime.java
@@ -122,10 +122,9 @@ public class DeletionTime implements Comparable<DeletionTime>
         {
             int ldt = in.readInt();
             long mfda = in.readLong();
-            if (mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE)
-                return LIVE;
-            else
-                return new DeletionTime(mfda, ldt);
+            return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
+                 ? LIVE
+                 : new DeletionTime(mfda, ldt);
         }
 
         public long serializedSize(DeletionTime delTime, TypeSizes typeSizes)


[17/19] git commit: Add range tombstones to read repair digests patch by Oleg Anastasyev; reviewed by jbellis for CASSANDRA-6863

Posted by jb...@apache.org.
Add range tombstones to read repair digests
patch by Oleg Anastasyev; reviewed by jbellis for CASSANDRA-6863


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

Branch: refs/heads/cassandra-2.1
Commit: a2e74354ca51809a11b62dd7995c026807683b0a
Parents: be2686d
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:27:20 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:27:20 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/db/ColumnFamily.java   |  5 ++
 .../org/apache/cassandra/db/DeletionInfo.java   | 34 +++++++++-
 .../apache/cassandra/db/RangeTombstoneList.java | 68 ++++++++++++++++++--
 .../apache/cassandra/net/MessagingService.java  | 32 ++++++++-
 test/unit/org/apache/cassandra/Util.java        |  7 ++
 .../apache/cassandra/db/ColumnFamilyTest.java   | 46 ++++++++++++-
 test/unit/org/apache/cassandra/db/RowTest.java  | 40 ++++++++++--
 8 files changed, 222 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ae7410e..495dab2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.0-beta2
+ * Add range tombstones to read repair digests (CASSANDRA-6863)
  * Fix BTree.clear for large updates (CASSANDRA-6943)
  * Fail write instead of logging a warning when unable to append to CL
    (CASSANDRA-6764)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/ColumnFamily.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamily.java b/src/java/org/apache/cassandra/db/ColumnFamily.java
index da404b0..4f85610 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamily.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamily.java
@@ -313,8 +313,11 @@ public abstract class ColumnFamily implements Iterable<Cell>, IRowCacheEntry
             }
         }
 
+        cfDiff.setDeletionInfo(deletionInfo().diff(cfComposite.deletionInfo()));
+
         if (!cfDiff.isEmpty())
             return cfDiff;
+        
         return null;
     }
 
@@ -385,6 +388,8 @@ public abstract class ColumnFamily implements Iterable<Cell>, IRowCacheEntry
     {
         for (Cell cell : this)
             cell.updateDigest(digest);
+        if (MessagingService.instance().areAllNodesAtLeast21())
+            deletionInfo().updateDigest(digest);
     }
 
     public static ColumnFamily diff(ColumnFamily cf1, ColumnFamily cf2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/DeletionInfo.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DeletionInfo.java b/src/java/org/apache/cassandra/db/DeletionInfo.java
index 8601bce..a167b85 100644
--- a/src/java/org/apache/cassandra/db/DeletionInfo.java
+++ b/src/java/org/apache/cassandra/db/DeletionInfo.java
@@ -19,7 +19,9 @@ package org.apache.cassandra.db;
 
 import java.io.DataInput;
 import java.io.IOException;
-import java.util.*;
+import java.security.MessageDigest;
+import java.util.Comparator;
+import java.util.Iterator;
 
 import com.google.common.base.Objects;
 import com.google.common.collect.Iterators;
@@ -29,6 +31,7 @@ import org.apache.cassandra.db.composites.CType;
 import org.apache.cassandra.db.composites.Composite;
 import org.apache.cassandra.io.IVersionedSerializer;
 import org.apache.cassandra.io.util.DataOutputPlus;
+import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.ObjectSizes;
 
 /**
@@ -168,6 +171,35 @@ public class DeletionInfo implements IMeasurableMemory
     }
 
     /**
+     * Evaluates difference between this deletion info and superset for read repair
+     *
+     * @return the difference between the two, or LIVE if no difference
+     */
+    public DeletionInfo diff(DeletionInfo superset)
+    {
+        RangeTombstoneList rangeDiff = superset.ranges == null || superset.ranges.isEmpty()
+                                     ? null
+                                     : ranges == null ? superset.ranges : ranges.diff(superset.ranges);
+
+        return topLevel.markedForDeleteAt != superset.topLevel.markedForDeleteAt || rangeDiff != null
+             ? new DeletionInfo(superset.topLevel, rangeDiff)
+             : DeletionInfo.live();
+    }
+
+
+    /**
+     * Digests deletion info. Used to trigger read repair on mismatch.
+     */
+    public void updateDigest(MessageDigest digest)
+    {
+        if (topLevel.markedForDeleteAt != Long.MIN_VALUE)
+            digest.update(ByteBufferUtil.bytes(topLevel.markedForDeleteAt));
+
+        if (ranges != null)
+            ranges.updateDigest(digest);
+    }
+
+    /**
      * Returns true if {@code purge} would remove the top-level tombstone or any of the range
      * tombstones, false otherwise.
      * @param gcBefore timestamp (in seconds) before which tombstones should be purged

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/db/RangeTombstoneList.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/RangeTombstoneList.java b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
index dd0b9a6..b06c520 100644
--- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java
+++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
@@ -19,12 +19,16 @@ package org.apache.cassandra.db;
 
 import java.io.DataInput;
 import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
 
 import com.google.common.collect.AbstractIterator;
 import com.google.common.collect.Iterators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.cache.IMeasurableMemory;
 import org.apache.cassandra.db.composites.CType;
@@ -32,10 +36,7 @@ import org.apache.cassandra.db.composites.Composite;
 import org.apache.cassandra.io.IVersionedSerializer;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.net.MessagingService;
-
 import org.apache.cassandra.utils.ObjectSizes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Data structure holding the range tombstones of a ColumnFamily.
@@ -384,6 +385,64 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
             }
         };
     }
+    
+    /**
+     * Evaluates a diff between superset (known to be all merged tombstones) and this list for read repair
+     *
+     * @return null if there is no difference
+     */
+    public RangeTombstoneList diff(RangeTombstoneList superset)
+    {
+        if (isEmpty())
+            return superset;
+
+        assert size <= superset.size;
+
+        RangeTombstoneList diff = null;
+
+        int j = 0; // index to iterate through our own list
+        for (int i = 0; i < superset.size; i++)
+        {
+            boolean sameStart = j < size && starts[j].equals(superset.starts[i]);
+            // don't care about local deletion time here. for RR it doesn't makes sense
+            if (!sameStart
+                || !ends[j].equals(superset.ends[i])
+                || markedAts[j] != superset.markedAts[i])
+            {
+                if (diff == null)
+                    diff = new RangeTombstoneList(comparator, Math.min(8, superset.size - i));
+                diff.add(superset.starts[i], superset.ends[i], superset.markedAts[i], superset.delTimes[i]);
+
+                if (sameStart)
+                    j++;
+            }
+            else
+            {
+                j++;
+            }
+        }
+
+        return diff;
+    }
+    
+    /**
+     * Calculates digest for triggering read repair on mismatch
+     */
+    public void updateDigest(MessageDigest digest)
+    {
+        ByteBuffer longBuffer = ByteBuffer.allocate(8);
+        for (int i = 0; i < size; i++)
+        {
+            for (int j = 0; j < starts[i].size(); j++)
+                digest.update(starts[i].get(j).duplicate());
+            for (int j = 0; j < ends[i].size(); j++)
+                digest.update(ends[i].get(j).duplicate());
+
+            longBuffer.putLong(0, markedAts[i]);
+            digest.update(longBuffer.array(), 0, 8);
+        }
+    }
+
 
     @Override
     public boolean equals(Object o)
@@ -393,7 +452,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
         RangeTombstoneList that = (RangeTombstoneList)o;
         if (size != that.size)
             return false;
-
+        
         for (int i = 0; i < size; i++)
         {
             if (!starts[i].equals(that.starts[i]))
@@ -779,4 +838,5 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
             return false;
         }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/src/java/org/apache/cassandra/net/MessagingService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java
index 6d9a1b5..4ef57d3 100644
--- a/src/java/org/apache/cassandra/net/MessagingService.java
+++ b/src/java/org/apache/cassandra/net/MessagingService.java
@@ -84,6 +84,8 @@ public final class MessagingService implements MessagingServiceMBean
      */
     public static final int PROTOCOL_MAGIC = 0xCA552DFA;
 
+    private boolean allNodesAtLeast21;
+
     /* All verb handler identifiers */
     public enum Verb
     {
@@ -760,20 +762,47 @@ public final class MessagingService implements MessagingServiceMBean
         return packed >>> (start + 1) - count & ~(-1 << count);
     }
 
+    public boolean areAllNodesAtLeast21()
+    {
+        return allNodesAtLeast21;
+    }
+
     /**
      * @return the last version associated with address, or @param version if this is the first such version
      */
     public int setVersion(InetAddress endpoint, int version)
     {
         logger.debug("Setting version {} for {}", version, endpoint);
+        if (version < VERSION_21)
+            allNodesAtLeast21 = false;
         Integer v = versions.put(endpoint, version);
+
+        // if the version was increased to 2.0 or later, see if all nodes are >= 2.0 now
+        if (v != null && v < VERSION_21 && version >= VERSION_21)
+            refreshAllNodesAtLeast21();
+
         return v == null ? version : v;
     }
 
     public void resetVersion(InetAddress endpoint)
     {
         logger.debug("Reseting version for {}", endpoint);
-        versions.remove(endpoint);
+        Integer removed = versions.remove(endpoint);
+        if (removed != null && removed <= VERSION_21)
+            refreshAllNodesAtLeast21();
+    }
+
+    private void refreshAllNodesAtLeast21()
+    {
+        for (Integer version: versions.values())
+        {
+            if (version < VERSION_21)
+            {
+                allNodesAtLeast21 = false;
+                return;
+            }
+        }
+        allNodesAtLeast21 = true;
     }
 
     public int getVersion(InetAddress endpoint)
@@ -807,6 +836,7 @@ public final class MessagingService implements MessagingServiceMBean
         return versions.containsKey(endpoint);
     }
 
+
     public void incrementDroppedMessages(Verb verb)
     {
         assert DROPPABLE_VERBS.contains(verb) : "Verb " + verb + " should not legally be dropped";

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/Util.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/Util.java b/test/unit/org/apache/cassandra/Util.java
index b74f2c9..fe80009 100644
--- a/test/unit/org/apache/cassandra/Util.java
+++ b/test/unit/org/apache/cassandra/Util.java
@@ -368,4 +368,11 @@ public class Util
             throw new RuntimeException(e);
         }
     }
+
+    public static RangeTombstone tombstone(String start, String finish, long timestamp, int localtime)
+    {
+        Composite startName = CellNames.simpleDense(ByteBufferUtil.bytes(start));
+        Composite endName = CellNames.simpleDense(ByteBufferUtil.bytes(finish));
+        return new RangeTombstone(startName, endName, timestamp , localtime);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
index b791b03..7f8da96 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
@@ -22,12 +22,13 @@ import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.*;
+import java.util.TreeMap;
 
 import com.google.common.collect.Iterables;
 import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
+import org.apache.cassandra.Util;
 import org.apache.cassandra.io.sstable.ColumnStats;
 import org.apache.cassandra.io.util.DataOutputBuffer;
 import org.apache.cassandra.net.MessagingService;
@@ -35,6 +36,7 @@ import org.apache.cassandra.utils.ByteBufferUtil;
 
 import static org.apache.cassandra.Util.column;
 import static org.apache.cassandra.Util.cellname;
+import static org.apache.cassandra.Util.tombstone;
 import static org.junit.Assert.assertEquals;
 
 public class ColumnFamilyTest extends SchemaLoader
@@ -105,6 +107,48 @@ public class ColumnFamilyTest extends SchemaLoader
     }
 
     @Test
+    public void testDigest()
+    {
+        ColumnFamily cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+        ColumnFamily cf2 = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");
+
+        ByteBuffer digest = ColumnFamily.digest(cf);
+
+        cf.addColumn(column("col1", "", 1));
+        cf2.addColumn(column("col1", "", 1));
+
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        assert digest.equals(ColumnFamily.digest(cf2));
+
+        cf.addColumn(column("col2", "", 2));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.addColumn(column("col1", "", 3));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(new DeletionTime(4, 4));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(tombstone("col1", "col11", 5, 5));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        assert digest.equals(ColumnFamily.digest(cf));
+
+        cf.delete(tombstone("col2", "col21", 5, 5));
+        assert !digest.equals(ColumnFamily.digest(cf));
+
+        digest = ColumnFamily.digest(cf);
+        cf.delete(tombstone("col1", "col11", 5, 5)); // this does not change RangeTombstoneLList
+        assert digest.equals(ColumnFamily.digest(cf));
+    }
+
+    @Test
     public void testTimestamp()
     {
         ColumnFamily cf = ArrayBackedSortedColumns.factory.create("Keyspace1", "Standard1");

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a2e74354/test/unit/org/apache/cassandra/db/RowTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RowTest.java b/test/unit/org/apache/cassandra/db/RowTest.java
index f024c44..3de7fdc 100644
--- a/test/unit/org/apache/cassandra/db/RowTest.java
+++ b/test/unit/org/apache/cassandra/db/RowTest.java
@@ -20,19 +20,19 @@ package org.apache.cassandra.db;
 
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
-import org.junit.Test;
 
 import com.google.common.util.concurrent.Uninterruptibles;
+import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
-import org.apache.cassandra.db.composites.*;
+import org.apache.cassandra.db.composites.CellNames;
 import org.apache.cassandra.utils.ByteBufferUtil;
 
+import static org.apache.cassandra.Util.column;
+import static org.apache.cassandra.Util.tombstone;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
-import static org.apache.cassandra.Util.column;
-
 public class RowTest extends SchemaLoader
 {
     @Test
@@ -48,6 +48,38 @@ public class RowTest extends SchemaLoader
         ColumnFamily cfDiff = cf1.diff(cf2);
         assertFalse(cfDiff.hasColumns());
         assertEquals(cfDiff.deletionInfo(), delInfo);
+
+        RangeTombstone tombstone1 = tombstone("1", "11", (long) 123, 123);
+        RangeTombstone tombstone1_2 = tombstone("111", "112", (long) 1230, 123);
+        RangeTombstone tombstone2_1 = tombstone("2", "22", (long) 123, 123);
+        RangeTombstone tombstone2_2 = tombstone("2", "24", (long) 123, 123);
+        RangeTombstone tombstone3_1 = tombstone("3", "31", (long) 123, 123);
+        RangeTombstone tombstone3_2 = tombstone("3", "31", (long) 1230, 123);
+        RangeTombstone tombstone4_1 = tombstone("4", "41", (long) 123, 123);
+        RangeTombstone tombstone4_2 = tombstone("4", "41", (long) 123, 1230);
+        RangeTombstone tombstone5_2 = tombstone("5", "51", (long) 123, 1230);
+        cf1.delete(tombstone1);
+        cf1.delete(tombstone2_1);
+        cf1.delete(tombstone3_1);
+        cf1.delete(tombstone4_1);
+
+        cf2.delete(tombstone1);
+        cf2.delete(tombstone1_2);
+        cf2.delete(tombstone2_2);
+        cf2.delete(tombstone3_2);
+        cf2.delete(tombstone4_2);
+        cf2.delete(tombstone5_2);
+
+        cfDiff = cf1.diff(cf2);
+        assertEquals(0, cfDiff.getColumnCount());
+
+        // only tmbstones which differ in superset or have more recent timestamp to be in diff
+        delInfo.add(tombstone1_2, cf1.getComparator());
+        delInfo.add(tombstone2_2, cf1.getComparator());
+        delInfo.add(tombstone3_2, cf1.getComparator());
+        delInfo.add(tombstone5_2, cf1.getComparator());
+
+        assertEquals(delInfo, cfDiff.deletionInfo());
     }
 
     @Test


[07/19] git commit: merge

Posted by jb...@apache.org.
merge


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

Branch: refs/heads/cassandra-2.0
Commit: cdfe4e0338bcb0f7f8d04af4b328a1e86c481ce2
Parents: 75b87ce 7dbbe92
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Apr 17 23:14:25 2014 +0200
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Apr 17 23:14:25 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |   9 +-
 NEWS.txt                                        |  11 +-
 build.xml                                       |   4 +-
 debian/changelog                                |   6 +
 .../apache/cassandra/db/BatchlogManager.java    |   2 +-
 .../cassandra/net/OutboundTcpConnection.java    |  12 +-
 .../cassandra/service/MigrationManager.java     |  12 +-
 .../cassandra/service/StorageService.java       | 138 +++++++++++--------
 .../cassandra/streaming/ConnectionHandler.java  |   2 +-
 .../cassandra/streaming/StreamSession.java      |   6 +-
 .../cassandra/streaming/StreamTransferTask.java |   4 +-
 11 files changed, 136 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/cdfe4e03/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index b642908,451d046..01830ef
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,6 -1,6 +1,7 @@@
  2.0.7
+  * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[14/19] git commit: Merge branch 'cassandra-2.0' into cassandra-2.1

Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' into cassandra-2.1


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

Branch: refs/heads/trunk
Commit: 4305bd40f619e1d4ebdfc5873c082deb82aac5f0
Parents: 3e6b299 364282a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:20:45 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:20:45 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        | 3 ++-
 src/java/org/apache/cassandra/db/DeletionTime.java | 7 +++----
 2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/4305bd40/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index d94f13b,791586c..ae7410e
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,55 -1,16 +1,56 @@@
 -2.0.8
 - * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
 - * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
 -Merged from 1.2:
 - * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
 - * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
 +2.1.0-beta2
 + * Fix BTree.clear for large updates (CASSANDRA-6943)
 + * Fail write instead of logging a warning when unable to append to CL
 +   (CASSANDRA-6764)
 + * Eliminate possibility of CL segment appearing twice in active list 
 +   (CASSANDRA-6557)
 + * Apply DONTNEED fadvise to commitlog segments (CASSANDRA-6759)
 + * Switch CRC component to Adler and include it for compressed sstables 
 +   (CASSANDRA-4165)
 + * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451)
 + * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899)
 + * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897)
 + * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573)
 + * Fix ABTC NPE and apply update function correctly (CASSANDRA-6692)
 + * Allow nodetool to use a file or prompt for password (CASSANDRA-6660)
 + * Fix AIOOBE when concurrently accessing ABSC (CASSANDRA-6742)
 + * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705)
 + * Scrub should not always clear out repaired status (CASSANDRA-5351)
 + * Improve handling of range tombstone for wide partitions (CASSANDRA-6446)
 + * Fix ClassCastException for compact table with composites (CASSANDRA-6738)
 + * Fix potentially repairing with wrong nodes (CASSANDRA-6808)
 + * Change caching option syntax (CASSANDRA-6745)
 + * Fix stress to do proper counter reads (CASSANDRA-6835)
 + * Fix help message for stress counter_write (CASSANDRA-6824)
 + * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848)
 + * Add logging levels (minimal, normal or verbose) to stress tool (CASSANDRA-6849)
 + * Fix race condition in Batch CLE (CASSANDRA-6860)
 + * Improve cleanup/scrub/upgradesstables failure handling (CASSANDRA-6774)
 + * ByteBuffer write() methods for serializing sstables (CASSANDRA-6781)
 + * Proper compare function for CollectionType (CASSANDRA-6783)
 + * Update native server to Netty 4 (CASSANDRA-6236)
 + * Fix off-by-one error in stress (CASSANDRA-6883)
 + * Make OpOrder AutoCloseable (CASSANDRA-6901)
 + * Remove sync repair JMX interface (CASSANDRA-6900)
 + * Add multiple memory allocation options for memtables (CASSANDRA-6689)
 + * Remove adjusted op rate from stress output (CASSANDRA-6921)
 + * Add optimized CF.hasColumns() implementations (CASSANDRA-6941)
 + * Serialize batchlog mutations with the version of the target node
 +   (CASSANDRA-6931)
 + * Optimize CounterColumn#reconcile() (CASSANDRA-6953)
 + * Properly remove 1.2 sstable support in 2.1 (CASSANDRA-6869)
 + * Lock counter cells, not partitions (CASSANDRA-6880)
 + * Track presence of legacy counter shards in sstables (CASSANDRA-6888)
 + * Ensure safe resource cleanup when replacing sstables (CASSANDRA-6912)
 + * Add failure handler to async callback (CASSANDRA-6747)
 + * Fix AE when closing SSTable without releasing reference (CASSANDRA-7000)
 + * Clean up IndexInfo on keyspace/table drops (CASSANDRA-6924)
 + * Only snapshot relative SSTables when sequential repair (CASSANDRA-7024)
   * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
 -
 -
 -2.0.7
 +Merged from 2.0:
   * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
-  * Allow compaction of system tables during startup (CASSANDRA-6913)
+  * Avoid early loading of non-system keyspaces before compaction-leftovers 
+    cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/4305bd40/src/java/org/apache/cassandra/db/DeletionTime.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DeletionTime.java
index e3e18f1,a1b9f17..f08196d
--- a/src/java/org/apache/cassandra/db/DeletionTime.java
+++ b/src/java/org/apache/cassandra/db/DeletionTime.java
@@@ -125,17 -122,11 +125,16 @@@ public class DeletionTime implements Co
          {
              int ldt = in.readInt();
              long mfda = in.readLong();
-             if (mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE)
-                 return LIVE;
-             else
-                 return new DeletionTime(mfda, ldt);
+             return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
+                  ? LIVE
+                  : new DeletionTime(mfda, ldt);
          }
  
 +        public void skip(DataInput in) throws IOException
 +        {
 +            FileUtils.skipBytesFully(in, 4 + 8);
 +        }
 +
          public long serializedSize(DeletionTime delTime, TypeSizes typeSizes)
          {
              return typeSizes.sizeof(delTime.localDeletionTime)


[08/19] git commit: merge

Posted by jb...@apache.org.
merge


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

Branch: refs/heads/cassandra-2.1
Commit: cdfe4e0338bcb0f7f8d04af4b328a1e86c481ce2
Parents: 75b87ce 7dbbe92
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Apr 17 23:14:25 2014 +0200
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Apr 17 23:14:25 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |   9 +-
 NEWS.txt                                        |  11 +-
 build.xml                                       |   4 +-
 debian/changelog                                |   6 +
 .../apache/cassandra/db/BatchlogManager.java    |   2 +-
 .../cassandra/net/OutboundTcpConnection.java    |  12 +-
 .../cassandra/service/MigrationManager.java     |  12 +-
 .../cassandra/service/StorageService.java       | 138 +++++++++++--------
 .../cassandra/streaming/ConnectionHandler.java  |   2 +-
 .../cassandra/streaming/StreamSession.java      |   6 +-
 .../cassandra/streaming/StreamTransferTask.java |   4 +-
 11 files changed, 136 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/cdfe4e03/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index b642908,451d046..01830ef
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,6 -1,6 +1,7 @@@
  2.0.7
+  * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[03/19] git commit: CHANGES

Posted by jb...@apache.org.
CHANGES


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

Branch: refs/heads/cassandra-2.1
Commit: 75b87ce86bb729c38832acfb0edb6ab84a0deefd
Parents: 655ae7a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 15:33:47 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/75b87ce8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 38a6c3c..b642908 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 2.0.7
- * Allow compaction of system tables during startup (CASSANDRA-6913)
+ * Avoid early loading of non-system keyspaces before compaction-leftovers 
+   cleanup at startup (CASSANDRA-6913)
  * Restrict Windows to parallel repairs (CASSANDRA-6907)
  * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
  * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[11/19] git commit: Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0

Posted by jb...@apache.org.
Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0


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

Branch: refs/heads/cassandra-2.1
Commit: 364282a7d43c475b82fc169cec751fba899e3101
Parents: cdfe4e0 48d7e40
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:20:32 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:20:32 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  14 ++-
 doc/cql3/CQL.textile                            |  16 ++-
 pylib/cqlshlib/cql3handling.py                  |  24 +++--
 .../apache/cassandra/cql3/QueryProcessor.java   |   2 +-
 .../cql3/statements/BatchStatement.java         |   3 +-
 .../cql3/statements/SelectStatement.java        |  34 ++++---
 .../apache/cassandra/db/BatchlogManager.java    | 102 +++++++++++--------
 .../apache/cassandra/db/ColumnFamilyStore.java  |   6 --
 .../cassandra/db/HintedHandOffManager.java      |  21 +---
 .../org/apache/cassandra/db/SystemKeyspace.java |  60 +++++++----
 .../db/commitlog/CommitLogReplayer.java         |  12 +--
 .../apache/cassandra/service/StorageProxy.java  |   9 +-
 .../cassandra/service/pager/QueryPager.java     |   2 +-
 .../org/apache/cassandra/tools/NodeCmd.java     |   5 +-
 .../apache/cassandra/tools/NodeToolHelp.yaml    |   2 +-
 .../cassandra/db/BatchlogManagerTest.java       |  78 ++++++++++++--
 .../apache/cassandra/db/HintedHandOffTest.java  |  19 ++--
 17 files changed, 272 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/364282a7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 01830ef,5d47cfa..791586c
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,7 -1,15 +1,16 @@@
+ 2.0.8
+  * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
+  * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
+ Merged from 1.2:
+  * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
+  * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
+  * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
+ 
+ 
  2.0.7
   * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[05/19] git commit: CHANGES

Posted by jb...@apache.org.
CHANGES


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

Branch: refs/heads/trunk
Commit: 75b87ce86bb729c38832acfb0edb6ab84a0deefd
Parents: 655ae7a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 15:33:47 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/75b87ce8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 38a6c3c..b642908 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 2.0.7
- * Allow compaction of system tables during startup (CASSANDRA-6913)
+ * Avoid early loading of non-system keyspaces before compaction-leftovers 
+   cleanup at startup (CASSANDRA-6913)
  * Restrict Windows to parallel repairs (CASSANDRA-6907)
  * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
  * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[19/19] git commit: Merge branch 'cassandra-2.1' into trunk

Posted by jb...@apache.org.
Merge branch 'cassandra-2.1' into trunk


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

Branch: refs/heads/trunk
Commit: 498eb2ab77d748b5b638b82450edd968fe5ca73a
Parents: 68aa62b a2e7435
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:27:42 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:27:42 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  4 +-
 .../org/apache/cassandra/db/ColumnFamily.java   |  5 ++
 .../org/apache/cassandra/db/DeletionInfo.java   | 34 +++++++++-
 .../org/apache/cassandra/db/DeletionTime.java   |  7 +-
 src/java/org/apache/cassandra/db/Keyspace.java  |  2 +-
 .../apache/cassandra/db/RangeTombstoneList.java | 68 ++++++++++++++++++--
 .../apache/cassandra/net/MessagingService.java  | 32 ++++++++-
 test/unit/org/apache/cassandra/Util.java        |  7 ++
 .../apache/cassandra/db/ColumnFamilyTest.java   | 46 ++++++++++++-
 test/unit/org/apache/cassandra/db/RowTest.java  | 40 ++++++++++--
 10 files changed, 228 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/498eb2ab/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index d889278,495dab2..742f7de
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,13 -1,5 +1,14 @@@
 +3.0
 + * Move sstable RandomAccessReader to nio2, which allows using the
 +   FILE_SHARE_DELETE flag on Windows (CASSANDRA-4050)
 + * Remove CQL2 (CASSANDRA-5918)
 + * Add Thrift get_multi_slice call (CASSANDRA-6757)
 + * Optimize fetching multiple cells by name (CASSANDRA-6933)
 + * Allow compilation in java 8 (CASSANDRA-7208)
 +
 +
  2.1.0-beta2
+  * Add range tombstones to read repair digests (CASSANDRA-6863)
   * Fix BTree.clear for large updates (CASSANDRA-6943)
   * Fail write instead of logging a warning when unable to append to CL
     (CASSANDRA-6764)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/498eb2ab/src/java/org/apache/cassandra/db/ColumnFamily.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/498eb2ab/src/java/org/apache/cassandra/net/MessagingService.java
----------------------------------------------------------------------


[09/19] git commit: merge

Posted by jb...@apache.org.
merge


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

Branch: refs/heads/trunk
Commit: cdfe4e0338bcb0f7f8d04af4b328a1e86c481ce2
Parents: 75b87ce 7dbbe92
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Apr 17 23:14:25 2014 +0200
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Apr 17 23:14:25 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |   9 +-
 NEWS.txt                                        |  11 +-
 build.xml                                       |   4 +-
 debian/changelog                                |   6 +
 .../apache/cassandra/db/BatchlogManager.java    |   2 +-
 .../cassandra/net/OutboundTcpConnection.java    |  12 +-
 .../cassandra/service/MigrationManager.java     |  12 +-
 .../cassandra/service/StorageService.java       | 138 +++++++++++--------
 .../cassandra/streaming/ConnectionHandler.java  |   2 +-
 .../cassandra/streaming/StreamSession.java      |   6 +-
 .../cassandra/streaming/StreamTransferTask.java |   4 +-
 11 files changed, 136 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/cdfe4e03/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index b642908,451d046..01830ef
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,6 -1,6 +1,7 @@@
  2.0.7
+  * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[15/19] git commit: remove invalid assert patch by Benedict Elliott Smith; reviewed by jbellis for CASSANDRA-6987

Posted by jb...@apache.org.
remove invalid assert
patch by Benedict Elliott Smith; reviewed by jbellis for CASSANDRA-6987


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

Branch: refs/heads/trunk
Commit: be2686dd94582abbdd20e0b1b3088d52eae4fbf2
Parents: 4305bd4
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:23:30 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:23:30 2014 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/Keyspace.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/be2686dd/src/java/org/apache/cassandra/db/Keyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Keyspace.java b/src/java/org/apache/cassandra/db/Keyspace.java
index 1c3df77..31e68c1 100644
--- a/src/java/org/apache/cassandra/db/Keyspace.java
+++ b/src/java/org/apache/cassandra/db/Keyspace.java
@@ -99,9 +99,9 @@ public class Keyspace
         return open(keyspaceName, Schema.instance, true);
     }
 
+    // to only be used by org.apache.cassandra.tools.Standalone* classes
     public static Keyspace openWithoutSSTables(String keyspaceName)
     {
-        assert initialized || keyspaceName.equals(SYSTEM_KS);
         return open(keyspaceName, Schema.instance, false);
     }
 


[12/19] git commit: Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0

Posted by jb...@apache.org.
Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0


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

Branch: refs/heads/trunk
Commit: 364282a7d43c475b82fc169cec751fba899e3101
Parents: cdfe4e0 48d7e40
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:20:32 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:20:32 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  14 ++-
 doc/cql3/CQL.textile                            |  16 ++-
 pylib/cqlshlib/cql3handling.py                  |  24 +++--
 .../apache/cassandra/cql3/QueryProcessor.java   |   2 +-
 .../cql3/statements/BatchStatement.java         |   3 +-
 .../cql3/statements/SelectStatement.java        |  34 ++++---
 .../apache/cassandra/db/BatchlogManager.java    | 102 +++++++++++--------
 .../apache/cassandra/db/ColumnFamilyStore.java  |   6 --
 .../cassandra/db/HintedHandOffManager.java      |  21 +---
 .../org/apache/cassandra/db/SystemKeyspace.java |  60 +++++++----
 .../db/commitlog/CommitLogReplayer.java         |  12 +--
 .../apache/cassandra/service/StorageProxy.java  |   9 +-
 .../cassandra/service/pager/QueryPager.java     |   2 +-
 .../org/apache/cassandra/tools/NodeCmd.java     |   5 +-
 .../apache/cassandra/tools/NodeToolHelp.yaml    |   2 +-
 .../cassandra/db/BatchlogManagerTest.java       |  78 ++++++++++++--
 .../apache/cassandra/db/HintedHandOffTest.java  |  19 ++--
 17 files changed, 272 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/364282a7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 01830ef,5d47cfa..791586c
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,7 -1,15 +1,16 @@@
+ 2.0.8
+  * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
+  * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
+ Merged from 1.2:
+  * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
+  * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
+  * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
+ 
+ 
  2.0.7
   * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[10/19] git commit: Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0

Posted by jb...@apache.org.
Merge remote-tracking branch 'origin/cassandra-2.0' into cassandra-2.0


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

Branch: refs/heads/cassandra-2.0
Commit: 364282a7d43c475b82fc169cec751fba899e3101
Parents: cdfe4e0 48d7e40
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Apr 22 07:20:32 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Apr 22 07:20:32 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  14 ++-
 doc/cql3/CQL.textile                            |  16 ++-
 pylib/cqlshlib/cql3handling.py                  |  24 +++--
 .../apache/cassandra/cql3/QueryProcessor.java   |   2 +-
 .../cql3/statements/BatchStatement.java         |   3 +-
 .../cql3/statements/SelectStatement.java        |  34 ++++---
 .../apache/cassandra/db/BatchlogManager.java    | 102 +++++++++++--------
 .../apache/cassandra/db/ColumnFamilyStore.java  |   6 --
 .../cassandra/db/HintedHandOffManager.java      |  21 +---
 .../org/apache/cassandra/db/SystemKeyspace.java |  60 +++++++----
 .../db/commitlog/CommitLogReplayer.java         |  12 +--
 .../apache/cassandra/service/StorageProxy.java  |   9 +-
 .../cassandra/service/pager/QueryPager.java     |   2 +-
 .../org/apache/cassandra/tools/NodeCmd.java     |   5 +-
 .../apache/cassandra/tools/NodeToolHelp.yaml    |   2 +-
 .../cassandra/db/BatchlogManagerTest.java       |  78 ++++++++++++--
 .../apache/cassandra/db/HintedHandOffTest.java  |  19 ++--
 17 files changed, 272 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/364282a7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 01830ef,5d47cfa..791586c
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,7 -1,15 +1,16 @@@
+ 2.0.8
+  * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
+  * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
+ Merged from 1.2:
+  * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
+  * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
+  * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
+ 
+ 
  2.0.7
   * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 - * Allow compaction of system tables during startup (CASSANDRA-6913)
 + * Avoid early loading of non-system keyspaces before compaction-leftovers 
 +   cleanup at startup (CASSANDRA-6913)
   * Restrict Windows to parallel repairs (CASSANDRA-6907)
   * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
   * Fix NPE in MeteredFlusher (CASSANDRA-6820)


[04/19] git commit: cleanup

Posted by jb...@apache.org.
cleanup


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

Branch: refs/heads/cassandra-2.1
Commit: 655ae7a8f9c4582eb6c303e005df6edbe76bd732
Parents: 2dd0907
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Apr 4 12:34:12 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Apr 9 09:07:04 2014 -0500

----------------------------------------------------------------------
 src/java/org/apache/cassandra/db/DeletionTime.java | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/655ae7a8/src/java/org/apache/cassandra/db/DeletionTime.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DeletionTime.java b/src/java/org/apache/cassandra/db/DeletionTime.java
index b80422c..a1b9f17 100644
--- a/src/java/org/apache/cassandra/db/DeletionTime.java
+++ b/src/java/org/apache/cassandra/db/DeletionTime.java
@@ -122,10 +122,9 @@ public class DeletionTime implements Comparable<DeletionTime>
         {
             int ldt = in.readInt();
             long mfda = in.readLong();
-            if (mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE)
-                return LIVE;
-            else
-                return new DeletionTime(mfda, ldt);
+            return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
+                 ? LIVE
+                 : new DeletionTime(mfda, ldt);
         }
 
         public long serializedSize(DeletionTime delTime, TypeSizes typeSizes)