diff --git a/CHANGES.txt b/CHANGES.txt index 7dcb91e533..06e2b82df8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,8 @@ * fix bug determining closest neighbor for use in multiple datacenters (CASSANDRA-648) * Vast improvements in anticompaction speed (CASSANDRA-607) + * Speed up log replay and writes by avoiding redundant serializations + (CASSANDRA-652) 0.5.0 beta 2 diff --git a/src/java/org/apache/cassandra/db/CommitLog.java b/src/java/org/apache/cassandra/db/CommitLog.java index a28e1ed83f..b7461efae2 100644 --- a/src/java/org/apache/cassandra/db/CommitLog.java +++ b/src/java/org/apache/cassandra/db/CommitLog.java @@ -358,7 +358,7 @@ public class CommitLog { try { - rm.apply(false); + Table.open(rm.getTable()).apply(rm, null, false); } catch (IOException e) { @@ -453,7 +453,7 @@ public class CommitLog * of any problems. This way we can assume that the subsequent commit log * entry will override the garbage left over by the previous write. */ - void add(RowMutation rowMutation, DataOutputBuffer serializedRow) throws IOException + void add(RowMutation rowMutation, Object serializedRow) throws IOException { Callable task = new LogRecordAdder(rowMutation, serializedRow); @@ -621,7 +621,7 @@ public class CommitLog final RowMutation rowMutation; final Object serializedRow; - LogRecordAdder(RowMutation rm, DataOutputBuffer serializedRow) + LogRecordAdder(RowMutation rm, Object serializedRow) { this.rowMutation = rm; this.serializedRow = serializedRow; diff --git a/src/java/org/apache/cassandra/db/RowMutation.java b/src/java/org/apache/cassandra/db/RowMutation.java index bec3322101..72fcc1b125 100644 --- a/src/java/org/apache/cassandra/db/RowMutation.java +++ b/src/java/org/apache/cassandra/db/RowMutation.java @@ -200,12 +200,7 @@ public class RowMutation implements Serializable */ public void apply() throws IOException { - apply(true); - } - - public void apply(boolean writeCommitLog) throws IOException - { - Table.open(table_).apply(this, this.getSerializedBuffer(), writeCommitLog); + Table.open(table_).apply(this, getSerializedBuffer(), true); } /* diff --git a/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java b/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java index 05beff9f57..8ca849d4b8 100644 --- a/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java +++ b/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java @@ -58,6 +58,7 @@ public class RowMutationVerbHandler implements IVerbHandler hintedMutation.apply(); } + Table.open(rm.getTable()).apply(rm, bytes, true); rm.apply(); WriteResponse response = new WriteResponse(rm.getTable(), rm.key(), true); diff --git a/src/java/org/apache/cassandra/db/Table.java b/src/java/org/apache/cassandra/db/Table.java index 6fa4c4e2cd..86ded011a4 100644 --- a/src/java/org/apache/cassandra/db/Table.java +++ b/src/java/org/apache/cassandra/db/Table.java @@ -428,7 +428,7 @@ public class Table * Once this happens the data associated with the individual column families * is also written to the column family store's memtable. */ - void apply(RowMutation mutation, DataOutputBuffer serializedMutation, boolean writeCommitLog) throws IOException + void apply(RowMutation mutation, Object serializedMutation, boolean writeCommitLog) throws IOException { HashMap memtablesToFlush = new HashMap(2);