THRIFT-596. python: Make the TBufferedTransport read buffer size configurable
authorDavid Reiss <dreiss@apache.org>
Thu, 2 Sep 2010 15:36:00 +0000 (15:36 +0000)
committerDavid Reiss <dreiss@apache.org>
Thu, 2 Sep 2010 15:36:00 +0000 (15:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@991985 13f79535-47bb-0310-9956-ffa450edef68

lib/py/src/transport/TTransport.py

index 9858bbe..12e51a9 100644 (file)
@@ -129,14 +129,19 @@ class TBufferedTransportFactory:
 
 class TBufferedTransport(TTransportBase,CReadableTransport):
 
-  """Class that wraps another transport and buffers its I/O."""
+  """Class that wraps another transport and buffers its I/O.
+
+  The implementation uses a (configurable) fixed-size read buffer
+  but buffers all writes until a flush is performed.
+  """
 
   DEFAULT_BUFFER = 4096
 
-  def __init__(self, trans):
+  def __init__(self, trans, rbuf_size = DEFAULT_BUFFER):
     self.__trans = trans
     self.__wbuf = StringIO()
     self.__rbuf = StringIO("")
+    self.__rbuf_size = rbuf_size
 
   def isOpen(self):
     return self.__trans.isOpen()
@@ -152,7 +157,7 @@ class TBufferedTransport(TTransportBase,CReadableTransport):
     if len(ret) != 0:
       return ret
 
-    self.__rbuf = StringIO(self.__trans.read(max(sz, self.DEFAULT_BUFFER)))
+    self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size)))
     return self.__rbuf.read(sz)
 
   def write(self, buf):
@@ -172,9 +177,9 @@ class TBufferedTransport(TTransportBase,CReadableTransport):
 
   def cstringio_refill(self, partialread, reqlen):
     retstring = partialread
-    if reqlen < self.DEFAULT_BUFFER:
+    if reqlen < self.__rbuf_size:
       # try to make a read of as much as we can.
-      retstring += self.__trans.read(self.DEFAULT_BUFFER)
+      retstring += self.__trans.read(self.__rbuf_size)
 
     # but make sure we do read reqlen bytes.
     if len(retstring) < reqlen: