You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2015/11/10 14:46:30 UTC
[1/5] cassandra git commit: Simplify row cache invalidation code
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 b408f9ebe -> 1e64a9d03
Simplify row cache invalidation code
patch by Jonathan Ellis; reviewed by Aleksey Yeschenko for
CASSANDRA-10396
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d867ac1f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d867ac1f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d867ac1f
Branch: refs/heads/cassandra-3.0
Commit: d867ac1f41c59b31f8fb4f54a06c0118018cfc81
Parents: b0def95
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Sep 24 13:24:57 2015 -0700
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Mon Nov 9 20:05:32 2015 +0000
----------------------------------------------------------------------
.../org/apache/cassandra/db/ColumnFamilyStore.java | 15 +++------------
.../db/compaction/CompactionController.java | 4 +---
.../cassandra/db/compaction/CompactionManager.java | 2 +-
.../apache/cassandra/io/sstable/SSTableRewriter.java | 3 +--
.../org/apache/cassandra/streaming/StreamReader.java | 2 +-
test/unit/org/apache/cassandra/db/RowCacheTest.java | 2 +-
.../db/compaction/CompactionsPurgeTest.java | 2 +-
7 files changed, 9 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index d553f4d..b112e0e 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1226,7 +1226,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
return String.format("%.2f/%.2f", onHeap, offHeap);
}
- public void maybeUpdateRowCache(DecoratedKey key)
+ public void maybeInvalidateCachedRow(DecoratedKey key)
{
if (!isRowCacheEnabled())
return;
@@ -1247,7 +1247,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
long start = System.nanoTime();
Memtable mt = data.getMemtableFor(opGroup, replayPosition);
final long timeDelta = mt.put(key, columnFamily, indexer, opGroup);
- maybeUpdateRowCache(key);
+ maybeInvalidateCachedRow(key);
metric.samplers.get(Sampler.WRITES).addSample(key.getKey(), key.hashCode(), 1);
metric.writeLatency.addNano(System.nanoTime() - start);
if(timeDelta < Long.MAX_VALUE)
@@ -2047,7 +2047,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
RowCacheKey key = keyIter.next();
DecoratedKey dk = partitioner.decorateKey(ByteBuffer.wrap(key.key));
if (key.ksAndCFName.equals(metadata.ksAndCFName) && !Range.isInRanges(dk.getToken(), ranges))
- invalidateCachedRow(dk);
+ maybeInvalidateCachedRow(dk);
}
if (metadata.isCounter())
@@ -2532,15 +2532,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
CacheService.instance.rowCache.remove(key);
}
- public void invalidateCachedRow(DecoratedKey key)
- {
- UUID cfId = Schema.instance.getId(keyspace.getName(), this.name);
- if (cfId == null)
- return; // secondary index
-
- invalidateCachedRow(new RowCacheKey(metadata.ksAndCFName, key));
- }
-
public ClockAndCount getCachedCounter(ByteBuffer partitionKey, CellName cellName)
{
if (CacheService.instance.counterCache.getCapacity() == 0L) // counter cache disabled.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/src/java/org/apache/cassandra/db/compaction/CompactionController.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionController.java b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index 5f0a198..24ef843 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -24,8 +24,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.ColumnFamilyStore;
-import org.apache.cassandra.db.lifecycle.SSTableIntervalTree;
-import org.apache.cassandra.db.lifecycle.Tracker;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.RowPosition;
import org.apache.cassandra.utils.AlwaysPresentFilter;
@@ -191,7 +189,7 @@ public class CompactionController implements AutoCloseable
public void invalidateCachedRow(DecoratedKey key)
{
- cfs.invalidateCachedRow(key);
+ cfs.maybeInvalidateCachedRow(key);
}
public void close()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 0c6e24f..8537aca 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -934,7 +934,7 @@ public class CompactionManager implements CompactionManagerMBean
if (Range.isInRanges(row.getKey().getToken(), ranges))
return row;
- cfs.invalidateCachedRow(row.getKey());
+ cfs.maybeInvalidateCachedRow(row.getKey());
if (indexedColumnsInRow != null)
indexedColumnsInRow.clear();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
index dc4fe75..b08b038 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.io.sstable;
import java.util.*;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.util.concurrent.Runnables;
import org.apache.cassandra.cache.InstrumentingCache;
import org.apache.cassandra.cache.KeyCacheKey;
@@ -119,7 +118,7 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
{
if (index == null)
{
- cfs.invalidateCachedRow(row.key);
+ cfs.maybeInvalidateCachedRow(row.key);
}
else
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/src/java/org/apache/cassandra/streaming/StreamReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/streaming/StreamReader.java b/src/java/org/apache/cassandra/streaming/StreamReader.java
index 1ccebb0..88591da 100644
--- a/src/java/org/apache/cassandra/streaming/StreamReader.java
+++ b/src/java/org/apache/cassandra/streaming/StreamReader.java
@@ -171,6 +171,6 @@ public class StreamReader
{
DecoratedKey key = StorageService.getPartitioner().decorateKey(ByteBufferUtil.readWithShortLength(in));
writer.appendFromStream(key, cfs.metadata, in, inputVersion);
- cfs.invalidateCachedRow(key);
+ cfs.maybeInvalidateCachedRow(key);
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/test/unit/org/apache/cassandra/db/RowCacheTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RowCacheTest.java b/test/unit/org/apache/cassandra/db/RowCacheTest.java
index 5912d7c..69c831d 100644
--- a/test/unit/org/apache/cassandra/db/RowCacheTest.java
+++ b/test/unit/org/apache/cassandra/db/RowCacheTest.java
@@ -133,7 +133,7 @@ public class RowCacheTest
int keysLeft = 109;
for (int i = 109; i >= 10; i--)
{
- cachedStore.invalidateCachedRow(Util.dk("key" + i));
+ cachedStore.maybeInvalidateCachedRow(Util.dk("key" + i));
assert CacheService.instance.rowCache.size() == keysLeft;
keysLeft--;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d867ac1f/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java b/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
index e5baab6..bfe8042 100644
--- a/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
@@ -127,7 +127,7 @@ public class CompactionsPurgeTest
// major compact and test that all columns but the resurrected one is completely gone
FBUtilities.waitOnFutures(CompactionManager.instance.submitMaximal(cfs, Integer.MAX_VALUE, false));
- cfs.invalidateCachedRow(key);
+ cfs.maybeInvalidateCachedRow(key);
ColumnFamily cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key, cfName, System.currentTimeMillis()));
assertColumns(cf, "5");
assertNotNull(cf.getColumn(cellname(String.valueOf(5))));
[5/5] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Posted by al...@apache.org.
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/cassandra-3.0
Commit: 1e64a9d0369e07a195c6267d14438337773d9248
Parents: b408f9e ef0e447
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Nov 10 13:45:11 2015 +0000
Committer: Aleksey Yeschenko <al...@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
{
[3/5] cassandra git commit: Reject counter writes in CQLSSTableWriter
Posted by al...@apache.org.
Reject counter writes in CQLSSTableWriter
patch by Paulo Motta; reviewed by Aleksey Yeschenko for CASSANDRA-10258
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3674ad9d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3674ad9d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3674ad9d
Branch: refs/heads/cassandra-3.0
Commit: 3674ad9dab8f29173d7d4ee82488a8e9ea586240
Parents: 852a8ba
Author: Paulo Motta <pa...@gmail.com>
Authored: Thu Oct 22 11:38:31 2015 -0700
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Nov 10 13:41:01 2015 +0000
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/io/sstable/CQLSSTableWriter.java | 2 ++
.../io/sstable/CQLSSTableWriterTest.java | 22 ++++++++++++++++++++
3 files changed, 25 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3674ad9d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 123c1f3..fa2017a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.12
+ * 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)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3674ad9d/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
index c364171..ae8a392 100644
--- a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
@@ -453,6 +453,8 @@ public class CQLSSTableWriter implements Closeable
this.boundNames = p.right;
if (this.insert.hasConditions())
throw new IllegalArgumentException("Conditional statements are not supported");
+ if (this.insert.isCounter())
+ throw new IllegalArgumentException("Counter update statements are not supported");
if (this.boundNames.isEmpty())
throw new IllegalArgumentException("Provided insert statement has no bind variables");
return this;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3674ad9d/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
index fa5cbb4..9c8a2c2 100644
--- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
@@ -135,6 +135,28 @@ public class CQLSSTableWriterTest
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
{
[4/5] cassandra git commit: Merge branch 'cassandra-2.1' into
cassandra-2.2
Posted by al...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ef0e447a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ef0e447a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ef0e447a
Branch: refs/heads/cassandra-3.0
Commit: ef0e447addccf97aadc527cea67d303523a88989
Parents: 48b685e 3674ad9
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Nov 10 13:44:49 2015 +0000
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Nov 10 13:44:49 2015 +0000
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/io/sstable/CQLSSTableWriter.java | 2 ++
.../io/sstable/CQLSSTableWriterTest.java | 22 ++++++++++++++++++++
3 files changed, 25 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ef0e447a/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fa868fe,fa2017a..5edad20
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,13 -1,5 +1,14 @@@
-2.1.12
+2.2.4
+ * (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)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ef0e447a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ef0e447a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
----------------------------------------------------------------------
[2/5] cassandra git commit: Revert "Simplify row cache invalidation
code"
Posted by al...@apache.org.
Revert "Simplify row cache invalidation code"
This reverts commit d867ac1f41c59b31f8fb4f54a06c0118018cfc81.
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/48b685e8
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/48b685e8
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/48b685e8
Branch: refs/heads/cassandra-3.0
Commit: 48b685e8521ea54d93c0d8d9e4ea80ecb1400dce
Parents: d867ac1
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Mon Nov 9 20:15:44 2015 +0000
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Mon Nov 9 20:15:44 2015 +0000
----------------------------------------------------------------------
.../org/apache/cassandra/db/ColumnFamilyStore.java | 15 ++++++++++++---
.../db/compaction/CompactionController.java | 4 +++-
.../cassandra/db/compaction/CompactionManager.java | 2 +-
.../apache/cassandra/io/sstable/SSTableRewriter.java | 3 ++-
.../org/apache/cassandra/streaming/StreamReader.java | 2 +-
test/unit/org/apache/cassandra/db/RowCacheTest.java | 2 +-
.../db/compaction/CompactionsPurgeTest.java | 2 +-
7 files changed, 21 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index b112e0e..d553f4d 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1226,7 +1226,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
return String.format("%.2f/%.2f", onHeap, offHeap);
}
- public void maybeInvalidateCachedRow(DecoratedKey key)
+ public void maybeUpdateRowCache(DecoratedKey key)
{
if (!isRowCacheEnabled())
return;
@@ -1247,7 +1247,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
long start = System.nanoTime();
Memtable mt = data.getMemtableFor(opGroup, replayPosition);
final long timeDelta = mt.put(key, columnFamily, indexer, opGroup);
- maybeInvalidateCachedRow(key);
+ maybeUpdateRowCache(key);
metric.samplers.get(Sampler.WRITES).addSample(key.getKey(), key.hashCode(), 1);
metric.writeLatency.addNano(System.nanoTime() - start);
if(timeDelta < Long.MAX_VALUE)
@@ -2047,7 +2047,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
RowCacheKey key = keyIter.next();
DecoratedKey dk = partitioner.decorateKey(ByteBuffer.wrap(key.key));
if (key.ksAndCFName.equals(metadata.ksAndCFName) && !Range.isInRanges(dk.getToken(), ranges))
- maybeInvalidateCachedRow(dk);
+ invalidateCachedRow(dk);
}
if (metadata.isCounter())
@@ -2532,6 +2532,15 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
CacheService.instance.rowCache.remove(key);
}
+ public void invalidateCachedRow(DecoratedKey key)
+ {
+ UUID cfId = Schema.instance.getId(keyspace.getName(), this.name);
+ if (cfId == null)
+ return; // secondary index
+
+ invalidateCachedRow(new RowCacheKey(metadata.ksAndCFName, key));
+ }
+
public ClockAndCount getCachedCounter(ByteBuffer partitionKey, CellName cellName)
{
if (CacheService.instance.counterCache.getCapacity() == 0L) // counter cache disabled.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/src/java/org/apache/cassandra/db/compaction/CompactionController.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionController.java b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index 24ef843..5f0a198 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -24,6 +24,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.lifecycle.SSTableIntervalTree;
+import org.apache.cassandra.db.lifecycle.Tracker;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.RowPosition;
import org.apache.cassandra.utils.AlwaysPresentFilter;
@@ -189,7 +191,7 @@ public class CompactionController implements AutoCloseable
public void invalidateCachedRow(DecoratedKey key)
{
- cfs.maybeInvalidateCachedRow(key);
+ cfs.invalidateCachedRow(key);
}
public void close()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 8537aca..0c6e24f 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -934,7 +934,7 @@ public class CompactionManager implements CompactionManagerMBean
if (Range.isInRanges(row.getKey().getToken(), ranges))
return row;
- cfs.maybeInvalidateCachedRow(row.getKey());
+ cfs.invalidateCachedRow(row.getKey());
if (indexedColumnsInRow != null)
indexedColumnsInRow.clear();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
index b08b038..dc4fe75 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
@@ -20,6 +20,7 @@ package org.apache.cassandra.io.sstable;
import java.util.*;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.util.concurrent.Runnables;
import org.apache.cassandra.cache.InstrumentingCache;
import org.apache.cassandra.cache.KeyCacheKey;
@@ -118,7 +119,7 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
{
if (index == null)
{
- cfs.maybeInvalidateCachedRow(row.key);
+ cfs.invalidateCachedRow(row.key);
}
else
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/src/java/org/apache/cassandra/streaming/StreamReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/streaming/StreamReader.java b/src/java/org/apache/cassandra/streaming/StreamReader.java
index 88591da..1ccebb0 100644
--- a/src/java/org/apache/cassandra/streaming/StreamReader.java
+++ b/src/java/org/apache/cassandra/streaming/StreamReader.java
@@ -171,6 +171,6 @@ public class StreamReader
{
DecoratedKey key = StorageService.getPartitioner().decorateKey(ByteBufferUtil.readWithShortLength(in));
writer.appendFromStream(key, cfs.metadata, in, inputVersion);
- cfs.maybeInvalidateCachedRow(key);
+ cfs.invalidateCachedRow(key);
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/test/unit/org/apache/cassandra/db/RowCacheTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RowCacheTest.java b/test/unit/org/apache/cassandra/db/RowCacheTest.java
index 69c831d..5912d7c 100644
--- a/test/unit/org/apache/cassandra/db/RowCacheTest.java
+++ b/test/unit/org/apache/cassandra/db/RowCacheTest.java
@@ -133,7 +133,7 @@ public class RowCacheTest
int keysLeft = 109;
for (int i = 109; i >= 10; i--)
{
- cachedStore.maybeInvalidateCachedRow(Util.dk("key" + i));
+ cachedStore.invalidateCachedRow(Util.dk("key" + i));
assert CacheService.instance.rowCache.size() == keysLeft;
keysLeft--;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/48b685e8/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java b/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
index bfe8042..e5baab6 100644
--- a/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/CompactionsPurgeTest.java
@@ -127,7 +127,7 @@ public class CompactionsPurgeTest
// major compact and test that all columns but the resurrected one is completely gone
FBUtilities.waitOnFutures(CompactionManager.instance.submitMaximal(cfs, Integer.MAX_VALUE, false));
- cfs.maybeInvalidateCachedRow(key);
+ cfs.invalidateCachedRow(key);
ColumnFamily cf = cfs.getColumnFamily(QueryFilter.getIdentityFilter(key, cfName, System.currentTimeMillis()));
assertColumns(cf, "5");
assertNotNull(cf.getColumn(cellname(String.valueOf(5))));