Your analysis sounds correct to me. Can you open a ticket on https://issues.apache.org/jira/browse/CASSANDRA ?
On Thu, Feb 17, 2011 at 10:17 AM, Ching-Cheng Chen <cc...@evidentsoftware.com> wrote: > We have observed the behavior that memtable_flush_after_mins setting not > working occasionally. After some testing and code digging, we finally > figured out what going on. > The memtable_flush_after_mins won't work on certain condition with current > implementation in Cassandra. > > In org.apache.cassandra.db.Table, the scheduled flush task is setup by the > following code during construction. > > int minCheckMs = Integer.MAX_VALUE; > > for (ColumnFamilyStore cfs : columnFamilyStores.values()) > { > minCheckMs = Math.min(minCheckMs, cfs.getMemtableFlushAfterMins() * 60 * > 1000); > } > Runnable runnable = new Runnable() > { > public void run() > { > for (ColumnFamilyStore cfs : columnFamilyStores.values()) > { > cfs.forceFlushIfExpired(); > } > } > }; > flushTask = StorageService.scheduledTasks.scheduleWithFixedDelay(runnable, > minCheckMs, minCheckMs, TimeUnit.MILLISECONDS); > > Now for our application, we will create a keyspacewithout any columnfamily > first. And only add needed columnfamily later depends on request. > However, when keyspacegot created (without any columnfamily ), the above > code will actually schedule a fixed delay flush check task with > Integer.MAX_VALUE ms > since there is no columnfamily yet. > Later when you add columnfamily to this empty keyspace, the initCf() method > in Table.java doesn't check whether the scheduled flush check task interval > need > to be updated or not. To fix this, we'd need to restart the Cassandra > after columnfamily added into the keyspace. > I would suggest that add additional logic in initCf() method to recreate a > scheduled flush check task if needed. > Regards, > Chen > www.evidentsoftware.com -- Jonathan Ellis Project Chair, Apache Cassandra co-founder of Riptano, the source for professional Cassandra support http://riptano.com