Updated Branches: refs/heads/trunk 417b175fa -> 17dd5cd18
Minor reduction in serializer fetching patch by dbrosius; reviewed by slebresne for CASSANDRA-4082 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/17dd5cd1 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/17dd5cd1 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/17dd5cd1 Branch: refs/heads/trunk Commit: 17dd5cd18736a11255dad686286aa0b30ead8a42 Parents: 417b175 Author: Sylvain Lebresne <[email protected]> Authored: Tue Mar 27 15:19:25 2012 +0200 Committer: Sylvain Lebresne <[email protected]> Committed: Tue Mar 27 15:19:25 2012 +0200 ---------------------------------------------------------------------- .../cassandra/db/ColumnFamilySerializer.java | 7 +++++-- .../db/columniterator/IndexedSliceReader.java | 10 ++++++---- .../db/columniterator/SSTableNamesIterator.java | 14 +++++++------- .../db/compaction/LazilyCompactedRow.java | 4 +++- .../apache/cassandra/io/sstable/SSTableWriter.java | 3 ++- 5 files changed, 23 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/17dd5cd1/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java index 449ddbd..53b2183 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java @@ -80,8 +80,10 @@ public class ColumnFamilySerializer implements ISerializer<ColumnFamily> Collection<IColumn> columns = columnFamily.getSortedColumns(); int count = columns.size(); dos.writeInt(count); + + IColumnSerializer columnSerializer = columnFamily.getColumnSerializer(); for (IColumn column : columns) - columnFamily.getColumnSerializer().serialize(column, dos); + columnSerializer.serialize(column, dos); } catch (IOException e) { @@ -124,9 +126,10 @@ public class ColumnFamilySerializer implements ISerializer<ColumnFamily> /* column count is already read from DataInput */ public void deserializeColumns(DataInput dis, ColumnFamily cf, int size, IColumnSerializer.Flag flag) throws IOException { + IColumnSerializer columnSerializer = cf.getColumnSerializer(); for (int i = 0; i < size; ++i) { - IColumn column = cf.getColumnSerializer().deserialize(dis, flag, (int) (System.currentTimeMillis() / 1000)); + IColumn column = columnSerializer.deserialize(dis, flag, (int) (System.currentTimeMillis() / 1000)); cf.addColumn(column); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/17dd5cd1/src/java/org/apache/cassandra/db/columniterator/IndexedSliceReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/columniterator/IndexedSliceReader.java b/src/java/org/apache/cassandra/db/columniterator/IndexedSliceReader.java index 50ada51..c5932cd 100644 --- a/src/java/org/apache/cassandra/db/columniterator/IndexedSliceReader.java +++ b/src/java/org/apache/cassandra/db/columniterator/IndexedSliceReader.java @@ -31,11 +31,11 @@ import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.IColumn; import org.apache.cassandra.db.RowIndexEntry; import org.apache.cassandra.db.marshal.AbstractType; +import org.apache.cassandra.io.IColumnSerializer; import org.apache.cassandra.io.sstable.IndexHelper; +import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.io.util.FileDataInput; import org.apache.cassandra.io.util.FileMark; -import org.apache.cassandra.io.sstable.SSTableReader; -import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.utils.ByteBufferUtil; /** @@ -222,11 +222,12 @@ class IndexedSliceReader extends AbstractIterator<IColumn> implements IColumnIte if (file == null) file = originalInput == null ? sstable.getFileDataInput(positionToSeek) : originalInput; + IColumnSerializer columnSerializer = emptyColumnFamily.getColumnSerializer(); file.seek(positionToSeek); FileMark mark = file.mark(); while (file.bytesPastMark(mark) < curColPosition.width && !outOfBounds) { - IColumn column = emptyColumnFamily.getColumnSerializer().deserialize(file); + IColumn column = columnSerializer.deserialize(file); if (reversed) blockColumns.addFirst(column); else @@ -251,10 +252,11 @@ class IndexedSliceReader extends AbstractIterator<IColumn> implements IColumnIte { private SimpleBlockFetcher() throws IOException { + IColumnSerializer columnSerializer = emptyColumnFamily.getColumnSerializer(); int columns = file.readInt(); for (int i = 0; i < columns; i++) { - IColumn column = emptyColumnFamily.getColumnSerializer().deserialize(file); + IColumn column = columnSerializer.deserialize(file); if (reversed) blockColumns.addFirst(column); else http://git-wip-us.apache.org/repos/asf/cassandra/blob/17dd5cd1/src/java/org/apache/cassandra/db/columniterator/SSTableNamesIterator.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/columniterator/SSTableNamesIterator.java b/src/java/org/apache/cassandra/db/columniterator/SSTableNamesIterator.java index 068933c..72f37de 100644 --- a/src/java/org/apache/cassandra/db/columniterator/SSTableNamesIterator.java +++ b/src/java/org/apache/cassandra/db/columniterator/SSTableNamesIterator.java @@ -22,26 +22,24 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.*; -import org.apache.cassandra.db.ColumnFamilySerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.ColumnFamily; +import org.apache.cassandra.db.ColumnFamilySerializer; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.IColumn; import org.apache.cassandra.db.RowIndexEntry; import org.apache.cassandra.db.marshal.AbstractType; -import org.apache.cassandra.io.sstable.SSTableReader; +import org.apache.cassandra.io.IColumnSerializer; import org.apache.cassandra.io.sstable.IndexHelper; +import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.io.util.FileDataInput; import org.apache.cassandra.io.util.FileMark; import org.apache.cassandra.io.util.FileUtils; -import org.apache.cassandra.utils.BloomFilter; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.Filter; -import org.apache.cassandra.utils.Pair; public class SSTableNamesIterator extends SimpleAbstractColumnIterator implements IColumnIterator { @@ -195,11 +193,12 @@ public class SSTableNamesIterator extends SimpleAbstractColumnIterator implement private void readSimpleColumns(FileDataInput file, SortedSet<ByteBuffer> columnNames, List<ByteBuffer> filteredColumnNames) throws IOException { + IColumnSerializer columnSerializer = cf.getColumnSerializer(); int columns = file.readInt(); int n = 0; for (int i = 0; i < columns; i++) { - IColumn column = cf.getColumnSerializer().deserialize(file); + IColumn column = columnSerializer.deserialize(file); if (columnNames.contains(column.name())) { cf.addColumn(column); @@ -237,12 +236,13 @@ public class SSTableNamesIterator extends SimpleAbstractColumnIterator implement if (file == null) file = createFileDataInput(positionToSeek); + IColumnSerializer columnSerializer = cf.getColumnSerializer(); file.seek(positionToSeek); FileMark mark = file.mark(); // TODO only completely deserialize columns we are interested in while (file.bytesPastMark(mark) < indexInfo.width) { - IColumn column = cf.getColumnSerializer().deserialize(file); + IColumn column = columnSerializer.deserialize(file); // we check vs the original Set, not the filtered List, for efficiency if (columnNames.contains(column.name())) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/17dd5cd1/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java b/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java index deeef24..6eae79c 100644 --- a/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java +++ b/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java @@ -36,6 +36,7 @@ import org.apache.cassandra.db.*; import org.apache.cassandra.db.columniterator.IColumnIterator; import org.apache.cassandra.db.columniterator.ICountableColumnIterator; import org.apache.cassandra.db.marshal.AbstractType; +import org.apache.cassandra.io.IColumnSerializer; import org.apache.cassandra.io.util.DataOutputBuffer; import org.apache.cassandra.io.util.IIterableColumns; import org.apache.cassandra.utils.MergeIterator; @@ -107,11 +108,12 @@ public class LazilyCompactedRow extends AbstractCompactedRow implements IIterabl out.write(clockOut.getData(), 0, clockOut.getLength()); out.writeInt(columnStats.columnCount); + IColumnSerializer columnSerializer = emptyColumnFamily.getColumnSerializer(); Iterator<IColumn> iter = iterator(); while (iter.hasNext()) { IColumn column = iter.next(); - emptyColumnFamily.getColumnSerializer().serialize(column, out); + columnSerializer.serialize(column, out); } long secondPassColumnSize = reducer == null ? 0 : reducer.serializedSize; assert secondPassColumnSize == columnSerializedSize http://git-wip-us.apache.org/repos/asf/cassandra/blob/17dd5cd1/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java index 55182d9..fe94116 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java @@ -207,11 +207,12 @@ public class SSTableWriter extends SSTable StreamingHistogram tombstones = new StreamingHistogram(TOMBSTONE_HISTOGRAM_BIN_SIZE); ColumnFamily cf = ColumnFamily.create(metadata, ArrayBackedSortedColumns.factory()); ColumnIndex.Builder columnIndexer = new ColumnIndex.Builder(cf.getComparator(), key.key, columnCount); + IColumnSerializer columnSerializer = cf.getColumnSerializer(); for (int i = 0; i < columnCount; i++) { // deserialize column with PRESERVE_SIZE because we've written the dataSize based on the // data size received, so we must reserialize the exact same data - IColumn column = cf.getColumnSerializer().deserialize(in, IColumnSerializer.Flag.PRESERVE_SIZE, Integer.MIN_VALUE); + IColumn column = columnSerializer.deserialize(in, IColumnSerializer.Flag.PRESERVE_SIZE, Integer.MIN_VALUE); if (column instanceof CounterColumn) { column = ((CounterColumn) column).markDeltaToBeCleared();
