cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arash Bazrafshan <ara...@gmail.com>
Subject Re: Bug in Cassandra that occurs when removing a supercolumn.
Date Sun, 04 Apr 2010 08:42:11 GMT
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 <vijay2win@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 <arashu@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?
>>
>>
>

Mime
View raw message