[ 
https://issues.apache.org/jira/browse/CASSANDRA-21735?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brandon Williams updated CASSANDRA-21735:
-----------------------------------------
     Bug Category: Parent values: Correctness(12982)Level 1 values: Transient 
Incorrect Response(12987)
       Complexity: Normal
      Component/s: Feature/UDF
    Discovered By: User Report
    Fix Version/s: 5.0.x
                   6.x
                   7.x
         Severity: Normal
           Status: Open  (was: Triage Needed)

> Result metadata reports timeuuid results of functions as custom type 
> LegacyTimeUUIDType, so drivers can't decode them
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-21735
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21735
>             Project: Apache Cassandra
>          Issue Type: Bug
>          Components: Feature/UDF
>            Reporter: Nadav Har'El
>            Priority: Normal
>             Fix For: 5.0.x, 6.x, 7.x
>
>
> Since the TimeUUID refactoring in CASSANDRA-17176 (4.1.0), several functions 
> on {{timeuuid}} values describe their result in the result metadata as the 
> custom type {{org.apache.cassandra.db.marshal.LegacyTimeUUIDType}} instead of 
> the native {{timeuuid}} type. Drivers don't know this custom type, so they 
> return the raw bytes instead of a UUID:
> {{CREATE TABLE ks.t (pk int PRIMARY KEY, v timeuuid);
> INSERT INTO ks.t (pk, v) VALUES (1, 2deb23e0-96b5-11e5-b26d-a939dd1405a3);
> SELECT max(v) FROM ks.t;                          -- type: 
> 'org.apache.cassandra.db.marshal.LegacyTimeUUIDType'
> SELECT blobAsTimeuuid(timeuuidAsBlob(v)) FROM ks.t;  -- same
> CREATE FUNCTION ks.f (a timeuuid, b timeuuid) CALLED ON NULL INPUT RETURNS 
> timeuuid LANGUAGE java AS 'return b;';
> SELECT ks.f(v, v) FROM ks.t;                      -- same}}
> The Python driver returns {{b'-\xeb#\xe0...'}} instead of 
> {{UUID('2deb23e0-…')}} for all three. A plain {{SELECT v}} and a 
> {{(timeuuid)}} literal are correctly described as {{{}timeuuid{}}}.
>  
> The cause appears to be {{{}TimeUUIDType.udfType(){}}}, which returns 
> {{{}LegacyTimeUUIDType.instance{}}}. That type is used for function 
> signatures (UDFs, {{{}BytesConversionFcts{}}}, aggregates), and only 
> {{TimeUUIDType}} is mapped to the protocol's native {{timeuuid}} type code. 
> Reproduced on 5.0 and trunk (6.0). TermSelectionTest.testConstantFunctionArgs 
> checks a UDF returning a {{{}timeuuid{}}}, but it reads the result inside 
> Cassandra (CQLTester.execute()), without serializing the result metadata, so 
> it doesn't notice.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to