You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by jk...@apache.org on 2017/01/28 04:38:16 UTC

thrift git commit: THRIFT-3854 add a way in java to clear TFramedTransport read buffers Client: Java Patch: Chris Lockfort

Repository: thrift
Updated Branches:
  refs/heads/master 988b3e9bd -> de3e17ad3


THRIFT-3854 add a way in java to clear TFramedTransport read buffers
Client: Java
Patch: Chris Lockfort <cl...@palantir.com>

This closes #1164
This closes #1081


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/de3e17ad
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/de3e17ad
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/de3e17ad

Branch: refs/heads/master
Commit: de3e17ad39a57163a42ab89d559356f4cee27c4a
Parents: 988b3e9
Author: James E. King, III <jk...@apache.org>
Authored: Fri Jan 27 23:36:31 2017 -0500
Committer: James E. King, III <jk...@apache.org>
Committed: Fri Jan 27 23:36:31 2017 -0500

----------------------------------------------------------------------
 .../thrift/transport/TFastFramedTransport.java  |  8 +++++-
 .../thrift/transport/TFramedTransport.java      | 15 ++++++-----
 .../transport/TestTFastFramedTransport.java     |  6 +++--
 .../thrift/transport/TestTFramedTransport.java  | 28 ++++++++++++++++++++
 4 files changed, 48 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/de3e17ad/lib/java/src/org/apache/thrift/transport/TFastFramedTransport.java
----------------------------------------------------------------------
diff --git a/lib/java/src/org/apache/thrift/transport/TFastFramedTransport.java b/lib/java/src/org/apache/thrift/transport/TFastFramedTransport.java
index 0398ca7..d265600 100644
--- a/lib/java/src/org/apache/thrift/transport/TFastFramedTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TFastFramedTransport.java
@@ -65,7 +65,8 @@ public class TFastFramedTransport extends TTransport {
 
   private final TTransport underlying;
   private final AutoExpandingBufferWriteTransport writeBuffer;
-  private final AutoExpandingBufferReadTransport readBuffer;
+  private AutoExpandingBufferReadTransport readBuffer;
+  private final int initialBufferCapacity;
   private final byte[] i32buf = new byte[4];
   private final int maxLength;
 
@@ -104,6 +105,7 @@ public class TFastFramedTransport extends TTransport {
   public TFastFramedTransport(TTransport underlying, int initialBufferCapacity, int maxLength) {
     this.underlying = underlying;
     this.maxLength = maxLength;
+    this.initialBufferCapacity = initialBufferCapacity;
     writeBuffer = new AutoExpandingBufferWriteTransport(initialBufferCapacity, 1.5);
     readBuffer = new AutoExpandingBufferReadTransport(initialBufferCapacity, 1.5);
   }
@@ -164,6 +166,10 @@ public class TFastFramedTransport extends TTransport {
     readBuffer.consumeBuffer(len);
   }
 
+  public void clear() {
+    readBuffer = new AutoExpandingBufferReadTransport(initialBufferCapacity, 1.5);
+  }
+
   @Override
   public void flush() throws TTransportException {
     int length = writeBuffer.getPos();

http://git-wip-us.apache.org/repos/asf/thrift/blob/de3e17ad/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
----------------------------------------------------------------------
diff --git a/lib/java/src/org/apache/thrift/transport/TFramedTransport.java b/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
index f7d220c..fa531ef 100644
--- a/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
@@ -45,7 +45,8 @@ public class TFramedTransport extends TTransport {
   /**
    * Buffer for input
    */
-  private TMemoryInputTransport readBuffer_ = new TMemoryInputTransport(new byte[0]);
+  private final TMemoryInputTransport readBuffer_ =
+    new TMemoryInputTransport(new byte[0]);
 
   public static class Factory extends TTransportFactory {
     private int maxLength_;
@@ -90,11 +91,9 @@ public class TFramedTransport extends TTransport {
   }
 
   public int read(byte[] buf, int off, int len) throws TTransportException {
-    if (readBuffer_ != null) {
-      int got = readBuffer_.read(buf, off, len);
-      if (got > 0) {
-        return got;
-      }
+    int got = readBuffer_.read(buf, off, len);
+    if (got > 0) {
+      return got;
     }
 
     // Read another frame of data
@@ -123,6 +122,10 @@ public class TFramedTransport extends TTransport {
     readBuffer_.consumeBuffer(len);
   }
 
+  public void clear() {
+    readBuffer_.clear();
+  }
+
   private final byte[] i32buf = new byte[4];
 
   private void readFrame() throws TTransportException {

http://git-wip-us.apache.org/repos/asf/thrift/blob/de3e17ad/lib/java/test/org/apache/thrift/transport/TestTFastFramedTransport.java
----------------------------------------------------------------------
diff --git a/lib/java/test/org/apache/thrift/transport/TestTFastFramedTransport.java b/lib/java/test/org/apache/thrift/transport/TestTFastFramedTransport.java
index 11fbdf4..06ee206 100644
--- a/lib/java/test/org/apache/thrift/transport/TestTFastFramedTransport.java
+++ b/lib/java/test/org/apache/thrift/transport/TestTFastFramedTransport.java
@@ -19,13 +19,15 @@
 package org.apache.thrift.transport;
 
 public class TestTFastFramedTransport extends TestTFramedTransport {
+  protected final static int INITIAL_CAPACITY = 50;
+
   @Override
   protected TTransport getTransport(TTransport underlying) {
-    return new TFastFramedTransport(underlying, 50, 10 * 1024 * 1024);
+    return new TFastFramedTransport(underlying, INITIAL_CAPACITY, 10 * 1024 * 1024);
   }
 
   @Override
   protected TTransport getTransport(TTransport underlying, int maxLength) {
-    return new TFastFramedTransport(underlying, 50, maxLength);
+    return new TFastFramedTransport(underlying, INITIAL_CAPACITY, maxLength);
   }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/de3e17ad/lib/java/test/org/apache/thrift/transport/TestTFramedTransport.java
----------------------------------------------------------------------
diff --git a/lib/java/test/org/apache/thrift/transport/TestTFramedTransport.java b/lib/java/test/org/apache/thrift/transport/TestTFramedTransport.java
index 6cebd3c..7e889d6 100644
--- a/lib/java/test/org/apache/thrift/transport/TestTFramedTransport.java
+++ b/lib/java/test/org/apache/thrift/transport/TestTFramedTransport.java
@@ -183,4 +183,32 @@ public class TestTFramedTransport extends TestCase {
     assertEquals(65, trans.getBytesRemainingInBuffer());
     assertEquals(10, trans.getBufferPosition());
   }
+
+  public void testClear() throws IOException, TTransportException {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    DataOutputStream dos = new DataOutputStream(baos);
+    dos.writeInt(220);
+    dos.write(byteSequence(0, 219));
+
+    TMemoryBuffer membuf = new TMemoryBuffer(0);
+    membuf.write(baos.toByteArray());
+
+    ReadCountingTransport countTrans = new ReadCountingTransport(membuf);
+    TTransport trans = getTransport(countTrans);
+
+    byte[] readBuf = new byte[220];
+    trans.read(readBuf, 0, 220);
+    assertTrue(Arrays.equals(readBuf, byteSequence(0,219)));
+
+    assertTrue(trans instanceof TFramedTransport || trans instanceof TFastFramedTransport);
+    if (trans instanceof TFramedTransport) {
+      assertTrue(trans.getBuffer() != null && trans.getBuffer().length > 0);
+      ((TFramedTransport) trans).clear();
+      assertTrue(trans.getBuffer() == null);
+    } else if (trans instanceof TFastFramedTransport) {
+      assertTrue(trans.getBuffer().length > TestTFastFramedTransport.INITIAL_CAPACITY);
+      ((TFastFramedTransport) trans).clear();
+      assertTrue(trans.getBuffer().length == TestTFastFramedTransport.INITIAL_CAPACITY);
+    }
+  }
 }