Author: slebresne
Date: Fri Sep 9 14:09:48 2011
New Revision: 1167185
URL: http://svn.apache.org/viewvc?rev=1167185&view=rev
Log:
Make sure we preserve backing map during CF.cloneMeShallow
patch by slebresne; reviewed by jbellis for CASSANDRA-3165
Modified:
cassandra/branches/cassandra-1.0.0/CHANGES.txt
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamily.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ISortedColumns.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ThreadSafeSortedColumns.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/TreeMapBackedSortedColumns.java
Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/CHANGES.txt?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0.0/CHANGES.txt Fri Sep 9 14:09:48 2011
@@ -29,7 +29,7 @@
* add scheduler JMX metrics (CASSANDRA-2962)
* add block level checksum for compressed data (CASSANDRA-1717)
* make column family backed column map pluggable and introduce unsynchronized
- ArrayList backed one to speedup reads (CASSANDRA-2843)
+ ArrayList backed one to speedup reads (CASSANDRA-2843, 3165)
* refactoring of the secondary index api (CASSANDRA-2982)
* make CL > ONE reads wait for digest reconciliation before returning
(CASSANDRA-2494)
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
Fri Sep 9 14:09:48 2011
@@ -67,6 +67,11 @@ public class ArrayBackedSortedColumns ex
this.reversed = reversed;
}
+ public ISortedColumns.Factory getFactory()
+ {
+ return factory();
+ }
+
public AbstractType<?> getComparator()
{
return comparator;
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamily.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamily.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamily.java
Fri Sep 9 14:09:48 2011
@@ -81,14 +81,19 @@ public class ColumnFamily extends Abstra
this.cfm = cfm;
}
- public ColumnFamily cloneMeShallow()
+ public ColumnFamily cloneMeShallow(ISortedColumns.Factory factory)
{
- ColumnFamily cf = ColumnFamily.create(cfm);
+ ColumnFamily cf = ColumnFamily.create(cfm, factory);
// since deletion info is immutable, aliasing it is fine
cf.deletionInfo.set(deletionInfo.get());
return cf;
}
+ public ColumnFamily cloneMeShallow()
+ {
+ return cloneMeShallow(columns.getFactory());
+ }
+
public AbstractType getSubComparator()
{
IColumnSerializer s = getColumnSerializer();
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Fri Sep 9 14:09:48 2011
@@ -1162,8 +1162,11 @@ public class ColumnFamilyStore implement
}
}
- /** filter a cached row, which will not be modified by the filter, but may
be modified by throwing out
- * tombstones that are no longer relevant. */
+ /**
+ * Filter a cached row, which will not be modified by the filter, but may
be modified by throwing out
+ * tombstones that are no longer relevant.
+ * The returned column family won't be thread safe.
+ */
ColumnFamily filterColumnFamily(ColumnFamily cached, QueryFilter filter,
int gcBefore)
{
// special case slicing the entire row:
@@ -1184,7 +1187,7 @@ public class ColumnFamilyStore implement
IColumn sc = cached.getColumn(filter.path.superColumnName);
if (sc == null || sliceFilter.count >=
sc.getSubColumns().size())
{
- ColumnFamily cf = cached.cloneMeShallow();
+ ColumnFamily cf =
cached.cloneMeShallow(ArrayBackedSortedColumns.factory());
if (sc != null)
cf.addColumn(sc, HeapAllocator.instance);
return removeDeleted(cf, gcBefore);
@@ -1203,7 +1206,7 @@ public class ColumnFamilyStore implement
}
IColumnIterator ci = filter.getMemtableColumnIterator(cached, null,
getComparator());
- ColumnFamily cf = ci.getColumnFamily().cloneMeShallow();
+ ColumnFamily cf =
ci.getColumnFamily().cloneMeShallow(ArrayBackedSortedColumns.factory());
filter.collateColumns(cf, Collections.singletonList(ci),
getComparator(), gcBefore);
// TODO this is necessary because when we collate supercolumns
together, we don't check
// their subcolumns for relevance, so we need to do a second prune
post facto here.
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ISortedColumns.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ISortedColumns.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ISortedColumns.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ISortedColumns.java
Fri Sep 9 14:09:48 2011
@@ -42,6 +42,11 @@ public interface ISortedColumns extends
public ISortedColumns cloneMe();
/**
+ * Returns the factory used for this ISortedColumns implementation.
+ */
+ public Factory getFactory();
+
+ /**
* Adds a column to this column map.
* If a column with the same name is already present in the map, it will
* be replaced by the newly added column.
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ThreadSafeSortedColumns.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ThreadSafeSortedColumns.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ThreadSafeSortedColumns.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ThreadSafeSortedColumns.java
Fri Sep 9 14:09:48 2011
@@ -62,6 +62,11 @@ public class ThreadSafeSortedColumns ext
super(columns);
}
+ public ISortedColumns.Factory getFactory()
+ {
+ return factory();
+ }
+
public ISortedColumns cloneMe()
{
return new ThreadSafeSortedColumns(this);
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/TreeMapBackedSortedColumns.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/TreeMapBackedSortedColumns.java?rev=1167185&r1=1167184&r2=1167185&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/TreeMapBackedSortedColumns.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/TreeMapBackedSortedColumns.java
Fri Sep 9 14:09:48 2011
@@ -62,6 +62,11 @@ public class TreeMapBackedSortedColumns
super(columns);
}
+ public ISortedColumns.Factory getFactory()
+ {
+ return factory();
+ }
+
public ISortedColumns cloneMe()
{
return new TreeMapBackedSortedColumns(this);