Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-752

get_range_slice returns removed data

    XMLWordPrintableJSON

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-647 symptom 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))

      { System.out.println("but key " + k.key + "should have been removed"); }

      }
      }
      }

      Attachments

        1. cassandra-752.patch
          0.6 kB
          Omer van der Horst Jansen

        Activity

          People

            Unassigned Unassigned
            omerhj Omer van der Horst Jansen
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: