get_range_slices always returns super columns that's been removed/restored, 
regardless of count value in slicerange
-------------------------------------------------------------------------------------------------------------------

                 Key: CASSANDRA-1591
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1591
             Project: Cassandra
          Issue Type: Bug
    Affects Versions: 0.6.4
         Environment: CentOS 5.4, single Cassandra node 
            Reporter: Jianing hu


I'm seeing cases where the count in slicerange predicate is not respected. This 
is only happening for super columns. I'm running Cassandra 0.6.4 in a single 
node.

Steps to reproduce, using the Keyspace1.Super1 CF:
* insert three super columns, bar1 bar 2, and bar3, under the same key
* delete bar1
* insert bar1 again
* run a get_range_slices on Super1, with start=bar1, finish=bar3, and count=1
* I expected only bar1 to be returned, but both both bar1 and bar2 are 
returned. bar3 isn't, though. so count is somewhat respected.

perl code to reproduce follows:

#!/usr/bin/perl

use strict;
use Data::Dumper;
use Net::Cassandra;

my $key = 10;
my $cs = new Net::Cassandra( hostname => 'localhost' )->client;
my $ts = time;
$cs->batch_mutate(
    'Keyspace1',
    {
        $key => {
            Super1 => [
                new Net::Cassandra::Backend::Mutation({
                    column_or_supercolumn => new 
Net::Cassandra::Backend::ColumnOrSuperColumn({
                        super_column => new 
Net::Cassandra::Backend::SuperColumn({
                            name => 'bar1',
                            columns => [
                                new Net::Cassandra::Backend::Column({
                                    name => 'foo1',
                                    value => 'foo1',
                                    timestamp => $ts++
                                })
                            ]
                        })
                    })
                }),
                new Net::Cassandra::Backend::Mutation({
                    column_or_supercolumn => new 
Net::Cassandra::Backend::ColumnOrSuperColumn({
                        super_column => new 
Net::Cassandra::Backend::SuperColumn({
                            name => 'bar2',
                            columns => [
                                new Net::Cassandra::Backend::Column({
                                    name => 'foo1',
                                    value => 'foo1',
                                    timestamp => $ts++
                                })
                            ]
                        })
                    })
                }),
                new Net::Cassandra::Backend::Mutation({
                    column_or_supercolumn => new 
Net::Cassandra::Backend::ColumnOrSuperColumn({
                        super_column => new 
Net::Cassandra::Backend::SuperColumn({
                            name => 'bar3',
                            columns => [
                                new Net::Cassandra::Backend::Column({
                                    name => 'foo1',
                                    value => 'foo1',
                                    timestamp => $ts++
                                })
                            ]
                        })
                    })
                })
            ]
        }
    },
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );

warn 'with fresh data';
# expect bar1
warn Dumper $cs->get_range_slices(
    'Keyspace1',
    new Net::Cassandra::Backend::ColumnParent({
        column_family => 'Super1',
    }),
    new Net::Cassandra::Backend::SlicePredicate({
        slice_range => new Net::Cassandra::Backend::SliceRange({
            start => 'bar1',
            finish => 'bar3',
            count => 1
        })
    }),
    new Net::Cassandra::Backend::KeyRange({
        start_key => $key,
        end_key => $key,
        count => 1
    }),
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );

$cs->remove(
    'Keyspace1',
    $key,
    new Net::Cassandra::Backend::ColumnPath({
        column_family => 'Super1',
        super_column => 'bar1'
    }),
    $ts++,
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );

'warn after delete';
# expect bar2
warn Dumper $cs->get_range_slices(
    'Keyspace1',
    new Net::Cassandra::Backend::ColumnParent({
        column_family => 'Super1',
    }),
    new Net::Cassandra::Backend::SlicePredicate({
        slice_range => new Net::Cassandra::Backend::SliceRange({
            start => 'bar1',
            finish => 'bar3',
            count => 1
        })
    }),
    new Net::Cassandra::Backend::KeyRange({
        start_key => $key,
        end_key => $key,
        count => 1
    }),
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );

$cs->batch_mutate(
    'Keyspace1',
    {
        $key => {
            Super1 => [
                new Net::Cassandra::Backend::Mutation({
                    column_or_supercolumn => new 
Net::Cassandra::Backend::ColumnOrSuperColumn({
                        super_column => new 
Net::Cassandra::Backend::SuperColumn({
                            name => 'bar1',
                            columns => [
                                new Net::Cassandra::Backend::Column({
                                    name => 'foo1',
                                    value => 'foo1',
                                    timestamp => $ts++
                                })
                            ]
                        })
                    })
                }),
            ]
        }
    },
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );

warn 'after restore data';
# expect bar1, but get both bar1 and bar2, not bar3, though. so count is 
somewhat respected.
warn Dumper $cs->get_range_slices(
    'Keyspace1',
    new Net::Cassandra::Backend::ColumnParent({
        column_family => 'Super1',
    }),
    new Net::Cassandra::Backend::SlicePredicate({
        slice_range => new Net::Cassandra::Backend::SliceRange({
            start => 'bar1',
            finish => 'bar3',
            count => 1
        })
    }),
    new Net::Cassandra::Backend::KeyRange({
        start_key => $key,
        end_key => $key,
        count => 1
    }),
    Net::Cassandra::Backend::ConsistencyLevel::ONE
  );



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to