Author: gdusbabek
Date: Tue Dec 28 17:15:26 2010
New Revision: 1053392
URL: http://svn.apache.org/viewvc?rev=1053392&view=rev
Log:
refactor SSTableUtils to add chainable configuration. patch by stuhood,
reviewed by gdusbabek. CASSANDRA-1822
Modified:
cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterAESCommutativeTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java
cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
Modified:
cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
---
cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java
(original)
+++
cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java
Tue Dec 28 17:15:26 2010
@@ -86,7 +86,7 @@ public class LongCompactionSpeedTest ext
}
rows.put(key, SSTableUtils.createCF(Long.MIN_VALUE,
Integer.MIN_VALUE, cols));
}
- SSTableReader sstable = SSTableUtils.writeSSTable(rows);
+ SSTableReader sstable = SSTableUtils.prepare().write(rows);
sstables.add(sstable);
store.addSSTable(sstable);
}
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableTest.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableTest.java
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableTest.java
Tue Dec 28 17:15:26 2010
@@ -40,7 +40,7 @@ public class SSTableTest extends Cleanup
Map<ByteBuffer, ByteBuffer> map = new HashMap<ByteBuffer,ByteBuffer>();
map.put(key, bytes);
- SSTableReader ssTable = SSTableUtils.writeRawSSTable("Keyspace1",
"Standard1", map);
+ SSTableReader ssTable =
SSTableUtils.prepare().cf("Standard1").writeRaw(map);
// verify
verifySingle(ssTable, bytes, key);
@@ -68,7 +68,7 @@ public class SSTableTest extends Cleanup
}
// write
- SSTableReader ssTable = SSTableUtils.writeRawSSTable("Keyspace1",
"Standard2", map);
+ SSTableReader ssTable =
SSTableUtils.prepare().cf("Standard2").writeRaw(map);
// verify
verifyMany(ssTable, map);
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java
Tue Dec 28 17:15:26 2010
@@ -71,47 +71,98 @@ public class SSTableUtils
return datafile;
}
- public static SSTableReader writeSSTable(Set<String> keys) throws
IOException
+ /**
+ * @return A Context with chainable methods to configure and write a
SSTable.
+ */
+ public static Context prepare()
{
- Map<String, ColumnFamily> map = new HashMap<String, ColumnFamily>();
- for (String key : keys)
- {
- ColumnFamily cf = ColumnFamily.create(TABLENAME, CFNAME);
- cf.addColumn(new Column(ByteBuffer.wrap(key.getBytes()),
ByteBuffer.wrap(key.getBytes()), 0));
- map.put(key, cf);
- }
- return writeSSTable(map);
+ return new Context();
}
- public static SSTableReader writeSSTable(Map<String, ColumnFamily>
entries) throws IOException
+ public static class Context
{
- Map<ByteBuffer, ByteBuffer> map = new HashMap<ByteBuffer,
ByteBuffer>();
- for (Map.Entry<String, ColumnFamily> entry : entries.entrySet())
+ private String ksname = TABLENAME;
+ private String cfname = CFNAME;
+ private Descriptor dest = null;
+ private boolean cleanup = true;
+ private int generation = 0;
+
+ Context() {}
+
+ public Context ks(String ksname)
{
- DataOutputBuffer buffer = new DataOutputBuffer();
- ColumnFamily.serializer().serializeWithIndexes(entry.getValue(),
buffer);
- map.put(ByteBuffer.wrap(entry.getKey().getBytes()),
ByteBuffer.wrap(Arrays.copyOf(buffer.getData(), buffer.getLength())));
+ this.ksname = ksname;
+ return this;
}
- return writeRawSSTable(TABLENAME, CFNAME, map);
- }
- public static SSTableReader writeRawSSTable(String tablename, String
cfname, Map<ByteBuffer, ByteBuffer> entries) throws IOException
- {
- return writeRawSSTable(tablename, cfname, entries, 0);
- }
+ public Context cf(String cfname)
+ {
+ this.cfname = cfname;
+ return this;
+ }
- public static SSTableReader writeRawSSTable(String tablename, String
cfname, Map<ByteBuffer, ByteBuffer> entries, int generation) throws IOException
- {
- File datafile = tempSSTableFile(tablename, cfname, generation);
- SSTableWriter writer = new SSTableWriter(datafile.getAbsolutePath(),
entries.size());
- SortedMap<DecoratedKey, ByteBuffer> sortedEntries = new
TreeMap<DecoratedKey, ByteBuffer>();
- for (Map.Entry<ByteBuffer, ByteBuffer> entry : entries.entrySet())
- sortedEntries.put(writer.partitioner.decorateKey(entry.getKey()),
entry.getValue());
- for (Map.Entry<DecoratedKey, ByteBuffer> entry :
sortedEntries.entrySet())
- writer.append(entry.getKey(), entry.getValue());
- new
File(writer.descriptor.filenameFor(Component.PRIMARY_INDEX)).deleteOnExit();
- new
File(writer.descriptor.filenameFor(Component.FILTER)).deleteOnExit();
- return writer.closeAndOpenReader();
- }
+ /**
+ * Set an alternate path for the written SSTable: if unset, the
SSTable will
+ * be cleaned up on JVM exit.
+ */
+ public Context dest(Descriptor dest)
+ {
+ this.dest = dest;
+ this.cleanup = false;
+ return this;
+ }
+ /**
+ * Sets the generation number for the generated SSTable. Ignored if
"dest()" is set.
+ */
+ public Context generation(int generation)
+ {
+ this.generation = generation;
+ return this;
+ }
+
+ public SSTableReader write(Set<String> keys) throws IOException
+ {
+ Map<String, ColumnFamily> map = new HashMap<String,
ColumnFamily>();
+ for (String key : keys)
+ {
+ ColumnFamily cf = ColumnFamily.create(ksname, cfname);
+ cf.addColumn(new Column(ByteBuffer.wrap(key.getBytes()),
ByteBuffer.wrap(key.getBytes()), 0));
+ map.put(key, cf);
+ }
+ return write(map);
+ }
+
+ public SSTableReader write(Map<String, ColumnFamily> entries) throws
IOException
+ {
+ Map<ByteBuffer, ByteBuffer> map = new HashMap<ByteBuffer,
ByteBuffer>();
+ for (Map.Entry<String, ColumnFamily> entry : entries.entrySet())
+ {
+ DataOutputBuffer buffer = new DataOutputBuffer();
+
ColumnFamily.serializer().serializeWithIndexes(entry.getValue(), buffer);
+ map.put(ByteBuffer.wrap(entry.getKey().getBytes()),
+ ByteBuffer.wrap(buffer.asByteArray()));
+ }
+ return writeRaw(map);
+ }
+
+ /**
+ * @Deprecated: Writes the binary content of a row, which should be
encapsulated.
+ */
+ public SSTableReader writeRaw(Map<ByteBuffer, ByteBuffer> entries)
throws IOException
+ {
+ File datafile = (dest == null) ? tempSSTableFile(ksname, cfname,
generation) : new File(dest.filenameFor(Component.DATA));
+ SSTableWriter writer = new
SSTableWriter(datafile.getAbsolutePath(), entries.size());
+ SortedMap<DecoratedKey, ByteBuffer> sortedEntries = new
TreeMap<DecoratedKey, ByteBuffer>();
+ for (Map.Entry<ByteBuffer, ByteBuffer> entry : entries.entrySet())
+
sortedEntries.put(writer.partitioner.decorateKey(entry.getKey()),
entry.getValue());
+ for (Map.Entry<DecoratedKey, ByteBuffer> entry :
sortedEntries.entrySet())
+ writer.append(entry.getKey(), entry.getValue());
+ SSTableReader reader = writer.closeAndOpenReader();
+ if (cleanup)
+ for (Component comp : reader.components)
+ new
File(reader.descriptor.filenameFor(comp)).deleteOnExit();
+ return reader;
+ }
+ }
}
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterAESCommutativeTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterAESCommutativeTest.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterAESCommutativeTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterAESCommutativeTest.java
Tue Dec 28 17:15:26 2010
@@ -157,7 +157,7 @@ public class SSTableWriterAESCommutative
cf.clear();
// write out unmodified CF
- SSTableReader orig = SSTableUtils.writeRawSSTable(keyspace, cfname,
entries, 0);
+ SSTableReader orig =
SSTableUtils.prepare().ks(keyspace).cf(cfname).generation(0).writeRaw(entries);
// whack the index to trigger the recover
FileUtils.deleteWithConfirm(orig.descriptor.filenameFor(Component.PRIMARY_INDEX));
@@ -170,7 +170,7 @@ public class SSTableWriterAESCommutative
).get();
// write out cleaned CF
- SSTableReader cleaned = SSTableUtils.writeRawSSTable(keyspace, cfname,
cleanedEntries, 0);
+ SSTableReader cleaned =
SSTableUtils.prepare().ks(keyspace).cf(cfname).generation(0).writeRaw(cleanedEntries);
// verify
BufferedRandomAccessFile origFile = new
BufferedRandomAccessFile(orig.descriptor.filenameFor(SSTable.COMPONENT_DATA),
"r", 8 * 1024 * 1024);
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java
Tue Dec 28 17:15:26 2010
@@ -76,7 +76,7 @@ public class SSTableWriterTest extends C
ColumnFamily.serializer().serializeWithIndexes(cf, buffer);
entries.put(ByteBufferUtil.bytes("k3"),
ByteBuffer.wrap(Arrays.copyOf(buffer.getData(), buffer.getLength())));
- SSTableReader orig = SSTableUtils.writeRawSSTable("Keyspace1",
"Indexed1", entries);
+ SSTableReader orig =
SSTableUtils.prepare().cf("Indexed1").writeRaw(entries);
// whack the index to trigger the recover
FileUtils.deleteWithConfirm(orig.descriptor.filenameFor(Component.PRIMARY_INDEX));
FileUtils.deleteWithConfirm(orig.descriptor.filenameFor(Component.FILTER));
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java?rev=1053392&r1=1053391&r2=1053392&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
Tue Dec 28 17:15:26 2010
@@ -119,7 +119,7 @@ public class StreamingTransferTest exten
content.add("transfer1");
content.add("transfer2");
content.add("transfer3");
- SSTableReader sstable = SSTableUtils.writeSSTable(content);
+ SSTableReader sstable = SSTableUtils.prepare().write(content);
String tablename = sstable.getTableName();
String cfname = sstable.getColumnFamilyName();
@@ -127,7 +127,7 @@ public class StreamingTransferTest exten
content2.add("test");
content2.add("test2");
content2.add("test3");
- SSTableReader sstable2 = SSTableUtils.writeSSTable(content2);
+ SSTableReader sstable2 = SSTableUtils.prepare().write(content2);
// transfer the first and last key
IPartitioner p = StorageService.getPartitioner();