[ 
https://issues.apache.org/jira/browse/CASSANDRA-1510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12910206#action_12910206
 ] 

Jesse McConnell commented on CASSANDRA-1510:
--------------------------------------------

ya, that is how I am working around it now...I opened the bug as either a heads 
up of the problem or perhaps search fodder for people trying to diagnose the 
'Missing version in readMessageBegin, old client?' issue when its known to not 
be the framed v. non-framed issue.

> Cassandra.Client/Thrift errors not cleaned up between executions
> ----------------------------------------------------------------
>
>                 Key: CASSANDRA-1510
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1510
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 0.7 beta 1, 0.7 beta 2
>            Reporter: Jesse McConnell
>            Priority: Critical
>
> It seems that if a Cassandra.Client returns with a certain type of error it 
> is not being cleaned up enough to make another call using that same client 
> instance.  In the example below you see a get slice call being made with a 
> poorly formatted SliceRange and the errors are being caught and printed out.  
> A subsequent call on that client to do something like set_keyspace now 
> returns with additional error information from that previous execution...and 
> then ends with the 'Missing version in readMessageBegin' error that makes you 
> think that the server/client are not in sync re: framed vs non-framed.
> In pooling environments where that client might be cached and then back to be 
> reused this can lead to a bit of a red herring chase to track down transport 
> issues while its really a previous bogus call like described.
> org.apache.thrift.protocol.TProtocolException: Required field 'finish' was 
> not present! Struct: SliceRange(start:, finish:null, reversed:false, 
> count:100)
>       at org.apache.cassandra.thrift.SliceRange.validate(SliceRange.java:623)
>       at org.apache.cassandra.thrift.SliceRange.write(SliceRange.java:552)
>       at 
> org.apache.cassandra.thrift.SlicePredicate.write(SlicePredicate.java:429)
>       at 
> org.apache.cassandra.thrift.Cassandra$get_slice_args.write(Cassandra.java:6603)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.send_get_slice(Cassandra.java:534)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:522)
>       ...
> CassandraException: org.apache.thrift.protocol.TProtocolException: Required 
> field 'finish' was not present! Struct: SliceRange(start:, finish:null, 
> reversed:false, count:100)
>       at 
> com.foo.ThriftCassandraInterface.getColumnSlice(ThriftCassandraInterface.java:471)
>       at 
> com.foo.ThriftInterfaceTest.testBadBehaviour(ThriftInterfaceTest.java:73)
> ...
> Caused by: org.apache.thrift.protocol.TProtocolException: Required field 
> 'finish' was not present! Struct: SliceRange(start:, finish:null, 
> reversed:false, count:100)
>       at org.apache.cassandra.thrift.SliceRange.validate(SliceRange.java:623)
>       at org.apache.cassandra.thrift.SliceRange.write(SliceRange.java:552)
>       at 
> org.apache.cassandra.thrift.SlicePredicate.write(SlicePredicate.java:429)
>       at 
> org.apache.cassandra.thrift.Cassandra$get_slice_args.write(Cassandra.java:6603)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.send_get_slice(Cassandra.java:534)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:522)
>       at 
> com.foo.ThriftCassandraInterface.getColumnSlice(ThriftCassandraInterface.java:416)
>       ... 23 more
> org.apache.thrift.TApplicationException: Required field 'reversed' was not 
> found in serialized data! Struct: SliceRange(start:null, finish:null, 
> reversed:false, count:100)
>       at 
> org.apache.thrift.TApplicationException.read(TApplicationException.java:108)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.recv_set_keyspace(Cassandra.java:454)
>       at 
> org.apache.cassandra.thrift.Cassandra$Client.set_keyspace(Cassandra.java:437)
>       at 
> com.foo.ThriftCassandraInterface.setKeyspace(ThriftCassandraInterface.java:975)
>       at 
> com.foo.ThriftInterfaceTest.testBadBehaviour(ThriftInterfaceTest.java:83)
>       ...
> 53851 [pool-1-thread-3] ERROR 
> org.apache.cassandra.thrift.CustomTThreadPoolServer - Thrift error occurred 
> during processing of message.
> org.apache.thrift.protocol.TProtocolException: Missing version in 
> readMessageBegin, old client?
>       at 
> org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:211)
>       at 
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2634)
>       at 
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:167)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:619)
> Below is a bit of modified code from the testBadBehavior() test case being 
> executed in the code above.
> Cassandra.Client client = foo.gimmeClient();
>               
> ColumnParent parent = new ColumnParent();
> parent.setColumn_family("Foo");
>               
> SlicePredicate predicate = new SlicePredicate();
> SliceRange range = new SliceRange();
> // NOTE: the range is not completely initialized, missing sets for finished 
> and reverse which imo ought to be defaulted anyway 
> range.setStart("".getBytes());
> range.setCount(100);
> predicate.setSlice_range(range);
>               
> try 
> {
>       Collection<ColumnOrSuperColumn> columns = 
> client.get_column_slice("foo", parent, predicate);
> }
> catch (CassandraException e)
> {
>       e.printStackTrace();
> }
>               
> client.set_keyspace("FooBar");

-- 
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