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/06/08 21:37:58 UTC
svn commit: r782740 - in /incubator/cassandra/trunk: ./ interface/
interface/gen-java/org/apache/cassandra/service/ src/java/org/
src/java/org/apache/cassandra/config/ src/java/org/apache/cassandra/db/
src/java/org/apache/cassandra/io/ src/java/org/apa...
Author: jbellis
Date: Mon Jun 8 19:37:57 2009
New Revision: 782740
URL: http://svn.apache.org/viewvc?rev=782740&view=rev
Log:
merge from 0.3 branch
Removed:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TouchMessage.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TouchVerbHandler.java
Modified:
incubator/cassandra/trunk/ (props changed)
incubator/cassandra/trunk/interface/cassandra.thrift
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java (contents, props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/CqlResult_t.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/NotFoundException.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_super_t.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_t.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/column_t.java (props changed)
incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/superColumn_t.java (props changed)
incubator/cassandra/trunk/src/java/org/ (props changed)
incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IFileReader.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SequenceFile.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/net/TcpConnection.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
incubator/cassandra/trunk/test/unit/org/ (props changed)
Propchange: incubator/cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1 +1 @@
-/incubator/cassandra/branches/cassandra-0.3:774578-782116
+/incubator/cassandra/branches/cassandra-0.3:774578-782737
Modified: incubator/cassandra/trunk/interface/cassandra.thrift
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/cassandra.thrift?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/cassandra.thrift (original)
+++ incubator/cassandra/trunk/interface/cassandra.thrift Mon Jun 8 19:37:57 2009
@@ -143,8 +143,6 @@
void batch_insert_superColumn(1:batch_mutation_super_t batchMutationSuper, 2:i32 block_for=0)
throws (1: InvalidRequestException ire, 2: UnavailableException ue),
- oneway void touch(1:string key, 2:bool fData),
-
# range query: returns matching keys
list<string> get_key_range(1:string tablename, 2:list<string> columnFamilies=[], 3:string startWith="", 4:string stopAt="", 5:i32 maxResults=1000) 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=782740&r1=782739&r2=782740&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 Jun 8 19:37:57 2009
@@ -50,8 +50,6 @@
public void batch_insert_superColumn(batch_mutation_super_t batchMutationSuper, int block_for) throws InvalidRequestException, UnavailableException, TException;
- public void touch(String key, boolean fData) throws TException;
-
public List<String> get_key_range(String tablename, List<String> columnFamilies, String startWith, String stopAt, int maxResults) throws InvalidRequestException, TException;
public String getStringProperty(String propertyName) throws TException;
@@ -659,22 +657,6 @@
return;
}
- public void touch(String key, boolean fData) throws TException
- {
- send_touch(key, fData);
- }
-
- public void send_touch(String key, boolean fData) throws TException
- {
- oprot_.writeMessageBegin(new TMessage("touch", TMessageType.CALL, seqid_));
- touch_args args = new touch_args();
- args.key = key;
- args.fData = fData;
- args.write(oprot_);
- oprot_.writeMessageEnd();
- oprot_.getTransport().flush();
- }
-
public List<String> get_key_range(String tablename, List<String> columnFamilies, String startWith, String stopAt, int maxResults) throws InvalidRequestException, TException
{
send_get_key_range(tablename, columnFamilies, startWith, stopAt, maxResults);
@@ -867,7 +849,6 @@
processMap_.put("get_slice_super_by_names", new get_slice_super_by_names());
processMap_.put("get_superColumn", new get_superColumn());
processMap_.put("batch_insert_superColumn", new batch_insert_superColumn());
- processMap_.put("touch", new touch());
processMap_.put("get_key_range", new get_key_range());
processMap_.put("getStringProperty", new getStringProperty());
processMap_.put("getStringListProperty", new getStringListProperty());
@@ -1315,17 +1296,6 @@
}
- private class touch implements ProcessFunction {
- public void process(int seqid, TProtocol iprot, TProtocol oprot) throws TException
- {
- touch_args args = new touch_args();
- args.read(iprot);
- iprot.readMessageEnd();
- iface_.touch(args.key, args.fData);
- return;
- }
- }
-
private class get_key_range implements ProcessFunction {
public void process(int seqid, TProtocol iprot, TProtocol oprot) throws TException
{
@@ -12068,275 +12038,6 @@
}
- public static class touch_args implements TBase, java.io.Serializable, Cloneable {
- private static final TStruct STRUCT_DESC = new TStruct("touch_args");
- private static final TField KEY_FIELD_DESC = new TField("key", TType.STRING, (short)1);
- private static final TField F_DATA_FIELD_DESC = new TField("fData", TType.BOOL, (short)2);
-
- public String key;
- public static final int KEY = 1;
- public boolean fData;
- public static final int FDATA = 2;
-
- private final Isset __isset = new Isset();
- private static final class Isset implements java.io.Serializable {
- public boolean fData = false;
- }
-
- public static final Map<Integer, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{
- put(KEY, new FieldMetaData("key", TFieldRequirementType.DEFAULT,
- new FieldValueMetaData(TType.STRING)));
- put(FDATA, new FieldMetaData("fData", TFieldRequirementType.DEFAULT,
- new FieldValueMetaData(TType.BOOL)));
- }});
-
- static {
- FieldMetaData.addStructMetaDataMap(touch_args.class, metaDataMap);
- }
-
- public touch_args() {
- }
-
- public touch_args(
- String key,
- boolean fData)
- {
- this();
- this.key = key;
- this.fData = fData;
- this.__isset.fData = true;
- }
-
- /**
- * Performs a deep copy on <i>other</i>.
- */
- public touch_args(touch_args other) {
- if (other.isSetKey()) {
- this.key = other.key;
- }
- __isset.fData = other.__isset.fData;
- this.fData = other.fData;
- }
-
- @Override
- public touch_args clone() {
- return new touch_args(this);
- }
-
- public String getKey() {
- return this.key;
- }
-
- public void setKey(String key) {
- this.key = key;
- }
-
- public void unsetKey() {
- this.key = null;
- }
-
- // Returns true if field key is set (has been asigned a value) and false otherwise
- public boolean isSetKey() {
- return this.key != null;
- }
-
- public void setKeyIsSet(boolean value) {
- if (!value) {
- this.key = null;
- }
- }
-
- public boolean isFData() {
- return this.fData;
- }
-
- public void setFData(boolean fData) {
- this.fData = fData;
- this.__isset.fData = true;
- }
-
- public void unsetFData() {
- this.__isset.fData = false;
- }
-
- // Returns true if field fData is set (has been asigned a value) and false otherwise
- public boolean isSetFData() {
- return this.__isset.fData;
- }
-
- public void setFDataIsSet(boolean value) {
- this.__isset.fData = value;
- }
-
- public void setFieldValue(int fieldID, Object value) {
- switch (fieldID) {
- case KEY:
- if (value == null) {
- unsetKey();
- } else {
- setKey((String)value);
- }
- break;
-
- case FDATA:
- if (value == null) {
- unsetFData();
- } else {
- setFData((Boolean)value);
- }
- break;
-
- default:
- throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
- }
- }
-
- public Object getFieldValue(int fieldID) {
- switch (fieldID) {
- case KEY:
- return getKey();
-
- case FDATA:
- return new Boolean(isFData());
-
- default:
- throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
- }
- }
-
- // Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise
- public boolean isSet(int fieldID) {
- switch (fieldID) {
- case KEY:
- return isSetKey();
- case FDATA:
- return isSetFData();
- default:
- throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
- }
- }
-
- @Override
- public boolean equals(Object that) {
- if (that == null)
- return false;
- if (that instanceof touch_args)
- return this.equals((touch_args)that);
- return false;
- }
-
- public boolean equals(touch_args that) {
- if (that == null)
- return false;
-
- boolean this_present_key = true && this.isSetKey();
- boolean that_present_key = true && that.isSetKey();
- if (this_present_key || that_present_key) {
- if (!(this_present_key && that_present_key))
- return false;
- if (!this.key.equals(that.key))
- return false;
- }
-
- boolean this_present_fData = true;
- boolean that_present_fData = true;
- if (this_present_fData || that_present_fData) {
- if (!(this_present_fData && that_present_fData))
- return false;
- if (this.fData != that.fData)
- return false;
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return 0;
- }
-
- public void read(TProtocol iprot) throws TException {
- TField field;
- iprot.readStructBegin();
- while (true)
- {
- field = iprot.readFieldBegin();
- if (field.type == TType.STOP) {
- break;
- }
- switch (field.id)
- {
- case KEY:
- if (field.type == TType.STRING) {
- this.key = iprot.readString();
- } else {
- TProtocolUtil.skip(iprot, field.type);
- }
- break;
- case FDATA:
- if (field.type == TType.BOOL) {
- this.fData = iprot.readBool();
- this.__isset.fData = true;
- } else {
- TProtocolUtil.skip(iprot, field.type);
- }
- break;
- default:
- TProtocolUtil.skip(iprot, field.type);
- break;
- }
- iprot.readFieldEnd();
- }
- iprot.readStructEnd();
-
-
- // check for required fields of primitive type, which can't be checked in the validate method
- validate();
- }
-
- public void write(TProtocol oprot) throws TException {
- validate();
-
- oprot.writeStructBegin(STRUCT_DESC);
- if (this.key != null) {
- oprot.writeFieldBegin(KEY_FIELD_DESC);
- oprot.writeString(this.key);
- oprot.writeFieldEnd();
- }
- oprot.writeFieldBegin(F_DATA_FIELD_DESC);
- oprot.writeBool(this.fData);
- oprot.writeFieldEnd();
- oprot.writeFieldStop();
- oprot.writeStructEnd();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder("touch_args(");
- boolean first = true;
-
- sb.append("key:");
- if (this.key == null) {
- sb.append("null");
- } else {
- sb.append(this.key);
- }
- first = false;
- if (!first) sb.append(", ");
- sb.append("fData:");
- sb.append(this.fData);
- first = false;
- sb.append(")");
- return sb.toString();
- }
-
- public void validate() throws TException {
- // check for required fields
- // check that fields of type enum have valid values
- }
-
- }
-
public static class get_key_range_args implements TBase, java.io.Serializable, Cloneable {
private static final TStruct STRUCT_DESC = new TStruct("get_key_range_args");
private static final TField TABLENAME_FIELD_DESC = new TField("tablename", TType.STRING, (short)1);
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/CqlResult_t.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/CqlResult_t.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/CqlResult_t.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/CqlResult_t.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_super_t.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/batch_mutation_super_t.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/batch_mutation_super_t.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_super_t.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_t.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/batch_mutation_t.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/batch_mutation_t.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/batch_mutation_t.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/column_t.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/column_t.java:749219-768588
Propchange: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/superColumn_t.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-782737
/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:749219-768588
Propchange: incubator/cassandra/trunk/src/java/org/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/src/java/org:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/src/java/org:774578-782737
/incubator/cassandra/trunk/src/java/org:749219-769885
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Mon Jun 8 19:37:57 2009
@@ -90,8 +90,6 @@
private static String partitionerClass_;
/* if the size of columns or super-columns are more than this, indexing will kick in */
private static int columnIndexSizeInKB_;
- /* Size of touch key cache */
- private static int touchKeyCacheSize_ = 1024;
/* Number of hours to keep a memtable in memory */
private static int memtableLifetime_ = 6;
/* Size of the memtable in memory before it is dumped */
@@ -214,12 +212,6 @@
if (port != null)
thriftPort_ = Integer.parseInt(port);
-
- /* Touch Key Cache Size */
- String touchKeyCacheSize = xmlUtils.getNodeValue("/Storage/TouchKeyCacheSize");
- if ( touchKeyCacheSize != null )
- touchKeyCacheSize_ = Integer.parseInt(touchKeyCacheSize);
-
/* Number of days to keep the memtable around w/o flushing */
String lifetime = xmlUtils.getNodeValue("/Storage/MemtableLifetimeInDays");
if ( lifetime != null )
@@ -575,11 +567,6 @@
return applicationColumnFamilies_.contains(columnFamily);
}
- public static int getTouchKeyCacheSize()
- {
- return touchKeyCacheSize_;
- }
-
public static String getJobJarLocation()
{
return jobJarFileLocation_;
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Jun 8 19:37:57 2009
@@ -259,34 +259,6 @@
}
}
- void touch(String key, boolean fData) throws IOException
- {
- /* Scan the SSTables on disk first */
- lock_.readLock().lock();
- try
- {
- List<String> files = new ArrayList<String>(ssTables_);
- for (String file : files)
- {
- /*
- * Get the BloomFilter associated with this file. Check if the key
- * is present in the BloomFilter. If not continue to the next file.
- */
- boolean bVal = SSTable.isKeyInFile(key, file);
- if (!bVal)
- {
- continue;
- }
- SSTable ssTable = new SSTable(file, StorageService.getPartitioner());
- ssTable.touch(key, fData);
- }
- }
- finally
- {
- lock_.readLock().unlock();
- }
- }
-
/*
* This method forces a compaction of the SSTables on disk. We wait
* for the process to complete by waiting on a future pointer.
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Mon Jun 8 19:37:57 2009
@@ -496,27 +496,6 @@
}
}
-
- /*
- * This method is used to ensure that all keys
- * prior to the specified key, as dtermined by
- * the SSTable index bucket it falls in, are in
- * buffer cache.
- */
- public void touch(String key, boolean fData) throws IOException
- {
- Set<String> columnFamilies = tableMetadata_.getColumnFamilies();
- for ( String columnFamily : columnFamilies )
- {
- if ( DatabaseDescriptor.isApplicationColumnFamily(columnFamily) )
- {
- ColumnFamilyStore cfStore = columnFamilyStores_.get( columnFamily );
- if ( cfStore != null )
- cfStore.touch(key, fData);
- }
- }
- }
-
/*
* Clear the existing snapshots in the system
*/
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IFileReader.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IFileReader.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IFileReader.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IFileReader.java Mon Jun 8 19:37:57 2009
@@ -54,16 +54,6 @@
public long readLong() throws IOException;
/**
- * This functions is used to help out subsequent reads
- * on the specified key. It reads the keys prior to this
- * one on disk so that the buffer cache is hot.
- *
- * @param key key for which we are performing the touch.
- * @param fData true implies we fetch the data into buffer cache.
- */
- public long touch(String key , boolean fData) throws IOException;
-
- /**
* This method helps is retrieving the offset of the specified
* key in the file using the block index.
*
@@ -72,15 +62,6 @@
public long getPositionFromBlockIndex(String key) throws IOException;
/**
- * This method returns the position of the specified key and the
- * size of its data segment from the block index.
- *
- * @param key key whose block metadata we are interested in.
- * @return an instance of the block metadata for this key.
- */
- public SSTable.BlockMetadata getBlockMetadata(String key) throws IOException;
-
- /**
* This method dumps the next key/value into the DataOuputStream
* passed in.
*
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SSTable.java Mon Jun 8 19:37:57 2009
@@ -20,29 +20,17 @@
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Hashtable;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
+import java.util.*;
-import org.apache.log4j.Logger;
-
-import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.RowMutation;
-import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.dht.IPartitioner;
+import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.BasicUtilities;
import org.apache.cassandra.utils.BloomFilter;
import org.apache.cassandra.utils.FileUtils;
import org.apache.cassandra.utils.LogUtil;
import org.apache.cassandra.io.SequenceFile.ColumnGroupReader;
+import org.apache.log4j.Logger;
/**
* This class is built on top of the SequenceFile. It stores
@@ -101,8 +89,6 @@
* If not we can avoid scanning it.
*/
private static Map<String, BloomFilter> bfs_ = new Hashtable<String, BloomFilter>();
- /* Maintains a touched set of keys */
- private static LinkedHashMap<String, Long> touchCache_ = new TouchedKeyCache(DatabaseDescriptor.getTouchKeyCacheSize());
/**
* This class holds the position of a key in a block
@@ -522,52 +508,6 @@
return getFile(dataFile_);
}
- /*
- * Seeks to the specified key on disk.
- */
- public void touch(final String clientKey, boolean fData) throws IOException
- {
- if (touchCache_.containsKey(dataFile_ + ":" + clientKey))
- {
- return;
- }
-
- IFileReader dataReader = SequenceFile.reader(dataFile_);
- try
- {
- /* Morph the key */
- String decoratedKey = partitioner_.decorateKey(clientKey);
- Coordinate fileCoordinate = getCoordinates(decoratedKey, dataReader, partitioner_);
- /* Get offset of key from block Index */
- dataReader.seek(fileCoordinate.end_);
- BlockMetadata blockMetadata = dataReader.getBlockMetadata(decoratedKey);
- if (blockMetadata.position_ != -1L)
- {
- touchCache_.put(dataFile_ + ":" + clientKey, blockMetadata.position_);
- }
-
- if (fData)
- {
- /* Read the data associated with this key and pull it into the Buffer Cache */
- if (blockMetadata.position_ != -1L)
- {
- dataReader.seek(blockMetadata.position_);
- DataOutputBuffer bufOut = new DataOutputBuffer();
- dataReader.next(bufOut);
- bufOut.reset();
- logger_.debug("Finished the touch of the key to pull it into buffer cache.");
- }
- }
- }
- finally
- {
- if (dataReader != null)
- {
- dataReader.close();
- }
- }
- }
-
private long beforeAppend(String decoratedKey) throws IOException
{
if (decoratedKey == null)
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SequenceFile.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SequenceFile.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SequenceFile.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/SequenceFile.java Mon Jun 8 19:37:57 2009
@@ -741,103 +741,6 @@
}
/**
- * Return the block index metadata for a given key.
- */
- public SSTable.BlockMetadata getBlockMetadata(String key) throws IOException
- {
- SSTable.BlockMetadata blockMetadata = SSTable.BlockMetadata.NULL;
- /* read the block key. */
- String blockIndexKey = file_.readUTF();
- if (!blockIndexKey.equals(SSTable.blockIndexKey_))
- throw new IOException("Unexpected position to be reading the block index from.");
- /* read the size of the block index */
- int size = file_.readInt();
-
- /* Read the entire block index. */
- byte[] bytes = new byte[size];
- file_.readFully(bytes);
-
- DataInputBuffer bufIn = new DataInputBuffer();
- bufIn.reset(bytes, bytes.length);
-
- /* Number of keys in the block. */
- int keys = bufIn.readInt();
- for (int i = 0; i < keys; ++i)
- {
- if (bufIn.readUTF().equals(key))
- {
- long position = bufIn.readLong();
- long dataSize = bufIn.readLong();
- blockMetadata = new SSTable.BlockMetadata(position, dataSize);
- break;
- }
- else
- {
- /*
- * This is not the key we are looking for. So read its position
- * and the size of the data associated with it. This was strored
- * as the BlockMetadata.
- */
- bufIn.readLong();
- bufIn.readLong();
- }
- }
-
- return blockMetadata;
- }
-
- /**
- * This function seeks to the position where the key data is present in the file
- * in order to get the buffer cache populated with the key-data. This is done as
- * a hint before the user actually queries the data.
- *
- * @param key the key whose data is being touched
- * @param fData
- */
- public long touch(String key, boolean fData) throws IOException
- {
- long bytesRead = -1L;
- if (isEOF())
- return bytesRead;
-
- long startPosition = file_.getFilePointer();
- String keyInDisk = file_.readUTF();
- if (keyInDisk != null)
- {
- /*
- * If key on disk is greater than requested key
- * we can bail out since we exploit the property
- * of the SSTable format.
- */
- if (keyInDisk.compareTo(key) > 0)
- return bytesRead;
-
- /*
- * If we found the key then we populate the buffer that
- * is passed in. If not then we skip over this key and
- * position ourselves to read the next one.
- */
- int dataSize = file_.readInt();
- if (keyInDisk.equals(key))
- {
- /* return 0L to signal the key has been touched. */
- bytesRead = 0L;
- return bytesRead;
- }
- else
- {
- /* skip over data portion */
- file_.seek(dataSize + file_.getFilePointer());
- }
-
- long endPosition = file_.getFilePointer();
- bytesRead = endPosition - startPosition;
- }
-
- return bytesRead;
- }
-
- /**
* This method seek the disk head to the block index, finds
* the offset of the key within the block and seeks to that
* offset.
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/net/TcpConnection.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/net/TcpConnection.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/net/TcpConnection.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/net/TcpConnection.java Mon Jun 8 19:37:57 2009
@@ -19,31 +19,25 @@
package org.apache.cassandra.net;
import java.io.*;
-import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.util.*;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.net.io.FastSerializer;
import org.apache.cassandra.net.io.ISerializer;
import org.apache.cassandra.net.io.ProtocolState;
import org.apache.cassandra.net.io.StartState;
import org.apache.cassandra.net.io.TcpReader;
-import org.apache.cassandra.net.io.TcpReader.TcpReaderState;
import org.apache.cassandra.utils.LogUtil;
import org.apache.log4j.Logger;
-import org.apache.cassandra.net.io.*;
-import org.apache.cassandra.net.sink.*;
/**
* Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com )
@@ -60,7 +54,7 @@
private boolean isIncoming_ = false;
private TcpReader tcpReader_;
private ReadWorkItem readWork_ = new ReadWorkItem();
- private List<ByteBuffer> pendingWrites_ = new Vector<ByteBuffer>();
+ private Queue<ByteBuffer> pendingWrites_ = new ConcurrentLinkedQueue<ByteBuffer>();
private EndPoint localEp_;
private EndPoint remoteEp_;
boolean inUse_ = false;
@@ -195,7 +189,7 @@
}
}
- public void stream(File file, long startPosition, long endPosition) throws IOException
+ public void stream(File file, long startPosition, long endPosition) throws IOException, InterruptedException
{
if ( !bStream_ )
throw new IllegalStateException("Cannot stream since we are not set up to stream data.");
@@ -222,7 +216,7 @@
{
if ( retry == 3 )
throw new IOException("Unable to connect to " + remoteEp_ + " after " + retry + " attempts.");
- waitToContinueStreaming(waitTime, TimeUnit.SECONDS);
+ condition_.await(waitTime, TimeUnit.SECONDS);
++retry;
}
@@ -232,7 +226,12 @@
{
ByteBuffer buffer = MessagingService.constructStreamHeader(false, true);
socketChannel_.write(buffer);
- handleIncompleteWrite(buffer);
+ if (buffer.remaining() > 0)
+ {
+ pendingWrites_.add(buffer);
+ key_.interestOps(key_.interestOps() | SelectionKey.OP_WRITE);
+ condition_.await();
+ }
}
/* returns the number of bytes transferred from file to the socket */
@@ -247,7 +246,7 @@
if ( bytesTransferred < limit && bytesWritten != total )
{
key_.interestOps(key_.interestOps() | SelectionKey.OP_WRITE);
- waitToContinueStreaming();
+ condition_.await();
}
}
}
@@ -256,41 +255,7 @@
lock_.unlock();
}
}
-
- private void handleIncompleteWrite(ByteBuffer buffer)
- {
- if (buffer.remaining() > 0)
- {
- pendingWrites_.add(buffer);
- key_.interestOps(key_.interestOps() | SelectionKey.OP_WRITE);
- waitToContinueStreaming();
- }
- }
-
- private void waitToContinueStreaming()
- {
- try
- {
- condition_.await();
- }
- catch ( InterruptedException ex )
- {
- logger_.warn( LogUtil.throwableToString(ex) );
- }
- }
-
- private void waitToContinueStreaming(long waitTime, TimeUnit tu)
- {
- try
- {
- condition_.await(waitTime, tu);
- }
- catch ( InterruptedException ex )
- {
- logger_.warn( LogUtil.throwableToString(ex) );
- }
- }
-
+
private void resumeStreaming()
{
/* if not in streaming mode do nothing */
@@ -397,14 +362,13 @@
}
else
{
- logger_.warn("Closing connection because socket channel could not finishConnect.");;
+ logger_.error("Closing connection because socket channel could not finishConnect.");;
errorClose();
}
}
catch(IOException e)
{
- logger_.warn("Encountered IOException on connection: " + socketChannel_);
- logger_.warn( LogUtil.throwableToString(e) );
+ logger_.error("Encountered IOException on connection: " + socketChannel_, e);
errorClose();
}
}
@@ -425,30 +389,30 @@
void doPendingWrites()
{
- try
- {
- while(!pendingWrites_.isEmpty())
- {
- ByteBuffer buffer = pendingWrites_.get(0);
- socketChannel_.write(buffer);
- if (buffer.remaining() > 0)
- {
- break;
- }
- pendingWrites_.remove(0);
- }
-
- }
- catch(IOException ex)
+ synchronized(this)
{
- logger_.warn(LogUtil.throwableToString(ex));
- // This is to fix the wierd Linux bug with NIO.
- errorClose();
- }
- finally
- {
- synchronized(this)
+ try
+ {
+ while(!pendingWrites_.isEmpty())
+ {
+ ByteBuffer buffer = pendingWrites_.peek();
+ socketChannel_.write(buffer);
+ if (buffer.remaining() > 0)
+ {
+ break;
+ }
+ pendingWrites_.remove();
+ }
+
+ }
+ catch(IOException ex)
{
+ logger_.error(LogUtil.throwableToString(ex));
+ // This is to fix the wierd Linux bug with NIO.
+ errorClose();
+ }
+ finally
+ {
if (!pendingWrites_.isEmpty())
{
key_.interestOps(key_.interestOps() | SelectionKey.OP_WRITE);
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=782740&r1=782739&r2=782740&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 Jun 8 19:37:57 2009
@@ -529,18 +529,6 @@
return StorageProxy.getKeyRange(new RangeCommand(tablename, columnFamilies, startWith, stopAt, maxResults));
}
- /*
- * This method is used to ensure that all keys
- * prior to the specified key, as dtermined by
- * the SSTable index bucket it falls in, are in
- * buffer cache.
- */
- public void touch (String key, boolean fData)
- {
- logger.debug("touch");
- StorageProxy.touchProtocol(DatabaseDescriptor.getTables().get(0), key, fData, StorageService.ConsistencyLevel.WEAK);
- }
-
public List<column_t> get_slice_by_name_range(String tablename, String key, String columnParent, String start, String end, int count)
throws InvalidRequestException, NotFoundException, TException
{
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Mon Jun 8 19:37:57 2009
@@ -283,83 +283,6 @@
return response.row();
}
- static void touch_local(String tablename, String key, boolean fData ) throws IOException
- {
- Table table = Table.open( tablename );
- table.touch(key, fData);
- }
-
- static void weakTouchProtocol(String tablename, String key, boolean fData) throws IOException
- {
- EndPoint endPoint = null;
- try
- {
- endPoint = StorageService.instance().findSuitableEndPoint(key);
- }
- catch( Throwable ex)
- {
- ex.printStackTrace();
- }
- if(endPoint != null)
- {
- if(endPoint.equals(StorageService.getLocalStorageEndPoint()))
- {
- touch_local(tablename, key, fData);
- return;
- }
- TouchMessage touchMessage = null;
- touchMessage = new TouchMessage(tablename, key, fData);
- Message message = TouchMessage.makeTouchMessage(touchMessage);
- MessagingService.getMessagingInstance().sendOneWay(message, endPoint);
- }
- }
-
- static void strongTouchProtocol(String tablename, String key, boolean fData) throws IOException
- {
- Map<EndPoint, EndPoint> endpointMap = StorageService.instance().getNStorageEndPointMap(key);
- Set<EndPoint> endpoints = endpointMap.keySet();
- TouchMessage touchMessage = null;
- touchMessage = new TouchMessage(tablename, key, fData);
- Message message = TouchMessage.makeTouchMessage(touchMessage);
- for(EndPoint endpoint : endpoints)
- {
- MessagingService.getMessagingInstance().sendOneWay(message, endpoint);
- }
- }
-
- /*
- * Only touch data on the most suitable end point.
- */
- public static void touchProtocol(String tablename, String key, boolean fData, StorageService.ConsistencyLevel consistencyLevel)
- {
- long startTime = System.currentTimeMillis();
- try
- {
- switch ( consistencyLevel )
- {
- case WEAK:
- weakTouchProtocol(tablename, key, fData);
- break;
-
- case STRONG:
- strongTouchProtocol(tablename, key, fData);
- break;
-
- default:
- weakTouchProtocol(tablename, key, fData);
- break;
- }
- }
- catch (IOException ex)
- {
- throw new RuntimeException("error touching key " + key, ex);
- }
- finally
- {
- readStats.add(System.currentTimeMillis() - startTime);
- }
- }
-
/**
* Performs the actual reading of a row out of the StorageService, fetching
* a specific set of column names from a given column family.
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=782740&r1=782739&r2=782740&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Mon Jun 8 19:37:57 2009
@@ -21,16 +21,7 @@
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Timer;
+import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
@@ -40,65 +31,21 @@
import javax.management.MBeanServer;
import javax.management.ObjectName;
-import org.apache.log4j.Logger;
-
import org.apache.cassandra.analytics.AnalyticsContext;
-import org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor;
-import org.apache.cassandra.concurrent.MultiThreadedStage;
-import org.apache.cassandra.concurrent.SingleThreadedStage;
-import org.apache.cassandra.concurrent.StageManager;
-import org.apache.cassandra.concurrent.ThreadFactoryImpl;
+import org.apache.cassandra.concurrent.*;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.BinaryVerbHandler;
-import org.apache.cassandra.db.CalloutDeployVerbHandler;
-import org.apache.cassandra.db.DBManager;
-import org.apache.cassandra.db.DataFileVerbHandler;
-import org.apache.cassandra.db.HintedHandOffManager;
-import org.apache.cassandra.db.LoadVerbHandler;
-import org.apache.cassandra.db.Memtable;
-import org.apache.cassandra.db.ReadRepairVerbHandler;
-import org.apache.cassandra.db.ReadVerbHandler;
-import org.apache.cassandra.db.Row;
-import org.apache.cassandra.db.RowMutationVerbHandler;
-import org.apache.cassandra.db.SystemTable;
-import org.apache.cassandra.db.Table;
-import org.apache.cassandra.db.TouchVerbHandler;
-import org.apache.cassandra.db.ReadCommand;
-import org.apache.cassandra.dht.BootStrapper;
-import org.apache.cassandra.dht.BootstrapInitiateMessage;
-import org.apache.cassandra.dht.BootstrapMetadataVerbHandler;
-import org.apache.cassandra.dht.IPartitioner;
-import org.apache.cassandra.dht.Range;
-import org.apache.cassandra.dht.Token;
-import org.apache.cassandra.gms.IEndPointStateChangeSubscriber;
-import org.apache.cassandra.gms.Gossiper;
-import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndPointState;
-import org.apache.cassandra.gms.FailureDetector;
-import org.apache.cassandra.net.EndPoint;
-import org.apache.cassandra.net.IVerbHandler;
-import org.apache.cassandra.net.Message;
-import org.apache.cassandra.net.MessagingService;
-import org.apache.cassandra.net.SelectorManager;
+import org.apache.cassandra.db.*;
+import org.apache.cassandra.dht.*;
+import org.apache.cassandra.gms.*;
+import org.apache.cassandra.locator.*;
+import org.apache.cassandra.net.*;
import org.apache.cassandra.net.http.HttpConnection;
import org.apache.cassandra.net.io.StreamContextManager;
-import org.apache.cassandra.locator.IEndPointSnitch;
-import org.apache.cassandra.locator.TokenMetadata;
-import org.apache.cassandra.locator.IReplicaPlacementStrategy;
-import org.apache.cassandra.locator.EndPointSnitch;
-import org.apache.cassandra.locator.RackUnawareStrategy;
-import org.apache.cassandra.locator.RackAwareStrategy;
-import org.apache.cassandra.utils.LogUtil;
-import org.apache.cassandra.utils.FileUtils;
import org.apache.cassandra.tools.MembershipCleanerVerbHandler;
-
-import org.apache.zookeeper.CreateMode;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooDefs.Ids;
+import org.apache.cassandra.utils.FileUtils;
+import org.apache.cassandra.utils.LogUtil;
+import org.apache.log4j.Logger;
import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.data.Stat;
/*
* This abstraction contains the token/identifier of this node
@@ -134,7 +81,6 @@
public final static String mbrshipCleanerVerbHandler_ = "MBRSHIP-CLEANER-VERB-HANDLER";
public final static String bsMetadataVerbHandler_ = "BS-METADATA-VERB-HANDLER";
public final static String calloutDeployVerbHandler_ = "CALLOUT-DEPLOY-VERB-HANDLER";
- public final static String touchVerbHandler_ = "TOUCH-VERB-HANDLER";
public static String rangeVerbHandler_ = "RANGE-VERB-HANDLER";
public static enum ConsistencyLevel
@@ -284,7 +230,6 @@
MessagingService.getMessagingInstance().registerVerbHandlers(StorageService.mbrshipCleanerVerbHandler_, new MembershipCleanerVerbHandler() );
MessagingService.getMessagingInstance().registerVerbHandlers(StorageService.bsMetadataVerbHandler_, new BootstrapMetadataVerbHandler() );
MessagingService.getMessagingInstance().registerVerbHandlers(StorageService.calloutDeployVerbHandler_, new CalloutDeployVerbHandler() );
- MessagingService.getMessagingInstance().registerVerbHandlers(StorageService.touchVerbHandler_, new TouchVerbHandler());
MessagingService.getMessagingInstance().registerVerbHandlers(StorageService.rangeVerbHandler_, new RangeVerbHandler());
/* register the stage for the mutations */
Propchange: incubator/cassandra/trunk/test/unit/org/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 8 19:37:57 2009
@@ -1,2 +1,2 @@
-/incubator/cassandra/branches/cassandra-0.3/test/unit/org:774578-782116
+/incubator/cassandra/branches/cassandra-0.3/test/unit/org:774578-782737
/incubator/cassandra/trunk/test/unit/org:749219-768583