Updated Branches:
  refs/heads/cassandra-1.1 6d13ce69b -> 0d1249372
  refs/heads/trunk 04859be40 -> fc3235841


Merge branch 'cassandra-1.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/fc323584
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fc323584
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fc323584

Branch: refs/heads/trunk
Commit: fc3235841696032b4800ef5ab3bd1d9157fd47a2
Parents: 04859be 0d12493
Author: Jonathan Ellis <jbel...@apache.org>
Authored: Mon Oct 8 23:37:51 2012 -0500
Committer: Jonathan Ellis <jbel...@apache.org>
Committed: Mon Oct 8 23:41:55 2012 -0500

----------------------------------------------------------------------
 CHANGES.txt                                        |    2 +
 .../apache/cassandra/db/HintedHandOffManager.java  |    6 +-
 .../org/apache/cassandra/db/HintedHandOffTest.java |   59 +++++++++++++++
 3 files changed, 65 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fc323584/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 41b29fa,06e87ac..935ad4d
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,101 -1,6 +1,103 @@@
 +1.2-beta2
 + * cassandra-cli: allow Double value type to be inserted to a column 
(CASSANDRA-4661)
 + * Add ability to use custom TServerFactory implementations (CASSANDRA-4608)
 + * optimize batchlog flushing to skip successful batches (CASSANDRA-4667)
 + * include metadata for system keyspace itself in schema tables 
(CASSANDRA-4416)
 + * add check to PropertyFileSnitch to verify presence of location for
 +   local node (CASSANDRA-4728)
 + * add PBSPredictor consistency modeler (CASSANDRA-4261)
 + * remove vestiges of Thrift unframed mode (CASSANDRA-4729)
 + * optimize single-row PK lookups (CASSANDRA-4710)
 + * adjust blockFor calculation to account for pending ranges due to node 
 +   movement (CASSANDRA-833)
 + * Change CQL version to 3.0.0 and stop accepting 3.0.0-beta1 (CASSANDRA-4649)
 + * (CQL3) Make prepared statement global instead of per connection 
 +   (CASSANDRA-4449)
 + * Fix scrubbing of CQL3 created tables (CASSANDRA-4685)
 + * (CQL3) Fix validation when using counter and regular columns in the same 
 +   table (CASSANDRA-4706)
 + * Fix bug starting Cassandra with simple authentication (CASSANDRA-4648)
 + * Add support for batchlog in CQL3 (CASSANDRA-4545, 4738)
 + * Add support for multiple column family outputs in CFOF (CASSANDRA-4208)
 + * Support repairing only the local DC nodes (CASSANDRA-4747)
 + * Use rpc_address for binary protocol and change default port (CASSANRA-4751)
 + * Fix use of collections in prepared statements (CASSANDRA-4739)
 + * Store more information into peers table (CASSANDRA-4351)
 + * Configurable bucket size for size tiered compaction (CASSANDRA-4704)
 +
 +
 +1.2-beta1
 + * add atomic_batch_mutate (CASSANDRA-4542, -4635)
 + * increase default max_hint_window_in_ms to 3h (CASSANDRA-4632)
 + * include message initiation time to replicas so they can more
 +   accurately drop timed-out requests (CASSANDRA-2858)
 + * fix clientutil.jar dependencies (CASSANDRA-4566)
 + * optimize WriteResponse (CASSANDRA-4548)
 + * new metrics (CASSANDRA-4009)
 + * redesign KEYS indexes to avoid read-before-write (CASSANDRA-2897)
 + * debug tracing (CASSANDRA-1123)
 + * parallelize row cache loading (CASSANDRA-4282)
 + * Make compaction, flush JBOD-aware (CASSANDRA-4292)
 + * run local range scans on the read stage (CASSANDRA-3687)
 + * clean up ioexceptions (CASSANDRA-2116)
 + * add disk_failure_policy (CASSANDRA-2118)
 + * Introduce new json format with row level deletion (CASSANDRA-4054)
 + * remove redundant "name" column from schema_keyspaces (CASSANDRA-4433)
 + * improve "nodetool ring" handling of multi-dc clusters (CASSANDRA-3047)
 + * update NTS calculateNaturalEndpoints to be O(N log N) (CASSANDRA-3881)
 + * add UseCondCardMark XX jvm settings on jdk 1.7 (CASSANDRA-4366)
 + * split up rpc timeout by operation type (CASSANDRA-2819)
 + * rewrite key cache save/load to use only sequential i/o (CASSANDRA-3762)
 + * update MS protocol with a version handshake + broadcast address id
 +   (CASSANDRA-4311)
 + * multithreaded hint replay (CASSANDRA-4189)
 + * add inter-node message compression (CASSANDRA-3127)
 + * remove COPP (CASSANDRA-2479)
 + * Track tombstone expiration and compact when tombstone content is
 +   higher than a configurable threshold, default 20% (CASSANDRA-3442, 4234)
 + * update MurmurHash to version 3 (CASSANDRA-2975)
 + * (CLI) track elapsed time for `delete' operation (CASSANDRA-4060)
 + * (CLI) jline version is bumped to 1.0 to properly  support
 +   'delete' key function (CASSANDRA-4132)
 + * Save IndexSummary into new SSTable 'Summary' component (CASSANDRA-2392, 
4289)
 + * Add support for range tombstones (CASSANDRA-3708)
 + * Improve MessagingService efficiency (CASSANDRA-3617)
 + * Avoid ID conflicts from concurrent schema changes (CASSANDRA-3794)
 + * Set thrift HSHA server thread limit to unlimited by default 
(CASSANDRA-4277)
 + * Avoids double serialization of CF id in RowMutation messages
 +   (CASSANDRA-4293)
 + * stream compressed sstables directly with java nio (CASSANDRA-4297)
 + * Support multiple ranges in SliceQueryFilter (CASSANDRA-3885)
 + * Add column metadata to system column families (CASSANDRA-4018)
 + * (cql3) Always use composite types by default (CASSANDRA-4329)
 + * (cql3) Add support for set, map and list (CASSANDRA-3647)
 + * Validate date type correctly (CASSANDRA-4441)
 + * (cql3) Allow definitions with only a PK (CASSANDRA-4361)
 + * (cql3) Add support for row key composites (CASSANDRA-4179)
 + * improve DynamicEndpointSnitch by using reservoir sampling (CASSANDRA-4038)
 + * (cql3) Add support for 2ndary indexes (CASSANDRA-3680)
 + * (cql3) fix defining more than one PK to be invalid (CASSANDRA-4477)
 + * remove schema agreement checking from all external APIs (Thrift, CQL and 
CQL3) (CASSANDRA-4487)
 + * add Murmur3Partitioner and make it default for new installations 
(CASSANDRA-3772, 4621)
 + * (cql3) update pseudo-map syntax to use map syntax (CASSANDRA-4497)
 + * Finer grained exceptions hierarchy and provides error code with exceptions 
(CASSANDRA-3979)
 + * Adds events push to binary protocol (CASSANDRA-4480)
 + * Rewrite nodetool help (CASSANDRA-2293)
 + * Make CQL3 the default for CQL (CASSANDRA-4640)
 + * update stress tool to be able to use CQL3 (CASSANDRA-4406)
 + * Accept all thrift update on CQL3 cf but don't expose their metadata 
(CASSANDRA-4377)
 + * Replace Throttle with Guava's RateLimiter for HintedHandOff 
(CASSANDRA-4541)
 + * fix counter add/get using CQL2 and CQL3 in stress tool (CASSANDRA-4633)
 + * Add sstable count per level to cfstats (CASSANDRA-4537)
 + * (cql3) Add ALTER KEYSPACE statement (CASSANDRA-4611)
 + * (cql3) Allow defining default consistency levels (CASSANDRA-4448)
 + * (cql3) Fix queries using LIMIT missing results (CASSANDRA-4579)
 + * fix cross-version gossip messaging (CASSANDRA-4576)
 +
 +
  1.1.6
+  * Fix HH to compact with correct gcBefore, which avoids wiping out
+    undelivered hints (CASSANDRA-4772)
   * LCS will merge up to 32 L0 sstables as intended (CASSANDRA-4778)
   * NTS will default unconfigured DC replicas to zero (CASSANDRA-4675)
   * use default consistency level in counter validation if none is

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fc323584/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/HintedHandOffManager.java
index 119dd16,12a2814..bc503ea
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@@ -28,8 -29,10 +28,9 @@@ import java.util.concurrent.*
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  
+ import com.google.common.annotations.VisibleForTesting;
  import com.google.common.collect.ImmutableSortedSet;
 -import org.apache.cassandra.io.sstable.Descriptor;
 -import org.apache.cassandra.io.sstable.SSTable;
 +import com.google.common.util.concurrent.RateLimiter;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
@@@ -182,9 -190,10 +183,10 @@@ public class HintedHandOffManager imple
          StorageService.optionalTasks.execute(runnable);
      }
  
-     private Future<?> compact() throws ExecutionException, 
InterruptedException
+     @VisibleForTesting
+     protected Future<?> compact() throws ExecutionException, 
InterruptedException
      {
 -        final ColumnFamilyStore hintStore = 
Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF);
 +        final ColumnFamilyStore hintStore = 
Table.open(Table.SYSTEM_KS).getColumnFamilyStore(SystemTable.HINTS_CF);
          hintStore.forceBlockingFlush();
          ArrayList<Descriptor> descriptors = new ArrayList<Descriptor>();
          for (SSTable sstable : hintStore.getSSTables())

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fc323584/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/HintedHandOffTest.java
index 0000000,18c3695..b6b0a5f
mode 000000,100644..100644
--- a/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
+++ b/test/unit/org/apache/cassandra/db/HintedHandOffTest.java
@@@ -1,0 -1,65 +1,59 @@@
+ package org.apache.cassandra.db;
+ 
+ import java.util.UUID;
+ import java.util.concurrent.TimeUnit;
+ 
+ import org.junit.Test;
+ 
+ import org.apache.cassandra.SchemaLoader;
 -import org.apache.cassandra.db.ColumnFamilyStore;
 -import org.apache.cassandra.db.HintedHandOffManager;
 -import org.apache.cassandra.db.RowMutation;
 -import org.apache.cassandra.db.Table;
+ import org.apache.cassandra.db.compaction.CompactionManager;
+ import org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy;
+ import org.apache.cassandra.db.filter.QueryPath;
 -import org.apache.cassandra.dht.IPartitioner;
 -import org.apache.cassandra.service.StorageService;
+ import org.apache.cassandra.utils.ByteBufferUtil;
+ import org.apache.cassandra.utils.FBUtilities;
+ 
+ import static junit.framework.Assert.assertEquals;
+ 
+ public class HintedHandOffTest extends SchemaLoader
+ {
+ 
+     public static final String TABLE4 = "Keyspace4";
+     public static final String STANDARD1_CF = "Standard1";
+     public static final String COLUMN1 = "column1";
+ 
+     // Test compaction of hints column family. It shouldn't remove all 
columns on compaction.
+     @Test
+     public void testCompactionOfHintsCF() throws Exception
+     {
+         // prepare hints column family
+         Table systemTable = Table.open("system");
 -        ColumnFamilyStore hintStore = 
systemTable.getColumnFamilyStore(HintedHandOffManager.HINTS_CF);
++        ColumnFamilyStore hintStore = 
systemTable.getColumnFamilyStore(SystemTable.HINTS_CF);
+         hintStore.clearUnsafe();
+         hintStore.metadata.gcGraceSeconds(36000); // 10 hours
+         
hintStore.setCompactionStrategyClass(SizeTieredCompactionStrategy.class.getCanonicalName());
+         hintStore.disableAutoCompaction();
+ 
+         // insert 1 hint
+         RowMutation rm = new RowMutation(TABLE4, ByteBufferUtil.bytes(1));
+         rm.add(new QueryPath(STANDARD1_CF,
+                              null,
+                              ByteBufferUtil.bytes(String.valueOf(COLUMN1))),
+                ByteBufferUtil.EMPTY_BYTE_BUFFER,
+                System.currentTimeMillis());
+ 
 -        RowMutation.hintFor(rm, ByteBufferUtil.bytes("foo")).apply();
++        RowMutation.hintFor(rm, UUID.randomUUID()).apply();
+ 
+         // flush data to disk
+         hintStore.forceBlockingFlush();
+         assertEquals(1, hintStore.getSSTables().size());
+ 
+         // submit compaction
+         FBUtilities.waitOnFuture(HintedHandOffManager.instance.compact());
+         while (CompactionManager.instance.getPendingTasks() > 0 || 
CompactionManager.instance.getActiveCompactions() > 0)
+             TimeUnit.SECONDS.sleep(1);
+ 
+         // single row should not be removed because of gc_grace_seconds
+         // is 10 hours and there are no any tombstones in sstable
+         assertEquals(1, hintStore.getSSTables().size());
+     }
+ }

Reply via email to