+1 for making it an option in runtime.

List of langs without Framed transport:

C#
Cocoa
Haskell
Ocaml
Smalltalk


On Jun 19, 2009, at 9:56 PM, Jonathan Ellis wrote:

That's probably what we'll have to do if C# et al don't support
Framed.  Which is a shame, because framed makes a lot more sense --
there's really no reason to keep non-framed around.  But that's Thrift
for you.

-Jonathan

On Fri, Jun 19, 2009 at 11:44 PM, Ian Holsman<[email protected]> wrote:
Hey guys.
is it possible to make this a run time option or something?

On 20/06/2009, at 10:03 AM, Michael Greene wrote:

Hopping on a plane so this will be brief, but C# does not have a
Framed Transport, nor do a few of the other languages, so I'd have to
be -1 on this change.

On Fri, Jun 19, 2009 at 3:22 PM, Eric Evans<[email protected]> wrote:

As explained in CASSANDRA-241[1], the daemon process, which is currently
using a non-framed thrift transport is incompatible with (some?)
non-blocking client implementations. The solution is to standardize on a framed transport which is compatible with all client implementations.

[1] https://issues.apache.org/jira/browse/CASSANDRA-241

Unfortunately this is going to break everyone's client apps. Fortunately
the fix is trivial.

For Java clients that look something like ...

  socket = new TSocket(hostname, port);
  TProtocol protocol = new TBinaryProtocol(socket);
  client = new Cassandra.Client(protocol);

... changing them to look like ...


  socket = new TSocket(hostname, port);
  TTransport transport = new TFramedTransport(socket)
  TProtocol protocol = new TBinaryProtocol(transport);
  client = new Cassandra.Client(protocol);

... should do the trick.

For a Python client that looks something like ...

  socket = TSocket.TSocket(host, port)
  transport = TTransport.TBufferedTransport(socket)
  protocol = TBinaryProtocol.TBinaryProtocol(transport)
  client = Cassandra.Client(protocol)

... change it to look like ...

  socket = TSocket.TSocket(host, port)
  transport = TTransport.TFramedTransport(socket)
  protocol = TBinaryProtocol.TBinaryProtocol(transport)
  client = Cassandra.Client(protocol)


Unless confronted with compelling arguments, Jonathan has agreed to
commit this change on Monday, so speak soon or forever hold your
peace. :)

--
Eric Evans
[email protected]



--
Ian Holsman
[email protected]





Reply via email to