We do appreciate the effort, though. :)
On Sun, Apr 4, 2010 at 3:42 AM, Arash Bazrafshan <ara...@gmail.com> wrote: > 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? >>> >> > >