Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Not A Problem
-
None
-
None
-
None
-
Windows XP; Linux 2.6.30, JDK 1.6.0-17
-
Low
Description
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 creating a new ticket given that 647 has been closed and this issue may have a different cause.
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 CassandraTestApp
{
/**
- Demonstrates
CASSANDRA-647symptom 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, as expected 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))
}
}
}