Repository: cassandra Updated Branches: refs/heads/trunk e8d7fe8a2 -> 063e91754
More uses of DataOutputBuffer.RECYCLER patch by Robert Stupp; reviewed by T Jake Luciani for CASSANDRA-11971 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/063e9175 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/063e9175 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/063e9175 Branch: refs/heads/trunk Commit: 063e91754b22a28a43efccb0c238c577a6bd0b8a Parents: e8d7fe8 Author: Robert Stupp <sn...@snazy.de> Authored: Tue Jun 21 16:50:54 2016 +0200 Committer: Robert Stupp <sn...@snazy.de> Committed: Tue Jun 21 16:50:54 2016 +0200 ---------------------------------------------------------------------- src/java/org/apache/cassandra/db/SystemKeyspace.java | 9 +++++++-- .../org/apache/cassandra/db/partitions/PartitionUpdate.java | 2 +- src/java/org/apache/cassandra/hints/HintsWriter.java | 7 ++++++- src/java/org/apache/cassandra/io/util/DataOutputBuffer.java | 5 +++++ src/java/org/apache/cassandra/service/StorageProxy.java | 7 ++++++- 5 files changed, 25 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/063e9175/src/java/org/apache/cassandra/db/SystemKeyspace.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/SystemKeyspace.java b/src/java/org/apache/cassandra/db/SystemKeyspace.java index 026eba1..1203834 100644 --- a/src/java/org/apache/cassandra/db/SystemKeyspace.java +++ b/src/java/org/apache/cassandra/db/SystemKeyspace.java @@ -640,16 +640,21 @@ public final class SystemKeyspace private static Map<UUID, ByteBuffer> truncationAsMapEntry(ColumnFamilyStore cfs, long truncatedAt, CommitLogPosition position) { - try (DataOutputBuffer out = new DataOutputBuffer()) + DataOutputBuffer out = null; + try (DataOutputBuffer ignored = out = DataOutputBuffer.RECYCLER.get()) { CommitLogPosition.serializer.serialize(position, out); out.writeLong(truncatedAt); - return singletonMap(cfs.metadata.cfId, ByteBuffer.wrap(out.getData(), 0, out.getLength())); + return singletonMap(cfs.metadata.cfId, out.asNewBuffer()); } catch (IOException e) { throw new RuntimeException(e); } + finally + { + out.recycle(); + } } public static CommitLogPosition getTruncatedPosition(UUID cfId) http://git-wip-us.apache.org/repos/asf/cassandra/blob/063e9175/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java index aacf4f9..d18392c 100644 --- a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java +++ b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java @@ -274,7 +274,7 @@ public class PartitionUpdate extends AbstractBTreePartition try (DataOutputBuffer out = new DataOutputBuffer()) { serializer.serialize(update, out, version); - return ByteBuffer.wrap(out.getData(), 0, out.getLength()); + return out.asNewBuffer(); } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/063e9175/src/java/org/apache/cassandra/hints/HintsWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hints/HintsWriter.java b/src/java/org/apache/cassandra/hints/HintsWriter.java index b4da379..ae9e05a 100644 --- a/src/java/org/apache/cassandra/hints/HintsWriter.java +++ b/src/java/org/apache/cassandra/hints/HintsWriter.java @@ -74,7 +74,8 @@ class HintsWriter implements AutoCloseable CRC32 crc = new CRC32(); - try (DataOutputBuffer dob = new DataOutputBuffer()) + DataOutputBuffer dob = null; + try (DataOutputBuffer ignored = dob = DataOutputBuffer.RECYCLER.get()) { // write the descriptor descriptor.serialize(dob); @@ -87,6 +88,10 @@ class HintsWriter implements AutoCloseable channel.close(); throw e; } + finally + { + dob.recycle(); + } if (descriptor.isEncrypted()) return new EncryptedHintsWriter(directory, descriptor, file, channel, fd, crc); http://git-wip-us.apache.org/repos/asf/cassandra/blob/063e9175/src/java/org/apache/cassandra/io/util/DataOutputBuffer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/DataOutputBuffer.java b/src/java/org/apache/cassandra/io/util/DataOutputBuffer.java index f4f50b1..2091ed0 100644 --- a/src/java/org/apache/cassandra/io/util/DataOutputBuffer.java +++ b/src/java/org/apache/cassandra/io/util/DataOutputBuffer.java @@ -231,6 +231,11 @@ public class DataOutputBuffer extends BufferedDataOutputStreamPlus return getLength(); } + public ByteBuffer asNewBuffer() + { + return ByteBuffer.wrap(getData(), 0, getLength()); + } + public byte[] toByteArray() { ByteBuffer buffer = buffer(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/063e9175/src/java/org/apache/cassandra/service/StorageProxy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 8ae5043..31dd853 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -1280,7 +1280,8 @@ public class StorageProxy implements StorageProxyMBean InetAddress target = iter.next(); // Add the other destinations of the same message as a FORWARD_HEADER entry - try (DataOutputBuffer out = new DataOutputBuffer()) + DataOutputBuffer out = null; + try (DataOutputBuffer ignored = out = DataOutputBuffer.RECYCLER.get()) { out.writeInt(targets.size() - 1); while (iter.hasNext()) @@ -1306,6 +1307,10 @@ public class StorageProxy implements StorageProxyMBean // DataOutputBuffer is in-memory, doesn't throw IOException throw new AssertionError(e); } + finally + { + out.recycle(); + } } private static void performLocally(Stage stage, final Runnable runnable)