From ff764ff22b488206bf102a0155e55de85efd8aa9 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Thu, 16 Jul 2009 00:38:53 +0000 Subject: [PATCH] r/m offset from slice api; we could live with being inefficient but not with breaking read repair. patch by jbellis; reviewed by Evan Weaver for CASSANDRA-286 git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@794474 13f79535-47bb-0310-9956-ffa450edef68 --- interface/cassandra.thrift | 4 +- .../apache/cassandra/service/Cassandra.java | 170 ++---------------- .../org/apache/cassandra/cli/CliClient.java | 2 +- .../cql/common/ColumnRangeQueryRSD.java | 13 +- .../cql/common/SuperColumnRangeQueryRSD.java | 10 +- .../cql/compiler/sem/SemanticPhase.java | 6 +- .../cassandra/db/ColumnFamilyStore.java | 4 +- .../cassandra/db/SliceFromReadCommand.java | 16 +- src/java/org/apache/cassandra/db/Table.java | 2 +- .../db/filter/IdentityQueryFilter.java | 2 +- .../cassandra/db/filter/SliceQueryFilter.java | 11 +- .../cassandra/service/CassandraServer.java | 10 +- test/system/test_server.py | 47 ++--- .../apache/cassandra/db/ReadMessageTest.java | 4 +- .../org/apache/cassandra/db/TableTest.java | 51 +++--- 15 files changed, 92 insertions(+), 260 deletions(-) diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift index 29a7656bd5..dc3c1bb7c7 100644 --- a/interface/cassandra.thrift +++ b/interface/cassandra.thrift @@ -116,7 +116,7 @@ service Cassandra { list get_slice_by_names(1:string table, 2:string key, 3:ColumnParent column_parent, 4:list column_names) throws (1: InvalidRequestException ire, 2: NotFoundException nfe), - list get_slice(1:string table, 2:string key, 3:ColumnParent column_parent, 4:string start, 5:string finish, 6:bool is_ascending, 7:i32 offset, 8:i32 count=100) + list get_slice(1:string table, 2:string key, 3:ColumnParent column_parent, 4:string start, 5:string finish, 6:bool is_ascending, 7:i32 count=100) throws (1: InvalidRequestException ire, 2: NotFoundException nfe), Column get_column(1:string table, 2:string key, 3:ColumnPath column_path) @@ -137,7 +137,7 @@ service Cassandra { list get_columns_since(1:string table, 2:string key, 3:ColumnParent column_parent, 4:i64 timeStamp) throws (1: InvalidRequestException ire, 2: NotFoundException nfe), - list get_slice_super(1:string table, 2:string key, 3:string column_family, 4:string start, 5:string finish, 6:bool is_ascending, 7:i32 offset, 8:i32 count=100) + list get_slice_super(1:string table, 2:string key, 3:string column_family, 4:string start, 5:string finish, 6:bool is_ascending, 7:i32 count=100) throws (1: InvalidRequestException ire), list get_slice_super_by_names(1:string table, 2:string key, 3:string column_family, 4:list super_column_names) diff --git a/interface/gen-java/org/apache/cassandra/service/Cassandra.java b/interface/gen-java/org/apache/cassandra/service/Cassandra.java index 6d4dd5295a..5296e3643d 100644 --- a/interface/gen-java/org/apache/cassandra/service/Cassandra.java +++ b/interface/gen-java/org/apache/cassandra/service/Cassandra.java @@ -24,7 +24,7 @@ public class Cassandra { public List get_slice_by_names(String table, String key, ColumnParent column_parent, List column_names) throws InvalidRequestException, NotFoundException, TException; - public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int offset, int count) throws InvalidRequestException, NotFoundException, TException; + public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException, NotFoundException, TException; public Column get_column(String table, String key, ColumnPath column_path) throws InvalidRequestException, NotFoundException, TException; @@ -38,7 +38,7 @@ public class Cassandra { public List get_columns_since(String table, String key, ColumnParent column_parent, long timeStamp) throws InvalidRequestException, NotFoundException, TException; - public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int offset, int count) throws InvalidRequestException, TException; + public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException, TException; public List get_slice_super_by_names(String table, String key, String column_family, List super_column_names) throws InvalidRequestException, TException; @@ -127,13 +127,13 @@ public class Cassandra { throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_slice_by_names failed: unknown result"); } - public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int offset, int count) throws InvalidRequestException, NotFoundException, TException + public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException, NotFoundException, TException { - send_get_slice(table, key, column_parent, start, finish, is_ascending, offset, count); + send_get_slice(table, key, column_parent, start, finish, is_ascending, count); return recv_get_slice(); } - public void send_get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int offset, int count) throws TException + public void send_get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int count) throws TException { oprot_.writeMessageBegin(new TMessage("get_slice", TMessageType.CALL, seqid_)); get_slice_args args = new get_slice_args(); @@ -143,7 +143,6 @@ public class Cassandra { args.start = start; args.finish = finish; args.is_ascending = is_ascending; - args.offset = offset; args.count = count; args.write(oprot_); oprot_.writeMessageEnd(); @@ -413,13 +412,13 @@ public class Cassandra { throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_columns_since failed: unknown result"); } - public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int offset, int count) throws InvalidRequestException, TException + public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException, TException { - send_get_slice_super(table, key, column_family, start, finish, is_ascending, offset, count); + send_get_slice_super(table, key, column_family, start, finish, is_ascending, count); return recv_get_slice_super(); } - public void send_get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int offset, int count) throws TException + public void send_get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int count) throws TException { oprot_.writeMessageBegin(new TMessage("get_slice_super", TMessageType.CALL, seqid_)); get_slice_super_args args = new get_slice_super_args(); @@ -429,7 +428,6 @@ public class Cassandra { args.start = start; args.finish = finish; args.is_ascending = is_ascending; - args.offset = offset; args.count = count; args.write(oprot_); oprot_.writeMessageEnd(); @@ -837,7 +835,7 @@ public class Cassandra { iprot.readMessageEnd(); get_slice_result result = new get_slice_result(); try { - result.success = iface_.get_slice(args.table, args.key, args.column_parent, args.start, args.finish, args.is_ascending, args.offset, args.count); + result.success = iface_.get_slice(args.table, args.key, args.column_parent, args.start, args.finish, args.is_ascending, args.count); } catch (InvalidRequestException ire) { result.ire = ire; } catch (NotFoundException nfe) { @@ -1046,7 +1044,7 @@ public class Cassandra { iprot.readMessageEnd(); get_slice_super_result result = new get_slice_super_result(); try { - result.success = iface_.get_slice_super(args.table, args.key, args.column_family, args.start, args.finish, args.is_ascending, args.offset, args.count); + result.success = iface_.get_slice_super(args.table, args.key, args.column_family, args.start, args.finish, args.is_ascending, args.count); } catch (InvalidRequestException ire) { result.ire = ire; } catch (Throwable th) { @@ -2114,8 +2112,7 @@ public class Cassandra { private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)4); private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)5); private static final TField IS_ASCENDING_FIELD_DESC = new TField("is_ascending", TType.BOOL, (short)6); - private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)7); - private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)8); + private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)7); public String table; public static final int TABLE = 1; @@ -2129,15 +2126,12 @@ public class Cassandra { public static final int FINISH = 5; public boolean is_ascending; public static final int IS_ASCENDING = 6; - public int offset; - public static final int OFFSET = 7; public int count; - public static final int COUNT = 8; + public static final int COUNT = 7; private final Isset __isset = new Isset(); private static final class Isset implements java.io.Serializable { public boolean is_ascending = false; - public boolean offset = false; public boolean count = false; } @@ -2154,8 +2148,6 @@ public class Cassandra { new FieldValueMetaData(TType.STRING))); put(IS_ASCENDING, new FieldMetaData("is_ascending", TFieldRequirementType.DEFAULT, new FieldValueMetaData(TType.BOOL))); - put(OFFSET, new FieldMetaData("offset", TFieldRequirementType.DEFAULT, - new FieldValueMetaData(TType.I32))); put(COUNT, new FieldMetaData("count", TFieldRequirementType.DEFAULT, new FieldValueMetaData(TType.I32))); }}); @@ -2176,7 +2168,6 @@ public class Cassandra { String start, String finish, boolean is_ascending, - int offset, int count) { this(); @@ -2187,8 +2178,6 @@ public class Cassandra { this.finish = finish; this.is_ascending = is_ascending; this.__isset.is_ascending = true; - this.offset = offset; - this.__isset.offset = true; this.count = count; this.__isset.count = true; } @@ -2214,8 +2203,6 @@ public class Cassandra { } __isset.is_ascending = other.__isset.is_ascending; this.is_ascending = other.is_ascending; - __isset.offset = other.__isset.offset; - this.offset = other.offset; __isset.count = other.__isset.count; this.count = other.count; } @@ -2362,28 +2349,6 @@ public class Cassandra { this.__isset.is_ascending = value; } - public int getOffset() { - return this.offset; - } - - public void setOffset(int offset) { - this.offset = offset; - this.__isset.offset = true; - } - - public void unsetOffset() { - this.__isset.offset = false; - } - - // Returns true if field offset is set (has been asigned a value) and false otherwise - public boolean isSetOffset() { - return this.__isset.offset; - } - - public void setOffsetIsSet(boolean value) { - this.__isset.offset = value; - } - public int getCount() { return this.count; } @@ -2456,14 +2421,6 @@ public class Cassandra { } break; - case OFFSET: - if (value == null) { - unsetOffset(); - } else { - setOffset((Integer)value); - } - break; - case COUNT: if (value == null) { unsetCount(); @@ -2497,9 +2454,6 @@ public class Cassandra { case IS_ASCENDING: return new Boolean(isIs_ascending()); - case OFFSET: - return new Integer(getOffset()); - case COUNT: return new Integer(getCount()); @@ -2523,8 +2477,6 @@ public class Cassandra { return isSetFinish(); case IS_ASCENDING: return isSetIs_ascending(); - case OFFSET: - return isSetOffset(); case COUNT: return isSetCount(); default: @@ -2599,15 +2551,6 @@ public class Cassandra { return false; } - boolean this_present_offset = true; - boolean that_present_offset = true; - if (this_present_offset || that_present_offset) { - if (!(this_present_offset && that_present_offset)) - return false; - if (this.offset != that.offset) - return false; - } - boolean this_present_count = true; boolean that_present_count = true; if (this_present_count || that_present_count) { @@ -2680,14 +2623,6 @@ public class Cassandra { TProtocolUtil.skip(iprot, field.type); } break; - case OFFSET: - if (field.type == TType.I32) { - this.offset = iprot.readI32(); - this.__isset.offset = true; - } else { - TProtocolUtil.skip(iprot, field.type); - } - break; case COUNT: if (field.type == TType.I32) { this.count = iprot.readI32(); @@ -2741,9 +2676,6 @@ public class Cassandra { oprot.writeFieldBegin(IS_ASCENDING_FIELD_DESC); oprot.writeBool(this.is_ascending); oprot.writeFieldEnd(); - oprot.writeFieldBegin(OFFSET_FIELD_DESC); - oprot.writeI32(this.offset); - oprot.writeFieldEnd(); oprot.writeFieldBegin(COUNT_FIELD_DESC); oprot.writeI32(this.count); oprot.writeFieldEnd(); @@ -2800,10 +2732,6 @@ public class Cassandra { sb.append(this.is_ascending); first = false; if (!first) sb.append(", "); - sb.append("offset:"); - sb.append(this.offset); - first = false; - if (!first) sb.append(", "); sb.append("count:"); sb.append(this.count); first = false; @@ -7569,8 +7497,7 @@ public class Cassandra { private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)4); private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)5); private static final TField IS_ASCENDING_FIELD_DESC = new TField("is_ascending", TType.BOOL, (short)6); - private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)7); - private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)8); + private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)7); public String table; public static final int TABLE = 1; @@ -7584,15 +7511,12 @@ public class Cassandra { public static final int FINISH = 5; public boolean is_ascending; public static final int IS_ASCENDING = 6; - public int offset; - public static final int OFFSET = 7; public int count; - public static final int COUNT = 8; + public static final int COUNT = 7; private final Isset __isset = new Isset(); private static final class Isset implements java.io.Serializable { public boolean is_ascending = false; - public boolean offset = false; public boolean count = false; } @@ -7609,8 +7533,6 @@ public class Cassandra { new FieldValueMetaData(TType.STRING))); put(IS_ASCENDING, new FieldMetaData("is_ascending", TFieldRequirementType.DEFAULT, new FieldValueMetaData(TType.BOOL))); - put(OFFSET, new FieldMetaData("offset", TFieldRequirementType.DEFAULT, - new FieldValueMetaData(TType.I32))); put(COUNT, new FieldMetaData("count", TFieldRequirementType.DEFAULT, new FieldValueMetaData(TType.I32))); }}); @@ -7631,7 +7553,6 @@ public class Cassandra { String start, String finish, boolean is_ascending, - int offset, int count) { this(); @@ -7642,8 +7563,6 @@ public class Cassandra { this.finish = finish; this.is_ascending = is_ascending; this.__isset.is_ascending = true; - this.offset = offset; - this.__isset.offset = true; this.count = count; this.__isset.count = true; } @@ -7669,8 +7588,6 @@ public class Cassandra { } __isset.is_ascending = other.__isset.is_ascending; this.is_ascending = other.is_ascending; - __isset.offset = other.__isset.offset; - this.offset = other.offset; __isset.count = other.__isset.count; this.count = other.count; } @@ -7817,28 +7734,6 @@ public class Cassandra { this.__isset.is_ascending = value; } - public int getOffset() { - return this.offset; - } - - public void setOffset(int offset) { - this.offset = offset; - this.__isset.offset = true; - } - - public void unsetOffset() { - this.__isset.offset = false; - } - - // Returns true if field offset is set (has been asigned a value) and false otherwise - public boolean isSetOffset() { - return this.__isset.offset; - } - - public void setOffsetIsSet(boolean value) { - this.__isset.offset = value; - } - public int getCount() { return this.count; } @@ -7911,14 +7806,6 @@ public class Cassandra { } break; - case OFFSET: - if (value == null) { - unsetOffset(); - } else { - setOffset((Integer)value); - } - break; - case COUNT: if (value == null) { unsetCount(); @@ -7952,9 +7839,6 @@ public class Cassandra { case IS_ASCENDING: return new Boolean(isIs_ascending()); - case OFFSET: - return new Integer(getOffset()); - case COUNT: return new Integer(getCount()); @@ -7978,8 +7862,6 @@ public class Cassandra { return isSetFinish(); case IS_ASCENDING: return isSetIs_ascending(); - case OFFSET: - return isSetOffset(); case COUNT: return isSetCount(); default: @@ -8054,15 +7936,6 @@ public class Cassandra { return false; } - boolean this_present_offset = true; - boolean that_present_offset = true; - if (this_present_offset || that_present_offset) { - if (!(this_present_offset && that_present_offset)) - return false; - if (this.offset != that.offset) - return false; - } - boolean this_present_count = true; boolean that_present_count = true; if (this_present_count || that_present_count) { @@ -8134,14 +8007,6 @@ public class Cassandra { TProtocolUtil.skip(iprot, field.type); } break; - case OFFSET: - if (field.type == TType.I32) { - this.offset = iprot.readI32(); - this.__isset.offset = true; - } else { - TProtocolUtil.skip(iprot, field.type); - } - break; case COUNT: if (field.type == TType.I32) { this.count = iprot.readI32(); @@ -8195,9 +8060,6 @@ public class Cassandra { oprot.writeFieldBegin(IS_ASCENDING_FIELD_DESC); oprot.writeBool(this.is_ascending); oprot.writeFieldEnd(); - oprot.writeFieldBegin(OFFSET_FIELD_DESC); - oprot.writeI32(this.offset); - oprot.writeFieldEnd(); oprot.writeFieldBegin(COUNT_FIELD_DESC); oprot.writeI32(this.count); oprot.writeFieldEnd(); @@ -8254,10 +8116,6 @@ public class Cassandra { sb.append(this.is_ascending); first = false; if (!first) sb.append(", "); - sb.append("offset:"); - sb.append(this.offset); - first = false; - if (!first) sb.append(", "); sb.append("count:"); sb.append(this.count); first = false; diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java index c3a9738a46..62a7fde421 100644 --- a/src/java/org/apache/cassandra/cli/CliClient.java +++ b/src/java/org/apache/cassandra/cli/CliClient.java @@ -135,7 +135,7 @@ public class CliClient { // table.cf['key'] List columns = new ArrayList(); - columns = thriftClient_.get_slice(tableName, key, new ColumnParent(columnFamily, null), "", "", true, 0, 1000000); + columns = thriftClient_.get_slice(tableName, key, new ColumnParent(columnFamily, null), "", "", true, 1000000); int size = columns.size(); for (Iterator colIter = columns.iterator(); colIter.hasNext(); ) { diff --git a/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java b/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java index 20802c60ca..0464177250 100644 --- a/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java +++ b/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java @@ -43,7 +43,6 @@ public class ColumnRangeQueryRSD extends RowSourceDef private CFMetaData cfMetaData_; private OperandDef rowKey_; private OperandDef superColumnKey_; - private int offset_; private int limit_; /** @@ -53,12 +52,11 @@ public class ColumnRangeQueryRSD extends RowSourceDef * Note: "limit" of -1 is the equivalent of no limit. * "offset" specifies the number of rows to skip. An offset of 0 implies from the first row. */ - public ColumnRangeQueryRSD(CFMetaData cfMetaData, OperandDef rowKey, int offset, int limit) + public ColumnRangeQueryRSD(CFMetaData cfMetaData, OperandDef rowKey, int limit) { cfMetaData_ = cfMetaData; rowKey_ = rowKey; superColumnKey_ = null; - offset_ = offset; limit_ = limit; } @@ -69,13 +67,11 @@ public class ColumnRangeQueryRSD extends RowSourceDef * Note: "limit" of -1 is the equivalent of no limit. * "offset" specifies the number of rows to skip. An offset of 0 implies the first row. */ - public ColumnRangeQueryRSD(CFMetaData cfMetaData, ConstantOperand rowKey, ConstantOperand superColumnKey, - int offset, int limit) + public ColumnRangeQueryRSD(CFMetaData cfMetaData, ConstantOperand rowKey, ConstantOperand superColumnKey, int limit) { cfMetaData_ = cfMetaData; rowKey_ = rowKey; superColumnKey_ = superColumnKey; - offset_ = offset; limit_ = limit; } @@ -98,7 +94,7 @@ public class ColumnRangeQueryRSD extends RowSourceDef try { String key = (String)(rowKey_.get()); - ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, path, "", "", true, offset_, limit_); + ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, path, "", "", true, limit_); row = StorageProxy.readProtocol(readCommand, StorageService.ConsistencyLevel.WEAK); } catch (Exception e) @@ -151,7 +147,6 @@ public class ColumnRangeQueryRSD extends RowSourceDef " Column Family: %s\n" + " RowKey: %s\n" + "%s" + - " Offset: %d\n" + " Limit: %d\n" + " Order By: %s", cfMetaData_.columnType, @@ -159,7 +154,7 @@ public class ColumnRangeQueryRSD extends RowSourceDef cfMetaData_.cfName, rowKey_.explain(), (superColumnKey_ == null) ? "" : " SuperColumnKey: " + superColumnKey_.explain() + "\n", - offset_, limit_, + limit_, cfMetaData_.indexProperty_); } } \ No newline at end of file diff --git a/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java b/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java index cccc3b9834..f8c32aba58 100644 --- a/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java +++ b/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java @@ -41,8 +41,6 @@ public class SuperColumnRangeQueryRSD extends RowSourceDef private final static Logger logger_ = Logger.getLogger(SuperColumnRangeQueryRSD.class); private CFMetaData cfMetaData_; private OperandDef rowKey_; - private OperandDef superColumnKey_; - private int offset_; private int limit_; /** @@ -53,11 +51,10 @@ public class SuperColumnRangeQueryRSD extends RowSourceDef * "offset" specifies the number of rows to skip. * An offset of 0 implies from the first row. */ - public SuperColumnRangeQueryRSD(CFMetaData cfMetaData, OperandDef rowKey, int offset, int limit) + public SuperColumnRangeQueryRSD(CFMetaData cfMetaData, OperandDef rowKey, int limit) { cfMetaData_ = cfMetaData; rowKey_ = rowKey; - offset_ = offset; limit_ = limit; } @@ -67,7 +64,7 @@ public class SuperColumnRangeQueryRSD extends RowSourceDef try { String key = (String)(rowKey_.get()); - ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, new QueryPath(cfMetaData_.cfName), "", "", true, offset_, limit_); + ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, new QueryPath(cfMetaData_.cfName), "", "", true, limit_); row = StorageProxy.readProtocol(readCommand, StorageService.ConsistencyLevel.WEAK); } catch (Exception e) @@ -110,14 +107,13 @@ public class SuperColumnRangeQueryRSD extends RowSourceDef " Table Name: %s\n" + " Column Family: %s\n" + " RowKey: %s\n" + - " Offset: %d\n" + " Limit: %d\n" + " Order By: %s", cfMetaData_.columnType, cfMetaData_.tableName, cfMetaData_.cfName, rowKey_.explain(), - offset_, limit_, + limit_, cfMetaData_.indexProperty_); } } \ No newline at end of file diff --git a/src/java/org/apache/cassandra/cql/compiler/sem/SemanticPhase.java b/src/java/org/apache/cassandra/cql/compiler/sem/SemanticPhase.java index f056ac06bc..5108f9bc74 100644 --- a/src/java/org/apache/cassandra/cql/compiler/sem/SemanticPhase.java +++ b/src/java/org/apache/cassandra/cql/compiler/sem/SemanticPhase.java @@ -189,12 +189,12 @@ public class SemanticPhase { // Case: table.super_cf[][] ConstantOperand superColumnKey = new ConstantOperand(getColumn(columnFamilySpec, 0)); - rwsDef = new ColumnRangeQueryRSD(cfMetaData, rowKey, superColumnKey, -1, Integer.MAX_VALUE); + rwsDef = new ColumnRangeQueryRSD(cfMetaData, rowKey, superColumnKey, Integer.MAX_VALUE); } else { // Case: table.super_cf[] - rwsDef = new SuperColumnRangeQueryRSD(cfMetaData, rowKey, -1, Integer.MAX_VALUE); + rwsDef = new SuperColumnRangeQueryRSD(cfMetaData, rowKey, Integer.MAX_VALUE); } } else // Standard Column Family @@ -209,7 +209,7 @@ public class SemanticPhase { // Case: table.standard_cf[] logger_.assertLog((dimensionCnt == 0), "invalid dimensionCnt: " + dimensionCnt); - rwsDef = new ColumnRangeQueryRSD(cfMetaData, rowKey, -1, Integer.MAX_VALUE); + rwsDef = new ColumnRangeQueryRSD(cfMetaData, rowKey, Integer.MAX_VALUE); } } return new QueryPlan(rwsDef); diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index c77e7e15c3..bd81104c0a 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1421,9 +1421,9 @@ public final class ColumnFamilyStore implements ColumnFamilyStoreMBean return writeStats_.mean(); } - public ColumnFamily getColumnFamily(String key, QueryPath path, String start, String finish, boolean isAscending, int offset, int limit) throws IOException + public ColumnFamily getColumnFamily(String key, QueryPath path, String start, String finish, boolean isAscending, int limit) throws IOException { - return getColumnFamily(new SliceQueryFilter(key, path, start, finish, isAscending, offset, limit)); + return getColumnFamily(new SliceQueryFilter(key, path, start, finish, isAscending, limit)); } public ColumnFamily getColumnFamily(String key, QueryPath columnParent, long since) throws IOException diff --git a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java index c29cb6c762..79eb8af2d0 100644 --- a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java +++ b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java @@ -30,22 +30,20 @@ public class SliceFromReadCommand extends ReadCommand public final QueryPath column_parent; public final String start, finish; public final boolean isAscending; - public final int offset; public final int count; - public SliceFromReadCommand(String table, String key, ColumnParent column_parent, String start, String finish, boolean isAscending, int offset, int count) + public SliceFromReadCommand(String table, String key, ColumnParent column_parent, String start, String finish, boolean isAscending, int count) { - this(table, key, new QueryPath(column_parent), start, finish, isAscending, offset, count); + this(table, key, new QueryPath(column_parent), start, finish, isAscending, count); } - public SliceFromReadCommand(String table, String key, QueryPath columnParent, String start, String finish, boolean isAscending, int offset, int count) + public SliceFromReadCommand(String table, String key, QueryPath columnParent, String start, String finish, boolean isAscending, int count) { super(table, key, CMD_TYPE_GET_SLICE); this.column_parent = columnParent; this.start = start; this.finish = finish; this.isAscending = isAscending; - this.offset = offset; this.count = count; } @@ -58,7 +56,7 @@ public class SliceFromReadCommand extends ReadCommand @Override public ReadCommand copy() { - ReadCommand readCommand = new SliceFromReadCommand(table, key, column_parent, start, finish, isAscending, offset, count); + ReadCommand readCommand = new SliceFromReadCommand(table, key, column_parent, start, finish, isAscending, count); readCommand.setDigestQuery(isDigestQuery()); return readCommand; } @@ -66,7 +64,7 @@ public class SliceFromReadCommand extends ReadCommand @Override public Row getRow(Table table) throws IOException { - return table.getRow(new SliceQueryFilter(key, column_parent, start, finish, isAscending, offset, count)); + return table.getRow(new SliceQueryFilter(key, column_parent, start, finish, isAscending, count)); } @Override @@ -79,7 +77,6 @@ public class SliceFromReadCommand extends ReadCommand ", start='" + start + '\'' + ", finish='" + finish + '\'' + ", isAscending=" + isAscending + - ", offset=" + offset + ", count=" + count + ')'; } @@ -98,7 +95,6 @@ class SliceFromReadCommandSerializer extends ReadCommandSerializer dos.writeUTF(realRM.start); dos.writeUTF(realRM.finish); dos.writeBoolean(realRM.isAscending); - dos.writeInt(realRM.offset); dos.writeInt(realRM.count); } @@ -106,7 +102,7 @@ class SliceFromReadCommandSerializer extends ReadCommandSerializer public ReadCommand deserialize(DataInputStream dis) throws IOException { boolean isDigest = dis.readBoolean(); - SliceFromReadCommand rm = new SliceFromReadCommand(dis.readUTF(), dis.readUTF(), QueryPath.deserialize(dis), dis.readUTF(), dis.readUTF(), dis.readBoolean(), dis.readInt(), dis.readInt()); + SliceFromReadCommand rm = new SliceFromReadCommand(dis.readUTF(), dis.readUTF(), QueryPath.deserialize(dis), dis.readUTF(), dis.readUTF(), dis.readBoolean(), dis.readInt()); rm.setDigestQuery(isDigest); return rm; } diff --git a/src/java/org/apache/cassandra/db/Table.java b/src/java/org/apache/cassandra/db/Table.java index 75ba86d494..fb089e354b 100644 --- a/src/java/org/apache/cassandra/db/Table.java +++ b/src/java/org/apache/cassandra/db/Table.java @@ -711,7 +711,7 @@ public class Table } // make sure there is actually non-tombstone content associated w/ this key // TODO record the key source(s) somehow and only check that source (e.g., memtable or sstable) - if (cfs.getColumnFamily(new SliceQueryFilter(current, new QueryPath(cfName), "", "", true, 0, 1)) != null) + if (ColumnFamilyStore.removeDeleted(cfs.getColumnFamily(new SliceQueryFilter(current, new QueryPath(cfName), "", "", true, 1)), Integer.MAX_VALUE) != null) { keys.add(current); } diff --git a/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java b/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java index 30d4c1bf97..d11cb7f107 100644 --- a/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java +++ b/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java @@ -9,7 +9,7 @@ public class IdentityQueryFilter extends SliceQueryFilter */ public IdentityQueryFilter(String key, QueryPath path) { - super(key, path, "", "", true, 0, Integer.MAX_VALUE); + super(key, path, "", "", true, Integer.MAX_VALUE); } @Override diff --git a/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java b/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java index 79bc82a651..94afce7fe4 100644 --- a/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java +++ b/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java @@ -13,15 +13,14 @@ public class SliceQueryFilter extends QueryFilter { public final String start, finish; public final boolean isAscending; - public final int offset, count; + public final int count; - public SliceQueryFilter(String key, QueryPath columnParent, String start, String finish, boolean ascending, int offset, int count) + public SliceQueryFilter(String key, QueryPath columnParent, String start, String finish, boolean ascending, int count) { super(key, columnParent); this.start = start; this.finish = finish; isAscending = ascending; - this.offset = offset; this.count = count; } @@ -51,11 +50,10 @@ public class SliceQueryFilter extends QueryFilter public void collectColumns(ColumnFamily returnCF, ReducingIterator reducedColumns) { int liveColumns = 0; - int limit = offset + count; for (IColumn column : reducedColumns) { - if (liveColumns >= limit) + if (liveColumns >= count) break; if (!finish.isEmpty() && ((isAscending && column.name().compareTo(finish) > 0)) @@ -64,8 +62,7 @@ public class SliceQueryFilter extends QueryFilter if (!column.isMarkedForDelete()) liveColumns++; - if (liveColumns > offset) - returnCF.addColumn(column); + returnCF.addColumn(column); } } } diff --git a/src/java/org/apache/cassandra/service/CassandraServer.java b/src/java/org/apache/cassandra/service/CassandraServer.java index 4f3db3fece..d3bc679a34 100644 --- a/src/java/org/apache/cassandra/service/CassandraServer.java +++ b/src/java/org/apache/cassandra/service/CassandraServer.java @@ -150,7 +150,7 @@ public class CassandraServer implements Cassandra.Iface return getSlice(new SliceByNamesReadCommand(table, key, column_parent, column_names)); } - public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int offset, int count) + public List get_slice(String table, String key, ColumnParent column_parent, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException, NotFoundException { logger.debug("get_slice_from"); @@ -163,7 +163,7 @@ public class CassandraServer implements Cassandra.Iface if (!"Name".equals(DatabaseDescriptor.getCFMetaData(table, column_parent.column_family).indexProperty_)) throw new InvalidRequestException("get_slice requires CF indexed by name"); - return getSlice(new SliceFromReadCommand(table, key, column_parent, start, finish, is_ascending, offset, count)); + return getSlice(new SliceFromReadCommand(table, key, column_parent, start, finish, is_ascending, count)); } public Column get_column(String table, String key, ColumnPath column_path) @@ -224,7 +224,7 @@ public class CassandraServer implements Cassandra.Iface if (DatabaseDescriptor.isNameSortingEnabled(table, column_parent.column_family) && column_parent.super_column == null) { - cfamily = readColumnFamily(new SliceFromReadCommand(table, key, column_parent, "", "", true, 0, Integer.MAX_VALUE)); + cfamily = readColumnFamily(new SliceFromReadCommand(table, key, column_parent, "", "", true, Integer.MAX_VALUE)); } else { @@ -336,7 +336,7 @@ public class CassandraServer implements Cassandra.Iface return thriftSuperColumns; } - public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int offset, int count) + public List get_slice_super(String table, String key, String column_family, String start, String finish, boolean is_ascending, int count) throws InvalidRequestException { logger.debug("get_slice_super"); @@ -345,7 +345,7 @@ public class CassandraServer implements Cassandra.Iface if (count <= 0) throw new InvalidRequestException("get_slice_super requires positive count"); - ColumnFamily cfamily = readColumnFamily(new SliceFromReadCommand(table, key, new QueryPath(column_family), start, finish, is_ascending, offset, count)); + ColumnFamily cfamily = readColumnFamily(new SliceFromReadCommand(table, key, new QueryPath(column_family), start, finish, is_ascending, count)); if (cfamily == null) { return EMPTY_SUPERCOLUMNS; diff --git a/test/system/test_server.py b/test/system/test_server.py index c01762d20b..b1238dcba9 100644 --- a/test/system/test_server.py +++ b/test/system/test_server.py @@ -41,12 +41,12 @@ def _insert_batch(block): def _verify_batch(): _verify_simple() - L = client.get_slice('Table1', 'key1', ColumnParent('Standard2'), '', '', True, 0, 1000) + L = client.get_slice('Table1', 'key1', ColumnParent('Standard2'), '', '', True, 1000) assert L == _SIMPLE_COLUMNS, L def _verify_simple(): assert client.get_column('Table1', 'key1', ColumnPath('Standard1', column='c1')) == Column('c1', 'value1', 0) - L = client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) + L = client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) assert L == _SIMPLE_COLUMNS, L def _insert_super(): @@ -62,21 +62,21 @@ def _insert_range(): time.sleep(0.1) def _verify_range(): - result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'c1', 'c2', True, 0, 1000) + result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'c1', 'c2', True, 1000) assert len(result) == 2 assert result[0].name == 'c1' assert result[1].name == 'c2' - result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 0, 1000) + result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 1000) assert len(result) == 3, result - result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 0, 2) + result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 2) assert len(result) == 2, result def _verify_super(supercf='Super1'): assert client.get_column('Table1', 'key1', ColumnPath(supercf, 'sc1', 'c4')) == Column('c4', 'value4', 0) - slice = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + slice = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert slice == _SUPER_COLUMNS, slice def _expect_exception(fn, type_): @@ -97,10 +97,10 @@ class TestMutations(CassandraTester): _verify_simple() def test_empty_slice(self): - assert client.get_slice('Table1', 'key1', ColumnParent('Standard2'), '', '', True, 0, 1000) == [] + assert client.get_slice('Table1', 'key1', ColumnParent('Standard2'), '', '', True, 1000) == [] def test_empty_slice_super(self): - assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) == [] + assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) == [] def test_missing_super(self): _expect_missing(lambda: client.get_column('Table1', 'key1', ColumnPath('Super1', 'sc1', 'c1'))) @@ -160,22 +160,22 @@ class TestMutations(CassandraTester): _expect_missing(lambda: client.get_column('Table1', 'key1', ColumnPath('Standard1', column='c1'))) assert client.get_column('Table1', 'key1', ColumnPath('Standard1', column='c2')) \ == Column('c2', 'value2', 0) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) \ + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) \ == [Column('c2', 'value2', 0)] # New insert, make sure it shows up post-remove: client.insert('Table1', 'key1', ColumnPath('Standard1', column='c3'), 'value3', 0, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == \ + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == \ [Column('c2', 'value2', 0), Column('c3', 'value3', 0)] # Test resurrection. First, re-insert the value w/ older timestamp, # and make sure it stays removed client.insert('Table1', 'key1', ColumnPath('Standard1', column='c1'), 'value1', 0, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == \ + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == \ [Column('c2', 'value2', 0), Column('c3', 'value3', 0)] # Next, w/ a newer timestamp; it should come back: client.insert('Table1', 'key1', ColumnPath('Standard1', column='c1'), 'value1', 2, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == \ + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == \ [Column('c1', 'value1', 2), Column('c2', 'value2', 0), Column('c3', 'value3', 0)] @@ -185,16 +185,16 @@ class TestMutations(CassandraTester): # Remove the key1:Standard1 cf: client.remove('Table1', 'key1', ColumnPathOrParent('Standard1'), 3, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == [] + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == [] _verify_super() # Test resurrection. First, re-insert a value w/ older timestamp, # and make sure it stays removed: client.insert('Table1', 'key1', ColumnPath('Standard1', column='c1'), 'value1', 0, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == [] + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == [] # Next, w/ a newer timestamp; it should come back: client.insert('Table1', 'key1', ColumnPath('Standard1', column='c1'), 'value1', 4, True) - assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 0, 1000) == \ + assert client.get_slice('Table1', 'key1', ColumnParent('Standard1'), '', '', True, 1000) == \ [Column('c1', 'value1', 4)] @@ -205,7 +205,7 @@ class TestMutations(CassandraTester): # Make sure remove clears out what it's supposed to, and _only_ that: client.remove('Table1', 'key1', ColumnPathOrParent('Super1', 'sc2', 'c5'), 5, True) _expect_missing(lambda: client.get_column('Table1', 'key1', ColumnPath('Super1', 'sc2', 'c5'))) - assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) == \ + assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) == \ [SuperColumn(name='sc1', columns=[Column('c4', 'value4', 0)]), SuperColumn(name='sc2', columns=[Column('c6', 'value6', 0)])] _verify_simple() @@ -216,17 +216,17 @@ class TestMutations(CassandraTester): SuperColumn(name='sc2', columns=[Column('c6', 'value6', 0), Column('c7', 'value7', 0)])] - assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) == scs + assert client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) == scs # Test resurrection. First, re-insert the value w/ older timestamp, # and make sure it stays removed: client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', 'c5'), 'value5', 0, True) - actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert actual == scs, actual # Next, w/ a newer timestamp; it should come back client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', 'c5'), 'value5', 6, True) - actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert actual == \ [SuperColumn(name='sc1', columns=[Column('c4', 'value4', 0)]), SuperColumn(name='sc2', columns=[Column('c5', 'value5', 6), @@ -243,19 +243,19 @@ class TestMutations(CassandraTester): actual = client.get_columns_since('Table1', 'key1', ColumnParent('Super1', 'sc2'), -1) assert actual == [], actual scs = [SuperColumn(name='sc1', columns=[Column('c4', 'value4', 0)])] - actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert actual == scs, actual _verify_simple() # Test resurrection. First, re-insert the value w/ older timestamp, # and make sure it stays removed: client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', 'c5'), 'value5', 0, True) - actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert actual == scs, actual # Next, w/ a newer timestamp; it should come back client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', 'c5'), 'value5', 6, True) - actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 0, 1000) + actual = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000) assert actual == \ [SuperColumn(name='sc1', columns=[Column('c4', 'value4', 0)]), SuperColumn(name='sc2', columns=[Column('c5', 'value5', 6)])], actual @@ -272,7 +272,8 @@ class TestMutations(CassandraTester): client.remove('Table1', 'key1', ColumnPathOrParent('Standard1', column='c1'), 1, True) client.remove('Table1', 'key1', ColumnPathOrParent('Standard1', column='c2'), 1, True) - assert client.get_key_range('Table1', 'Standard1', '', '', 1000) == [] + actual = client.get_key_range('Table1', 'Standard1', '', '', 1000) + assert not actual, actual def test_range_collation(self): for key in ['-a', '-b', 'a', 'b'] + [str(i) for i in xrange(100)]: diff --git a/test/unit/org/apache/cassandra/db/ReadMessageTest.java b/test/unit/org/apache/cassandra/db/ReadMessageTest.java index ab89b9bac4..169837abe2 100644 --- a/test/unit/org/apache/cassandra/db/ReadMessageTest.java +++ b/test/unit/org/apache/cassandra/db/ReadMessageTest.java @@ -50,11 +50,11 @@ public class ReadMessageTest rm2 = serializeAndDeserializeReadMessage(rm); assert rm2.toString().equals(rm.toString()); - rm = new SliceFromReadCommand("Table1", "row1", new QueryPath("foo"), "", "", true, 0, 2); + rm = new SliceFromReadCommand("Table1", "row1", new QueryPath("foo"), "", "", true, 2); rm2 = serializeAndDeserializeReadMessage(rm); assert rm2.toString().equals(rm.toString()); - rm = new SliceFromReadCommand("Table1", "row1", new QueryPath("foo"), "a", "z", true, 0, 5); + rm = new SliceFromReadCommand("Table1", "row1", new QueryPath("foo"), "a", "z", true, 5); rm2 = serializeAndDeserializeReadMessage(rm); assertEquals(rm2.toString(), rm.toString()); } diff --git a/test/unit/org/apache/cassandra/db/TableTest.java b/test/unit/org/apache/cassandra/db/TableTest.java index 4b88df6f43..4768accc18 100644 --- a/test/unit/org/apache/cassandra/db/TableTest.java +++ b/test/unit/org/apache/cassandra/db/TableTest.java @@ -100,16 +100,16 @@ public class TableTest extends CleanupHelper rm.add(cf); rm.apply(); - cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "c", true, 0, 100); + cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "c", true, 100); assertEquals(2, cf.getColumnCount()); - cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "b", true, 0, 100); + cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "b", true, 100); assertEquals(1, cf.getColumnCount()); - cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "c", true, 0, 1); + cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b", "c", true, 1); assertEquals(1, cf.getColumnCount()); - cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "c", "b", true, 0, 1); + cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "c", "b", true, 1); assertNull(cf); } @@ -150,11 +150,11 @@ public class TableTest extends CleanupHelper ColumnFamily cf; // key before the rows that exists - cf = cfStore.getColumnFamily("a", new QueryPath("Standard2"), "", "", true, 0, 1); + cf = cfStore.getColumnFamily("a", new QueryPath("Standard2"), "", "", true, 1); assertColumns(cf); // key after the rows that exist - cf = cfStore.getColumnFamily("z", new QueryPath("Standard2"), "", "", true, 0, 1); + cf = cfStore.getColumnFamily("z", new QueryPath("Standard2"), "", "", true, 1); assertColumns(cf); } @@ -193,22 +193,23 @@ public class TableTest extends CleanupHelper Row result; ColumnFamily cf; - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5", "", true, 0, 2); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5", "", true, 2); assertColumns(cf, "col5", "col7"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col4", "", true, 0, 2); - assertColumns(cf, "col5", "col7"); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col4", "", true, 2); + assertColumns(cf, "col4", "col5", "col7"); + assertColumns(ColumnFamilyStore.removeDeleted(cf, Integer.MAX_VALUE), "col5", "col7"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5", "", false, 0, 2); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5", "", false, 2); assertColumns(cf, "col3", "col4", "col5"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col6", "", false, 0, 2); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col6", "", false, 2); assertColumns(cf, "col3", "col4", "col5"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col95", "", true, 0, 2); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col95", "", true, 2); assertColumns(cf); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col0", "", false, 0, 2); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col0", "", false, 2); assertColumns(cf); } }; @@ -255,7 +256,7 @@ public class TableTest extends CleanupHelper { ColumnFamily cf; - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col2", "", true, 0, 3); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col2", "", true, 3); assertColumns(cf, "col2", "col3", "col4"); assertEquals(new String(cf.getColumn("col2").value()), "valx"); assertEquals(new String(cf.getColumn("col3").value()), "valx"); @@ -281,37 +282,25 @@ public class TableTest extends CleanupHelper rm.apply(); cfStore.forceBlockingFlush(); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1000", "", true, 0, 3); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1000", "", true, 3); assertColumns(cf, "col1000", "col1001", "col1002"); assertEquals(new String(cf.getColumn("col1000").value()), "vvvvvvvvvvvvvvvv1000"); assertEquals(new String(cf.getColumn("col1001").value()), "vvvvvvvvvvvvvvvv1001"); assertEquals(new String(cf.getColumn("col1002").value()), "vvvvvvvvvvvvvvvv1002"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1195", "", true, 0, 3); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1195", "", true, 3); assertColumns(cf, "col1195", "col1196", "col1197"); assertEquals(new String(cf.getColumn("col1195").value()), "vvvvvvvvvvvvvvvv1195"); assertEquals(new String(cf.getColumn("col1196").value()), "vvvvvvvvvvvvvvvv1196"); assertEquals(new String(cf.getColumn("col1197").value()), "vvvvvvvvvvvvvvvv1197"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1195", "", true, 10, 3); - assertColumns(cf, "col1205", "col1206", "col1207"); - assertEquals(new String(cf.getColumn("col1205").value()), "vvvvvvvvvvvvvvvv1205"); - assertEquals(new String(cf.getColumn("col1206").value()), "vvvvvvvvvvvvvvvv1206"); - assertEquals(new String(cf.getColumn("col1207").value()), "vvvvvvvvvvvvvvvv1207"); - - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1196", "", false, 0, 3); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1196", "", false, 3); assertColumns(cf, "col1194", "col1195", "col1196"); assertEquals(new String(cf.getColumn("col1194").value()), "vvvvvvvvvvvvvvvv1194"); assertEquals(new String(cf.getColumn("col1195").value()), "vvvvvvvvvvvvvvvv1195"); assertEquals(new String(cf.getColumn("col1196").value()), "vvvvvvvvvvvvvvvv1196"); - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1196", "", false, 10, 3); - assertColumns(cf, "col1184", "col1185", "col1186"); - assertEquals(new String(cf.getColumn("col1184").value()), "vvvvvvvvvvvvvvvv1184"); - assertEquals(new String(cf.getColumn("col1185").value()), "vvvvvvvvvvvvvvvv1185"); - assertEquals(new String(cf.getColumn("col1186").value()), "vvvvvvvvvvvvvvvv1186"); - - cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1990", "", true, 0, 3); + cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col1990", "", true, 3); assertColumns(cf, "col1990", "col1991", "col1992"); assertEquals(new String(cf.getColumn("col1990").value()), "vvvvvvvvvvvvvvvv1990"); assertEquals(new String(cf.getColumn("col1991").value()), "vvvvvvvvvvvvvvvv1991"); @@ -343,7 +332,7 @@ public class TableTest extends CleanupHelper { public void run() throws Exception { - ColumnFamily cf = cfStore.getColumnFamily(ROW, new QueryPath("Super1"), "", "", true, 0, 10); + ColumnFamily cf = cfStore.getColumnFamily(ROW, new QueryPath("Super1"), "", "", true, 10); assertColumns(cf, "sc1"); assertEquals(new String(cf.getColumn("sc1").getSubColumn("col1").value()), "val1"); }