Pluggable Serializers
---------------------

                 Key: THRIFT-769
                 URL: https://issues.apache.org/jira/browse/THRIFT-769
             Project: Thrift
          Issue Type: New Feature
          Components: Compiler (Java), Library (Java)
            Reporter: Bryan Duxbury
            Assignee: Bryan Duxbury
             Fix For: 0.4


Thrift is already designed to have modular Protocols, which define the various 
elements of binary encoding. However, the way that our code is generated, we're 
also implicitly defining every protocol to have a *structure* like that of the 
Binary protocol. 

This has served us well so far with it's simplicity, and other protocols (like 
Compact and JSON) have been able to squeeze into this model successfully, 
though at a noticeable cost. For instance, Compact protocol has to keep its own 
internal state in a stack to know what the last field id we wrote was so that 
it can write compact deltas. The JSON protocol is even more complex, keeping a 
truly monstrous amount of state around in order to be able to do the right 
thing at the right time. All this state tracking comes with cost, both in 
complexity and in actual runtime.

I think that there's a solution to this problem - making the serialization code 
itself pluggable. That is, rather than there being a single "write" and "read" 
method for every protocol, we could let Protocols require a certain kind of 
Serializer to interact with them. Binary protocol could use the "default 
tagged" serializer, which would look like what we have today. JSON would 
probably use a custom one that basically let it write out strings and nothing 
else. Compact would also likely use a custom serializer that kept all the 
needed state on the system stack, rather than in a user-code stack. Dare I say 
it, but it's possible that if we did it right, we could even serialize Thrift 
structs with Avro's serialization format!

The upshot of this change would be to make many protocols faster and simpler, 
while also allowing us to implement a broader set of protocols that don't fit 
with the traditional Thrift-style protocols.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to