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

Sam Tunnicliffe commented on CASSANDRA-9037:
--------------------------------------------

Thanks Tyler, I've pushed another commit to the branch with additional tests as 
requested.

The changes to CqlRecordReader aren't unrelated, its inner WrappedRow class 
implements com.datastax.driver.core.Row which has been extended since version 
2.1.2 of the driver (in 
[5c1e121f|https://github.com/datastax/java-driver/commit/5c1e121f0cc6e39e4d1349bb30f409ae486b3d97#diff-3b8ffce5c217f9096226305ecfd5a49a]
 & 
[a0c42dd2|https://github.com/datastax/java-driver/commit/a0c42dd24f65d3b6e7c558dce68ae1b48c6da7f7])


> Terminal UDFs evaluated at prepare time throw protocol version error
> --------------------------------------------------------------------
>
>                 Key: CASSANDRA-9037
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9037
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Sam Tunnicliffe
>            Assignee: Sam Tunnicliffe
>             Fix For: 3.0
>
>
> When a pure function with only terminal arguments (or with no arguments) is 
> used in a where clause, it's executed at prepare time and 
> {{Server.CURRENT_VERSION}} passed as the protocol version for serialization 
> purposes. For native functions, this isn't a problem, but UDFs use classes in 
> the bundled java-driver-core jar for (de)serialization of args and return 
> values. When {{Server.CURRENT_VERSION}} is greater than the highest version 
> supported by the bundled java driver the execution fails with the following 
> exception:
> {noformat}
> ERROR [SharedPool-Worker-1] 2015-03-24 18:10:59,391 QueryMessage.java:132 - 
> Unexpected error during query
> org.apache.cassandra.exceptions.FunctionExecutionException: execution of 
> 'ks.overloaded[text]' failed: java.lang.IllegalArgumentException: No protocol 
> version matching integer version 4
>     at 
> org.apache.cassandra.exceptions.FunctionExecutionException.create(FunctionExecutionException.java:35)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.udf.gen.Cksoverloaded_1.execute(Cksoverloaded_1.java)
>  ~[na:na]
>     at 
> org.apache.cassandra.cql3.functions.FunctionCall.executeInternal(FunctionCall.java:78)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.functions.FunctionCall.access$200(FunctionCall.java:34)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.functions.FunctionCall$Raw.execute(FunctionCall.java:176)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.functions.FunctionCall$Raw.prepare(FunctionCall.java:161)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.SingleColumnRelation.toTerm(SingleColumnRelation.java:108)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.SingleColumnRelation.newEQRestriction(SingleColumnRelation.java:143)
>  ~[main/:na]
>     at org.apache.cassandra.cql3.Relation.toRestriction(Relation.java:127) 
> ~[main/:na]
>     at 
> org.apache.cassandra.cql3.restrictions.StatementRestrictions.<init>(StatementRestrictions.java:126)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.prepareRestrictions(SelectStatement.java:787)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.prepare(SelectStatement.java:740)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:488)
>  ~[main/:na]
>     at 
> org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:252) 
> ~[main/:na]
>     at 
> org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:246) 
> ~[main/:na]
>     at 
> org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:119)
>  ~[main/:na]
>     at 
> org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:475)
>  [main/:na]
>     at 
> org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:371)
>  [main/:na]
>     at 
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
>  [netty-all-4.0.23.Final.jar:4.0.23.Final]
>     at 
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
>  [netty-all-4.0.23.Final.jar:4.0.23.Final]
>     at 
> io.netty.channel.AbstractChannelHandlerContext.access$700(AbstractChannelHandlerContext.java:32)
>  [netty-all-4.0.23.Final.jar:4.0.23.Final]
>     at 
> io.netty.channel.AbstractChannelHandlerContext$8.run(AbstractChannelHandlerContext.java:324)
>  [netty-all-4.0.23.Final.jar:4.0.23.Final]
>     at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
> [na:1.7.0_71]
>     at 
> org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:164)
>  [main/:na]
>     at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:105) 
> [main/:na]
>     at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
> Caused by: java.lang.IllegalArgumentException: No protocol version matching 
> integer version 4
>     at 
> com.datastax.driver.core.ProtocolVersion.fromInt(ProtocolVersion.java:89) 
> ~[cassandra-driver-core-2.1.2.jar:na]
>     at 
> org.apache.cassandra.cql3.functions.UDFunction.compose(UDFunction.java:177) 
> ~[main/:na]
>     ... 25 common frames omitted
> {noformat}
> This is currently the case on trunk following the bump of 
> {{Server.CURRENT_VERSION}} to 4 by CASSANDRA-7660.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to