Hi Randy,
Thank you very much  for sharing very important information.

On Fri, Mar 14, 2014 at 12:17 AM, Randy Abernethy <randy.aberne...@gmail.com
> wrote:

> Hello Chamila,
>
> Great write up and a wonderful project to take on. This will be a great
> contribution to Apache Thrift and the community. I have some transport
> notes put together that I thought might help with your work on the tests in
> some way.
>
> Best regards,
>
> Randy
>
>
> *TTransport*
>
> There is a TTransport interface in Apache Thrift, it is a practical
> interface in some languages and abstract in others. This interface contains
> essentially the following methods: open/read/write/close/flush. Protocols
> use this interface to send serialized data to its destination.
>
>
> *Layered Transports*
>
> Some transports expose the TTransport interface on one side and consume it
> on the other. This allows transports to be layered. For example a
> TCipherTransport can be layered on top of a TFramedTransport.
>
>
> TBinaryProtocol
> >>> TTransport
> TCipherTransport
> >>>  TTransport
> TFramedTransport
> >>>  TTransport
> TSocket
>
>
> Because layers expose and consume TTransport they can be placed in any
> order. This means that you can also layer the TFramedTransport on top of
> the TCipherTransport. This is a very simple and flexible arrangement. For
> example you could create a TTeeTransport to duplicate the data stream to a
> socket and a file.
>
>
> *Mutating Transports*
>
> Some transports mutate the data stream. The TFramedTransport for example
> prefixes RPC messages with their size. Other transports do not mutate the
> data stream. For example the TBufferedTransport simply buffers protocol
> writes until flush is called to avoid many small writes to the end point.
> This is important in testing scenarios because non-mutating transports are
> invisible as far as the data stream goes. For example a server cannot tell
> if a client is using TBufferedTransport or not because it has no impact on
> the data stream. It is certainly worth testing non-mutating transport
> layers but it is useful to think of them as one sided (requiring no peer
> layer on the other side of the network).
>
>
> *End Point Transports*
>
> End Point Transports expose the TTransport interface but do not consume it.
> Rather they write to a device or some foreign (to Apache Thrift) API. End
> point transports are available for network, file and memory destinations
> (e.g. TSimpleFileTransport, TMemoryBuffer and TSocket). From an Apache
> Thrift I/O stack stand point there must always be precisely one protocol at
> the top and at least one end point transport at the bottom. There may be,
> however, many layered transports and branches in between.
>
>
> *Client Server Transports*
>
> Client server transports are special case end point transports wherein a
> server side listens for connections from a client side which connects.
> TSimpleFileTransport and TMemoryBuffer are not client server transports,
> though they can be used to communicate over external systems, such as
> messaging. Client server transports often have a special transport on the
> server side to perform the listening task. The TServerTransport interface
> provides an abstraction for this, implementation examples include
> TServerSocket and TPipeServer. Some end points collapse upper layer
> behavior into a single transport for convenience using language inheritance
> rather than transport layering. This is the case with TSSLSocket, an SSL
> layer over TSocket.
>
>
> *TFramedTransport*
>
> The TFramedTransport is probably the most important transport to test. Some
> of the more scalable servers in various languages (C++ and Java in
> particular) require frames. This is the only transport I know of that is
> compulsory, that is to say, clients must support this to communicate with
> certain servers.
>
>
> *Practical Considerations*
>
> Apache Thrift is used the world over in a wide variety of public and
> private systems. It is hard to know what the landscape looks like from an
> I/O stack stand point. I would venture to guess that the large majority of
> I/O stacks are as simple as TSocket with either TBufferedTransport or
> TFramedTransport as a layer. Some languages have no TBufferedTransport,
> however. For example Java implements TSocket using the Java OutputStream
> class which is internally buffered.
>
>
>
>
>
>
>
>
>
>
> On Thu, Mar 13, 2014 at 9:47 AM, Chamila Wijayarathna <
> cdwijayarat...@gmail.com> wrote:
>
> > Hi,
> > My draft project proposal is at
> >
> >
> https://docs.google.com/document/d/1y-fsDGkKsGubLKaN6ilYqwl69eWkORi1aEWOUIraLJE/edit#
> > .
> > Please give me your comments on this and if there is anything else to be
> > added to the project scope.
> >
> > Thank You.
> >
> > --
> > *Chamila Dilshan Wijayarathna,*
> > SMIEEE, SMIESL,
> > Undergraduate,
> > Department of Computer Science and Engineering,
> > University of Moratuwa.
> >
>



-- 
*Chamila Dilshan Wijayarathna,*
SMIEEE, SMIESL,
Undergraduate,
Department of Computer Science and Engineering,
University of Moratuwa.

Reply via email to