Hey guys, We've been doing a lot of experimental changes to Thrift/C++ within Facebook. Some of our experiments have panned out and some haven't, but some have dragged on for a long time with half-finished code checked into trunk. This has prevented us from merging our changes back out to Apache for a while, which has been very frustrating. I've cleaned up a lot of the code as best I can, and I'm hoping the community would be okay accepting these patches into the trunk, even though some of the features are still experimental and likely to have interface changes. Because of the interleaved development history, it's not really possible to tease out many of the individual features without significant conflict resolution. However, I'm hoping that no one will be tempted to do that since all of the changes should be isolated to new APIs and fully backwards-compatible at the source level.
The main changes are: - Templated transport and protocol code. This change has sped up some of our benchmarks by 5x for serialization and 3x for deserialization, and reduced the end-to-end latency of at least one of our production systems by 50%. All that's needed is a few type annotations in your C++ source. - Async client and server support. So far, just implemented as an evhttp-based client and server, but the infrastructure is in place for writing fully event-driven Thrift clients and servers. - Hooks that allow user code to get better statistics about the calls being made to the server. - Better test coverage for transport classes. - Various small features and bug fixes. My plan is to create JIRA issues with patches for the 5 items above (including a conglomo-issue for the small changes), publish a git branch with all of the changes (plus an instant release if people want), then wait to see if anyone complains and commit if they don't. The git branch is called "fb-merge-p2" and is available at either of git://git.thrift-rpc.org/thrift.git git://github.com/dreiss/thrift.git Non git users can pull the full combined patch from r996610 at http://gitweb.thrift-rpc.org/?p=thrift.git;a=treediff_plain;h=refs/heads/pri/dreiss/fb-merge-p2;hp=d5c342b The full list of changes is at http://gitweb.thrift-rpc.org/?p=thrift.git;a=log;h=refs/heads/pri/dreiss/fb-merge-p2;hb=HEAD (click through on "commitdiff" to see the full individual commits.) Thoughts? --David
