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 <casabli...@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 <jbel...@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 <j...@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 <jbel...@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 >> <j...@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='[...@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 <jbel...@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 >> >> <j...@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 <osullivan.padr...@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 >> >> >> <j...@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 > j...@southcode.com.ar > http://www.southcode.com.ar > > -- Juan Manuel García del Moral Southcode Global IT Resources j...@southcode.com.ar http://www.southcode.com.ar -- Juan Manuel García del Moral Southcode Global IT Resources j...@southcode.com.ar http://www.southcode.com.ar
cassandra_client.cpp
Description: Binary data