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)

Reply via email to