Sounds like you are hitting a 16 bit limit someplace.
-----Original Message-----
From: Annu Agrawal [mailto:[email protected]]
Sent: 10 March 2013 19:00
To: [email protected]
Subject: Problem in running code using thrift api and cassandra
Hi ,
The following program has a loop which reads a value from cassandra column
which is stored in the form of string. In every iteration of the loop it
reads that value converts it in unsigned long and adds 4096 in it . Then
again it inserts this value in cassandra.
The loop stops incrementing after some iterations. I have tried the same
program without inserting in cassandra and it works totally fine.
But the following program works fine till 'size' variable reaches 61440.
After this iteration i.e 61440+4096=65536 the value read from cassandra
continues to be 61440 only untill the loop ends. So this value is not
getting inserted in cassandra.
This program works absolutely fine when debugged. So I am not able to find
where is exactly the problem.
I am deadly stuck up here.. Is there any problem with jvm heap space or
should any changes be made in cassandra.yaml file. Please help..
#include "../gen-cpp/Cassandra.h"
#include <iostream>
#include <thrift/protocol/TBinaryProtocol.h>
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TTransportUtils.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <stdlib.h>
#include "base64.h"
using namespace std;
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using namespace org::apache::cassandra;
using namespace boost;
static string host("127.0.0.1");
static int port= 9160;
//generate timestamp
int64_t getTS()
{
time_t ltime;
ltime=time(NULL);
return (int64_t)ltime;
}
int main()
{
shared_ptr <TTransport> socket(new TSocket(host, port));
shared_ptr <TTransport> transport(new TFramedTransport(socket));
shared_ptr <TProtocol> protocol(new TBinaryProtocol(transport));
string base64,metadata;
unsigned long size=0, *sizep;
int ch;
sizep=&size;
CassandraClient client(protocol);
ColumnPath cpath;
ColumnParent cp;
ColumnOrSuperColumn csc;
Column c1;
cp.column_family.assign("mycolfamily");
cp.super_column.assign("");
cpath.column_family.assign("mycolfamily");
cpath.__set_column("data");
transport->open();
client.set_keyspace("mykeyspace");
base64= base64_encode(UCCP(sizep),sizeof(*sizep));//converts
unsigned long to ASCII string
c1.__set_name("data");
c1.__set_value(base64);
c1.__set_timestamp(getTS());
client.insert("mykey", cp, c1,
org::apache::cassandra::ConsistencyLevel::ONE);
for(ch=0;ch<30;ch++)
{
//reading from cassandra
client.get(csc, "mykey", cpath,
org::apache::cassandra::ConsistencyLevel::ONE);
metadata = base64_decode(csc.column.value); //converts string
to unsigned long
memcpy(sizep,metadata.data(),metadata.size());
sizep = (unsigned long *)sizep;
cout<<"....\n Read value : "<< *sizep ;
// incrementing size
*sizep = *sizep + 4096;
//writing size in cassandra
base64= base64_encode(UCCP(sizep),sizeof(*sizep));//converts
unsigned long to ASCII string
c1.__set_name("data");
c1.__set_value(base64);
c1.__set_timestamp(getTS());
client.insert("mykey", cp, c1,
org::apache::cassandra::ConsistencyLevel::ONE);
cout<<"\n Written value : "<< *sizep <<"\n\n";
}
transport->close();
return 0;
}
--
Thanks,
Annu Agrawal