[ 
https://issues.apache.org/jira/browse/CASSANDRA-2183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998409#comment-12998409
 ] 

Hudson commented on CASSANDRA-2183:
-----------------------------------

Integrated in Cassandra-0.7 #309 (See 
[https://hudson.apache.org/hudson/job/Cassandra-0.7/309/])
    

> memtable_flush_after_mins setting not working
> ---------------------------------------------
>
>                 Key: CASSANDRA-2183
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-2183
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 0.7.0
>            Reporter: Ching-cheng
>            Assignee: Jonathan Ellis
>            Priority: Minor
>             Fix For: 0.7.3
>
>         Attachments: 2183.txt
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> 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 without 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.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to