incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthew Grogan <mgro...@system7.co.uk>
Subject Re: Bug in Cassandra that occurs when removing a supercolumn.
Date Wed, 07 Apr 2010 17:25:02 GMT
I am seeing a similar problem running on 0.6 rc1.

The data/logs have existed since 0.5.

If I insert a new row then delete and re-insert then it works fine.

If I delete a row that was created under 0.5 then delete and re-insert then
the insert silently fails.

I can delete the data/logs and start again if necessary?


On 4 April 2010 14:30, Jonathan Ellis <jbellis@gmail.com> wrote:

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