You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jake Farrell (JIRA)" <ji...@apache.org> on 2013/10/05 04:17:42 UTC

[jira] [Updated] (THRIFT-1470) Thrift generates wrong Erlang specs out of the Cassandra interface

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

Jake Farrell updated THRIFT-1470:
---------------------------------

    Component/s: Erlang - Compiler

> Thrift generates wrong Erlang specs out of the Cassandra interface
> ------------------------------------------------------------------
>
>                 Key: THRIFT-1470
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1470
>             Project: Thrift
>          Issue Type: Bug
>          Components: Erlang - Compiler
>    Affects Versions: 0.8
>         Environment: OSX Snow Leopard, Thrift 0.8, Cassandra 1.0.5, Erlang R14B04 
>            Reporter: Roberto Ostinelli
>
> I'm building an Erlang CQL client for Cassandra (https://github.com/ostinelli/erlcassa). I've generated the Erlang Thrift code with the command:
> thrift --gen erl cassandra/interface/cassandra.thrift
> One of the generate files, cassandra_types.hrl, seems to have incorrect record definitions. To be more precise:
> -record(cqlMetadata, {name_types = dict:new() :: dict(),
>                      value_types = dict:new() :: dict(),
>                      default_name_type = undefined :: string(),
>                      default_value_type = undefined :: string()}).
> -record(column, {name = undefined :: string(),
>                 value = undefined :: string(),
>                 timestamp = undefined :: integer(),
>                 ttl = undefined :: integer()}).
> These two records specify string() in name and value columns, but the real returned values from Cassandra are binary(). Not sure about it, but every time there's a string() specification in this file, it really seems that it should be binary(), which is what Thrift calls return from Cassandra.
> Also, the default_name_type and default_value_type of cqlMetadata can actually be undefined (when the record first gets created, these are not specified and hence are undefined).
> These specs being incorrect, Dialyzer complains while performing checks on code built on top of these specs.
> Here are the specs corrected in a way that make Dialyzer pass the tests:
> https://github.com/ostinelli/erlcassa/blob/master/include/cassandra_types.hrl
> Yet again, many of the string() specs on the cassandra_types.hrl file have been left untouched as I've not has the chance to dig if changes are needed.



--
This message was sent by Atlassian JIRA
(v6.1#6144)