Thanks for the text case Anthony. I reporoduced my error using your test case 
(slightly modified to fit my schema). In case it matters, I am running 
Cassandra 0.8.0, Thrift 0.6.1, and Erlang R13B04. Thrift types was generated by 
me using cassandra.thrift that I got out of the cassandra-0.8.0 tag in the 
Cassandra repo.

The test that I ran is:

#cat test_cassandra_client.erl 
-module(test_cassandra_client).

-export([my_test/0]).

-include("cassandra_types.hrl").

my_test() ->
  {ok, Client0} =
    thrift_client_util:new ("kon", 9160,
                            cassandra_thrift, [{framed,true}]),
        
  %D0 = dict:new(),
  %Auth =
  %  #authenticationRequest {
  %    credentials = dict:store ("dilbert","nomoovertime",D0)
  %  },
  %{Client1, {ok,ok}} =
  %  thrift_client:call (Client0, login, [Auth]),
  {Client2, {ok,ok}} =
    thrift_client:call (Client0, set_keyspace, ["ipdr"]),
  lists:foldl ( fun (I, C0) ->
                  X = integer_to_list (I),
                  {C1, {ok,ok}} =
                    thrift_client:call (C0,
                                        insert,
                                        [ lists:append (["key",X]),
                                          #columnParent {
                                            column_family="Standard1"
                                          },
                                          #column {
                                            name = lists:append (["name",X]),
                                            value = lists:append (["val",X]),
                                            timestamp = 1
                                          },
                                          ?cassandra_ConsistencyLevel_ONE
                                        ]),
                  C1
                end,
                Client2,                
                lists:seq(1,1000) ).


My output is:

Erlang R13B04 (erts-5.7.5) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] 
[kernel-poll:false]

Eshell V5.7.5  (abort with ^G)
1>  c('test_cassandra_client').
{ok,test_cassandra_client}
2> test_cassandra_client:my_test().
** exception error: bad argument
     in function  iolist_size/1
        called as 
iolist_size([[[[[[[[[[[[[[[[[[[[[[[],<<128,1,0,1>>],<<0,0,0,6>>],
                                                  <<"insert">>],
                                                 <<0,0,0,0>>],
                                                <<"\v">>],
                                               <<0,1>>],
                                              <<0,0,0,4>>],
                                             <<"key1">>],
                                            <<"\f">>],
                                           <<0,2>>],
                                          <<"\v">>],
                                         <<0,3>>],
                                        <<0,0,0,9>>],
                                       <<"Standard1">>],
                                      <<0>>],
                                     <<"\f">>],
                                    <<0,3>>],
                                   {{struct,[{1,string},{2,string},{3,i64}]},
                                    {column,"name1","val1",1,undefined}}],
                                  <<"\b">>],
                                 <<0,4>>],
                                <<0,0,0,1>>],
                               <<0>>])
     in call from thrift_framed_transport:flush/1
     in call from thrift_transport:flush/1
     in call from thrift_binary_protocol:flush_transport/1
     in call from thrift_protocol:flush_transport/1
     in call from thrift_client:send_function_call/3
     in call from thrift_client:call/3
     in call from test_cassandra_client:'-my_test/0-fun-0-'/2


----- Original Message -----
From: "Anthony Molinaro" <[email protected]>
To: [email protected]
Cc: "Konstantin Naryshkin" <[email protected]>
Sent: Monday, June 27, 2011 5:39:00 PM
Subject: Re: Getting a bad argument exception in Erlang


Hi Konstantin,

   I attempted to reproduce, but am unable to, I used this code

-module(test_cassandra_client).

-export([my_test/0]).

-include("cassandra_types.hrl").

my_test() ->
  {ok, Client0} =
    thrift_client_util:new ("127.0.0.1", 9160,
                            cassandra_thrift, [{framed,true}]),
        
  D0 = dict:new(),
  Auth =
    #authenticationRequest {
      credentials = dict:store ("dilbert","nomoovertime",D0)
    },
  {Client1, {ok,ok}} =
    thrift_client:call (Client0, login, [Auth]),
  {Client2, {ok,ok}} =
    thrift_client:call (Client1, set_keyspace, ["Keyspace1"]),
  lists:foldl ( fun (I, C0) ->
                  X = integer_to_list (I),
                  {C1, {ok,ok}} =
                    thrift_client:call (C0,
                                        insert,
                                        [ lists:append (["key",X]),
                                          #columnParent {
                                            column_family="Standard1"
                                          },
                                          #column {
                                            name = lists:append (["name",X]),
                                            value = lists:append (["val",X]),
                                            timestamp = 1
                                          },
                                          ?cassandra_ConsistencyLevel_ONE
                                        ]),
                  C1
                end,
                Client2,                
                lists:seq(1,1000) ).    

To just insert 1000 entries into the schema defined in schema-sample.txt,
and everything seems to work fine.  If you could provide a failing test
it would allow me to dig a little deeper.

Thanks,

-Anthony


On Tue, Jun 21, 2011 at 10:03:27AM -0500, Konstantin  Naryshkin wrote:
> I am new to both Thrift and Erlang but need to uses Thrift to get an Erlang 
> application to write to Cassandra. The relevant method from cassandra.thrift 
> is: 
> void insert(1:required binary key, 
> 2:required ColumnParent column_parent, 
> 3:required Column column, 
> 4:required ConsistencyLevel consistency_level=ConsistencyLevel.ONE) 
> throws (1:InvalidRequestException ire, 2:UnavailableException ue, 
> 3:TimedOutException te), 
> 
> The full cassandra.thrift can be found at: 
> https://svn.apache.org/repos/asf/cassandra/tags/cassandra-0.8.0/interface/cassandra.thrift
>  
> 
> I am trying to run the following command via the erl cli: 
> {C30,R30} =thrift_client:call( C29, 'insert', [ "keyz", ColPar1, Col4, 6]).). 
> 
> Where C29 is a #tclient returned by a previous call, ColPar1 is a 
> #columnParent, and Col4 is a #column. The call throws a badarg exception of: 
> ** exception error: bad argument 
> in function iolist_size/1 
> called as iolist_size([[[[[[[[[[[[[[[[[[[[[[[[[[[],<<128,...>>],<<0,0,...>>], 
> <<"insert">>], 
> <<0,0,0,0>>], 
> <<"\v">>], 
> <<0,1>>], 
> <<0,0,0,4>>], 
> <<"keyz">>], 
> <<"\f">>], 
> <<0,2>>], 
> <<"\v">>], 
> <<0,3>>], 
> <<0,0,0,10>>], 
> <<"ipdr_usage">>], 
> <<"\v">>], 
> <<0,4>>], 
> <<0,0,0,5>>], 
> <<"suppy">>], 
> <<0>>], 
> <<"\f">>], 
> <<0,3>>], 
> {{struct,[{1,string},{2,string},{3,i64}]}, 
> #column{name = <<"haha">>,value = <<"0_0">>, 
> timestamp = 1235234234234234234,ttl = undefined}}], 
> <<"\b">>], 
> <<0,4>>], 
> <<0,0,0,6>>], 
> <<0>>]) 
> in call from thrift_framed_transport:flush/1 
> in call from thrift_transport:flush/1 
> in call from thrift_binary_protocol:flush_transport/1 
> in call from thrift_protocol:flush_transport/1 
> in call from thrift_client:send_function_call/3 
> in call from thrift_client:call/3 
> 
> Any idea about what I may be doing wrong? Is there any information that I 
> forgot to include? 
> 
> Thanks in advance, 
> 
> Konstantin 

-- 
------------------------------------------------------------------------
Anthony Molinaro                           <[email protected]>

Reply via email to