incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ching-Cheng Chen <cc...@evidentsoftware.com>
Subject Re: memtable_flush_after_mins setting not working
Date Thu, 17 Feb 2011 16:52:13 GMT
https://issues.apache.org/jira/browse/CASSANDRA-2183

<https://issues.apache.org/jira/browse/CASSANDRA-2183>Regards,

Chen

www.evidentsoftware.com

On Thu, Feb 17, 2011 at 11:47 AM, Ching-Cheng Chen <
cchen@evidentsoftware.com> wrote:

> Certainly, I'll open a ticket to track this issue.
>
> Regards,
>
> Chen
>
> www.evidentsoftware.com
>
>
> On Thu, Feb 17, 2011 at 11:42 AM, Jonathan Ellis <jbellis@gmail.com>wrote:
>
>> 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
>> <cchen@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
>>
>
>
>
> --
> www.evidentsoftware.com
>

Mime
View raw message