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

Sylvain Lebresne commented on CASSANDRA-11064:
----------------------------------------------

bq. IMO we should prevent the use of custom-types in UDAs.

Why? What's the reasoning? I don't see a good reason why UDA would have to 
assume anything about types and hence see no reason to prevent their use. In 
fact, I'd say that having them not working might hint at some reasonable 
assumption made by the implementation and we should fix the root cause. In this 
example in particular, I'm not sure why the code is trying to parse within what 
is clearly a CQL string (note that I'm not saying the example of the 
description _should_ work, I believe it shouldn't because strings are not valid 
literals for a custom type (you'd have to pass a blob), only that the error 
itself seems suspicious).

bq. it's a bug that invalid initcond values make it into the schema

Right, that's _the_ bug.

> Failed aggregate creation breaks server permanently
> ---------------------------------------------------
>
>                 Key: CASSANDRA-11064
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11064
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Olivier Michallat
>            Assignee: Robert Stupp
>
> While testing edge cases around aggregates, I tried the following to see if 
> custom types were supported:
> {code}
> ccm create v321 -v3.2.1 -n3
> ccm updateconf enable_user_defined_functions:true
> ccm start
> ccm node1 cqlsh
> CREATE FUNCTION id(i 'DynamicCompositeType(s => UTF8Type, i => Int32Type)')
> RETURNS NULL ON NULL INPUT
> RETURNS 'DynamicCompositeType(s => UTF8Type, i => Int32Type)'
> LANGUAGE java
> AS 'return i;';
> // function created successfully
> CREATE AGGREGATE ag()
> SFUNC id
> STYPE 'DynamicCompositeType(s => UTF8Type, i => Int32Type)'
> INITCOND 's@foo:i@32';
> ServerError: <ErrorMessage code=0000 [Server error] 
> message="java.lang.RuntimeException: java.util.concurrent.ExecutionException: 
> org.apache.cassandra.exceptions.SyntaxException: Failed parsing CQL term: 
> [s@foo:i@32] reason: SyntaxException line 1:1 no viable alternative at 
> character '@'">{code}
> Despite the error, the aggregate appears in system tables:
> {code}
> select * from system_schema.aggregates;
>  keyspace_name | aggregate_name | ...
> ---------------+----------------+ ...
>           test |             ag | ...
> {code}
> But you can't drop it, and trying to drop its function produces the server 
> error again:
> {code}
> DROP AGGREGATE ag;
> InvalidRequest: code=2200 [Invalid query] message="Cannot drop non existing 
> aggregate 'test.ag'"
> DROP FUNCTION id;
> ServerError: <ErrorMessage code=0000 [Server error] 
> message="java.lang.RuntimeException: java.util.concurrent.ExecutionException: 
> org.apache.cassandra.exceptions.SyntaxException: Failed parsing CQL term: 
> [s@foo:i@32] reason: SyntaxException line 1:1 no viable alternative at 
> character '@'">
> {code}
> What's worse, it's now impossible to restart the server:
> {code}
> ccm stop; ccm start
> org.apache.cassandra.exceptions.SyntaxException: Failed parsing CQL term: 
> [s@foo:i@32] reason: SyntaxException line 1:1 no viable alternative at 
> character '@'
>       at 
> org.apache.cassandra.cql3.CQLFragmentParser.parseAny(CQLFragmentParser.java:48)
>       at org.apache.cassandra.cql3.Terms.asBytes(Terms.java:51)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.createUDAFromRow(SchemaKeyspace.java:1225)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.fetchUDAs(SchemaKeyspace.java:1204)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.fetchFunctions(SchemaKeyspace.java:1129)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspace(SchemaKeyspace.java:897)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspacesWithout(SchemaKeyspace.java:872)
>       at 
> org.apache.cassandra.schema.SchemaKeyspace.fetchNonSystemKeyspaces(SchemaKeyspace.java:860)
>       at org.apache.cassandra.config.Schema.loadFromDisk(Schema.java:125)
>       at org.apache.cassandra.config.Schema.loadFromDisk(Schema.java:115)
>       at 
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:229)
>       at 
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:551)
>       at 
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:680)
> {code}



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

Reply via email to