You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/08/31 17:50:59 UTC

svn commit: r809639 - in /incubator/cassandra/trunk: interface/cassandra.thrift interface/gen-java/org/apache/cassandra/service/Cassandra.java src/java/org/apache/cassandra/service/CassandraServer.java test/system/test_server.py

Author: jbellis
Date: Mon Aug 31 15:50:58 2009
New Revision: 809639

URL: http://svn.apache.org/viewvc?rev=809639&view=rev
Log:
add forwards-compatible ConsistencyLevel parameter to get_key_range.  Currently it is a no-op.  patch by Chris Goffinet; reviewed by jbellis for CASSANDRA-322

Modified:
    incubator/cassandra/trunk/interface/cassandra.thrift
    incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
    incubator/cassandra/trunk/test/system/test_server.py

Modified: incubator/cassandra/trunk/interface/cassandra.thrift
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/cassandra.thrift?rev=809639&r1=809638&r2=809639&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/cassandra.thrift (original)
+++ incubator/cassandra/trunk/interface/cassandra.thrift Mon Aug 31 15:50:58 2009
@@ -139,7 +139,7 @@
   throws (1: InvalidRequestException ire, 2: UnavailableException ue),
 
   # range query: returns matching keys
-  list<string>   get_key_range(1:string keyspace, 2:string column_family, 3:string start="", 4:string finish="", 5:i32 count=100)
+  list<string>   get_key_range(1:string keyspace, 2:string column_family, 3:string start="", 4:string finish="", 5:i32 count=100, 6:ConsistencyLevel consistency_level=1)
   throws (1: InvalidRequestException ire),
 
   /////////////////////////////////////////////////////////////////////////////////////

Modified: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java?rev=809639&r1=809638&r2=809639&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java (original)
+++ incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java Mon Aug 31 15:50:58 2009
@@ -61,7 +61,7 @@
 
     public void remove(String keyspace, String key, ColumnPath column_path, long timestamp, int consistency_level) throws InvalidRequestException, UnavailableException, TException;
 
-    public List<String> get_key_range(String keyspace, String column_family, String start, String finish, int count) throws InvalidRequestException, TException;
+    public List<String> get_key_range(String keyspace, String column_family, String start, String finish, int count, int consistency_level) throws InvalidRequestException, TException;
 
     public String get_string_property(String property) throws TException;
 
@@ -420,13 +420,13 @@
       return;
     }
 
-    public List<String> get_key_range(String keyspace, String column_family, String start, String finish, int count) throws InvalidRequestException, TException
+    public List<String> get_key_range(String keyspace, String column_family, String start, String finish, int count, int consistency_level) throws InvalidRequestException, TException
     {
-      send_get_key_range(keyspace, column_family, start, finish, count);
+      send_get_key_range(keyspace, column_family, start, finish, count, consistency_level);
       return recv_get_key_range();
     }
 
-    public void send_get_key_range(String keyspace, String column_family, String start, String finish, int count) throws TException
+    public void send_get_key_range(String keyspace, String column_family, String start, String finish, int count, int consistency_level) throws TException
     {
       oprot_.writeMessageBegin(new TMessage("get_key_range", TMessageType.CALL, seqid_));
       get_key_range_args args = new get_key_range_args();
@@ -435,6 +435,7 @@
       args.start = start;
       args.finish = finish;
       args.count = count;
+      args.consistency_level = consistency_level;
       args.write(oprot_);
       oprot_.writeMessageEnd();
       oprot_.getTransport().flush();
@@ -850,7 +851,7 @@
         iprot.readMessageEnd();
         get_key_range_result result = new get_key_range_result();
         try {
-          result.success = iface_.get_key_range(args.keyspace, args.column_family, args.start, args.finish, args.count);
+          result.success = iface_.get_key_range(args.keyspace, args.column_family, args.start, args.finish, args.count, args.consistency_level);
         } catch (InvalidRequestException ire) {
           result.ire = ire;
         } catch (Throwable th) {
@@ -7841,6 +7842,7 @@
     private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)3);
     private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)4);
     private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)5);
+    private static final TField CONSISTENCY_LEVEL_FIELD_DESC = new TField("consistency_level", TType.I32, (short)6);
 
     public String keyspace;
     public static final int KEYSPACE = 1;
@@ -7852,10 +7854,17 @@
     public static final int FINISH = 4;
     public int count;
     public static final int COUNT = 5;
+    /**
+     * 
+     * @see ConsistencyLevel
+     */
+    public int consistency_level;
+    public static final int CONSISTENCY_LEVEL = 6;
 
     // isset id assignments
     private static final int __COUNT_ISSET_ID = 0;
-    private BitSet __isset_bit_vector = new BitSet(1);
+    private static final int __CONSISTENCY_LEVEL_ISSET_ID = 1;
+    private BitSet __isset_bit_vector = new BitSet(2);
 
     public static final Map<Integer, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{
       put(KEYSPACE, new FieldMetaData("keyspace", TFieldRequirementType.DEFAULT, 
@@ -7868,6 +7877,8 @@
           new FieldValueMetaData(TType.STRING)));
       put(COUNT, new FieldMetaData("count", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.I32)));
+      put(CONSISTENCY_LEVEL, new FieldMetaData("consistency_level", TFieldRequirementType.DEFAULT, 
+          new FieldValueMetaData(TType.I32)));
     }});
 
     static {
@@ -7881,6 +7892,8 @@
 
       this.count = 100;
 
+      this.consistency_level = 1;
+
     }
 
     public get_key_range_args(
@@ -7888,7 +7901,8 @@
       String column_family,
       String start,
       String finish,
-      int count)
+      int count,
+      int consistency_level)
     {
       this();
       this.keyspace = keyspace;
@@ -7897,6 +7911,8 @@
       this.finish = finish;
       this.count = count;
       setCountIsSet(true);
+      this.consistency_level = consistency_level;
+      setConsistency_levelIsSet(true);
     }
 
     /**
@@ -7918,6 +7934,7 @@
         this.finish = other.finish;
       }
       this.count = other.count;
+      this.consistency_level = other.consistency_level;
     }
 
     @Override
@@ -8044,6 +8061,37 @@
       __isset_bit_vector.set(__COUNT_ISSET_ID, value);
     }
 
+    /**
+     * 
+     * @see ConsistencyLevel
+     */
+    public int getConsistency_level() {
+      return this.consistency_level;
+    }
+
+    /**
+     * 
+     * @see ConsistencyLevel
+     */
+    public get_key_range_args setConsistency_level(int consistency_level) {
+      this.consistency_level = consistency_level;
+      setConsistency_levelIsSet(true);
+      return this;
+    }
+
+    public void unsetConsistency_level() {
+      __isset_bit_vector.clear(__CONSISTENCY_LEVEL_ISSET_ID);
+    }
+
+    // Returns true if field consistency_level is set (has been asigned a value) and false otherwise
+    public boolean isSetConsistency_level() {
+      return __isset_bit_vector.get(__CONSISTENCY_LEVEL_ISSET_ID);
+    }
+
+    public void setConsistency_levelIsSet(boolean value) {
+      __isset_bit_vector.set(__CONSISTENCY_LEVEL_ISSET_ID, value);
+    }
+
     public void setFieldValue(int fieldID, Object value) {
       switch (fieldID) {
       case KEYSPACE:
@@ -8086,6 +8134,14 @@
         }
         break;
 
+      case CONSISTENCY_LEVEL:
+        if (value == null) {
+          unsetConsistency_level();
+        } else {
+          setConsistency_level((Integer)value);
+        }
+        break;
+
       default:
         throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
       }
@@ -8108,6 +8164,9 @@
       case COUNT:
         return new Integer(getCount());
 
+      case CONSISTENCY_LEVEL:
+        return getConsistency_level();
+
       default:
         throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
       }
@@ -8126,6 +8185,8 @@
         return isSetFinish();
       case COUNT:
         return isSetCount();
+      case CONSISTENCY_LEVEL:
+        return isSetConsistency_level();
       default:
         throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
       }
@@ -8189,6 +8250,15 @@
           return false;
       }
 
+      boolean this_present_consistency_level = true;
+      boolean that_present_consistency_level = true;
+      if (this_present_consistency_level || that_present_consistency_level) {
+        if (!(this_present_consistency_level && that_present_consistency_level))
+          return false;
+        if (this.consistency_level != that.consistency_level)
+          return false;
+      }
+
       return true;
     }
 
@@ -8245,6 +8315,14 @@
       if (lastComparison != 0) {
         return lastComparison;
       }
+      lastComparison = Boolean.valueOf(isSetConsistency_level()).compareTo(isSetConsistency_level());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      lastComparison = TBaseHelper.compareTo(consistency_level, typedOther.consistency_level);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
       return 0;
     }
 
@@ -8295,6 +8373,14 @@
               TProtocolUtil.skip(iprot, field.type);
             }
             break;
+          case CONSISTENCY_LEVEL:
+            if (field.type == TType.I32) {
+              this.consistency_level = iprot.readI32();
+              setConsistency_levelIsSet(true);
+            } else { 
+              TProtocolUtil.skip(iprot, field.type);
+            }
+            break;
           default:
             TProtocolUtil.skip(iprot, field.type);
             break;
@@ -8335,6 +8421,9 @@
       oprot.writeFieldBegin(COUNT_FIELD_DESC);
       oprot.writeI32(this.count);
       oprot.writeFieldEnd();
+      oprot.writeFieldBegin(CONSISTENCY_LEVEL_FIELD_DESC);
+      oprot.writeI32(this.consistency_level);
+      oprot.writeFieldEnd();
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -8379,6 +8468,18 @@
       sb.append("count:");
       sb.append(this.count);
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("consistency_level:");
+      String consistency_level_name = ConsistencyLevel.VALUES_TO_NAMES.get(this.consistency_level);
+      if (consistency_level_name != null) {
+        sb.append(consistency_level_name);
+        sb.append(" (");
+      }
+      sb.append(this.consistency_level);
+      if (consistency_level_name != null) {
+        sb.append(")");
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -8386,6 +8487,9 @@
     public void validate() throws TException {
       // check for required fields
       // check that fields of type enum have valid values
+      if (isSetConsistency_level() && !ConsistencyLevel.VALID_VALUES.contains(consistency_level)){
+        throw new TProtocolException("The field 'consistency_level' has been assigned the invalid value " + consistency_level);
+      }
     }
 
   }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java?rev=809639&r1=809638&r2=809639&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java Mon Aug 31 15:50:58 2009
@@ -576,7 +576,7 @@
         return columnFamiliesMap;
     }
 
-    public List<String> get_key_range(String tablename, String columnFamily, String startWith, String stopAt, int maxResults) throws InvalidRequestException, TException
+    public List<String> get_key_range(String tablename, String columnFamily, String startWith, String stopAt, int maxResults, int consistency_level) throws InvalidRequestException, TException
     {
         if (logger.isDebugEnabled())
             logger.debug("get_key_range");

Modified: incubator/cassandra/trunk/test/system/test_server.py
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/system/test_server.py?rev=809639&r1=809638&r2=809639&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/system/test_server.py (original)
+++ incubator/cassandra/trunk/test/system/test_server.py Mon Aug 31 15:50:58 2009
@@ -284,7 +284,7 @@
         # get doesn't specify supercolumn name
         _expect_exception(lambda: client.get('Keyspace1', 'key1', ColumnPath('Super1'), ConsistencyLevel.ONE), InvalidRequestException)
         # invalid CF
-        _expect_exception(lambda: client.get_key_range('Keyspace1', 'S', '', '', 1000), InvalidRequestException)
+        _expect_exception(lambda: client.get_key_range('Keyspace1', 'S', '', '', 1000, ConsistencyLevel.ONE), InvalidRequestException)
         # 'x' is not a valid Long
         _expect_exception(lambda: client.insert('Keyspace1', 'key1', ColumnPath('Super1', 'sc1', 'x'), 'value', 0, ConsistencyLevel.ONE), InvalidRequestException)
         # start is not a valid Long
@@ -440,31 +440,31 @@
 
 
     def test_empty_range(self):
-        assert client.get_key_range('Keyspace1', 'Standard1', '', '', 1000) == []
+        assert client.get_key_range('Keyspace1', 'Standard1', '', '', 1000, ConsistencyLevel.ONE) == []
         _insert_simple()
-        assert client.get_key_range('Keyspace1', 'Super1', '', '', 1000) == []
+        assert client.get_key_range('Keyspace1', 'Super1', '', '', 1000, ConsistencyLevel.ONE) == []
 
     def test_range_with_remove(self):
         _insert_simple()
-        assert client.get_key_range('Keyspace1', 'Standard1', 'key1', '', 1000) == ['key1']
+        assert client.get_key_range('Keyspace1', 'Standard1', 'key1', '', 1000, ConsistencyLevel.ONE) == ['key1']
 
         client.remove('Keyspace1', 'key1', ColumnPath('Standard1', column='c1'), 1, ConsistencyLevel.ONE)
         client.remove('Keyspace1', 'key1', ColumnPath('Standard1', column='c2'), 1, ConsistencyLevel.ONE)
-        actual = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000)
+        actual = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000, ConsistencyLevel.ONE)
         assert actual == [], actual
 
     def test_range_with_remove_cf(self):
         _insert_simple()
-        assert client.get_key_range('Keyspace1', 'Standard1', 'key1', '', 1000) == ['key1']
+        assert client.get_key_range('Keyspace1', 'Standard1', 'key1', '', 1000, ConsistencyLevel.ONE) == ['key1']
 
         client.remove('Keyspace1', 'key1', ColumnPath('Standard1'), 1, ConsistencyLevel.ONE)
-        actual = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000)
+        actual = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000, ConsistencyLevel.ONE)
         assert actual == [], actual
 
     def test_range_collation(self):
         for key in ['-a', '-b', 'a', 'b'] + [str(i) for i in xrange(100)]:
             client.insert('Keyspace1', key, ColumnPath('Standard1', column=key), 'v', 0, ConsistencyLevel.ONE)
-        L = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000)
+        L = client.get_key_range('Keyspace1', 'Standard1', '', '', 1000, ConsistencyLevel.ONE)
         # note the collated ordering rather than ascii
         assert L == ['0', '1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27','28', '29', '3', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '4', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '5', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '6', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '7', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '8', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '9', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', 'a', '-a', 'b', '-b'], L
 
@@ -472,16 +472,16 @@
         for key in ['-a', '-b', 'a', 'b'] + [str(i) for i in xrange(100)]:
             client.insert('Keyspace1', key, ColumnPath('Standard1', column=key), 'v', 0, ConsistencyLevel.ONE)
 
-        L = client.get_key_range('Keyspace1', 'Standard1', 'a', '', 1000)
+        L = client.get_key_range('Keyspace1', 'Standard1', 'a', '', 1000, ConsistencyLevel.ONE)
         assert L == ['a', '-a', 'b', '-b'], L
 
-        L = client.get_key_range('Keyspace1', 'Standard1', '', '15', 1000)
+        L = client.get_key_range('Keyspace1', 'Standard1', '', '15', 1000, ConsistencyLevel.ONE)
         assert L == ['0', '1', '10', '11', '12', '13', '14', '15'], L
 
-        L = client.get_key_range('Keyspace1', 'Standard1', '50', '51', 1000)
+        L = client.get_key_range('Keyspace1', 'Standard1', '50', '51', 1000, ConsistencyLevel.ONE)
         assert L == ['50', '51'], L
     
-        L = client.get_key_range('Keyspace1', 'Standard1', '1', '', 10)
+        L = client.get_key_range('Keyspace1', 'Standard1', '1', '', 10, ConsistencyLevel.ONE)
         assert L == ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18'], L
 
     def test_get_slice_range(self):