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 2010/10/13 17:43:25 UTC
svn commit: r1022147 [1/3] - in /cassandra/trunk: ./
src/java/org/apache/cassandra/avro/ src/java/org/apache/cassandra/config/
src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/db/clock/
src/java/org/apache/cassandra/db/filter/ src/java/o...
Author: jbellis
Date: Wed Oct 13 15:43:18 2010
New Revision: 1022147
URL: http://svn.apache.org/viewvc?rev=1022147&view=rev
Log:
removed IClock & related classes from internals.
patch by Sylvain Lebresne; reviewed by jbellis for CASSANDRA-1502
Removed:
cassandra/trunk/src/java/org/apache/cassandra/db/ClockType.java
cassandra/trunk/src/java/org/apache/cassandra/db/IClock.java
cassandra/trunk/src/java/org/apache/cassandra/db/TimestampClock.java
cassandra/trunk/src/java/org/apache/cassandra/db/clock/AbstractReconciler.java
cassandra/trunk/src/java/org/apache/cassandra/db/clock/TimestampReconciler.java
cassandra/trunk/test/unit/org/apache/cassandra/db/clock/TimestampReconcilerTest.java
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
cassandra/trunk/src/java/org/apache/cassandra/db/Column.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnSerializer.java
cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java
cassandra/trunk/src/java/org/apache/cassandra/db/DeletedColumn.java
cassandra/trunk/src/java/org/apache/cassandra/db/ExpiringColumn.java
cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
cassandra/trunk/src/java/org/apache/cassandra/db/IColumn.java
cassandra/trunk/src/java/org/apache/cassandra/db/IColumnContainer.java
cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java
cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableExport.java
cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java
cassandra/trunk/test/long/org/apache/cassandra/db/LongCompactionSpeedTest.java
cassandra/trunk/test/unit/org/apache/cassandra/Util.java
cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/ColumnFamilyTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/CompactionsTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/OneCompactionTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/ReadMessageTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManager2Test.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManager3Test.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTruncateTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush1Test.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnFamilyWithFlush2Test.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveColumnTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSubColumnTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RemoveSuperColumnTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RowIterationTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/RowTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/SuperColumnTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableUtils.java
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableWriterTest.java
cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java
cassandra/trunk/test/unit/org/apache/cassandra/service/ReadResponseResolverTest.java
cassandra/trunk/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
cassandra/trunk/test/unit/org/apache/cassandra/tools/SSTableExportTest.java
cassandra/trunk/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Wed Oct 13 15:43:18 2010
@@ -30,6 +30,7 @@ dev
* avoid blocking for dead nodes during removetoken (CASSANDRA-1605)
* remove ConsistencyLevel.ZERO (CASSANDRA-1607)
* expose in-progress compaction type in jmx (CASSANDRA-1586)
+ * removed IClock & related classes from internals (CASSANDRA-1502)
0.7-beta2
Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java Wed Oct 13 15:43:18 2010
@@ -29,11 +29,9 @@ import java.util.Set;
import org.apache.avro.util.Utf8;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamily;
-import org.apache.cassandra.db.IClock;
import org.apache.cassandra.db.IColumn;
import org.apache.cassandra.db.ColumnFamilyType;
import org.apache.cassandra.db.Table;
-import org.apache.cassandra.db.TimestampClock;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.dht.IPartitioner;
Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Wed Oct 13 15:43:18 2010
@@ -60,8 +60,6 @@ import org.apache.cassandra.config.Confi
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.clock.AbstractReconciler;
-import org.apache.cassandra.db.clock.TimestampReconciler;
import org.apache.cassandra.db.filter.QueryPath;
import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.db.migration.AddColumnFamily;
@@ -223,7 +221,7 @@ public class CassandraServer implements
if (column.isMarkedForDelete())
continue;
- Column avroColumn = newColumn(column.name(), column.value(), ((TimestampClock)column.clock()).timestamp());
+ Column avroColumn = newColumn(column.name(), column.value(), column.timestamp());
avroColumns.add(avroColumn);
}
@@ -238,7 +236,7 @@ public class CassandraServer implements
if (column.isMarkedForDelete())
continue;
- Column avroColumn = newColumn(column.name(), column.value(), ((TimestampClock)column.clock()).timestamp());
+ Column avroColumn = newColumn(column.name(), column.value(), column.timestamp());
if (column instanceof ExpiringColumn)
avroColumn.ttl = ((ExpiringColumn)column).getTimeToLive();
@@ -407,7 +405,7 @@ public class CassandraServer implements
parent.super_column == null ? null : parent.super_column.array(),
column.name.array()),
column.value.array(),
- unavronateClock(column.timestamp),
+ column.timestamp,
column.ttl == null ? 0 : column.ttl);
}
catch (MarshalException e)
@@ -430,7 +428,7 @@ public class CassandraServer implements
RowMutation rm = new RowMutation(state().getKeyspace(), key.array());
byte[] superName = columnPath.super_column == null ? null : columnPath.super_column.array();
- rm.delete(new QueryPath(columnPath.column_family.toString(), superName), unavronateClock(timestamp));
+ rm.delete(new QueryPath(columnPath.column_family.toString(), superName), timestamp);
doInsert(consistencyLevel, rm);
@@ -503,11 +501,6 @@ public class CassandraServer implements
return null;
}
- private static IClock unavronateClock(long timestamp)
- {
- return new org.apache.cassandra.db.TimestampClock(timestamp);
- }
-
// FIXME: This is copypasta from o.a.c.db.RowMutation, (RowMutation.getRowMutation uses Thrift types directly).
private static RowMutation getRowMutationFromMutations(String keyspace, byte[] key, Map<CharSequence, List<Mutation>> cfMap)
{
@@ -535,11 +528,11 @@ public class CassandraServer implements
if (cosc.column == null)
{
for (Column column : cosc.super_column.columns)
- rm.add(new QueryPath(cfName, cosc.super_column.name.array(), column.name.array()), column.value.array(), unavronateClock(column.timestamp));
+ rm.add(new QueryPath(cfName, cosc.super_column.name.array(), column.name.array()), column.value.array(), column.timestamp);
}
else
{
- rm.add(new QueryPath(cfName, null, cosc.column.name.array()), cosc.column.value.array(), unavronateClock(cosc.column.timestamp));
+ rm.add(new QueryPath(cfName, null, cosc.column.name.array()), cosc.column.value.array(), cosc.column.timestamp);
}
}
@@ -553,14 +546,14 @@ public class CassandraServer implements
for (ByteBuffer col : del.predicate.column_names)
{
if (del.super_column == null && DatabaseDescriptor.getColumnFamilyType(rm.getTable(), cfName) == ColumnFamilyType.Super)
- rm.delete(new QueryPath(cfName, col.array()), unavronateClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, col.array()), del.timestamp);
else
- rm.delete(new QueryPath(cfName, superName, col.array()), unavronateClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, superName, col.array()), del.timestamp);
}
}
else
{
- rm.delete(new QueryPath(cfName, superName), unavronateClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, superName), del.timestamp);
}
}
@@ -842,10 +835,8 @@ public class CassandraServer implements
return new CFMetaData(cf_def.keyspace.toString(),
cf_def.name.toString(),
ColumnFamilyType.create(cfType),
- ClockType.Timestamp,
DatabaseDescriptor.getComparator(compare),
subCompare.length() == 0 ? null : DatabaseDescriptor.getComparator(subCompare),
- TimestampReconciler.instance,
cf_def.comment == null ? "" : cf_def.comment.toString(),
cf_def.row_cache_size == null ? CFMetaData.DEFAULT_ROW_CACHE_SIZE : cf_def.row_cache_size,
cf_def.preload_row_cache == null ? CFMetaData.DEFAULT_PRELOAD_ROW_CACHE : cf_def.preload_row_cache,
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Wed Oct 13 15:43:18 2010
@@ -30,8 +30,6 @@ import org.apache.commons.lang.builder.H
import org.apache.avro.util.Utf8;
import org.apache.cassandra.avro.ColumnDef;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.clock.AbstractReconciler;
-import org.apache.cassandra.db.clock.TimestampReconciler;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.TimeUUIDType;
@@ -71,10 +69,8 @@ public final class CFMetaData
return new CFMetaData(Table.SYSTEM_TABLE,
cfName,
subComparator == null ? ColumnFamilyType.Standard : ColumnFamilyType.Super,
- ClockType.Timestamp,
comparator,
subComparator,
- TimestampReconciler.instance,
comment,
0,
false,
@@ -117,10 +113,8 @@ public final class CFMetaData
public final String tableName; // name of table which has this column family
public final String cfName; // name of the column family
public final ColumnFamilyType cfType; // type: super, standard, etc.
- public final ClockType clockType; // clock type: timestamp, etc.
public final AbstractType comparator; // name sorted, time stamp sorted etc.
public final AbstractType subcolumnComparator; // like comparator, for supercolumns
- public final AbstractReconciler reconciler; // determine correct column from conflicting versions
public final String comment; // for humans only
public final double rowCacheSize; // default 0
@@ -140,10 +134,8 @@ public final class CFMetaData
private CFMetaData(String tableName,
String cfName,
ColumnFamilyType cfType,
- ClockType clockType,
AbstractType comparator,
AbstractType subcolumnComparator,
- AbstractReconciler reconciler,
String comment,
double rowCacheSize,
boolean preloadRowCache,
@@ -163,12 +155,10 @@ public final class CFMetaData
this.tableName = tableName;
this.cfName = cfName;
this.cfType = cfType;
- this.clockType = clockType;
this.comparator = comparator;
// the default subcolumncomparator is null per thrift spec, but only should be null if cfType == Standard. If
// cfType == Super, subcolumnComparator should default to BytesType if not set.
this.subcolumnComparator = subcolumnComparator == null && cfType == ColumnFamilyType.Super ? BytesType.instance : subcolumnComparator;
- this.reconciler = reconciler;
this.comment = comment == null ? "" : comment;
this.rowCacheSize = rowCacheSize;
this.preloadRowCache = preloadRowCache;
@@ -199,10 +189,8 @@ public final class CFMetaData
public CFMetaData(String tableName,
String cfName,
ColumnFamilyType cfType,
- ClockType clockType,
AbstractType comparator,
AbstractType subcolumnComparator,
- AbstractReconciler reconciler,
String comment,
double rowCacheSize,
boolean preloadRowCache,
@@ -218,10 +206,8 @@ public final class CFMetaData
this(tableName,
cfName,
cfType,
- clockType,
comparator,
subcolumnComparator,
- reconciler,
comment,
rowCacheSize,
preloadRowCache,
@@ -242,10 +228,8 @@ public final class CFMetaData
return new CFMetaData(table,
parentCf + "." + (info.index_name == null ? FBUtilities.bytesToHex(info.name) : info.index_name),
ColumnFamilyType.Standard,
- ClockType.Timestamp,
columnComparator,
null,
- TimestampReconciler.instance,
"",
0,
false,
@@ -264,10 +248,8 @@ public final class CFMetaData
return new CFMetaData(cfm.tableName,
newName,
cfm.cfType,
- cfm.clockType,
cfm.comparator,
cfm.subcolumnComparator,
- cfm.reconciler,
cfm.comment,
cfm.rowCacheSize,
cfm.preloadRowCache,
@@ -289,10 +271,8 @@ public final class CFMetaData
return new CFMetaData(tableName,
cfm.cfName,
cfm.cfType,
- cfm.clockType,
cfm.comparator,
cfm.subcolumnComparator,
- cfm.reconciler,
cfm.comment,
cfm.rowCacheSize,
cfm.preloadRowCache,
@@ -320,7 +300,6 @@ public final class CFMetaData
{
return tableName + "." + cfName + "\n"
+ "Column Family Type: " + cfType + "\n"
- + "Column Family Clock Type: " + clockType + "\n"
+ "Columns Sorted By: " + comparator + "\n";
}
@@ -384,10 +363,8 @@ public final class CFMetaData
return new CFMetaData(cf.keyspace.toString(),
cf.name.toString(),
ColumnFamilyType.create(cf.column_type.toString()),
- ClockType.Timestamp,
comparator,
subcolumnComparator,
- TimestampReconciler.instance,
cf.comment.toString(),
cf.row_cache_size,
cf.preload_row_cache,
@@ -419,10 +396,8 @@ public final class CFMetaData
.append(tableName, rhs.tableName)
.append(cfName, rhs.cfName)
.append(cfType, rhs.cfType)
- .append(clockType, rhs.clockType)
.append(comparator, rhs.comparator)
.append(subcolumnComparator, rhs.subcolumnComparator)
- .append(reconciler, rhs.reconciler)
.append(comment, rhs.comment)
.append(rowCacheSize, rhs.rowCacheSize)
.append(keyCacheSize, rhs.keyCacheSize)
@@ -443,10 +418,8 @@ public final class CFMetaData
.append(tableName)
.append(cfName)
.append(cfType)
- .append(clockType)
.append(comparator)
.append(subcolumnComparator)
- .append(reconciler)
.append(comment)
.append(rowCacheSize)
.append(keyCacheSize)
@@ -503,10 +476,8 @@ public final class CFMetaData
return new CFMetaData(tableName,
cfName,
cfType,
- clockType,
comparator,
subcolumnComparator,
- reconciler,
cf_def.comment == null ? "" : cf_def.comment.toString(),
cf_def.row_cache_size,
cf_def.preload_row_cache,
@@ -564,10 +535,8 @@ public final class CFMetaData
return new CFMetaData(tableName,
cfName,
cfType,
- clockType,
comparator,
subcolumnComparator,
- reconciler,
cf_def.comment,
cf_def.row_cache_size,
cf_def.preload_row_cache,
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Wed Oct 13 15:43:18 2010
@@ -34,12 +34,9 @@ import org.apache.cassandra.auth.AllowAl
import org.apache.cassandra.auth.IAuthenticator;
import org.apache.cassandra.auth.IAuthority;
import org.apache.cassandra.config.Config.RequestSchedulerId;
-import org.apache.cassandra.db.ClockType;
import org.apache.cassandra.db.ColumnFamilyType;
import org.apache.cassandra.db.DefsTable;
import org.apache.cassandra.db.Table;
-import org.apache.cassandra.db.clock.AbstractReconciler;
-import org.apache.cassandra.db.clock.TimestampReconciler;
import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.migration.Migration;
@@ -590,10 +587,8 @@ public class DatabaseDescriptor
cfDefs[j++] = new CFMetaData(keyspace.name,
cf.name,
cfType,
- ClockType.Timestamp,
comparator,
subcolumnComparator,
- TimestampReconciler.instance,
cf.comment,
cf.rows_cached,
cf.preload_row_cache,
@@ -648,30 +643,6 @@ public class DatabaseDescriptor
return FBUtilities.getComparator(compareWith);
}
- public static AbstractReconciler getReconciler(String reconcileWith) throws ConfigurationException
- {
- if (reconcileWith == null || reconcileWith.length() == 0)
- {
- return null;
- }
-
- String className = reconcileWith.indexOf('.') >= 0 ? reconcileWith : TimestampReconciler.class.getPackage().getName() + '.' + reconcileWith;
- Class<? extends AbstractReconciler> reconcilerClass = FBUtilities.<AbstractReconciler>classForName(className, "reconciler");
- try
- {
- Field field = reconcilerClass.getDeclaredField("instance");
- return (AbstractReconciler) field.get(null);
- }
- catch (NoSuchFieldException e)
- {
- throw new ConfigurationException("Invalid reconciler: must define a public static instance field.", e);
- }
- catch (IllegalAccessException e)
- {
- throw new ConfigurationException("Invalid reconciler: must define a public static instance field.", e);
- }
- }
-
/**
* Creates all storage-related directories.
* @throws IOException when a disk problem is encountered.
@@ -822,15 +793,6 @@ public class DatabaseDescriptor
return cfMetaData.cfType;
}
- public static ClockType getClockType(String tableName, String cfName)
- {
- assert tableName != null && cfName != null;
- CFMetaData cfMetaData = getCFMetaData(tableName, cfName);
-
- assert (cfMetaData != null);
- return cfMetaData.clockType;
- }
-
public static Set<String> getTables()
{
return tables.keySet();
@@ -990,15 +952,6 @@ public class DatabaseDescriptor
return getCFMetaData(tableName, cfName).subcolumnComparator;
}
- public static AbstractReconciler getReconciler(String tableName, String cfName)
- {
- assert tableName != null;
- CFMetaData cfmd = getCFMetaData(tableName, cfName);
- if (cfmd == null)
- throw new NullPointerException("Unknown ColumnFamily " + cfName + " in keyspace " + tableName);
- return cfmd.reconciler;
- }
-
/**
* @return The absolute number of keys that should be cached per table.
*/
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Column.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Column.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Column.java Wed Oct 13 15:43:18 2010
@@ -28,7 +28,6 @@ import org.slf4j.LoggerFactory;
import org.apache.commons.lang.ArrayUtils;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.IClock.ClockRelationship;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.utils.FBUtilities;
@@ -43,14 +42,14 @@ public class Column implements IColumn
{
private static Logger logger = LoggerFactory.getLogger(Column.class);
- public static ColumnSerializer serializer(ClockType clockType)
+ public static ColumnSerializer serializer()
{
- return new ColumnSerializer(clockType);
+ return new ColumnSerializer();
}
protected final byte[] name;
protected final byte[] value;
- protected final IClock clock;
+ protected final long timestamp;
Column(byte[] name)
{
@@ -59,18 +58,17 @@ public class Column implements IColumn
public Column(byte[] name, byte[] value)
{
- // safe to set to null, only used for filter comparisons
- this(name, value, null);
+ this(name, value, 0);
}
- public Column(byte[] name, byte[] value, IClock clock)
+ public Column(byte[] name, byte[] value, long timestamp)
{
assert name != null;
assert value != null;
assert name.length <= IColumn.MAX_NAME_LENGTH;
this.name = name;
this.value = value;
- this.clock = clock;
+ this.timestamp = timestamp;
}
public byte[] name()
@@ -93,9 +91,9 @@ public class Column implements IColumn
throw new UnsupportedOperationException("This operation is unsupported on simple columns.");
}
- public IClock clock()
+ public long timestamp()
{
- return clock;
+ return timestamp;
}
public boolean isMarkedForDelete()
@@ -103,14 +101,14 @@ public class Column implements IColumn
return false;
}
- public IClock getMarkedForDeleteAt()
+ public long getMarkedForDeleteAt()
{
throw new IllegalStateException("column is not marked for delete");
}
- public IClock mostRecentLiveChangeAt()
+ public long mostRecentLiveChangeAt()
{
- return clock;
+ return timestamp;
}
public int size()
@@ -119,11 +117,11 @@ public class Column implements IColumn
* Size of a column is =
* size of a name (short + length of the string)
* + 1 byte to indicate if the column has been deleted
- * + x bytes depending on IClock size
+ * + 8 bytes for timestamp
* + 4 bytes which basically indicates the size of the byte array
* + entire byte array.
*/
- return DBConstants.shortSize_ + name.length + DBConstants.boolSize_ + clock.size() + DBConstants.intSize_ + value.length;
+ return DBConstants.shortSize_ + name.length + DBConstants.boolSize_ + DBConstants.tsSize_ + DBConstants.intSize_ + value.length;
}
/*
@@ -142,7 +140,7 @@ public class Column implements IColumn
public IColumn diff(IColumn column)
{
- if (ClockRelationship.GREATER_THAN == column.clock().compare(clock))
+ if (timestamp() < column.timestamp())
{
return column;
}
@@ -156,7 +154,7 @@ public class Column implements IColumn
DataOutputBuffer buffer = new DataOutputBuffer();
try
{
- clock.serialize(buffer);
+ buffer.writeLong(timestamp);
buffer.writeByte((isMarkedForDelete()) ? ColumnSerializer.DELETION_MASK : 0);
}
catch (IOException e)
@@ -171,6 +169,20 @@ public class Column implements IColumn
throw new IllegalStateException("column is not marked for delete");
}
+ public IColumn reconcile(IColumn column)
+ {
+ // tombstones take precedence. (if both are tombstones, then it doesn't matter which one we use.)
+ if (isMarkedForDelete())
+ return timestamp() < column.timestamp() ? column : this;
+ if (column.isMarkedForDelete())
+ return timestamp() > column.timestamp() ? this : column;
+ // break ties by comparing values.
+ if (timestamp() == column.timestamp())
+ return FBUtilities.compareByteArrays(value(), column.value()) < 0 ? column : this;
+ // neither is tombstoned and timestamps are different
+ return timestamp() < column.timestamp() ? column : this;
+ }
+
@Override
public boolean equals(Object o)
{
@@ -181,7 +193,7 @@ public class Column implements IColumn
Column column = (Column)o;
- if (clock != null ? !clock.equals(column.clock) : column.clock != null)
+ if (timestamp != column.timestamp)
return false;
if (!Arrays.equals(name, column.name))
return false;
@@ -194,7 +206,7 @@ public class Column implements IColumn
{
int result = name != null ? Arrays.hashCode(name) : 0;
result = 31 * result + (value != null ? Arrays.hashCode(value) : 0);
- result = 31 * result + (clock != null ? clock.hashCode() : 0);
+ result = 31 * result + (int)(timestamp ^ (timestamp >>> 32));
return result;
}
@@ -207,7 +219,7 @@ public class Column implements IColumn
sb.append(":");
sb.append(value.length);
sb.append("@");
- sb.append(clock.toString());
+ sb.append(timestamp());
return sb.toString();
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Wed Oct 13 15:43:18 2010
@@ -23,12 +23,10 @@ import java.util.concurrent.ConcurrentSk
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.IClock.ClockRelationship;
-import org.apache.cassandra.db.clock.AbstractReconciler;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.dht.BytesToken;
import org.apache.cassandra.dht.LocalPartitioner;
@@ -65,33 +63,28 @@ public class ColumnFamily implements ICo
public static ColumnFamily create(CFMetaData cfm)
{
assert cfm != null;
- return new ColumnFamily(cfm.cfType, cfm.clockType, cfm.comparator, cfm.subcolumnComparator, cfm.reconciler, cfm.cfId);
+ return new ColumnFamily(cfm.cfType, cfm.comparator, cfm.subcolumnComparator, cfm.cfId);
}
private final Integer cfid;
private final ColumnFamilyType type;
- private final ClockType clockType;
- private final AbstractReconciler reconciler;
private transient ICompactSerializer2<IColumn> columnSerializer;
- final AtomicReference<IClock> markedForDeleteAt;
+ final AtomicLong markedForDeleteAt = new AtomicLong(Long.MIN_VALUE);
final AtomicInteger localDeletionTime = new AtomicInteger(Integer.MIN_VALUE);
private ConcurrentSkipListMap<byte[], IColumn> columns;
- public ColumnFamily(ColumnFamilyType type, ClockType clockType, AbstractType comparator, AbstractType subcolumnComparator, AbstractReconciler reconciler, Integer cfid)
+ public ColumnFamily(ColumnFamilyType type, AbstractType comparator, AbstractType subcolumnComparator, Integer cfid)
{
this.type = type;
- this.clockType = clockType;
- this.reconciler = reconciler;
- this.markedForDeleteAt = new AtomicReference<IClock>(clockType.minClock());
- columnSerializer = type == ColumnFamilyType.Standard ? Column.serializer(clockType) : SuperColumn.serializer(subcolumnComparator, clockType, reconciler);
+ columnSerializer = type == ColumnFamilyType.Standard ? Column.serializer() : SuperColumn.serializer(subcolumnComparator);
columns = new ConcurrentSkipListMap<byte[], IColumn>(comparator);
this.cfid = cfid;
}
public ColumnFamily cloneMeShallow()
{
- ColumnFamily cf = new ColumnFamily(type, clockType, getComparator(), getSubComparator(), reconciler, cfid);
+ ColumnFamily cf = new ColumnFamily(type, getComparator(), getSubComparator(), cfid);
cf.markedForDeleteAt.set(markedForDeleteAt.get());
cf.localDeletionTime.set(localDeletionTime.get());
return cf;
@@ -107,16 +100,6 @@ public class ColumnFamily implements ICo
return type;
}
- public ClockType getClockType()
- {
- return clockType;
- }
-
- public AbstractReconciler getReconciler()
- {
- return reconciler;
- }
-
public ColumnFamily cloneMe()
{
ColumnFamily cf = cloneMeShallow();
@@ -168,37 +151,38 @@ public class ColumnFamily implements ICo
return type == ColumnFamilyType.Super;
}
- public void addColumn(QueryPath path, byte[] value, IClock clock)
+ public void addColumn(QueryPath path, byte[] value, long timestamp)
{
assert path.columnName != null : path;
- addColumn(path.superColumnName, new Column(path.columnName, value, clock));
+ addColumn(path.superColumnName, new Column(path.columnName, value, timestamp));
}
- public void addTombstone(QueryPath path, byte[] localDeletionTime, IClock clock)
- {
- addColumn(path.superColumnName, new DeletedColumn(path.columnName, localDeletionTime, clock));
- }
-
- public void addColumn(QueryPath path, byte[] value, IClock clock, int timeToLive)
+ public void addColumn(QueryPath path, byte[] value, long timestamp, int timeToLive)
{
assert path.columnName != null : path;
Column column;
if (timeToLive > 0)
- column = new ExpiringColumn(path.columnName, value, clock, timeToLive);
+ column = new ExpiringColumn(path.columnName, value, timestamp, timeToLive);
else
- column = new Column(path.columnName, value, clock);
+ column = new Column(path.columnName, value, timestamp);
addColumn(path.superColumnName, column);
}
- public void deleteColumn(byte[] column, int localDeletionTime, IClock clock)
+ public void addTombstone(QueryPath path, byte[] localDeletionTime, long timestamp)
{
- addColumn(null, new DeletedColumn(column, localDeletionTime, clock));
+ assert path.columnName != null : path;
+ addColumn(path.superColumnName, new DeletedColumn(path.columnName, localDeletionTime, timestamp));
}
- public void deleteColumn(QueryPath path, int localDeletionTime, IClock clock)
+ public void addTombstone(QueryPath path, int localDeletionTime, long timestamp)
{
assert path.columnName != null : path;
- addColumn(path.superColumnName, new DeletedColumn(path.columnName, localDeletionTime, clock));
+ addColumn(path.superColumnName, new DeletedColumn(path.columnName, localDeletionTime, timestamp));
+ }
+
+ public void addTombstone(byte[] name, int localDeletionTime, long timestamp)
+ {
+ addColumn(null, new DeletedColumn(name, localDeletionTime, timestamp));
}
public void addColumn(byte[] superColumnName, Column column)
@@ -211,7 +195,7 @@ public class ColumnFamily implements ICo
else
{
assert isSuper();
- c = new SuperColumn(superColumnName, getSubComparator(), clockType, reconciler);
+ c = new SuperColumn(superColumnName, getSubComparator());
c.addColumn(column); // checks subcolumn name
}
addColumn(c);
@@ -239,13 +223,13 @@ public class ColumnFamily implements ICo
else
{
// calculate reconciled col from old (existing) col and new col
- IColumn reconciledColumn = reconciler.reconcile((Column)column, (Column)oldColumn);
+ IColumn reconciledColumn = column.reconcile(oldColumn);
while (!columns.replace(name, oldColumn, reconciledColumn))
{
// if unable to replace, then get updated old (existing) col
oldColumn = columns.get(name);
// re-calculate reconciled col from updated old col and original new col
- reconciledColumn = reconciler.reconcile((Column)column, (Column)oldColumn);
+ reconciledColumn = column.reconcile(oldColumn);
// try to re-update value, again
}
}
@@ -283,10 +267,10 @@ public class ColumnFamily implements ICo
}
@Deprecated // TODO this is a hack to set initial value outside constructor
- public void delete(int localtime, IClock clock)
+ public void delete(int localtime, long timestamp)
{
localDeletionTime.set(localtime);
- markedForDeleteAt.set(clock);
+ markedForDeleteAt.set(timestamp);
}
public void delete(ColumnFamily cf2)
@@ -297,8 +281,7 @@ public class ColumnFamily implements ICo
public boolean isMarkedForDelete()
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- return _markedForDeleteAt.compare(clockType.minClock()) == ClockRelationship.GREATER_THAN;
+ return markedForDeleteAt.get() > Long.MIN_VALUE;
}
/*
@@ -307,9 +290,8 @@ public class ColumnFamily implements ICo
*/
public ColumnFamily diff(ColumnFamily cfComposite)
{
- ColumnFamily cfDiff = new ColumnFamily(cfComposite.type, cfComposite.clockType, getComparator(), getSubComparator(), cfComposite.reconciler, cfComposite.id());
- ClockRelationship rel = cfComposite.getMarkedForDeleteAt().compare(getMarkedForDeleteAt());
- if (ClockRelationship.GREATER_THAN == rel)
+ ColumnFamily cfDiff = new ColumnFamily(cfComposite.type, getComparator(), getSubComparator(), cfComposite.id());
+ if (cfComposite.getMarkedForDeleteAt() > getMarkedForDeleteAt())
{
cfDiff.delete(cfComposite.getLocalDeletionTime(), cfComposite.getMarkedForDeleteAt());
}
@@ -374,7 +356,7 @@ public class ColumnFamily implements ICo
sb.append(cfm == null ? "-deleted-" : cfm.cfName);
if (isMarkedForDelete())
- sb.append(" -deleted at " + getMarkedForDeleteAt().toString() + "-");
+ sb.append(" -deleted at " + getMarkedForDeleteAt() + "-");
sb.append(" [").append(getComparator().getColumnsString(getSortedColumns())).append("])");
return sb.toString();
@@ -403,7 +385,7 @@ public class ColumnFamily implements ICo
column.updateDigest(digest);
}
- public IClock getMarkedForDeleteAt()
+ public long getMarkedForDeleteAt()
{
return markedForDeleteAt.get();
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java Wed Oct 13 15:43:18 2010
@@ -92,8 +92,7 @@ public class ColumnFamilySerializer impl
public void serializeCFInfo(ColumnFamily columnFamily, DataOutput dos) throws IOException
{
dos.writeInt(columnFamily.localDeletionTime.get());
- IClock _markedForDeleteAt = columnFamily.markedForDeleteAt.get();
- columnFamily.getClockType().serializer().serialize(_markedForDeleteAt, dos);
+ dos.writeLong(columnFamily.markedForDeleteAt.get());
}
public int serializeWithIndexes(ColumnFamily columnFamily, DataOutput dos)
@@ -129,7 +128,7 @@ public class ColumnFamilySerializer impl
public ColumnFamily deserializeFromSSTableNoColumns(ColumnFamily cf, DataInput input) throws IOException
{
- cf.delete(input.readInt(), cf.getClockType().serializer().deserialize(input));
+ cf.delete(input.readInt(), input.readLong());
return cf;
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed Oct 13 15:43:18 2010
@@ -41,7 +41,6 @@ import org.apache.cassandra.concurrent.S
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.IClock.ClockRelationship;
import org.apache.cassandra.db.columniterator.IColumnIterator;
import org.apache.cassandra.db.columniterator.IdentityQueryFilter;
import org.apache.cassandra.db.commitlog.CommitLog;
@@ -721,18 +720,11 @@ public class ColumnFamilyStore implement
// (a) the column itself is tombstoned or
// (b) the CF is tombstoned and the column is not newer than it
// (we split the test to avoid computing ClockRelationship if not necessary)
- if ((c.isMarkedForDelete() && c.getLocalDeletionTime() <= gcBefore))
+ if ((c.isMarkedForDelete() && c.getLocalDeletionTime() <= gcBefore)
+ || c.timestamp() <= cf.getMarkedForDeleteAt())
{
cf.remove(cname);
}
- else
- {
- ClockRelationship rel = c.clock().compare(cf.getMarkedForDeleteAt());
- if ((ClockRelationship.LESS_THAN == rel) || (ClockRelationship.EQUAL == rel))
- {
- cf.remove(cname);
- }
- }
}
}
@@ -744,26 +736,17 @@ public class ColumnFamilyStore implement
for (Map.Entry<byte[], IColumn> entry : cf.getColumnsMap().entrySet())
{
SuperColumn c = (SuperColumn) entry.getValue();
- List<IClock> clocks = Arrays.asList(cf.getMarkedForDeleteAt());
- IClock minClock = c.getMarkedForDeleteAt().getSuperset(clocks);
+ long minTimestamp = Math.max(c.getMarkedForDeleteAt(), cf.getMarkedForDeleteAt());
for (IColumn subColumn : c.getSubColumns())
{
// remove subcolumns if
// (a) the subcolumn itself is tombstoned or
// (b) the supercolumn is tombstoned and the subcolumn is not newer than it
- // (we split the test to avoid computing ClockRelationship if not necessary)
- if (subColumn.isMarkedForDelete() && subColumn.getLocalDeletionTime() <= gcBefore)
+ if (subColumn.timestamp() <= minTimestamp
+ || (subColumn.isMarkedForDelete() && subColumn.getLocalDeletionTime() <= gcBefore))
{
c.remove(subColumn.name());
}
- else
- {
- ClockRelationship subRel = subColumn.clock().compare(minClock);
- if ((ClockRelationship.LESS_THAN == subRel) || (ClockRelationship.EQUAL == subRel))
- {
- c.remove(subColumn.name());
- }
- }
}
if (c.getSubColumns().isEmpty() && c.getLocalDeletionTime() <= gcBefore)
{
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnSerializer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnSerializer.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnSerializer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnSerializer.java Wed Oct 13 15:43:18 2010
@@ -33,13 +33,6 @@ public class ColumnSerializer implements
public final static int DELETION_MASK = 0x01;
public final static int EXPIRATION_MASK = 0x02;
- private ClockType clockType;
-
- public ColumnSerializer(ClockType clockType)
- {
- this.clockType = clockType;
- }
-
public void serialize(IColumn column, DataOutput dos)
{
FBUtilities.writeShortByteArray(column.name(), dos);
@@ -52,7 +45,7 @@ public class ColumnSerializer implements
} else {
dos.writeByte((column.isMarkedForDelete()) ? DELETION_MASK : 0);
}
- clockType.serializer().serialize(column.clock(), dos);
+ dos.writeLong(column.timestamp());
FBUtilities.writeByteArray(column.value(), dos);
}
catch (IOException e)
@@ -69,7 +62,7 @@ public class ColumnSerializer implements
{
int ttl = dis.readInt();
int expiration = dis.readInt();
- IClock clock = clockType.serializer().deserialize(dis);
+ long ts = dis.readLong();
byte[] value = FBUtilities.readByteArray(dis);
if ((int) (System.currentTimeMillis() / 1000 ) > expiration)
{
@@ -77,22 +70,22 @@ public class ColumnSerializer implements
// tombstone
ByteBuffer bytes = ByteBuffer.allocate(4);
bytes.putInt(expiration);
- return new DeletedColumn(name, bytes.array(), clock);
+ return new DeletedColumn(name, bytes.array(), ts);
}
else
{
- return new ExpiringColumn(name, value, clock, ttl, expiration);
+ return new ExpiringColumn(name, value, ts, ttl, expiration);
}
}
else
{
boolean delete = (b & DELETION_MASK) != 0;
- IClock clock = clockType.serializer().deserialize(dis);
+ long ts = dis.readLong();
byte[] value = FBUtilities.readByteArray(dis);
if ((b & DELETION_MASK) != 0) {
- return new DeletedColumn(name, value, clock);
+ return new DeletedColumn(name, value, ts);
} else {
- return new Column(name, value, clock);
+ return new Column(name, value, ts);
}
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/DefsTable.java Wed Oct 13 15:43:18 2010
@@ -60,7 +60,7 @@ public class DefsTable
// persist keyspaces under new version
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, versionKey);
- TimestampClock now = new TimestampClock(System.currentTimeMillis());
+ long now = System.currentTimeMillis();
for (String ksname : ksnames)
{
KSMetaData ksm = DatabaseDescriptor.getTableDefinition(ksname);
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/DeletedColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/DeletedColumn.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/DeletedColumn.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/DeletedColumn.java Wed Oct 13 15:43:18 2010
@@ -28,14 +28,14 @@ public class DeletedColumn extends Colum
{
private static Logger logger = LoggerFactory.getLogger(DeletedColumn.class);
- public DeletedColumn(byte[] name, int localDeletionTime, IClock clock)
+ public DeletedColumn(byte[] name, int localDeletionTime, long timestamp)
{
- this(name, FBUtilities.toByteArray(localDeletionTime), clock);
+ this(name, FBUtilities.toByteArray(localDeletionTime), timestamp);
}
- public DeletedColumn(byte[] name, byte[] value, IClock clock)
+ public DeletedColumn(byte[] name, byte[] value, long timestamp)
{
- super(name, value, clock);
+ super(name, value, timestamp);
}
@Override
@@ -45,9 +45,9 @@ public class DeletedColumn extends Colum
}
@Override
- public IClock getMarkedForDeleteAt()
+ public long getMarkedForDeleteAt()
{
- return clock;
+ return timestamp;
}
@Override
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ExpiringColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ExpiringColumn.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ExpiringColumn.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ExpiringColumn.java Wed Oct 13 15:43:18 2010
@@ -43,14 +43,14 @@ public class ExpiringColumn extends Colu
private final int localExpirationTime;
private final int timeToLive;
- public ExpiringColumn(byte[] name, byte[] value, IClock clock, int timeToLive)
+ public ExpiringColumn(byte[] name, byte[] value, long timestamp, int timeToLive)
{
- this(name, value, clock, timeToLive, (int) (System.currentTimeMillis() / 1000) + timeToLive);
+ this(name, value, timestamp, timeToLive, (int) (System.currentTimeMillis() / 1000) + timeToLive);
}
- public ExpiringColumn(byte[] name, byte[] value, IClock clock, int timeToLive, int localExpirationTime)
+ public ExpiringColumn(byte[] name, byte[] value, long timestamp, int timeToLive, int localExpirationTime)
{
- super(name, value, clock);
+ super(name, value, timestamp);
assert timeToLive > 0;
assert localExpirationTime > 0;
this.timeToLive = timeToLive;
@@ -87,7 +87,7 @@ public class ExpiringColumn extends Colu
DataOutputBuffer buffer = new DataOutputBuffer();
try
{
- clock.serialize(buffer);
+ buffer.writeLong(timestamp);
buffer.writeByte(ColumnSerializer.EXPIRATION_MASK);
buffer.writeInt(timeToLive);
}
@@ -115,11 +115,11 @@ public class ExpiringColumn extends Colu
}
@Override
- public IClock getMarkedForDeleteAt()
+ public long getMarkedForDeleteAt()
{
if (isMarkedForDelete())
{
- return clock;
+ return timestamp;
}
else
{
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Wed Oct 13 15:43:18 2010
@@ -133,10 +133,10 @@ public class HintedHandOffManager
return true;
}
- private static void deleteHintKey(byte[] endpointAddress, byte[] key, byte[] tableCF, IClock clock) throws IOException
+ private static void deleteHintKey(byte[] endpointAddress, byte[] key, byte[] tableCF, long timestamp) throws IOException
{
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, endpointAddress);
- rm.delete(new QueryPath(HINTS_CF, key, tableCF), clock);
+ rm.delete(new QueryPath(HINTS_CF, key, tableCF), timestamp);
rm.apply();
}
@@ -144,7 +144,7 @@ public class HintedHandOffManager
{
ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF);
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, endpoint.getAddress());
- rm.delete(new QueryPath(HINTS_CF), new TimestampClock(System.currentTimeMillis()));
+ rm.delete(new QueryPath(HINTS_CF), System.currentTimeMillis());
try {
logger_.info("Deleting any stored hints for " + endpoint);
rm.apply();
@@ -214,7 +214,7 @@ public class HintedHandOffManager
String[] parts = getTableAndCFNames(tableCF.name());
if (sendMessage(endpoint, parts[0], parts[1], keyColumn.name()))
{
- deleteHintKey(endpoint.getHostAddress().getBytes(UTF_8), keyColumn.name(), tableCF.name(), tableCF.clock());
+ deleteHintKey(endpoint.getHostAddress().getBytes(UTF_8), keyColumn.name(), tableCF.name(), tableCF.timestamp());
rowsReplayed++;
}
else
@@ -269,7 +269,7 @@ public class HintedHandOffManager
RowMutation drop = new RowMutation(Table.SYSTEM_TABLE, oldTableKey.key);
for (byte[] key : cf.getColumnNames())
{
- drop.delete(new QueryPath(HINTS_CF, key), new TimestampClock(now));
+ drop.delete(new QueryPath(HINTS_CF, key), now);
startCol = key;
}
drop.apply();
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/IColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/IColumn.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/IColumn.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/IColumn.java Wed Oct 13 15:43:18 2010
@@ -29,17 +29,18 @@ public interface IColumn
public static final int MAX_NAME_LENGTH = FBUtilities.MAX_UNSIGNED_SHORT;
public boolean isMarkedForDelete();
- public IClock getMarkedForDeleteAt();
- public IClock mostRecentLiveChangeAt();
+ public long getMarkedForDeleteAt();
+ public long mostRecentLiveChangeAt();
public byte[] name();
public int size();
public int serializedSize();
- public IClock clock();
+ public long timestamp();
public byte[] value();
public Collection<IColumn> getSubColumns();
public IColumn getSubColumn(byte[] columnName);
public void addColumn(IColumn column);
public IColumn diff(IColumn column);
+ public IColumn reconcile(IColumn column);
public void updateDigest(MessageDigest digest);
public int getLocalDeletionTime(); // for tombstone GC, so int is sufficient granularity
public String getString(AbstractType comparator);
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/IColumnContainer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/IColumnContainer.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/IColumnContainer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/IColumnContainer.java Wed Oct 13 15:43:18 2010
@@ -28,7 +28,7 @@ public interface IColumnContainer
public void addColumn(IColumn column);
public boolean isMarkedForDelete();
- public IClock getMarkedForDeleteAt();
+ public long getMarkedForDeleteAt();
public AbstractType getComparator();
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Wed Oct 13 15:43:18 2010
@@ -205,7 +205,7 @@ public class Memtable implements Compara
final Collection<IColumn> filteredColumns = filter.reversed ? cf.getReverseSortedColumns() : cf.getSortedColumns();
// ok to not have subcolumnComparator since we won't be adding columns to this object
- IColumn startColumn = isSuper ? new SuperColumn(filter.start, null, cf.getClockType(), cf.getReconciler()) : new Column(filter.start);
+ IColumn startColumn = isSuper ? new SuperColumn(filter.start, null) : new Column(filter.start);
Comparator<IColumn> comparator = filter.getColumnComparator(typeComparator);
final PeekingIterator<IColumn> filteredIter = Iterators.peekingIterator(filteredColumns.iterator());
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java Wed Oct 13 15:43:18 2010
@@ -101,7 +101,7 @@ public class RowMutation
{
byte[] combined = HintedHandOffManager.makeCombinedName(rm.getTable(), cf.metadata().cfName);
QueryPath path = new QueryPath(HintedHandOffManager.HINTS_CF, rm.key(), combined);
- add(path, ArrayUtils.EMPTY_BYTE_ARRAY, new TimestampClock(System.currentTimeMillis()), cf.metadata().gcGraceSeconds);
+ add(path, ArrayUtils.EMPTY_BYTE_ARRAY, System.currentTimeMillis(), cf.metadata().gcGraceSeconds);
}
}
@@ -135,10 +135,10 @@ public class RowMutation
*
* param @ cf - column name as <column family>:<column>
* param @ value - value associated with the column
- * param @ clock - clock associated with this data.
+ * param @ timestamp - timestamp associated with this data.
* param @ timeToLive - ttl for the column, 0 for standard (non expiring) columns
*/
- public void add(QueryPath path, byte[] value, IClock clock, int timeToLive)
+ public void add(QueryPath path, byte[] value, long timestamp, int timeToLive)
{
Integer id = CFMetaData.getId(table_, path.columnFamilyName);
ColumnFamily columnFamily = modifications_.get(id);
@@ -147,15 +147,15 @@ public class RowMutation
columnFamily = ColumnFamily.create(table_, path.columnFamilyName);
modifications_.put(id, columnFamily);
}
- columnFamily.addColumn(path, value, clock, timeToLive);
+ columnFamily.addColumn(path, value, timestamp, timeToLive);
}
- public void add(QueryPath path, byte[] value, IClock clock)
+ public void add(QueryPath path, byte[] value, long timestamp)
{
- add(path, value, clock, 0);
+ add(path, value, timestamp, 0);
}
- public void delete(QueryPath path, IClock clock)
+ public void delete(QueryPath path, long timestamp)
{
Integer id = CFMetaData.getId(table_, path.columnFamilyName);
@@ -170,18 +170,17 @@ public class RowMutation
if (path.superColumnName == null && path.columnName == null)
{
- columnFamily.delete(localDeleteTime, clock);
+ columnFamily.delete(localDeleteTime, timestamp);
}
else if (path.columnName == null)
{
- SuperColumn sc = new SuperColumn(path.superColumnName, columnFamily.getSubComparator(),
- columnFamily.getClockType(), columnFamily.getReconciler());
- sc.markForDeleteAt(localDeleteTime, clock);
+ SuperColumn sc = new SuperColumn(path.superColumnName, columnFamily.getSubComparator());
+ sc.markForDeleteAt(localDeleteTime, timestamp);
columnFamily.addColumn(sc);
}
else
{
- columnFamily.deleteColumn(path, localDeleteTime, clock);
+ columnFamily.addTombstone(path, localDeleteTime, timestamp);
}
}
@@ -250,13 +249,13 @@ public class RowMutation
assert cosc.super_column != null;
for (org.apache.cassandra.thrift.Column column : cosc.super_column.columns)
{
- rm.add(new QueryPath(cfName, cosc.super_column.name, column.name), column.value, new TimestampClock(column.timestamp), column.ttl);
+ rm.add(new QueryPath(cfName, cosc.super_column.name, column.name), column.value, column.timestamp, column.ttl);
}
}
else
{
assert cosc.super_column == null;
- rm.add(new QueryPath(cfName, null, cosc.column.name), cosc.column.value, new TimestampClock(cosc.column.timestamp), cosc.column.ttl);
+ rm.add(new QueryPath(cfName, null, cosc.column.name), cosc.column.value, cosc.column.timestamp, cosc.column.ttl);
}
}
}
@@ -302,12 +301,12 @@ public class RowMutation
{
for (org.apache.cassandra.thrift.Column column : cosc.super_column.columns)
{
- rm.add(new QueryPath(cfName, cosc.super_column.name, column.name), column.value, new TimestampClock(column.timestamp), column.ttl);
+ rm.add(new QueryPath(cfName, cosc.super_column.name, column.name), column.value, column.timestamp, column.ttl);
}
}
else
{
- rm.add(new QueryPath(cfName, null, cosc.column.name), cosc.column.value, new TimestampClock(cosc.column.timestamp), cosc.column.ttl);
+ rm.add(new QueryPath(cfName, null, cosc.column.name), cosc.column.value, cosc.column.timestamp, cosc.column.ttl);
}
}
@@ -318,14 +317,14 @@ public class RowMutation
for(byte[] c : del.predicate.column_names)
{
if (del.super_column == null && DatabaseDescriptor.getColumnFamilyType(rm.table_, cfName) == ColumnFamilyType.Super)
- rm.delete(new QueryPath(cfName, c), new TimestampClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, c), del.timestamp);
else
- rm.delete(new QueryPath(cfName, del.super_column, c), new TimestampClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, del.super_column, c), del.timestamp);
}
}
else
{
- rm.delete(new QueryPath(cfName, del.super_column), new TimestampClock(del.timestamp));
+ rm.delete(new QueryPath(cfName, del.super_column), del.timestamp);
}
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java Wed Oct 13 15:43:18 2010
@@ -25,16 +25,14 @@ import java.util.List;
import java.util.concurrent.ConcurrentSkipListMap;
import java.security.MessageDigest;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.atomic.AtomicLong;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.IClock.ClockRelationship;
import org.apache.cassandra.io.ICompactSerializer2;
import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.clock.AbstractReconciler;
import org.apache.cassandra.utils.FBUtilities;
@@ -42,30 +40,27 @@ public class SuperColumn implements ICol
{
private static Logger logger_ = LoggerFactory.getLogger(SuperColumn.class);
- public static SuperColumnSerializer serializer(AbstractType comparator, ClockType clockType, AbstractReconciler reconciler)
+ public static SuperColumnSerializer serializer(AbstractType comparator)
{
- return new SuperColumnSerializer(comparator, clockType, reconciler);
+ return new SuperColumnSerializer(comparator);
}
private byte[] name_;
private ConcurrentSkipListMap<byte[], IColumn> columns_;
private AtomicInteger localDeletionTime = new AtomicInteger(Integer.MIN_VALUE);
- private AtomicReference<IClock> markedForDeleteAt;
- private AbstractReconciler reconciler;
+ private AtomicLong markedForDeleteAt = new AtomicLong(Long.MIN_VALUE);
- public SuperColumn(byte[] name, AbstractType comparator, ClockType clockType, AbstractReconciler reconciler)
+ public SuperColumn(byte[] name, AbstractType comparator)
{
- this(name, new ConcurrentSkipListMap<byte[], IColumn>(comparator), clockType, reconciler);
+ this(name, new ConcurrentSkipListMap<byte[], IColumn>(comparator));
}
- private SuperColumn(byte[] name, ConcurrentSkipListMap<byte[], IColumn> columns, ClockType clockType, AbstractReconciler reconciler)
+ private SuperColumn(byte[] name, ConcurrentSkipListMap<byte[], IColumn> columns)
{
assert name != null;
assert name.length <= IColumn.MAX_NAME_LENGTH;
name_ = name;
columns_ = columns;
- this.reconciler = reconciler;
- markedForDeleteAt = new AtomicReference<IClock>(clockType.minClock());
}
public AbstractType getComparator()
@@ -75,24 +70,21 @@ public class SuperColumn implements ICol
public SuperColumn cloneMeShallow()
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- SuperColumn sc = new SuperColumn(name_, getComparator(), _markedForDeleteAt.type(), reconciler);
- sc.markForDeleteAt(localDeletionTime.get(), _markedForDeleteAt);
+ SuperColumn sc = new SuperColumn(name_, getComparator());
+ sc.markForDeleteAt(localDeletionTime.get(), markedForDeleteAt.get());
return sc;
}
public IColumn cloneMe()
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- SuperColumn sc = new SuperColumn(name_, new ConcurrentSkipListMap<byte[], IColumn>(columns_), _markedForDeleteAt.type(), reconciler);
- sc.markForDeleteAt(localDeletionTime.get(), _markedForDeleteAt);
+ SuperColumn sc = new SuperColumn(name_, new ConcurrentSkipListMap<byte[], IColumn>(columns_));
+ sc.markForDeleteAt(localDeletionTime.get(), markedForDeleteAt.get());
return sc;
}
public boolean isMarkedForDelete()
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- return _markedForDeleteAt.compare(_markedForDeleteAt.type().minClock()) == ClockRelationship.GREATER_THAN;
+ return markedForDeleteAt.get() > Long.MIN_VALUE;
}
public byte[] name()
@@ -135,8 +127,7 @@ public class SuperColumn implements ICol
* We need to keep the way we are calculating the column size in sync with the
* way we are calculating the size for the column family serializer.
*/
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- return DBConstants.shortSize_ + name_.length + DBConstants.intSize_ + _markedForDeleteAt.size() + DBConstants.intSize_ + size();
+ return DBConstants.shortSize_ + name_.length + DBConstants.intSize_ + DBConstants.longSize_ + DBConstants.intSize_ + size();
}
public void remove(byte[] columnName)
@@ -144,22 +135,22 @@ public class SuperColumn implements ICol
columns_.remove(columnName);
}
- public IClock clock()
+ public long timestamp()
{
throw new UnsupportedOperationException("This operation is not supported for Super Columns.");
}
- public IClock mostRecentLiveChangeAt()
+ public long mostRecentLiveChangeAt()
{
- List<IClock> clocks = new LinkedList<IClock>();
+ long max = Long.MIN_VALUE;
for (IColumn column : columns_.values())
{
- if (!column.isMarkedForDelete())
+ if (!column.isMarkedForDelete() && column.timestamp() > max)
{
- clocks.add(column.clock());
+ max = column.timestamp();
}
}
- return markedForDeleteAt.get().type().minClock().getSuperset(clocks);
+ return max;
}
public byte[] value()
@@ -175,13 +166,13 @@ public class SuperColumn implements ICol
IColumn oldColumn = columns_.putIfAbsent(name, column);
if (oldColumn != null)
{
- IColumn reconciledColumn = reconciler.reconcile((Column)column, (Column)oldColumn);
+ IColumn reconciledColumn = column.reconcile(oldColumn);
while (!columns_.replace(name, oldColumn, reconciledColumn))
{
// if unable to replace, then get updated old (existing) col
oldColumn = columns_.get(name);
// re-calculate reconciled col from updated old col and original new col
- reconciledColumn = reconciler.reconcile((Column)column, (Column)oldColumn);
+ reconciledColumn = column.reconcile(oldColumn);
// try to re-update value, again
}
}
@@ -203,17 +194,15 @@ public class SuperColumn implements ICol
FBUtilities.atomicSetMax(markedForDeleteAt, column.getMarkedForDeleteAt());
}
- public IClock getMarkedForDeleteAt()
+ public long getMarkedForDeleteAt()
{
return markedForDeleteAt.get();
}
public IColumn diff(IColumn columnNew)
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- IColumn columnDiff = new SuperColumn(columnNew.name(), ((SuperColumn)columnNew).getComparator(), _markedForDeleteAt.type(), reconciler);
- ClockRelationship rel = columnNew.getMarkedForDeleteAt().compare(_markedForDeleteAt);
- if (ClockRelationship.GREATER_THAN == rel)
+ IColumn columnDiff = new SuperColumn(columnNew.name(), ((SuperColumn)columnNew).getComparator());
+ if (columnNew.getMarkedForDeleteAt() > getMarkedForDeleteAt())
{
((SuperColumn)columnDiff).markForDeleteAt(columnNew.getLocalDeletionTime(), columnNew.getMarkedForDeleteAt());
}
@@ -251,8 +240,7 @@ public class SuperColumn implements ICol
DataOutputBuffer buffer = new DataOutputBuffer();
try
{
- IClock _markedForDeleteAt = markedForDeleteAt.get();
- _markedForDeleteAt.serialize(buffer);
+ buffer.writeLong(markedForDeleteAt.get());
}
catch (IOException e)
{
@@ -272,7 +260,7 @@ public class SuperColumn implements ICol
sb.append(comparator.getString(name_));
if (isMarkedForDelete()) {
- sb.append(" -delete at ").append(getMarkedForDeleteAt().toString()).append("-");
+ sb.append(" -delete at ").append(getMarkedForDeleteAt()).append("-");
}
sb.append(" [");
@@ -288,24 +276,25 @@ public class SuperColumn implements ICol
}
@Deprecated // TODO this is a hack to set initial value outside constructor
- public void markForDeleteAt(int localDeleteTime, IClock clock)
+ public void markForDeleteAt(int localDeleteTime, long timestamp)
{
this.localDeletionTime.set(localDeleteTime);
- this.markedForDeleteAt.set(clock);
+ this.markedForDeleteAt.set(timestamp);
+ }
+
+ public IColumn reconcile(IColumn c)
+ {
+ throw new UnsupportedOperationException("This operation is unsupported on super columns.");
}
}
class SuperColumnSerializer implements ICompactSerializer2<IColumn>
{
private AbstractType comparator;
- private ClockType clockType;
- private AbstractReconciler reconciler;
- public SuperColumnSerializer(AbstractType comparator, ClockType clockType, AbstractReconciler reconciler)
+ public SuperColumnSerializer(AbstractType comparator)
{
this.comparator = comparator;
- this.clockType = clockType;
- this.reconciler = reconciler;
}
public AbstractType getComparator()
@@ -320,14 +309,13 @@ class SuperColumnSerializer implements I
try
{
dos.writeInt(superColumn.getLocalDeletionTime());
- IClock _markedForDeleteAt = superColumn.getMarkedForDeleteAt();
- clockType.serializer().serialize(_markedForDeleteAt, dos);
+ dos.writeLong(superColumn.getMarkedForDeleteAt());
Collection<IColumn> columns = column.getSubColumns();
dos.writeInt(columns.size());
for (IColumn subColumn : columns)
{
- Column.serializer(clockType).serialize(subColumn, dos);
+ Column.serializer().serialize(subColumn, dos);
}
}
catch (IOException e)
@@ -339,19 +327,19 @@ class SuperColumnSerializer implements I
public IColumn deserialize(DataInput dis) throws IOException
{
byte[] name = FBUtilities.readShortByteArray(dis);
- SuperColumn superColumn = new SuperColumn(name, comparator, clockType, reconciler);
+ SuperColumn superColumn = new SuperColumn(name, comparator);
int localDeleteTime = dis.readInt();
if (localDeleteTime != Integer.MIN_VALUE && localDeleteTime <= 0)
{
throw new IOException("Invalid localDeleteTime read: " + localDeleteTime);
}
- superColumn.markForDeleteAt(localDeleteTime, clockType.serializer().deserialize(dis));
+ superColumn.markForDeleteAt(localDeleteTime, dis.readLong());
/* read the number of columns */
int size = dis.readInt();
for ( int i = 0; i < size; ++i )
{
- IColumn subColumn = Column.serializer(clockType).deserialize(dis);
+ IColumn subColumn = Column.serializer().deserialize(dis);
superColumn.addColumn(subColumn);
}
return superColumn;
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java Wed Oct 13 15:43:18 2010
@@ -79,7 +79,7 @@ public class SystemTable
logger.info("Upgrading to 0.7. Purging hints if there are any. Old hints will be snapshotted.");
new Truncation(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF).apply();
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, COOKIE_KEY);
- rm.add(new QueryPath(STATUS_CF, null, hintsPurged6to7), "oh yes, it they were purged.".getBytes(), new TimestampClock(System.currentTimeMillis()));
+ rm.add(new QueryPath(STATUS_CF, null, hintsPurged6to7), "oh yes, it they were purged.".getBytes(), System.currentTimeMillis());
rm.apply();
}
}
@@ -91,7 +91,7 @@ public class SystemTable
{
IPartitioner p = StorageService.getPartitioner();
ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, STATUS_CF);
- cf.addColumn(new Column(p.getTokenFactory().toByteArray(token), ep.getAddress(), new TimestampClock(System.currentTimeMillis())));
+ cf.addColumn(new Column(p.getTokenFactory().toByteArray(token), ep.getAddress(), System.currentTimeMillis()));
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, RING_KEY);
rm.add(cf);
try
@@ -111,7 +111,7 @@ public class SystemTable
{
IPartitioner p = StorageService.getPartitioner();
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, RING_KEY);
- rm.delete(new QueryPath(STATUS_CF, null, p.getTokenFactory().toByteArray(token)), new TimestampClock(System.currentTimeMillis()));
+ rm.delete(new QueryPath(STATUS_CF, null, p.getTokenFactory().toByteArray(token)), System.currentTimeMillis());
try
{
rm.apply();
@@ -129,7 +129,7 @@ public class SystemTable
{
IPartitioner p = StorageService.getPartitioner();
ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, STATUS_CF);
- cf.addColumn(new Column(SystemTable.TOKEN, p.getTokenFactory().toByteArray(token), new TimestampClock(System.currentTimeMillis())));
+ cf.addColumn(new Column(SystemTable.TOKEN, p.getTokenFactory().toByteArray(token), System.currentTimeMillis()));
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, LOCATION_KEY);
rm.add(cf);
try
@@ -235,8 +235,8 @@ public class SystemTable
// no system files. this is a new node.
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, LOCATION_KEY);
cf = ColumnFamily.create(Table.SYSTEM_TABLE, SystemTable.STATUS_CF);
- cf.addColumn(new Column(PARTITIONER, DatabaseDescriptor.getPartitioner().getClass().getName().getBytes(UTF_8), new TimestampClock(FBUtilities.timestampMicros())));
- cf.addColumn(new Column(CLUSTERNAME, DatabaseDescriptor.getClusterName().getBytes(), new TimestampClock(FBUtilities.timestampMicros())));
+ cf.addColumn(new Column(PARTITIONER, DatabaseDescriptor.getPartitioner().getClass().getName().getBytes(UTF_8), FBUtilities.timestampMicros()));
+ cf.addColumn(new Column(CLUSTERNAME, DatabaseDescriptor.getClusterName().getBytes(), FBUtilities.timestampMicros()));
rm.add(cf);
rm.apply();
@@ -284,8 +284,7 @@ public class SystemTable
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, LOCATION_KEY);
cf = ColumnFamily.create(Table.SYSTEM_TABLE, SystemTable.STATUS_CF);
- TimestampClock genClock = new TimestampClock(FBUtilities.timestampMicros());
- cf.addColumn(new Column(GENERATION, FBUtilities.toByteArray(generation), genClock));
+ cf.addColumn(new Column(GENERATION, FBUtilities.toByteArray(generation), FBUtilities.timestampMicros()));
rm.add(cf);
rm.apply();
forceBlockingFlush(STATUS_CF);
@@ -306,7 +305,7 @@ public class SystemTable
public static void setBootstrapped(boolean isBootstrapped)
{
ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, STATUS_CF);
- cf.addColumn(new Column(BOOTSTRAP, new byte[] { (byte) (isBootstrapped ? 1 : 0) }, new TimestampClock(System.currentTimeMillis())));
+ cf.addColumn(new Column(BOOTSTRAP, new byte[] { (byte) (isBootstrapped ? 1 : 0) }, System.currentTimeMillis()));
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, BOOTSTRAP_KEY);
rm.add(cf);
try
@@ -331,7 +330,7 @@ public class SystemTable
public static void setIndexBuilt(String table, String indexName)
{
ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, INDEX_CF);
- cf.addColumn(new Column(indexName.getBytes(UTF_8), ArrayUtils.EMPTY_BYTE_ARRAY, new TimestampClock(System.currentTimeMillis())));
+ cf.addColumn(new Column(indexName.getBytes(UTF_8), ArrayUtils.EMPTY_BYTE_ARRAY, System.currentTimeMillis()));
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, table.getBytes(UTF_8));
rm.add(cf);
try
@@ -349,7 +348,7 @@ public class SystemTable
public static void setIndexRemoved(String table, String indexName)
{
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, table.getBytes(UTF_8));
- rm.delete(new QueryPath(INDEX_CF, null, indexName.getBytes(UTF_8)), new TimestampClock(System.currentTimeMillis()));
+ rm.delete(new QueryPath(INDEX_CF, null, indexName.getBytes(UTF_8)), System.currentTimeMillis());
try
{
rm.apply();
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Wed Oct 13 15:43:18 2010
@@ -36,7 +36,6 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.clock.AbstractReconciler;
import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.filter.QueryFilter;
import org.apache.cassandra.db.filter.QueryPath;
@@ -81,8 +80,6 @@ public class Table
public final String name;
/* ColumnFamilyStore per column family */
public final Map<Integer, ColumnFamilyStore> columnFamilyStores = new HashMap<Integer, ColumnFamilyStore>(); // TODO make private again
- // cache application CFs since Range queries ask for them a _lot_
- private SortedSet<String> applicationColumnFamilies;
private final Object[] indexLocks;
private ScheduledFuture<?> flushTask;
@@ -464,11 +461,11 @@ public class Table
if (column instanceof ExpiringColumn)
{
ExpiringColumn ec = (ExpiringColumn)column;
- cfi.addColumn(new ExpiringColumn(key, ArrayUtils.EMPTY_BYTE_ARRAY, ec.clock(), ec.getTimeToLive(), ec.getLocalDeletionTime()));
+ cfi.addColumn(new ExpiringColumn(key, ArrayUtils.EMPTY_BYTE_ARRAY, ec.timestamp, ec.getTimeToLive(), ec.getLocalDeletionTime()));
}
else
{
- cfi.addColumn(new Column(key, ArrayUtils.EMPTY_BYTE_ARRAY, column.clock()));
+ cfi.addColumn(new Column(key, ArrayUtils.EMPTY_BYTE_ARRAY, column.timestamp()));
}
Memtable fullMemtable = cfs.getIndexedColumnFamilyStore(columnName).apply(valueKey, cfi);
if (fullMemtable != null)
@@ -487,7 +484,7 @@ public class Table
continue;
DecoratedKey<LocalToken> valueKey = cfs.getIndexKeyFor(columnName, column.value());
ColumnFamily cfi = cfs.newIndexedColumnFamily(columnName);
- cfi.deleteColumn(key, localDeletionTime, column.clock());
+ cfi.addTombstone(key, localDeletionTime, column.timestamp());
Memtable fullMemtable = cfs.getIndexedColumnFamilyStore(columnName).apply(valueKey, cfi);
if (fullMemtable != null)
fullMemtables = addFullMemtable(fullMemtables, fullMemtable);
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java?rev=1022147&r1=1022146&r2=1022147&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java Wed Oct 13 15:43:18 2010
@@ -32,7 +32,6 @@ import org.apache.cassandra.thrift.Slice
import org.apache.cassandra.utils.ReducingIterator;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.IClock.ClockRelationship;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -122,8 +121,8 @@ public class QueryFilter
// filterSuperColumn only looks at immediate parent (the supercolumn) when determining if a subcolumn
// is still live, i.e., not shadowed by the parent's tombstone. so, bump it up temporarily to the tombstone
// time of the cf, if that is greater.
- IClock deletedAt = c.getMarkedForDeleteAt();
- if (returnCF.getMarkedForDeleteAt().compare(deletedAt) == ClockRelationship.GREATER_THAN)
+ long deletedAt = c.getMarkedForDeleteAt();
+ if (returnCF.getMarkedForDeleteAt() > deletedAt)
((SuperColumn)c).markForDeleteAt(c.getLocalDeletionTime(), returnCF.getMarkedForDeleteAt());
c = filter.filterSuperColumn((SuperColumn)c, gcBefore);
@@ -147,9 +146,9 @@ public class QueryFilter
// the column itself must be not gc-able (it is live, or a still relevant tombstone, or has live subcolumns), (1)
// and if its container is deleted, the column must be changed more recently than the container tombstone (2)
// (since otherwise, the only thing repair cares about is the container tombstone)
- IClock maxChange = column.mostRecentLiveChangeAt();
- return (!column.isMarkedForDelete() || column.getLocalDeletionTime() > gcBefore || (ClockRelationship.GREATER_THAN == maxChange.compare(column.getMarkedForDeleteAt()))) // (1)
- && (!container.isMarkedForDelete() || (ClockRelationship.GREATER_THAN == maxChange.compare(container.getMarkedForDeleteAt()))); // (2)
+ long maxChange = column.mostRecentLiveChangeAt();
+ return (!column.isMarkedForDelete() || column.getLocalDeletionTime() > gcBefore || maxChange > column.getMarkedForDeleteAt()) // (1)
+ && (!container.isMarkedForDelete() || maxChange > container.getMarkedForDeleteAt()); // (2)
}
/**