Merge branch 'cassandra-2.2' into cassandra-3.0

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

Branch: refs/heads/trunk
Commit: bf7d4334edf7f845f1abdc6ed2285a1738788b13
Parents: 251449f 3128802
Author: Marcus Eriksson <marc...@apache.org>
Authored: Tue Apr 26 08:28:33 2016 +0200
Committer: Marcus Eriksson <marc...@apache.org>
Committed: Tue Apr 26 08:28:33 2016 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../compaction/LeveledCompactionStrategy.java   | 15 ++++-
 .../db/compaction/LeveledManifest.java          | 15 ++++-
 .../LongLeveledCompactionStrategyTest.java      | 64 ++++++++++++++++++++
 4 files changed, 91 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/bf7d4334/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index ea21ee7,06b27b4..7d6760b
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -23,25 -8,16 +23,26 @@@ Merged from 2.1
   * cqlsh COPY FROM fails with []{} chars in UDT/tuple fields/values 
(CASSANDRA-11633)
   * clqsh: COPY FROM throws TypeError with Cython extensions enabled 
(CASSANDRA-11574)
   * cqlsh: COPY FROM ignores NULL values in conversion (CASSANDRA-11549)
 - * (cqlsh) Fix potential COPY deadlock when parent process is terminating 
child
 -   processes (CASSANDRA-11505)
+  * Validate levels when building LeveledScanner to avoid overlaps with 
orphaned sstables (CASSANDRA-9935)
  
  
 -2.2.6
 - * Allow only DISTINCT queries with partition keys restrictions 
(CASSANDRA-11339)
 - * CqlConfigHelper no longer requires both a keystore and truststore to work 
(CASSANDRA-11532)
 - * Make deprecated repair methods backward-compatible with previous 
notification service (CASSANDRA-11430)
 - * IncomingStreamingConnection version check message wrong (CASSANDRA-11462)
 +3.0.5
 + * Fix rare NPE on schema upgrade from 2.x to 3.x (CASSANDRA-10943)
 + * Improve backoff policy for cqlsh COPY FROM (CASSANDRA-11320)
 + * Improve IF NOT EXISTS check in CREATE INDEX (CASSANDRA-11131)
 + * Upgrade ohc to 0.4.3
 + * Enable SO_REUSEADDR for JMX RMI server sockets (CASSANDRA-11093)
 + * Allocate merkletrees with the correct size (CASSANDRA-11390)
 + * Support streaming pre-3.0 sstables (CASSANDRA-10990)
 + * Add backpressure to compressed commit log (CASSANDRA-10971)
 + * SSTableExport supports secondary index tables (CASSANDRA-11330)
 + * Fix sstabledump to include missing info in debug output (CASSANDRA-11321)
 + * Establish and implement canonical bulk reading workload(s) 
(CASSANDRA-10331)
 + * Fix paging for IN queries on tables without clustering columns 
(CASSANDRA-11208)
 + * Remove recursive call from CompositesSearcher (CASSANDRA-11304)
 + * Fix filtering on non-primary key columns for queries without index 
(CASSANDRA-6377)
 + * Fix sstableloader fail when using materialized view (CASSANDRA-11275)
 +Merged from 2.2:
   * DatabaseDescriptor should log stacktrace in case of Eception during seed 
provider creation (CASSANDRA-11312)
   * Use canonical path for directory in SSTable descriptor (CASSANDRA-10587)
   * Add cassandra-stress keystore option (CASSANDRA-9325)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bf7d4334/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
----------------------------------------------------------------------
diff --cc 
src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
index 5a5cbef,bdc9141..cd74620
--- a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
@@@ -216,8 -215,10 +216,10 @@@ public class LeveledCompactionStrategy 
          return maxSSTableSizeInMB * 1024L * 1024L;
      }
  
 -    public ScannerList getScanners(Collection<SSTableReader> sstables, 
Range<Token> range)
 +    public ScannerList getScanners(Collection<SSTableReader> sstables, 
Collection<Range<Token>> ranges)
      {
+         Set<SSTableReader>[] sstablesPerLevel = 
manifest.getSStablesPerLevelSnapshot();
+ 
          Multimap<Integer, SSTableReader> byLevel = ArrayListMultimap.create();
          for (SSTableReader sstable : sstables)
          {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bf7d4334/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
index b0cd077,3b207da..2bfe88f
--- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
@@@ -25,10 -25,9 +25,11 @@@ import com.google.common.base.Predicate
  import com.google.common.base.Predicates;
  import com.google.common.collect.ImmutableSortedSet;
  import com.google.common.collect.Iterables;
+ import com.google.common.collect.Lists;
  import com.google.common.collect.Sets;
  import com.google.common.primitives.Ints;
 +
 +import org.apache.cassandra.db.PartitionPosition;
  import org.apache.cassandra.io.sstable.format.SSTableReader;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/bf7d4334/test/long/org/apache/cassandra/db/compaction/LongLeveledCompactionStrategyTest.java
----------------------------------------------------------------------
diff --cc 
test/long/org/apache/cassandra/db/compaction/LongLeveledCompactionStrategyTest.java
index 96ee072,5439a72..79497aa
--- 
a/test/long/org/apache/cassandra/db/compaction/LongLeveledCompactionStrategyTest.java
+++ 
b/test/long/org/apache/cassandra/db/compaction/LongLeveledCompactionStrategyTest.java
@@@ -21,19 -21,22 +21,26 @@@ import java.nio.ByteBuffer
  import java.util.*;
  import java.util.concurrent.*;
  
 -import org.apache.cassandra.db.columniterator.OnDiskAtomIterator;
++import com.google.common.collect.Lists;
++
++import org.apache.cassandra.db.lifecycle.SSTableSet;
++import org.apache.cassandra.db.rows.UnfilteredRowIterator;
+ import org.apache.cassandra.io.sstable.ISSTableScanner;
  import org.apache.cassandra.io.sstable.format.SSTableReader;
  import org.junit.BeforeClass;
  import org.junit.Test;
  
  import org.apache.cassandra.SchemaLoader;
  import org.apache.cassandra.Util;
 -import org.apache.cassandra.config.KSMetaData;
 +import org.apache.cassandra.UpdateBuilder;
  import org.apache.cassandra.db.*;
  import org.apache.cassandra.exceptions.ConfigurationException;
 -import org.apache.cassandra.locator.SimpleStrategy;
 +import org.apache.cassandra.schema.CompactionParams;
 +import org.apache.cassandra.schema.KeyspaceParams;
  import org.apache.cassandra.utils.FBUtilities;
  
+ import static org.junit.Assert.assertTrue;
+ 
  public class LongLeveledCompactionStrategyTest
  {
      public static final String KEYSPACE1 = 
"LongLeveledCompactionStrategyTest";
@@@ -134,4 -140,62 +141,61 @@@
              }
          }
      }
+ 
+     @Test
+     public void testLeveledScanner() throws Exception
+     {
+         testParallelLeveledCompaction();
+         Keyspace keyspace = Keyspace.open(KEYSPACE1);
+         ColumnFamilyStore store = 
keyspace.getColumnFamilyStore(CF_STANDARDLVL);
+         store.disableAutoCompaction();
+ 
 -        WrappingCompactionStrategy strategy = ((WrappingCompactionStrategy) 
store.getCompactionStrategy());
 -        LeveledCompactionStrategy lcs = (LeveledCompactionStrategy) 
strategy.getWrappedStrategies().get(1);
++        LeveledCompactionStrategy lcs = 
(LeveledCompactionStrategy)store.getCompactionStrategyManager().getStrategies().get(1);
+ 
+         ByteBuffer value = ByteBuffer.wrap(new byte[10 * 1024]); // 10 KB 
value
+ 
+         // Adds 10 partitions
+         for (int r = 0; r < 10; r++)
+         {
+             DecoratedKey key = Util.dk(String.valueOf(r));
 -            Mutation rm = new Mutation(KEYSPACE1, key.getKey());
++            UpdateBuilder builder = UpdateBuilder.create(store.metadata, key);
+             for (int c = 0; c < 10; c++)
 -            {
 -                rm.add(CF_STANDARDLVL, Util.cellname("column" + c), value, 0);
 -            }
++                builder.newRow("column" + c).add("val", value);
++
++            Mutation rm = new Mutation(builder.build());
+             rm.apply();
+         }
+ 
+         //Flush sstable
+         store.forceBlockingFlush();
+ 
 -        Collection<SSTableReader> allSSTables = store.getSSTables();
++        Iterable<SSTableReader> allSSTables = 
store.getSSTables(SSTableSet.LIVE);
+         for (SSTableReader sstable : allSSTables)
+         {
+             if (sstable.getSSTableLevel() == 0)
+             {
+                 System.out.println("Mutating L0-SSTABLE level to L1 to 
simulate a bug: " + sstable.getFilename());
+                 
sstable.descriptor.getMetadataSerializer().mutateLevel(sstable.descriptor, 1);
+                 sstable.reloadSSTableMetadata();
+             }
+         }
+ 
 -        try (AbstractCompactionStrategy.ScannerList scannerList = 
lcs.getScanners(allSSTables))
++        try (AbstractCompactionStrategy.ScannerList scannerList = 
lcs.getScanners(Lists.newArrayList(allSSTables)))
+         {
+             //Verify that leveled scanners will always iterate in ascending 
order (CASSANDRA-9935)
+             for (ISSTableScanner scanner : scannerList.scanners)
+             {
+                 DecoratedKey lastKey = null;
+                 while (scanner.hasNext())
+                 {
 -                    OnDiskAtomIterator row = scanner.next();
++                    UnfilteredRowIterator row = scanner.next();
+                     if (lastKey != null)
+                     {
 -                        assertTrue("row " + row.getKey() + " received out of 
order wrt " + lastKey, row.getKey().compareTo(lastKey) >= 0);
++                        assertTrue("row " + row.partitionKey() + " received 
out of order wrt " + lastKey, row.partitionKey().compareTo(lastKey) >= 0);
+                     }
 -                    lastKey = row.getKey();
++                    lastKey = row.partitionKey();
+                 }
+             }
+         }
+     }
  }

Reply via email to