You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Juan Manuel Garcia del Moral <ju...@southcode.com.ar> on 2010/03/15 17:36:37 UTC
SuperColumns in C++ API
Hello
I'm trying to add values using supercolumns but I get this error
ERROR: supercolumn parameter is not optional for super CF Anonimos
This is my code
// **********
ColumnPath new_col;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Anonimos");
new_col.super_column.assign("Tag");
client.insert("SocialAds",
"1",
new_col,
"200",
123456789,
ONE);
// **********
What I'm doing wrong?
Thanks
Juan
Re: Re: Re: SuperColumns in C++ API
Posted by "casablinca126.com" <ca...@126.com>.
Juan,
check the attached source file .
Cao Jiguang
2010-03-17
casablinca126.com
发件人: Juan Manuel Garcia del Moral
发送时间: 2010-03-17 00:09:53
收件人: user@cassandra.apache.org
抄送:
主题: Re: Re: SuperColumns in C++ API
Many thanks for your code, would you please send me the get_slice() function as well so I can compile it?
thanks in advance
Juan
2010/3/15 casablinca126.com <ca...@126.com>
hello Juan,
this is the C++ code with super-column I'm using. I hope it will be useful :
#include "Cassandra.h"
#include <protocol/TBinaryProtocol.h>
#include <transport/TBufferTransports.h>
#include <transport/TSocket.h>
#include <string>
//#include <stdio.h>
#include <iostream>
#include <fstream>
#include <pthread.h>
#include <vector>
#include <map>
using namespace std;
using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using boost::shared_ptr;
using namespace org::apache::cassandra;
//macros..
#define MAX_STRLEN 100000
#define ITEM_COUNT 100000
#define ChapterNumPerNovel 30
//global variables & functions
int port = 9160;
void insert();
void get(void );
void get_slice();
void remove();
const string strKeyspace = "Keyspace1";
const string strColFamily_org = "Super1";
string strColFamily = "Super1";
string strColOrg = "chapter";
string strCol = "chapter";
string strSuperColOrg = "Novel";
string strSuperCol = "Novel";
string strKeyOrg = "novel_key";
string strKey = "novel_key";
string strValue = "";
size_t thread_id = 0;
bool STOP = false;
size_t start_time = 0;
size_t average_time = 0;
int ret_num = 0;
unsigned long long total_get_count = 0;
unsigned long long ntmp = 10;
int error_num = 0;
int main(int argc, char **argv)
{
//insert();
//get(NULL);
get_slice();
//remove();
return EXIT_SUCCESS;
}
void insert()
{
shared_ptr<TTransport> socket_novel(new TSocket("localhost", port));
shared_ptr<TTransport> transport_novel(new TBufferedTransport(socket_novel) );
shared_ptr<TProtocol> protocol_novel(new TBinaryProtocol(transport_novel) );
CassandraClient client(protocol_novel);
transport_novel->open();
string strValueOrg = "1234567";
ColumnPath col_path;
int i = 0;
char chTmp[MAX_STRLEN];
string str_zeros;
while(i<ITEM_COUNT )
{
memset(&chTmp, 0, MAX_STRLEN);
sprintf(chTmp, "%d", i++);
strValue = strValueOrg + string(chTmp);
strKey = strKeyOrg + string(chTmp);
strSuperCol = strSuperColOrg + string(chTmp);
col_path.column_family.assign(strColFamily );
col_path.column.assign(strCol);
col_path.super_column.assign(strSuperCol);
col_path.__isset.super_column = true;
col_path.__isset.column = true;
try
{
for(int j=0; j<ChapterNumPerNovel; j++)
{
memset(&chTmp, 0, MAX_STRLEN);
sprintf(chTmp, "%d", j);
int len = string(chTmp).length();
str_zeros = "";
for(int k=len; k<10; k++)
{
str_zeros += "0";
}
strCol= strSuperCol + "_" + strColOrg + str_zeros + string(chTmp);
col_path.column.assign(strCol);
client.insert(strKeyspace,strKey, col_path, strValue,time(NULL), ONE);
}
}
catch(TException &tx)
{
printf("ERROR: %s\n", tx.what());
error_num ++ ;
}
total_get_count ++ ;
}
STOP = true;
transport_novel->close();
}
//---------------------------------------
cheers,
Cao Jiguang
2010-03-16
casablinca126.com
发件人: Juan Manuel Garcia del Moral
发送时间: 2010-03-16 05:16:50
收件人: user@cassandra.apache.org
抄送:
主题: Re: SuperColumns in C++ API
Ok, I'll check out libcassandra in a while.
I've been able to insert values with this:
new_col.__isset.super_column = true;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Anonimos");
new_col.super_column.assign("Tag");
new_col.column.assign("300");
client.insert("SocialAds",
"50",
new_col,
"5",
12345678,
ONE);
I thought I could GET it by doing:
client.get(ret_val,
"SocialAds",
"50",
new_col,
ONE);
But I'm getting this error:
Default TException.
Ah nothing on the server log
Thanks, and sorry for all these newbie questions
2010/3/15 Jonathan Ellis <jb...@gmail.com>
you're still not setting isset on column_family.
you need both isset and assign on each value you're sending.
maybe you should use http://github.com/posulliv/libcassandra ?
On Mon, Mar 15, 2010 at 3:29 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> Ok,
>
> Now I've changed to:
>
> ColumnPath new_col;
> new_col.__isset.super_column = true;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
> new_col.column.assign("300");
>
>
> client.insert("SocialAds",
> "1",
> new_col,
> "200",
> 12345678,
> ONE);
>
> I'm not getting any error but no entry on the log either, and the value is
> not being inserted...
>
>
> Thanks
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>>
>> Ah, thrift is letting you set something to be null, that shouldn't be
>> legal. This is fixed in 0.6 svn, btw.
>>
>> it looks like you are setting new_col.__isset.column to true, but not
>> actually assigning it a value.
>>
>> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > This is what the log says:
>> >
>> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
>> > 1482)
>> > Internal error processing insert
>> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
>> > superColumnName='[B@d0357a', columnName='null')
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
>> > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
>> > at
>> >
>> > org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
>> > at
>> >
>> > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> > at java.lang.Thread.run(Thread.java:619)
>> >
>> >
>> > I need to do replicate this:
>> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>> >
>> > from my code...
>> >
>> > any ideas?
>> >
>> > thanks in advance
>> >
>> > Juan
>> >
>> >
>> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >>
>> >> check the server log for exception. and if you are not on 0.5.1 or
>> >> 0.6 svn branch, upgrade.
>> >>
>> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > Many thanks!
>> >> >
>> >> > That seems to be useful,
>> >> >
>> >> > But now I'm getting
>> >> > The error message: "Internal error processing insert"
>> >> >
>> >> > I'm not sure if I'm setting the timestamp properly
>> >> >
>> >> >
>> >> >
>> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >> >>
>> >> >> You need to manually set the __isset fields when using the thift API
>> >> >> in C++. Since you are trying to insert a super column, you need to
>> >> >> set
>> >> >> the super_column __isset field.
>> >> >>
>> >> >> So this:
>> >> >>
>> >> >> new_col.__isset.column = true;
>> >> >>
>> >> >> should become:
>> >> >>
>> >> >> new_col.__isset.super_column = true;
>> >> >>
>> >> >> -Padraig
>> >> >>
>> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> > Hello
>> >> >> >
>> >> >> > I'm trying to add values using supercolumns but I get this error
>> >> >> >
>> >> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >> >> >
>> >> >> > This is my code
>> >> >> >
>> >> >> > // **********
>> >> >> > ColumnPath new_col;
>> >> >> > new_col.__isset.column = true; /* this is required! */
>> >> >> > new_col.column_family.assign("Anonimos");
>> >> >> > new_col.super_column.assign("Tag");
>> >> >> >
>> >> >> > client.insert("SocialAds",
>> >> >> > "1",
>> >> >> > new_col,
>> >> >> > "200",
>> >> >> > 123456789,
>> >> >> > ONE);
>> >> >> >
>> >> >> > // **********
>> >> >> >
>> >> >> > What I'm doing wrong?
>> >> >> >
>> >> >> > Thanks
>> >> >> >
>> >> >> > Juan
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>> >
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
Many thanks for your code, would you please send me the get_slice() function
as well so I can compile it?
thanks in advance
Juan
2010/3/15 casablinca126.com <ca...@126.com>
> hello Juan,
> this is the C++ code with super-column I'm using. I hope it will be
> useful :
>
> #include "Cassandra.h"
> #include <protocol/TBinaryProtocol.h>
> #include <transport/TBufferTransports.h>
> #include <transport/TSocket.h>
> #include <string>
> //#include <stdio.h>
> #include <iostream>
> #include <fstream>
> #include <pthread.h>
> #include <vector>
> #include <map>
>
> using namespace std;
>
> using namespace ::apache::thrift;
> using namespace ::apache::thrift::protocol;
> using namespace ::apache::thrift::transport;
>
> using boost::shared_ptr;
>
> using namespace org::apache::cassandra;
>
> //macros..
> #define MAX_STRLEN 100000
> #define ITEM_COUNT 100000
> #define ChapterNumPerNovel 30
>
> //global variables & functions
>
> int port = 9160;
>
> void insert();
> void get(void );
> void get_slice();
> void remove();
>
> const string strKeyspace = "Keyspace1";
> const string strColFamily_org = "Super1";
> string strColFamily = "Super1";
> string strColOrg = "chapter";
> string strCol = "chapter";
> string strSuperColOrg = "Novel";
> string strSuperCol = "Novel";
> string strKeyOrg = "novel_key";
> string strKey = "novel_key";
> string strValue = "";
> size_t thread_id = 0;
>
> bool STOP = false;
> size_t start_time = 0;
> size_t average_time = 0;
> int ret_num = 0;
> unsigned long long total_get_count = 0;
> unsigned long long ntmp = 10;
> int error_num = 0;
>
>
>
>
>
> int main(int argc, char **argv)
> {
> //insert();
> //get(NULL);
> get_slice();
> //remove();
>
>
> return EXIT_SUCCESS;
> }
>
>
> void insert()
> {
>
> shared_ptr<TTransport> socket_novel(new TSocket("localhost", port));
> shared_ptr<TTransport> transport_novel(new
> TBufferedTransport(socket_novel) );
> shared_ptr<TProtocol> protocol_novel(new TBinaryProtocol(transport_novel)
> );
> CassandraClient client(protocol_novel);
> transport_novel->open();
> string strValueOrg = "1234567";
>
>
> ColumnPath col_path;
> int i = 0;
> char chTmp[MAX_STRLEN];
> string str_zeros;
> while(i<ITEM_COUNT )
> {
> memset(&chTmp, 0, MAX_STRLEN);
> sprintf(chTmp, "%d", i++);
>
> strValue = strValueOrg + string(chTmp);
> strKey = strKeyOrg + string(chTmp);
> strSuperCol = strSuperColOrg + string(chTmp);
>
> col_path.column_family.assign(strColFamily );
> col_path.column.assign(strCol);
> col_path.super_column.assign(strSuperCol);
> col_path.__isset.super_column = true;
> col_path.__isset.column = true;
>
>
> try
> {
> for(int j=0; j<ChapterNumPerNovel; j++)
> {
> memset(&chTmp, 0, MAX_STRLEN);
> sprintf(chTmp, "%d", j);
> int len = string(chTmp).length();
> str_zeros = "";
> for(int k=len; k<10; k++)
> {
> str_zeros += "0";
> }
> strCol= strSuperCol + "_" + strColOrg + str_zeros + string(chTmp);
> col_path.column.assign(strCol);
> client.insert(strKeyspace,strKey, col_path, strValue,time(NULL), ONE);
> }
> }
> catch(TException &tx)
> {
> printf("ERROR: %s\n", tx.what());
> error_num ++ ;
> }
>
> total_get_count ++ ;
>
> }
>
> STOP = true;
> transport_novel->close();
> }
> //---------------------------------------
>
> cheers,
> Cao Jiguang
>
>
> 2010-03-16
> ------------------------------
> casablinca126.com
> ------------------------------
> *发件人:* Juan Manuel Garcia del Moral
> *发送时间:* 2010-03-16 05:16:50
> *收件人:* user@cassandra.apache.org
> *抄送:*
> *主题:* Re: SuperColumns in C++ API
> Ok, I'll check out libcassandra in a while.
>
> I've been able to insert values with this:
>
> new_col.__isset.super_column = true;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
> new_col.column.assign("300");
>
> client.insert("SocialAds",
> "50",
> new_col,
> "5",
> 12345678,
> ONE);
>
> I thought I could GET it by doing:
>
> client.get(ret_val,
> "SocialAds",
> "50",
> new_col,
> ONE);
>
> But I'm getting this error:
> Default TException.
>
> Ah nothing on the server log
>
> Thanks, and sorry for all these newbie questions
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>
>> you're still not setting isset on column_family.
>>
>> you need both isset and assign on each value you're sending.
>>
>> maybe you should use http://github.com/posulliv/libcassandra ?
>>
>> On Mon, Mar 15, 2010 at 3:29 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > Ok,
>> >
>> > Now I've changed to:
>> >
>> > ColumnPath new_col;
>> > new_col.__isset.super_column = true;
>> > new_col.__isset.column = true; /* this is required! */
>> > new_col.column_family.assign("Anonimos");
>> > new_col.super_column.assign("Tag");
>> > new_col.column.assign("300");
>> >
>> >
>> > client.insert("SocialAds",
>> > "1",
>> > new_col,
>> > "200",
>> > 12345678,
>> > ONE);
>> >
>> > I'm not getting any error but no entry on the log either, and the value
>> is
>> > not being inserted...
>> >
>> >
>> > Thanks
>> >
>> >
>> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >>
>> >> Ah, thrift is letting you set something to be null, that shouldn't be
>> >> legal. This is fixed in 0.6 svn, btw.
>> >>
>> >> it looks like you are setting new_col.__isset.column to true, but not
>> >> actually assigning it a value.
>> >>
>> >> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > This is what the log says:
>> >> >
>> >> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
>> >> > 1482)
>> >> > Internal error processing insert
>> >> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
>> >> > superColumnName='[B@d0357a', columnName='null')
>> >> > at
>> >> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
>> >> > at
>> >> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
>> >> > at
>> org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
>> >> > at
>> >> >
>> >> >
>> org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
>> >> > at
>> >> >
>> >> >
>> org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
>> >> > at
>> >> >
>> >> >
>> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
>> >> > at
>> >> >
>> >> >
>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
>> >> > at
>> >> >
>> >> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> >> > at
>> >> >
>> >> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> >> > at java.lang.Thread.run(Thread.java:619)
>> >> >
>> >> >
>> >> > I need to do replicate this:
>> >> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>> >> >
>> >> > from my code...
>> >> >
>> >> > any ideas?
>> >> >
>> >> > thanks in advance
>> >> >
>> >> > Juan
>> >> >
>> >> >
>> >> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >> >>
>> >> >> check the server log for exception. and if you are not on 0.5.1 or
>> >> >> 0.6 svn branch, upgrade.
>> >> >>
>> >> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> > Many thanks!
>> >> >> >
>> >> >> > That seems to be useful,
>> >> >> >
>> >> >> > But now I'm getting
>> >> >> > The error message: "Internal error processing insert"
>> >> >> >
>> >> >> > I'm not sure if I'm setting the timestamp properly
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >> >> >>
>> >> >> >> You need to manually set the __isset fields when using the thift
>> API
>> >> >> >> in C++. Since you are trying to insert a super column, you need
>> to
>> >> >> >> set
>> >> >> >> the super_column __isset field.
>> >> >> >>
>> >> >> >> So this:
>> >> >> >>
>> >> >> >> new_col.__isset.column = true;
>> >> >> >>
>> >> >> >> should become:
>> >> >> >>
>> >> >> >> new_col.__isset.super_column = true;
>> >> >> >>
>> >> >> >> -Padraig
>> >> >> >>
>> >> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> >> > Hello
>> >> >> >> >
>> >> >> >> > I'm trying to add values using supercolumns but I get this
>> error
>> >> >> >> >
>> >> >> >> > ERROR: supercolumn parameter is not optional for super CF
>> Anonimos
>> >> >> >> >
>> >> >> >> > This is my code
>> >> >> >> >
>> >> >> >> > // **********
>> >> >> >> > ColumnPath new_col;
>> >> >> >> > new_col.__isset.column = true; /* this is required! */
>> >> >> >> > new_col.column_family.assign("Anonimos");
>> >> >> >> > new_col.super_column.assign("Tag");
>> >> >> >> >
>> >> >> >> > client.insert("SocialAds",
>> >> >> >> > "1",
>> >> >> >> > new_col,
>> >> >> >> > "200",
>> >> >> >> > 123456789,
>> >> >> >> > ONE);
>> >> >> >> >
>> >> >> >> > // **********
>> >> >> >> >
>> >> >> >> > What I'm doing wrong?
>> >> >> >> >
>> >> >> >> > Thanks
>> >> >> >> >
>> >> >> >> > Juan
>> >> >> >> >
>> >> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >>
>> >> >
>> >> >
>> >> >
>> >
>> >
>> >
>> > --
>> > Juan Manuel García del Moral
>> > Southcode Global IT Resources
>> > jm@southcode.com.ar
>> > http://www.southcode.com.ar
>> >
>> >
>>
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: Re: SuperColumns in C++ API
Posted by "casablinca126.com" <ca...@126.com>.
hello Juan,
this is the C++ code with super-column I'm using. I hope it will be useful :
#include "Cassandra.h"
#include <protocol/TBinaryProtocol.h>
#include <transport/TBufferTransports.h>
#include <transport/TSocket.h>
#include <string>
//#include <stdio.h>
#include <iostream>
#include <fstream>
#include <pthread.h>
#include <vector>
#include <map>
using namespace std;
using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using boost::shared_ptr;
using namespace org::apache::cassandra;
//macros..
#define MAX_STRLEN 100000
#define ITEM_COUNT 100000
#define ChapterNumPerNovel 30
//global variables & functions
int port = 9160;
void insert();
void get(void );
void get_slice();
void remove();
const string strKeyspace = "Keyspace1";
const string strColFamily_org = "Super1";
string strColFamily = "Super1";
string strColOrg = "chapter";
string strCol = "chapter";
string strSuperColOrg = "Novel";
string strSuperCol = "Novel";
string strKeyOrg = "novel_key";
string strKey = "novel_key";
string strValue = "";
size_t thread_id = 0;
bool STOP = false;
size_t start_time = 0;
size_t average_time = 0;
int ret_num = 0;
unsigned long long total_get_count = 0;
unsigned long long ntmp = 10;
int error_num = 0;
int main(int argc, char **argv)
{
//insert();
//get(NULL);
get_slice();
//remove();
return EXIT_SUCCESS;
}
void insert()
{
shared_ptr<TTransport> socket_novel(new TSocket("localhost", port));
shared_ptr<TTransport> transport_novel(new TBufferedTransport(socket_novel) );
shared_ptr<TProtocol> protocol_novel(new TBinaryProtocol(transport_novel) );
CassandraClient client(protocol_novel);
transport_novel->open();
string strValueOrg = "1234567";
ColumnPath col_path;
int i = 0;
char chTmp[MAX_STRLEN];
string str_zeros;
while(i<ITEM_COUNT )
{
memset(&chTmp, 0, MAX_STRLEN);
sprintf(chTmp, "%d", i++);
strValue = strValueOrg + string(chTmp);
strKey = strKeyOrg + string(chTmp);
strSuperCol = strSuperColOrg + string(chTmp);
col_path.column_family.assign(strColFamily );
col_path.column.assign(strCol);
col_path.super_column.assign(strSuperCol);
col_path.__isset.super_column = true;
col_path.__isset.column = true;
try
{
for(int j=0; j<ChapterNumPerNovel; j++)
{
memset(&chTmp, 0, MAX_STRLEN);
sprintf(chTmp, "%d", j);
int len = string(chTmp).length();
str_zeros = "";
for(int k=len; k<10; k++)
{
str_zeros += "0";
}
strCol= strSuperCol + "_" + strColOrg + str_zeros + string(chTmp);
col_path.column.assign(strCol);
client.insert(strKeyspace,strKey, col_path, strValue,time(NULL), ONE);
}
}
catch(TException &tx)
{
printf("ERROR: %s\n", tx.what());
error_num ++ ;
}
total_get_count ++ ;
}
STOP = true;
transport_novel->close();
}
//---------------------------------------
cheers,
Cao Jiguang
2010-03-16
casablinca126.com
发件人: Juan Manuel Garcia del Moral
发送时间: 2010-03-16 05:16:50
收件人: user@cassandra.apache.org
抄送:
主题: Re: SuperColumns in C++ API
Ok, I'll check out libcassandra in a while.
I've been able to insert values with this:
new_col.__isset.super_column = true;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Anonimos");
new_col.super_column.assign("Tag");
new_col.column.assign("300");
client.insert("SocialAds",
"50",
new_col,
"5",
12345678,
ONE);
I thought I could GET it by doing:
client.get(ret_val,
"SocialAds",
"50",
new_col,
ONE);
But I'm getting this error:
Default TException.
Ah nothing on the server log
Thanks, and sorry for all these newbie questions
2010/3/15 Jonathan Ellis <jb...@gmail.com>
you're still not setting isset on column_family.
you need both isset and assign on each value you're sending.
maybe you should use http://github.com/posulliv/libcassandra ?
On Mon, Mar 15, 2010 at 3:29 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> Ok,
>
> Now I've changed to:
>
> ColumnPath new_col;
> new_col.__isset.super_column = true;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
> new_col.column.assign("300");
>
>
> client.insert("SocialAds",
> "1",
> new_col,
> "200",
> 12345678,
> ONE);
>
> I'm not getting any error but no entry on the log either, and the value is
> not being inserted...
>
>
> Thanks
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>>
>> Ah, thrift is letting you set something to be null, that shouldn't be
>> legal. This is fixed in 0.6 svn, btw.
>>
>> it looks like you are setting new_col.__isset.column to true, but not
>> actually assigning it a value.
>>
>> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > This is what the log says:
>> >
>> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
>> > 1482)
>> > Internal error processing insert
>> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
>> > superColumnName='[B@d0357a', columnName='null')
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
>> > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
>> > at
>> >
>> > org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
>> > at
>> >
>> > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> > at java.lang.Thread.run(Thread.java:619)
>> >
>> >
>> > I need to do replicate this:
>> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>> >
>> > from my code...
>> >
>> > any ideas?
>> >
>> > thanks in advance
>> >
>> > Juan
>> >
>> >
>> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >>
>> >> check the server log for exception. and if you are not on 0.5.1 or
>> >> 0.6 svn branch, upgrade.
>> >>
>> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > Many thanks!
>> >> >
>> >> > That seems to be useful,
>> >> >
>> >> > But now I'm getting
>> >> > The error message: "Internal error processing insert"
>> >> >
>> >> > I'm not sure if I'm setting the timestamp properly
>> >> >
>> >> >
>> >> >
>> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >> >>
>> >> >> You need to manually set the __isset fields when using the thift API
>> >> >> in C++. Since you are trying to insert a super column, you need to
>> >> >> set
>> >> >> the super_column __isset field.
>> >> >>
>> >> >> So this:
>> >> >>
>> >> >> new_col.__isset.column = true;
>> >> >>
>> >> >> should become:
>> >> >>
>> >> >> new_col.__isset.super_column = true;
>> >> >>
>> >> >> -Padraig
>> >> >>
>> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> > Hello
>> >> >> >
>> >> >> > I'm trying to add values using supercolumns but I get this error
>> >> >> >
>> >> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >> >> >
>> >> >> > This is my code
>> >> >> >
>> >> >> > // **********
>> >> >> > ColumnPath new_col;
>> >> >> > new_col.__isset.column = true; /* this is required! */
>> >> >> > new_col.column_family.assign("Anonimos");
>> >> >> > new_col.super_column.assign("Tag");
>> >> >> >
>> >> >> > client.insert("SocialAds",
>> >> >> > "1",
>> >> >> > new_col,
>> >> >> > "200",
>> >> >> > 123456789,
>> >> >> > ONE);
>> >> >> >
>> >> >> > // **********
>> >> >> >
>> >> >> > What I'm doing wrong?
>> >> >> >
>> >> >> > Thanks
>> >> >> >
>> >> >> > Juan
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>> >
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
Ok, I'll check out libcassandra in a while.
I've been able to insert values with this:
new_col.__isset.super_column = true;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Anonimos");
new_col.super_column.assign("Tag");
new_col.column.assign("300");
client.insert("SocialAds",
"50",
new_col,
"5",
12345678,
ONE);
I thought I could GET it by doing:
client.get(ret_val,
"SocialAds",
"50",
new_col,
ONE);
But I'm getting this error:
Default TException.
Ah nothing on the server log
Thanks, and sorry for all these newbie questions
2010/3/15 Jonathan Ellis <jb...@gmail.com>
> you're still not setting isset on column_family.
>
> you need both isset and assign on each value you're sending.
>
> maybe you should use http://github.com/posulliv/libcassandra ?
>
> On Mon, Mar 15, 2010 at 3:29 PM, Juan Manuel Garcia del Moral
> <ju...@southcode.com.ar> wrote:
> > Ok,
> >
> > Now I've changed to:
> >
> > ColumnPath new_col;
> > new_col.__isset.super_column = true;
> > new_col.__isset.column = true; /* this is required! */
> > new_col.column_family.assign("Anonimos");
> > new_col.super_column.assign("Tag");
> > new_col.column.assign("300");
> >
> >
> > client.insert("SocialAds",
> > "1",
> > new_col,
> > "200",
> > 12345678,
> > ONE);
> >
> > I'm not getting any error but no entry on the log either, and the value
> is
> > not being inserted...
> >
> >
> > Thanks
> >
> >
> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
> >>
> >> Ah, thrift is letting you set something to be null, that shouldn't be
> >> legal. This is fixed in 0.6 svn, btw.
> >>
> >> it looks like you are setting new_col.__isset.column to true, but not
> >> actually assigning it a value.
> >>
> >> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
> >> <ju...@southcode.com.ar> wrote:
> >> > This is what the log says:
> >> >
> >> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
> >> > 1482)
> >> > Internal error processing insert
> >> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
> >> > superColumnName='[B@d0357a', columnName='null')
> >> > at
> >> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
> >> > at
> >> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
> >> > at
> org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
> >> > at
> >> >
> >> >
> org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
> >> > at
> >> >
> >> >
> org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
> >> > at
> >> >
> >> >
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
> >> > at
> >> >
> >> >
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
> >> > at
> >> >
> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> >> > at
> >> >
> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> >> > at java.lang.Thread.run(Thread.java:619)
> >> >
> >> >
> >> > I need to do replicate this:
> >> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
> >> >
> >> > from my code...
> >> >
> >> > any ideas?
> >> >
> >> > thanks in advance
> >> >
> >> > Juan
> >> >
> >> >
> >> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
> >> >>
> >> >> check the server log for exception. and if you are not on 0.5.1 or
> >> >> 0.6 svn branch, upgrade.
> >> >>
> >> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
> >> >> <ju...@southcode.com.ar> wrote:
> >> >> > Many thanks!
> >> >> >
> >> >> > That seems to be useful,
> >> >> >
> >> >> > But now I'm getting
> >> >> > The error message: "Internal error processing insert"
> >> >> >
> >> >> > I'm not sure if I'm setting the timestamp properly
> >> >> >
> >> >> >
> >> >> >
> >> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
> >> >> >>
> >> >> >> You need to manually set the __isset fields when using the thift
> API
> >> >> >> in C++. Since you are trying to insert a super column, you need to
> >> >> >> set
> >> >> >> the super_column __isset field.
> >> >> >>
> >> >> >> So this:
> >> >> >>
> >> >> >> new_col.__isset.column = true;
> >> >> >>
> >> >> >> should become:
> >> >> >>
> >> >> >> new_col.__isset.super_column = true;
> >> >> >>
> >> >> >> -Padraig
> >> >> >>
> >> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
> >> >> >> <ju...@southcode.com.ar> wrote:
> >> >> >> > Hello
> >> >> >> >
> >> >> >> > I'm trying to add values using supercolumns but I get this error
> >> >> >> >
> >> >> >> > ERROR: supercolumn parameter is not optional for super CF
> Anonimos
> >> >> >> >
> >> >> >> > This is my code
> >> >> >> >
> >> >> >> > // **********
> >> >> >> > ColumnPath new_col;
> >> >> >> > new_col.__isset.column = true; /* this is required! */
> >> >> >> > new_col.column_family.assign("Anonimos");
> >> >> >> > new_col.super_column.assign("Tag");
> >> >> >> >
> >> >> >> > client.insert("SocialAds",
> >> >> >> > "1",
> >> >> >> > new_col,
> >> >> >> > "200",
> >> >> >> > 123456789,
> >> >> >> > ONE);
> >> >> >> >
> >> >> >> > // **********
> >> >> >> >
> >> >> >> > What I'm doing wrong?
> >> >> >> >
> >> >> >> > Thanks
> >> >> >> >
> >> >> >> > Juan
> >> >> >> >
> >> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >>
> >> >
> >> >
> >> >
> >
> >
> >
> > --
> > Juan Manuel García del Moral
> > Southcode Global IT Resources
> > jm@southcode.com.ar
> > http://www.southcode.com.ar
> >
> >
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: SuperColumns in C++ API
Posted by Jonathan Ellis <jb...@gmail.com>.
you're still not setting isset on column_family.
you need both isset and assign on each value you're sending.
maybe you should use http://github.com/posulliv/libcassandra ?
On Mon, Mar 15, 2010 at 3:29 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> Ok,
>
> Now I've changed to:
>
> ColumnPath new_col;
> new_col.__isset.super_column = true;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
> new_col.column.assign("300");
>
>
> client.insert("SocialAds",
> "1",
> new_col,
> "200",
> 12345678,
> ONE);
>
> I'm not getting any error but no entry on the log either, and the value is
> not being inserted...
>
>
> Thanks
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>>
>> Ah, thrift is letting you set something to be null, that shouldn't be
>> legal. This is fixed in 0.6 svn, btw.
>>
>> it looks like you are setting new_col.__isset.column to true, but not
>> actually assigning it a value.
>>
>> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > This is what the log says:
>> >
>> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
>> > 1482)
>> > Internal error processing insert
>> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
>> > superColumnName='[B@d0357a', columnName='null')
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
>> > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
>> > at
>> >
>> > org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
>> > at
>> >
>> > org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
>> > at
>> >
>> > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> > at
>> >
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> > at java.lang.Thread.run(Thread.java:619)
>> >
>> >
>> > I need to do replicate this:
>> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>> >
>> > from my code...
>> >
>> > any ideas?
>> >
>> > thanks in advance
>> >
>> > Juan
>> >
>> >
>> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >>
>> >> check the server log for exception. and if you are not on 0.5.1 or
>> >> 0.6 svn branch, upgrade.
>> >>
>> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > Many thanks!
>> >> >
>> >> > That seems to be useful,
>> >> >
>> >> > But now I'm getting
>> >> > The error message: "Internal error processing insert"
>> >> >
>> >> > I'm not sure if I'm setting the timestamp properly
>> >> >
>> >> >
>> >> >
>> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >> >>
>> >> >> You need to manually set the __isset fields when using the thift API
>> >> >> in C++. Since you are trying to insert a super column, you need to
>> >> >> set
>> >> >> the super_column __isset field.
>> >> >>
>> >> >> So this:
>> >> >>
>> >> >> new_col.__isset.column = true;
>> >> >>
>> >> >> should become:
>> >> >>
>> >> >> new_col.__isset.super_column = true;
>> >> >>
>> >> >> -Padraig
>> >> >>
>> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> > Hello
>> >> >> >
>> >> >> > I'm trying to add values using supercolumns but I get this error
>> >> >> >
>> >> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >> >> >
>> >> >> > This is my code
>> >> >> >
>> >> >> > // **********
>> >> >> > ColumnPath new_col;
>> >> >> > new_col.__isset.column = true; /* this is required! */
>> >> >> > new_col.column_family.assign("Anonimos");
>> >> >> > new_col.super_column.assign("Tag");
>> >> >> >
>> >> >> > client.insert("SocialAds",
>> >> >> > "1",
>> >> >> > new_col,
>> >> >> > "200",
>> >> >> > 123456789,
>> >> >> > ONE);
>> >> >> >
>> >> >> > // **********
>> >> >> >
>> >> >> > What I'm doing wrong?
>> >> >> >
>> >> >> > Thanks
>> >> >> >
>> >> >> > Juan
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>> >
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
Sorry I was testing wrong, the values are there:
cassandra> get SocialAds.Anonimos['1']['Tag'];
=> (column=300, value=200, timestamp=12345678)
Thank you so much for your help.
2010/3/15 Juan Manuel Garcia del Moral <ju...@southcode.com.ar>
> Ok,
>
> Now I've changed to:
>
> ColumnPath new_col;
> new_col.__isset.super_column = true;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
> new_col.column.assign("300");
>
>
>
> client.insert("SocialAds",
> "1",
> new_col,
> "200",
> 12345678,
> ONE);
>
> I'm not getting any error but no entry on the log either, and the value is
> not being inserted...
>
>
> Thanks
>
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>
>> Ah, thrift is letting you set something to be null, that shouldn't be
>> legal. This is fixed in 0.6 svn, btw.
>>
>> it looks like you are setting new_col.__isset.column to true, but not
>> actually assigning it a value.
>>
>> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > This is what the log says:
>> >
>> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
>> 1482)
>> > Internal error processing insert
>> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
>> > superColumnName='[B@d0357a', columnName='null')
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
>> > at
>> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
>> > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
>> > at
>> >
>> org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
>> > at
>> >
>> org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
>> > at
>> >
>> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
>> > at
>> >
>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> > at java.lang.Thread.run(Thread.java:619)
>> >
>> >
>> > I need to do replicate this:
>> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>> >
>> > from my code...
>> >
>> > any ideas?
>> >
>> > thanks in advance
>> >
>> > Juan
>> >
>> >
>> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>> >>
>> >> check the server log for exception. and if you are not on 0.5.1 or
>> >> 0.6 svn branch, upgrade.
>> >>
>> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > Many thanks!
>> >> >
>> >> > That seems to be useful,
>> >> >
>> >> > But now I'm getting
>> >> > The error message: "Internal error processing insert"
>> >> >
>> >> > I'm not sure if I'm setting the timestamp properly
>> >> >
>> >> >
>> >> >
>> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >> >>
>> >> >> You need to manually set the __isset fields when using the thift API
>> >> >> in C++. Since you are trying to insert a super column, you need to
>> set
>> >> >> the super_column __isset field.
>> >> >>
>> >> >> So this:
>> >> >>
>> >> >> new_col.__isset.column = true;
>> >> >>
>> >> >> should become:
>> >> >>
>> >> >> new_col.__isset.super_column = true;
>> >> >>
>> >> >> -Padraig
>> >> >>
>> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> >> <ju...@southcode.com.ar> wrote:
>> >> >> > Hello
>> >> >> >
>> >> >> > I'm trying to add values using supercolumns but I get this error
>> >> >> >
>> >> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >> >> >
>> >> >> > This is my code
>> >> >> >
>> >> >> > // **********
>> >> >> > ColumnPath new_col;
>> >> >> > new_col.__isset.column = true; /* this is required! */
>> >> >> > new_col.column_family.assign("Anonimos");
>> >> >> > new_col.super_column.assign("Tag");
>> >> >> >
>> >> >> > client.insert("SocialAds",
>> >> >> > "1",
>> >> >> > new_col,
>> >> >> > "200",
>> >> >> > 123456789,
>> >> >> > ONE);
>> >> >> >
>> >> >> > // **********
>> >> >> >
>> >> >> > What I'm doing wrong?
>> >> >> >
>> >> >> > Thanks
>> >> >> >
>> >> >> > Juan
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>> >
>>
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
Ok,
Now I've changed to:
ColumnPath new_col;
new_col.__isset.super_column = true;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Anonimos");
new_col.super_column.assign("Tag");
new_col.column.assign("300");
client.insert("SocialAds",
"1",
new_col,
"200",
12345678,
ONE);
I'm not getting any error but no entry on the log either, and the value is
not being inserted...
Thanks
2010/3/15 Jonathan Ellis <jb...@gmail.com>
> Ah, thrift is letting you set something to be null, that shouldn't be
> legal. This is fixed in 0.6 svn, btw.
>
> it looks like you are setting new_col.__isset.column to true, but not
> actually assigning it a value.
>
> On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
> <ju...@southcode.com.ar> wrote:
> > This is what the log says:
> >
> > ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line
> 1482)
> > Internal error processing insert
> > java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
> > superColumnName='[B@d0357a', columnName='null')
> > at
> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
> > at
> > org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
> > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
> > at
> >
> org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
> > at
> >
> org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
> > at
> >
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
> > at
> >
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> > at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> > at java.lang.Thread.run(Thread.java:619)
> >
> >
> > I need to do replicate this:
> > set SocialAds.Anonimos['122']['Tag']['150'] = '100';
> >
> > from my code...
> >
> > any ideas?
> >
> > thanks in advance
> >
> > Juan
> >
> >
> > 2010/3/15 Jonathan Ellis <jb...@gmail.com>
> >>
> >> check the server log for exception. and if you are not on 0.5.1 or
> >> 0.6 svn branch, upgrade.
> >>
> >> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
> >> <ju...@southcode.com.ar> wrote:
> >> > Many thanks!
> >> >
> >> > That seems to be useful,
> >> >
> >> > But now I'm getting
> >> > The error message: "Internal error processing insert"
> >> >
> >> > I'm not sure if I'm setting the timestamp properly
> >> >
> >> >
> >> >
> >> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
> >> >>
> >> >> You need to manually set the __isset fields when using the thift API
> >> >> in C++. Since you are trying to insert a super column, you need to
> set
> >> >> the super_column __isset field.
> >> >>
> >> >> So this:
> >> >>
> >> >> new_col.__isset.column = true;
> >> >>
> >> >> should become:
> >> >>
> >> >> new_col.__isset.super_column = true;
> >> >>
> >> >> -Padraig
> >> >>
> >> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
> >> >> <ju...@southcode.com.ar> wrote:
> >> >> > Hello
> >> >> >
> >> >> > I'm trying to add values using supercolumns but I get this error
> >> >> >
> >> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
> >> >> >
> >> >> > This is my code
> >> >> >
> >> >> > // **********
> >> >> > ColumnPath new_col;
> >> >> > new_col.__isset.column = true; /* this is required! */
> >> >> > new_col.column_family.assign("Anonimos");
> >> >> > new_col.super_column.assign("Tag");
> >> >> >
> >> >> > client.insert("SocialAds",
> >> >> > "1",
> >> >> > new_col,
> >> >> > "200",
> >> >> > 123456789,
> >> >> > ONE);
> >> >> >
> >> >> > // **********
> >> >> >
> >> >> > What I'm doing wrong?
> >> >> >
> >> >> > Thanks
> >> >> >
> >> >> > Juan
> >> >> >
> >> >> >
> >> >
> >> >
> >> >
> >>
> >
> >
> >
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: SuperColumns in C++ API
Posted by Jonathan Ellis <jb...@gmail.com>.
Ah, thrift is letting you set something to be null, that shouldn't be
legal. This is fixed in 0.6 svn, btw.
it looks like you are setting new_col.__isset.column to true, but not
actually assigning it a value.
On Mon, Mar 15, 2010 at 3:14 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> This is what the log says:
>
> ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line 1482)
> Internal error processing insert
> java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
> superColumnName='[B@d0357a', columnName='null')
> at
> org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
> at
> org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
> at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
> at
> org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
> at
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
> at
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:619)
>
>
> I need to do replicate this:
> set SocialAds.Anonimos['122']['Tag']['150'] = '100';
>
> from my code...
>
> any ideas?
>
> thanks in advance
>
> Juan
>
>
> 2010/3/15 Jonathan Ellis <jb...@gmail.com>
>>
>> check the server log for exception. and if you are not on 0.5.1 or
>> 0.6 svn branch, upgrade.
>>
>> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > Many thanks!
>> >
>> > That seems to be useful,
>> >
>> > But now I'm getting
>> > The error message: "Internal error processing insert"
>> >
>> > I'm not sure if I'm setting the timestamp properly
>> >
>> >
>> >
>> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>> >>
>> >> You need to manually set the __isset fields when using the thift API
>> >> in C++. Since you are trying to insert a super column, you need to set
>> >> the super_column __isset field.
>> >>
>> >> So this:
>> >>
>> >> new_col.__isset.column = true;
>> >>
>> >> should become:
>> >>
>> >> new_col.__isset.super_column = true;
>> >>
>> >> -Padraig
>> >>
>> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> >> <ju...@southcode.com.ar> wrote:
>> >> > Hello
>> >> >
>> >> > I'm trying to add values using supercolumns but I get this error
>> >> >
>> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >> >
>> >> > This is my code
>> >> >
>> >> > // **********
>> >> > ColumnPath new_col;
>> >> > new_col.__isset.column = true; /* this is required! */
>> >> > new_col.column_family.assign("Anonimos");
>> >> > new_col.super_column.assign("Tag");
>> >> >
>> >> > client.insert("SocialAds",
>> >> > "1",
>> >> > new_col,
>> >> > "200",
>> >> > 123456789,
>> >> > ONE);
>> >> >
>> >> > // **********
>> >> >
>> >> > What I'm doing wrong?
>> >> >
>> >> > Thanks
>> >> >
>> >> > Juan
>> >> >
>> >> >
>> >
>> >
>> >
>>
>
>
>
Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
This is what the log says:
ERROR [pool-1-thread-8] 2010-03-15 15:54:06,753 Cassandra.java (line 1482)
Internal error processing insert
java.lang.AssertionError: QueryPath(columnFamilyName='Anonimos',
superColumnName='[B@d0357a', columnName='null')
at
org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:165)
at
org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:159)
at org.apache.cassandra.db.RowMutation.add(RowMutation.java:159)
at
org.apache.cassandra.thrift.CassandraServer.insert(CassandraServer.java:351)
at
org.apache.cassandra.thrift.Cassandra$Processor$insert.process(Cassandra.java:1474)
at
org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:1115)
at
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:253)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
I need to do replicate this:
set SocialAds.Anonimos['122']['Tag']['150'] = '100';
from my code...
any ideas?
thanks in advance
Juan
2010/3/15 Jonathan Ellis <jb...@gmail.com>
> check the server log for exception. and if you are not on 0.5.1 or
> 0.6 svn branch, upgrade.
>
> On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
> <ju...@southcode.com.ar> wrote:
> > Many thanks!
> >
> > That seems to be useful,
> >
> > But now I'm getting
> > The error message: "Internal error processing insert"
> >
> > I'm not sure if I'm setting the timestamp properly
> >
> >
> >
> > 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
> >>
> >> You need to manually set the __isset fields when using the thift API
> >> in C++. Since you are trying to insert a super column, you need to set
> >> the super_column __isset field.
> >>
> >> So this:
> >>
> >> new_col.__isset.column = true;
> >>
> >> should become:
> >>
> >> new_col.__isset.super_column = true;
> >>
> >> -Padraig
> >>
> >> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
> >> <ju...@southcode.com.ar> wrote:
> >> > Hello
> >> >
> >> > I'm trying to add values using supercolumns but I get this error
> >> >
> >> > ERROR: supercolumn parameter is not optional for super CF Anonimos
> >> >
> >> > This is my code
> >> >
> >> > // **********
> >> > ColumnPath new_col;
> >> > new_col.__isset.column = true; /* this is required! */
> >> > new_col.column_family.assign("Anonimos");
> >> > new_col.super_column.assign("Tag");
> >> >
> >> > client.insert("SocialAds",
> >> > "1",
> >> > new_col,
> >> > "200",
> >> > 123456789,
> >> > ONE);
> >> >
> >> > // **********
> >> >
> >> > What I'm doing wrong?
> >> >
> >> > Thanks
> >> >
> >> > Juan
> >> >
> >> >
> >
> >
> >
>
>
Re: SuperColumns in C++ API
Posted by Jonathan Ellis <jb...@gmail.com>.
check the server log for exception. and if you are not on 0.5.1 or
0.6 svn branch, upgrade.
On Mon, Mar 15, 2010 at 12:47 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> Many thanks!
>
> That seems to be useful,
>
> But now I'm getting
> The error message: "Internal error processing insert"
>
> I'm not sure if I'm setting the timestamp properly
>
>
>
> 2010/3/15 Padraig O'Sullivan <os...@gmail.com>
>>
>> You need to manually set the __isset fields when using the thift API
>> in C++. Since you are trying to insert a super column, you need to set
>> the super_column __isset field.
>>
>> So this:
>>
>> new_col.__isset.column = true;
>>
>> should become:
>>
>> new_col.__isset.super_column = true;
>>
>> -Padraig
>>
>> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
>> <ju...@southcode.com.ar> wrote:
>> > Hello
>> >
>> > I'm trying to add values using supercolumns but I get this error
>> >
>> > ERROR: supercolumn parameter is not optional for super CF Anonimos
>> >
>> > This is my code
>> >
>> > // **********
>> > ColumnPath new_col;
>> > new_col.__isset.column = true; /* this is required! */
>> > new_col.column_family.assign("Anonimos");
>> > new_col.super_column.assign("Tag");
>> >
>> > client.insert("SocialAds",
>> > "1",
>> > new_col,
>> > "200",
>> > 123456789,
>> > ONE);
>> >
>> > // **********
>> >
>> > What I'm doing wrong?
>> >
>> > Thanks
>> >
>> > Juan
>> >
>> >
>
>
>
> --
> Juan Manuel García del Moral
> Southcode Global IT Resources
> jm@southcode.com.ar
> http://www.southcode.com.ar
>
>
Re: SuperColumns in C++ API
Posted by Juan Manuel Garcia del Moral <ju...@southcode.com.ar>.
Many thanks!
That seems to be useful,
But now I'm getting
The error message: "Internal error processing insert"
I'm not sure if I'm setting the timestamp properly
2010/3/15 Padraig O'Sullivan <os...@gmail.com>
> You need to manually set the __isset fields when using the thift API
> in C++. Since you are trying to insert a super column, you need to set
> the super_column __isset field.
>
> So this:
>
> new_col.__isset.column = true;
>
> should become:
>
> new_col.__isset.super_column = true;
>
> -Padraig
>
> On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
> <ju...@southcode.com.ar> wrote:
> > Hello
> >
> > I'm trying to add values using supercolumns but I get this error
> >
> > ERROR: supercolumn parameter is not optional for super CF Anonimos
> >
> > This is my code
> >
> > // **********
> > ColumnPath new_col;
> > new_col.__isset.column = true; /* this is required! */
> > new_col.column_family.assign("Anonimos");
> > new_col.super_column.assign("Tag");
> >
> > client.insert("SocialAds",
> > "1",
> > new_col,
> > "200",
> > 123456789,
> > ONE);
> >
> > // **********
> >
> > What I'm doing wrong?
> >
> > Thanks
> >
> > Juan
> >
> >
>
--
Juan Manuel García del Moral
Southcode Global IT Resources
jm@southcode.com.ar
http://www.southcode.com.ar
Re: SuperColumns in C++ API
Posted by Padraig O'Sullivan <os...@gmail.com>.
You need to manually set the __isset fields when using the thift API
in C++. Since you are trying to insert a super column, you need to set
the super_column __isset field.
So this:
new_col.__isset.column = true;
should become:
new_col.__isset.super_column = true;
-Padraig
On Mon, Mar 15, 2010 at 12:36 PM, Juan Manuel Garcia del Moral
<ju...@southcode.com.ar> wrote:
> Hello
>
> I'm trying to add values using supercolumns but I get this error
>
> ERROR: supercolumn parameter is not optional for super CF Anonimos
>
> This is my code
>
> // **********
> ColumnPath new_col;
> new_col.__isset.column = true; /* this is required! */
> new_col.column_family.assign("Anonimos");
> new_col.super_column.assign("Tag");
>
> client.insert("SocialAds",
> "1",
> new_col,
> "200",
> 123456789,
> ONE);
>
> // **********
>
> What I'm doing wrong?
>
> Thanks
>
> Juan
>
>