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/01/12 05:05:29 UTC
svn commit: r898179 - in
/incubator/cassandra/trunk/src/java/org/apache/cassandra/db:
ColumnFamilyStore.java Table.java
Author: jbellis
Date: Tue Jan 12 04:05:28 2010
New Revision: 898179
URL: http://svn.apache.org/viewvc?rev=898179&view=rev
Log:
update cached rows in-place instead of invalidating & reloading. should make it more suitable for relatively wide rows, especially if updates are to a small number of columns.
patch by jbellis; reviewed by goffinet for CASSANDRA-678
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
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=898179&r1=898178&r2=898179&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 Tue Jan 12 04:05:28 2010
@@ -1260,15 +1260,9 @@
return ssTables_.size();
}
- public void invalidate(String key)
+ public ColumnFamily getCachedRow(String key)
{
- if (rowCache != null)
- rowCache.remove(key);
- }
-
- public boolean isRowCacheEnabled()
- {
- return rowCache != null;
+ return rowCache == null ? null : rowCache.get(key);
}
/**
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=898179&r1=898178&r2=898179&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 Tue Jan 12 04:05:28 2010
@@ -32,6 +32,8 @@
import org.apache.cassandra.io.util.FileUtils;
import java.net.InetAddress;
+
+import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.*;
import org.apache.cassandra.db.filter.*;
@@ -407,7 +409,6 @@
HashMap<ColumnFamilyStore,Memtable> memtablesToFlush = new HashMap<ColumnFamilyStore, Memtable>(2);
// write the mutation to the commitlog and memtables
- boolean invalidateRequired = false;
flusherLock.readLock().lock();
try
{
@@ -417,10 +418,13 @@
for (ColumnFamily columnFamily : mutation.getColumnFamilies())
{
Memtable memtableToFlush;
- ColumnFamilyStore cfStore = columnFamilyStores.get(columnFamily.name());
- invalidateRequired |= cfStore.isRowCacheEnabled();
- if ((memtableToFlush=cfStore.apply(mutation.key(), columnFamily)) != null)
- memtablesToFlush.put(cfStore, memtableToFlush);
+ ColumnFamilyStore cfs = columnFamilyStores.get(columnFamily.name());
+ if ((memtableToFlush=cfs.apply(mutation.key(), columnFamily)) != null)
+ memtablesToFlush.put(cfs, memtableToFlush);
+
+ ColumnFamily cachedRow = cfs.getCachedRow(mutation.key());
+ if (cachedRow != null)
+ cachedRow.addAll(columnFamily);
}
}
finally
@@ -428,16 +432,6 @@
flusherLock.readLock().unlock();
}
- // invalidate cache. 2nd loop over CFs here to avoid prolonging the lock section unnecessarily.
- if (invalidateRequired)
- {
- for (ColumnFamily cf : mutation.getColumnFamilies())
- {
- ColumnFamilyStore cfs = columnFamilyStores.get(cf.name());
- cfs.invalidate(mutation.key());
- }
- }
-
// flush memtables that got filled up. usually mTF will be empty and this will be a no-op
for (Map.Entry<ColumnFamilyStore, Memtable> entry : memtablesToFlush.entrySet())
entry.getKey().switchMemtable(entry.getValue(), writeCommitLog);