You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/06/03 18:06:17 UTC
[3/6] cassandra git commit: Fix empty partition assertion in unsorted
sstable writing tools
Fix empty partition assertion in unsorted sstable writing tools
patch by Fabien Rousseau; reviewed by benedict for CASSANDRA-9071
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/66a48e7a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/66a48e7a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/66a48e7a
Branch: refs/heads/trunk
Commit: 66a48e7ab137e7ec54b0bab5eaee44a9449930dd
Parents: 655f056
Author: Fabien Rousseau <fa...@yahoo.fr>
Authored: Wed Jun 3 17:00:10 2015 +0100
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Wed Jun 3 17:00:10 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../io/sstable/SSTableSimpleUnsortedWriter.java | 17 +++++++++---
.../io/sstable/CQLSSTableWriterTest.java | 29 ++++++++++++++++++++
3 files changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/66a48e7a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f5c3b41..4d38e1e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.6
+ * Fix empty partition assertion in unsorted sstable writing tools (CASSANDRA-9071)
* Ensure truncate without snapshot cannot produce corrupt responses (CASSANDRA-9388)
* Consistent error message when a table mixes counter and non-counter
columns (CASSANDRA-9492)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/66a48e7a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
index 4d7f4fa..9ee9ea1 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
@@ -175,6 +175,7 @@ public class SSTableSimpleUnsortedWriter extends AbstractSSTableSimpleWriter
buffer = new Buffer();
currentSize = 0;
columnFamily = getColumnFamily();
+ buffer.setFirstInsertedKey(currentKey);
}
private void put(Buffer buffer) throws IOException
@@ -207,7 +208,17 @@ public class SSTableSimpleUnsortedWriter extends AbstractSSTableSimpleWriter
}
// typedef
- private static class Buffer extends TreeMap<DecoratedKey, ColumnFamily> {}
+ private static class Buffer extends TreeMap<DecoratedKey, ColumnFamily> {
+ private DecoratedKey firstInsertedKey;
+
+ public void setFirstInsertedKey(DecoratedKey firstInsertedKey) {
+ this.firstInsertedKey = firstInsertedKey;
+ }
+
+ public DecoratedKey getFirstInsertedKey() {
+ return firstInsertedKey;
+ }
+ }
private class DiskWriter extends Thread
{
@@ -225,14 +236,12 @@ public class SSTableSimpleUnsortedWriter extends AbstractSSTableSimpleWriter
return;
writer = getWriter();
- boolean first = true;
for (Map.Entry<DecoratedKey, ColumnFamily> entry : b.entrySet())
{
if (entry.getValue().getColumnCount() > 0)
writer.append(entry.getKey(), entry.getValue());
- else if (!first)
+ else if (!entry.getKey().equals(b.getFirstInsertedKey()))
throw new AssertionError("Empty partition");
- first = false;
}
writer.close();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/66a48e7a/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 a7b751e..fa5cbb4 100644
--- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java
@@ -22,6 +22,7 @@ import java.io.FilenameFilter;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Iterator;
+import java.util.UUID;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.Files;
@@ -173,6 +174,34 @@ public class CQLSSTableWriterTest
}
+ @Test
+ public void testSyncNoEmptyRows() throws Exception
+ {
+ // Check that the write does not throw an empty partition error (#9071)
+ File tempdir = Files.createTempDir();
+ String schema = "CREATE TABLE ks.test2 ("
+ + " k UUID,"
+ + " c int,"
+ + " PRIMARY KEY (k)"
+ + ")";
+ String insert = "INSERT INTO ks.test2 (k, c) VALUES (?, ?)";
+ CQLSSTableWriter writer = CQLSSTableWriter.builder()
+ .inDirectory(tempdir)
+ .forTable(schema)
+ .withPartitioner(StorageService.instance.getPartitioner())
+ .using(insert)
+ .withBufferSizeInMB(1)
+ .build();
+
+ for (int i = 0 ; i < 50000 ; i++) {
+ writer.addRow(UUID.randomUUID(), 0);
+ }
+ writer.close();
+
+ }
+
+
+
private static final int NUMBER_WRITES_IN_RUNNABLE = 10;
private class WriterThread extends Thread
{