Vijay, I know I've written a ridiculously long bug-specification, but heck at least I've mentioned all the important stuff. :-)
Look under PREREQUISITES and you see I've mentioned that I use 0.5.0-1 under ubuntu. I agree that CASSANDRA-703 is exactly the same bug as the one I've observed, and yet look how short its bug specification is! Just goes without saying that I need to come up with a shorter way to describe my bugs. On Sun, Apr 4, 2010 at 5:37 AM, Vijay <vijay2...@gmail.com> wrote: > What version do you use? i think that bug was fixed.... in .6 > > https://issues.apache.org/jira/browse/CASSANDRA-703 > > Regards, > </VJ> > > > > > On Sat, Apr 3, 2010 at 5:27 AM, Arash Bazrafshan <ara...@gmail.com> wrote: > >> ello. >> >> A bug occurs for me when working with Cassandra. >> >> With this e-mail I intend to show what I do to recreate it, and then >> perhaps you can try it out too. >> >> SUMMARY OF THE BUG: >> (1): insert a row with a supercolumn that contains a subcolumn. >> (2) remove the supercolumn. >> (3) reinsert the same row with the same supercolumn and subcolumn. >> (RESULT): You won't be able to retrieve the entire supercolumn. However >> you will be able to retrieve the specific subcolumn within the supercolumn. >> Removing cassandra's data&logs will make the problem to go away. >> >> PREREQUISITES: >> * Use the column families that are defined by storage-conf.xml in its >> default "out-of-the-box" configuration. Specifically I will use the keyspace >> "Keyspace1" with the supercolumn "Super1". >> * I use Cassandra 0.5.0-1 on Ubuntu Karmic 9.10. >> * I use Thrift 0.2.0 to generate a php api for cassandra. It is when I use >> this api that the bug occurs. >> * I run Cassandra on a single node. So I query against 127.0.0.1. >> >> STEP-BY-STEP INSTRUCTIONS FOR TRIGGERING THE BUG: >> >> I will now step by step show the PHP scripts that I execute in order to >> generate the bug. >> >> STEP 1: EXECUTE THIS SCRIPT. >> >> //We will first insert a row into the supercolumn family Super1. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $writeColumnPath = new cassandra_ColumnPath(); >> >> $writeColumnPath->column_family = 'Super1'; >> $writeColumnPath->super_column = 'info'; >> $writeColumnPath->column = 'phonenumber'; >> >> $client->insert ( >> 'Keyspace1', >> 'adam', >> $writeColumnPath, >> '02012312345', >> time(), >> cassandra_ConsistencyLevel::ZERO >> ); >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 1: The row that contains a single supercolumn with a single >> column has been inserted. >> >> >> >> STEP 2: EXECUTE THIS SCRIPT. >> >> //Next we will fetch the supercolumn of the row that we just inserted, >> just to make sure that the subcolumn is really there. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $readColumnPath = new cassandra_ColumnPath(); >> >> $readColumnPath->column_family = 'Super1'; >> $readColumnPath->super_column = 'info'; >> $readColumnPath->column = null; //NOTE: We want to fetch the entire >> supercolumn. >> >> $res = $client->get ( >> 'Keyspace1', >> 'adam', >> $readColumnPath, >> cassandra_ConsistencyLevel::ONE >> ); >> >> echo $res->super_column->columns[0]->value; >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 2: You receive the following output: 02012312345 >> >> >> >> STEP 3: EXECUTE THIS SCRIPT. >> >> //Now we will remove the supercolumn of the row, but we will keep the row >> itself. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $deleteColumnPath = new cassandra_ColumnPath(); >> >> $deleteColumnPath->column_family = 'Super1'; >> $deleteColumnPath->super_column = 'info'; >> $deleteColumnPath->column = null; //NOTE: We want to remove the entire >> supercolumn 'info'. >> >> $client->remove ( >> 'Keyspace1', >> 'adam', >> $deleteColumnPath, >> time(), >> cassandra_ConsistencyLevel::ZERO >> ); >> >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 3: The row is removed from the column family. >> >> >> >> STEP 4: EXECUTE THIS SCRIPT. >> >> //Now let's try to fetch the column within the supercolumn again, just to >> make sure it is really gone. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $readColumnPath = new cassandra_ColumnPath(); >> >> $readColumnPath->column_family = 'Super1'; >> $readColumnPath->super_column = 'info'; >> $readColumnPath->column = null; //NOTE: Fetching the entire supercolumn. >> >> $res = $client->get ( >> 'Keyspace1', >> 'adam', >> $readColumnPath, >> cassandra_ConsistencyLevel::ONE >> ); >> >> echo $res->super_column->columns[0]->value; >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 4: A NotFoundException is thrown. >> >> STEP 5: EXECUTE THIS SCRIPT. >> >> //Now we will insert the exact same row again, containing the same >> supercolumn and column. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $writeColumnPath = new cassandra_ColumnPath(); >> >> $writeColumnPath->column_family = 'Super1'; >> $writeColumnPath->super_column = 'info'; >> $writeColumnPath->column = 'phonenumber'; >> >> $client->insert ( >> 'Keyspace1', >> 'adam', >> $writeColumnPath, >> '02012312345', >> time(), >> cassandra_ConsistencyLevel::ZERO >> ); >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 5: The row that contains a single supercolumn with a single >> column has been inserted. >> >> STEP 6: EXECUTE THIS SCRIPT (THE BUG WILL APPEAR HERE). >> >> //Now we will try to fetch the supercolumn within the row again. This is >> where the bug appears. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $readColumnPath = new cassandra_ColumnPath(); >> >> $readColumnPath->column_family = 'Super1'; >> $readColumnPath->super_column = 'info'; >> $readColumnPath->column = null; //NOTE: We are fetching the entire >> supercolumn 'info' >> >> $res = $client->get ( >> 'Keyspace1', >> 'adam', >> $readColumnPath, >> cassandra_ConsistencyLevel::ONE >> ); >> >> echo $res->super_column->columns[0]->value; >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 6: A NotFoundException is still thrown, even if the row has >> been inserted again. >> >> STEP 7: EXECUTE THIS SCRIPT. >> >> //Now let's get the same column again, but only this time we won't fetch >> its entire supercolumn but only the column itself. The difference between >> this step and the previous has been marked in the code. >> >> //=============================================== >> >> $socket = new TSocket("127.0.0.1", 30003); >> $transport = new TBufferedTransport($socket, 1024, 1024); >> $protocol = new TBinaryProtocolAccelerated($transport); >> $client = new CassandraClient ($protocol); >> $transport->open(); >> >> $readColumnPath = new cassandra_ColumnPath(); >> >> $readColumnPath->column_family = 'Super1'; >> $readColumnPath->super_column = 'info'; >> $readColumnPath->column = 'phonenumber'; //NOTE: This time we will fetch >> the specific column. >> >> $res = $client->get ( >> 'Keyspace1', >> 'adam', >> $readColumnPath, >> cassandra_ConsistencyLevel::ONE >> ); >> >> echo $res->column->value; >> >> $transport->close(); >> >> //=============================================== >> >> RESULT OF STEP 7: You receive the following output: 02012312345. >> >> STEP 8: SHUT DOWN CASSANDRA & KILL JAVA & REMOVE CASSANDRA'S DATA FILES >> AND COMMIT LOGS. >> >> STEP 9: RESTART CASSANDRA. >> >> STEP 10: Reiterate STEP 1 and STEP 2 to see that the bug has disappeared >> and the column value is fetched appropriately. >> >> CONCLUSION: I have tried this one out with various consistency levels. The >> same thing happens. Next I'll try to insert and remove using other methods >> if the Thrift API allows for it. >> >> I have included some of Cassandra's conf files so you can see how I've >> configured my setup. Perhaps I am doing something wrong there? >> >> >