You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Jaydeep Chovatia <Ja...@openwave.com> on 2010/12/12 08:42:33 UTC
Cassandra 0.7 C++ Thrift delete problem
Hi,
I am facing some issues with delete operation in Cassandra-0.7.0 using C++ Thrift API. Please find details here:
C++ Thrift Machine: Linux 64-bit
1. I am using remove thrift API to delete either column or column family. Problem in this is when I call remove then it hangs forever (never returns back). Please find my code details here:
cassClient->set_keyspace(keySpace);
ColumnPath clnPath;
clnPath.column_family = columnFamily;
if(columnOrSuperColumnName.size() > 0){
if(isSuperColumn) {
clnPath.__isset.super_column = true;
clnPath.super_column = columnOrSuperColumnName;
} else {
clnPath.__isset.column = true;
clnPath.column = columnOrSuperColumnName;
}
}
//DIAGC("mssRME", 1, "About to run remove...");
cassClient->remove(key, clnPath, delTimeStamp, consisLevel);
//DIAGC("mssRME", 1, "Success! remove...");
1. I have tried with batch_mutate thrift API. With this operations goes smoothly but I end up getting deleted column/columnfamily/key back when I perform get operation after delete. Looks like delete operation did not work. Please find sample code here:
map<string, vector<Column> >::iterator iter = SCNameAndCols.begin(); //SuperColumn name as key - Vector containing columns in each super column
std::vector<Mutation> mv;
while(iter != SCNameAndCols.end()) { //Iterate through each SuperColumn one after another
SuperColumn sc;
ColumnOrSuperColumn cs;
Mutation mu;
` mu.__isset.deletion = true;
mu.deletion.timestamp = delTimeStamp; //This is latest timestamp in miliseconds
mu.deletion.__isset.predicate = true;
mu.deletion.super_column = (*iter).first;
mu.deletion.predicate.__isset.column_names = true;
for(int i = 0; i < (*iter).second.size(); i++) {
mu.deletion.predicate.column_names.push_back((*iter).second[i].name);
}
mv.push_back(mu);
iter++;
}//End of While loop
std::map<std::string, std::vector<Mutation> > innMap;
innMap[CFName] = mv;
std::map<std::string, std::map<std::string, std::vector<Mutation> > > outMap;
outMap[Key] = innMap;
//DIAGC("mssRME", 1, "About to run batch_mutate...");
cassClient->batch_mutate(outMap, consisLevel);
//DIAGC("mssRME", 1, "Success! batch_mutate...");
Any help would be appreciated.
Thank you,
Jaydeep
Re: Cassandra 0.7 C++ Thrift delete problem
Posted by Tyler Hobbs <ty...@riptano.com>.
I'm not sure why your first one hangs because it looks correct, but it's
possible that you have a timestamp resolution problem for the batch_mutate()
version. How are you creating the timestamp? Also, don't forget about
"range ghosts": http://wiki.apache.org/cassandra/FAQ#range_ghosts
- Tyler
On Sun, Dec 12, 2010 at 1:42 AM, Jaydeep Chovatia <
Jaydeep.Chovatia@openwave.com> wrote:
> Hi,
>
>
>
> I am facing some issues with delete operation in Cassandra-0.7.0 using C++
> Thrift API. Please find details here:
>
> C++ Thrift Machine: Linux 64-bit
>
>
>
> 1. I am using remove thrift API to delete either column or column
> family. Problem in this is when I call remove then it hangs forever
> (never returns back). Please find my code details here:
>
>
>
> cassClient->set_keyspace(keySpace);
>
>
>
> ColumnPath clnPath;
>
> clnPath.column_family = columnFamily;
>
> if(columnOrSuperColumnName.size() > 0){
>
> if(isSuperColumn) {
>
> clnPath.__isset.super_column = true;
>
> clnPath.super_column = columnOrSuperColumnName;
>
> } else {
>
> clnPath.__isset.column = true;
>
> clnPath.column = columnOrSuperColumnName;
>
> }
>
> }
>
> //DIAGC("mssRME", 1, "About to run remove...");
>
> cassClient->remove(key, clnPath, delTimeStamp, consisLevel);
>
> //DIAGC("mssRME", 1, "Success! remove...");
>
>
>
>
>
> 1. I have tried with batch_mutate thrift API. With this operations goes
> smoothly but I end up getting deleted column/columnfamily/key back when I
> perform get operation after delete. Looks like delete operation did not
> work. Please find sample code here:
>
>
>
> map<string, vector<Column> >::iterator iter =
> SCNameAndCols.begin(); //SuperColumn name as key – Vector containing columns
> in each super column
>
> std::vector<Mutation> mv;
>
> while(iter != SCNameAndCols.end()) { //Iterate through each
> SuperColumn one after another
>
> SuperColumn sc;
>
> ColumnOrSuperColumn cs;
>
>
>
> Mutation mu;
>
> ` mu.__isset.deletion = true;
>
>
>
> mu.deletion.timestamp = delTimeStamp; //This is latest
> timestamp in miliseconds
>
> mu.deletion.__isset.predicate = true;
>
> mu.deletion.super_column = (*iter).first;
>
> mu.deletion.predicate.__isset.column_names = true;
>
> for(int i = 0; i < (*iter).second.size(); i++) {
>
>
> mu.deletion.predicate.column_names.push_back((*iter).second[i].name);
>
> }
>
>
>
> mv.push_back(mu);
>
> iter++;
>
> }//End of While loop
>
> std::map<std::string, std::vector<Mutation> > innMap;
>
> innMap[CFName] = mv;
>
>
>
> std::map<std::string, std::map<std::string, std::vector<Mutation> >
> > outMap;
>
> outMap[Key] = innMap;
>
>
>
> //DIAGC("mssRME", 1, "About to run batch_mutate...");
>
> cassClient->batch_mutate(outMap, consisLevel);
>
> //DIAGC("mssRME", 1, "Success!
> batch_mutate...");
>
>
>
>
>
>
> Any help would be appreciated.
>
>
>
> Thank you,
>
> Jaydeep
>
>
>