Here it is: https://issues.apache.org/jira/browse/CASSANDRA-752


From: Jonathan Ellis <jbellis@gmail.com>
To: cassandra-user@incubator.apache.org
Sent: Mon, February 1, 2010 5:22:13 PM
Subject: Re: Did CASSANDRA-647 get fixed in 0.5?

Can you create a ticket for this?

Thanks!

On Mon, Feb 1, 2010 at 4:11 PM, Omer van der Horst Jansen
<omerhj@yahoo.com> wrote:
> I checked out the 0.5 branch and ran ant release (on my linux box).
> Installed the new tar.gz and ran the test on my Windows laptop as before but
> got the same result -- the key isn't deleted from the perspective of
> get_range_slice.
>
> Omer
>
> ________________________________
> From: Jonathan Ellis <jbellis@gmail.com>
> To: cassandra-user@incubator.apache.org
> Sent: Mon, February 1, 2010 4:52:17 PM
> Subject: Re: Did CASSANDRA-647 get fixed in 0.5?
>
> 647 was committed for 0.5, yes, but CASSANDRA-703 was not.  Can you
> try the 0.5 branch and see if it is fixed there?
>
> On Mon, Feb 1, 2010 at 3:26 PM, Omer van der Horst Jansen
> <omerhj@yahoo.com> wrote:
>> I'm running
>> into an issue with Cassandra 0.5 (the current release version) that
>> sounds exactly like the description of issue CASSANDRA-647.
>>
>> I'm
>> using the Thrift Java API to store a couple of columns in a single row. A
>> few seconds after that my application deletes the entire row. A plain
>> Cassandra.Client.get() will then throw a NotFoundException for that
>> particular key, as expected. However, the key will still show up when
>> executing a
>> Cassandra.Client.get_range_slice query.
>>
>> Here is some quick and
>> dirty Java code that demonstrates the problem:
>>
>> import
>> java.util.List;
>>
>> import org.apache.cassandra.service.*;
>> import
>> org.apache.thrift.protocol.*;
>> import org.apache.thrift.transport.*;
>>
>> public class Cassandra647TestApp
>> {
>>    /**
>>     * Demonstrates
>> CASSANDRA-647 presence in Cassandra 0.5 release.
>>     * Requires an
>> unmodified Cassandra configuration except that an
>>     *
>> OrderPreservingPartitioner should be used.
>>     */
>>    public
>> static void main(String[] args) throws Exception
>>    {
>>
>> String keyspace = "Keyspace1";
>>        String cf = "Standard1";
>>        String key = "testrow1";
>>        byte[] columnName =
>> "colname".getBytes();
>>        byte[] data = "testdata".getBytes();
>>
>>        TTransport transport = new TSocket("localhost", 9160);
>>        TProtocol protocol = new TBinaryProtocol(transport);
>>
>> Cassandra.Client client = new Cassandra.Client(protocol);
>>
>> transport.open();
>>        ColumnPath path = new ColumnPath(cf, null,
>> columnName);
>>
>>        client.insert(keyspace, key, path, data,
>> System.currentTimeMillis(),
>>                ConsistencyLevel.ONE);
>>
>>        Thread.sleep(1000);
>>
>>        ColumnPath rowpath = new
>> ColumnPath(cf, null, null);
>>
>>        client.remove(keyspace, key,
>> rowpath, System.currentTimeMillis(),
>>
>> ConsistencyLevel.ONE);
>>        Thread.sleep(1000);
>>
>>        try
>>        {
>>            ColumnOrSuperColumn cosc = client.get(keyspace,
>> key, path,
>>                    ConsistencyLevel.ONE);
>>
>> System.out.println("Whoops! NotFoundException not thrown!");
>>        }
>>        catch (NotFoundException e)
>>        {
>>
>> System.out.println("OK, we got a NotFoundException");
>>        }
>>
>>        ColumnParent parent = new ColumnParent(cf, null);
>>
>> SlicePredicate predicate = new SlicePredicate();
>>        SliceRange
>> range = new SliceRange();
>>        range.start = new byte[0];
>>        range.finish = new byte[0];
>>        predicate.slice_range = range;
>>
>>        List<KeySlice> sliceList = client.get_range_slice(keyspace, parent,
>>                predicate, "", "", 1000,
>> ConsistencyLevel.ONE);
>>
>>        for (KeySlice k : sliceList)
>>        {
>>            System.out.println("Found key " + k.key);
>>            if (key.equals(k.key))
>>            {
>>
>> System.out.println("but key " + k.key
>>                        + "
>> should have been removed");
>>            }
>>        }
>>    }
>> }
>>
>> Am I using the API correctly in the code above?
>>
>> -Omer van der Horst Jansen
>>
>>
>>
>>
>>
>
>