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

Branch: refs/heads/trunk
Commit: 1e64a9d0369e07a195c6267d14438337773d9248
Parents: b408f9e ef0e447
Author: Aleksey Yeschenko <alek...@apache.org>
Authored: Tue Nov 10 13:45:11 2015 +0000
Committer: Aleksey Yeschenko <alek...@apache.org>
Committed: Tue Nov 10 13:46:21 2015 +0000

----------------------------------------------------------------------
 CHANGES.txt                                     |  2 +-
 .../cassandra/io/sstable/CQLSSTableWriter.java  |  2 ++
 .../io/sstable/CQLSSTableWriterTest.java        | 22 ++++++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/1e64a9d0/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index a1f66fa,5edad20..33adefb
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,51 -1,16 +1,51 @@@
 -2.2.4
 +3.0.1
 +Merged from 2.1:
++ * Reject counter writes in CQLSSTableWriter (CASSANDRA-10258)
 + * Remove superfluous COUNTER_MUTATION stage mapping (CASSANDRA-10605)
 +
 +
 +3.0
 + * Fix AssertionError while flushing memtable due to materialized views
 +   incorrectly inserting empty rows (CASSANDRA-10614)
 + * Store UDA initcond as CQL literal in the schema table, instead of a blob 
(CASSANDRA-10650)
 + * Don't use -1 for the position of partition key in schema (CASSANDRA-10491)
 + * Fix distinct queries in mixed version cluster (CASSANDRA-10573)
 + * Skip sstable on clustering in names query (CASSANDRA-10571)
 + * Remove value skipping as it breaks read-repair (CASSANDRA-10655)
 + * Fix bootstrapping with MVs (CASSANDRA-10621)
 + * Make sure EACH_QUORUM reads are using NTS (CASSANDRA-10584)
 + * Fix MV replica filtering for non-NetworkTopologyStrategy (CASSANDRA-10634)
 + * (Hadoop) fix CIF describeSplits() not handling 0 size estimates 
(CASSANDRA-10600)
 + * Fix reading of legacy sstables (CASSANDRA-10590)
 + * Use CQL type names in schema metadata tables (CASSANDRA-10365)
 + * Guard batchlog replay against integer division by zero (CASSANDRA-9223)
 + * Fix bug when adding a column to thrift with the same name than a primary 
key (CASSANDRA-10608)
 + * Add client address argument to IAuthenticator::newSaslNegotiator 
(CASSANDRA-8068)
 + * Fix implementation of LegacyLayout.LegacyBoundComparator (CASSANDRA-10602)
 + * Don't use 'names query' read path for counters (CASSANDRA-10572)
 + * Fix backward compatibility for counters (CASSANDRA-10470)
 + * Remove memory_allocator paramter from cassandra.yaml 
(CASSANDRA-10581,10628)
 + * Execute the metadata reload task of all registered indexes on CFS::reload 
(CASSANDRA-10604)
 + * Fix thrift cas operations with defined columns (CASSANDRA-10576)
 + * Fix PartitionUpdate.operationCount()for updates with static column 
operations (CASSANDRA-10606)
 + * Fix thrift get() queries with defined columns (CASSANDRA-10586)
 + * Fix marking of indexes as built and removed (CASSANDRA-10601)
 + * Skip initialization of non-registered 2i instances, remove 
Index::getIndexName (CASSANDRA-10595)
 + * Fix batches on multiple tables (CASSANDRA-10554)
 + * Ensure compaction options are validated when updating KeyspaceMetadata 
(CASSANDRA-10569)
 + * Flatten Iterator Transformation Hierarchy (CASSANDRA-9975)
 + * Remove token generator (CASSANDRA-5261)
 + * RolesCache should not be created for any authenticator that does not 
requireAuthentication (CASSANDRA-10562)
 + * Fix LogTransaction checking only a single directory for files 
(CASSANDRA-10421)
 + * Fix handling of range tombstones when reading old format sstables 
(CASSANDRA-10360)
 + * Aggregate with Initial Condition fails with C* 3.0 (CASSANDRA-10367)
 +Merged from 2.2:
   * (cqlsh) show partial trace if incomplete after max_trace_wait 
(CASSANDRA-7645)
   * Use most up-to-date version of schema for system tables (CASSANDRA-10652)
   * Deprecate memory_allocator in cassandra.yaml (CASSANDRA-10581,10628)
   * Expose phi values from failure detector via JMX and tweak debug
     and trace logging (CASSANDRA-9526)
 - * Fix RangeNamesQueryPager (CASSANDRA-10509)
 - * Deprecate Pig support (CASSANDRA-10542)
 - * Reduce contention getting instances of CompositeType (CASSANDRA-10433)
  Merged from 2.1:
 - * Reject counter writes in CQLSSTableWriter (CASSANDRA-10258)
-- * Remove superfluous COUNTER_MUTATION stage mapping (CASSANDRA-10605)
 - * Improve json2sstable error reporting on nonexistent columns 
(CASSANDRA-10401)
   * (cqlsh) fix COPY using wrong variable name for time_format 
(CASSANDRA-10633)
   * Do not run SizeEstimatesRecorder if a node is not a member of the ring 
(CASSANDRA-9912)
   * Improve handling of dead nodes in gossip (CASSANDRA-10298)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/1e64a9d0/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/1e64a9d0/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
index e7cf51c,8a14428..602a108
--- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
@@@ -65,81 -66,100 +65,103 @@@ public class CQLSSTableWriterTes
      @Test
      public void testUnsortedWriter() throws Exception
      {
 -        String KS = "cql_keyspace";
 -        String TABLE = "table1";
 -
 -        File tempdir = Files.createTempDir();
 -        File dataDir = new File(tempdir.getAbsolutePath() + File.separator + 
KS + File.separator + TABLE);
 -        assert dataDir.mkdirs();
 -
 -        String schema = "CREATE TABLE cql_keyspace.table1 ("
 -                      + "  k int PRIMARY KEY,"
 -                      + "  v1 text,"
 -                      + "  v2 int"
 -                      + ")";
 -        String insert = "INSERT INTO cql_keyspace.table1 (k, v1, v2) VALUES 
(?, ?, ?)";
 -        CQLSSTableWriter writer = CQLSSTableWriter.builder()
 -                                                  .inDirectory(dataDir)
 -                                                  .forTable(schema)
 -                                                  
.withPartitioner(StorageService.getPartitioner())
 -                                                  .using(insert).build();
 +        try (AutoCloseable switcher = 
Util.switchPartitioner(ByteOrderedPartitioner.instance))
 +        {
 +            String KS = "cql_keyspace";
 +            String TABLE = "table1";
 +
 +            File tempdir = Files.createTempDir();
 +            File dataDir = new File(tempdir.getAbsolutePath() + 
File.separator + KS + File.separator + TABLE);
 +            assert dataDir.mkdirs();
 +
 +            String schema = "CREATE TABLE cql_keyspace.table1 ("
 +                          + "  k int PRIMARY KEY,"
 +                          + "  v1 text,"
 +                          + "  v2 int"
 +                          + ")";
 +            String insert = "INSERT INTO cql_keyspace.table1 (k, v1, v2) 
VALUES (?, ?, ?)";
 +            CQLSSTableWriter writer = CQLSSTableWriter.builder()
 +                                                      .inDirectory(dataDir)
 +                                                      .forTable(schema)
 +                                                      .using(insert).build();
  
 -        writer.addRow(0, "test1", 24);
 -        writer.addRow(1, "test2", null);
 -        writer.addRow(2, "test3", 42);
 -        writer.addRow(ImmutableMap.<String, Object>of("k", 3, "v2", 12));
 -        writer.close();
 +            writer.addRow(0, "test1", 24);
 +            writer.addRow(1, "test2", 44);
 +            writer.addRow(2, "test3", 42);
 +            writer.addRow(ImmutableMap.<String, Object>of("k", 3, "v2", 12));
  
 -        SSTableLoader loader = new SSTableLoader(dataDir, new 
SSTableLoader.Client()
 -        {
 -            private String keyspace;
 +            writer.close();
  
 -            public void init(String keyspace)
 +            SSTableLoader loader = new SSTableLoader(dataDir, new 
SSTableLoader.Client()
              {
 -                this.keyspace = keyspace;
 -                for (Range<Token> range : 
StorageService.instance.getLocalRanges("cql_keyspace"))
 -                    addRangeForEndpoint(range, 
FBUtilities.getBroadcastAddress());
 -                setPartitioner(StorageService.getPartitioner());
 -            }
 +                private String keyspace;
  
 -            public CFMetaData getTableMetadata(String tableName)
 -            {
 -                return Schema.instance.getCFMetaData(keyspace, tableName);
 -            }
 -        }, new OutputHandler.SystemOutput(false, false));
 +                public void init(String keyspace)
 +                {
 +                    this.keyspace = keyspace;
 +                    for (Range<Token> range : 
StorageService.instance.getLocalRanges("cql_keyspace"))
 +                        addRangeForEndpoint(range, 
FBUtilities.getBroadcastAddress());
 +                }
  
 -        loader.stream().get();
 +                public CFMetaData getTableMetadata(String cfName)
 +                {
 +                    return Schema.instance.getCFMetaData(keyspace, cfName);
 +                }
 +            }, new OutputHandler.SystemOutput(false, false));
 +
 +            loader.stream().get();
  
 -        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * FROM 
cql_keyspace.table1;");
 -        assertEquals(4, rs.size());
 +            UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * 
FROM cql_keyspace.table1;");
 +            assertEquals(4, rs.size());
  
 -        Iterator<UntypedResultSet.Row> iter = rs.iterator();
 -        UntypedResultSet.Row row;
 +            Iterator<UntypedResultSet.Row> iter = rs.iterator();
 +            UntypedResultSet.Row row;
  
 -        row = iter.next();
 -        assertEquals(0, row.getInt("k"));
 -        assertEquals("test1", row.getString("v1"));
 -        assertEquals(24, row.getInt("v2"));
 +            row = iter.next();
 +            assertEquals(0, row.getInt("k"));
 +            assertEquals("test1", row.getString("v1"));
 +            assertEquals(24, row.getInt("v2"));
  
 -        row = iter.next();
 -        assertEquals(1, row.getInt("k"));
 -        assertEquals("test2", row.getString("v1"));
 -        assertFalse(row.has("v2"));
 +            row = iter.next();
 +            assertEquals(1, row.getInt("k"));
 +            assertEquals("test2", row.getString("v1"));
 +            //assertFalse(row.has("v2"));
 +            assertEquals(44, row.getInt("v2"));
  
 -        row = iter.next();
 -        assertEquals(2, row.getInt("k"));
 -        assertEquals("test3", row.getString("v1"));
 -        assertEquals(42, row.getInt("v2"));
 +            row = iter.next();
 +            assertEquals(2, row.getInt("k"));
 +            assertEquals("test3", row.getString("v1"));
 +            assertEquals(42, row.getInt("v2"));
  
 -        row = iter.next();
 -        assertEquals(3, row.getInt("k"));
 -        assertEquals(null, row.getBytes("v1")); // Using getBytes because we 
know it won't NPE
 -        assertEquals(12, row.getInt("v2"));
 +            row = iter.next();
 +            assertEquals(3, row.getInt("k"));
 +            assertEquals(null, row.getBytes("v1")); // Using getBytes because 
we know it won't NPE
 +            assertEquals(12, row.getInt("v2"));
 +        }
      }
  
+     @Test(expected = IllegalArgumentException.class)
+     public void testForbidCounterUpdates() throws Exception
+     {
+         String KS = "cql_keyspace";
+         String TABLE = "counter1";
+ 
+         File tempdir = Files.createTempDir();
+         File dataDir = new File(tempdir.getAbsolutePath() + File.separator + 
KS + File.separator + TABLE);
+         assert dataDir.mkdirs();
+ 
+         String schema = "CREATE TABLE cql_keyspace.counter1 (" +
+                         "  my_id int, " +
+                         "  my_counter counter, " +
+                         "  PRIMARY KEY (my_id)" +
+                         ")";
+         String insert = String.format("UPDATE cql_keyspace.counter1 SET 
my_counter = my_counter - ? WHERE my_id = ?");
+         CQLSSTableWriter.builder().inDirectory(dataDir)
+                         .forTable(schema)
+                         
.withPartitioner(StorageService.instance.getPartitioner())
+                         .using(insert).build();
+     }
+ 
      @Test
      public void testSyncWithinPartition() throws Exception
      {

Reply via email to