cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kirk True (JIRA)" <j...@apache.org>
Subject [jira] [Issue Comment Edited] (CASSANDRA-3974) Per-CF TTL
Date Mon, 07 May 2012 20:08:50 GMT

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

Kirk True edited comment on CASSANDRA-3974 at 5/7/12 8:08 PM:
--------------------------------------------------------------

My understanding is that in order to reduce potential user confusion when updating the column
family's default TTL, we need to keep the column family's default TTL value separate. That
is, we probably *don't* want to make {{ExpiringColumn}} instances for a column family that
has a default TTL (using {{min(CF TTL, column TTL)}} as the TTL value). Instead, we keep the
logic as is and keep the column family's default TTL value in {{CFMetaData}}.

That's all fine and good, but looking at the code I'm not quite sure as to when we'd check
the column family default TTL. It would seem that we need to pass a {{CFMetaData}} instance
in to {{Column}}'s {{isMarkedForDelete}} so that it can perform logic such as:

{noformat}
    public boolean isMarkedForDelete(CFMetaData metadata)
    {
        if (metadata.getDefaultTimeToLive() > 0)
        {
            // Check if we're using a CF-based TTL.
            return System.currentTimeMillis() >= (timestamp + (metadata.getDefaultTimeToLive()
* 1000));
        }
        else
        {
            return (int) (System.currentTimeMillis() / 1000) >= getLocalDeletionTime();
        }
    }
{noformat}

Is this the correct line of thought? If so, that changes a couple of dozen call sites which
makes me wonder if I'm doing something wrong :)
                
      was (Author: kirktrue):
    My understanding is that in order to reduce potential user confusion when updating the
column family's default TTL, we need to keep the column family's default TTL value separate.
That is, we probably *don't* want to make {{ExpiringColumn}}s for a column family that has
a default TTL (using {{min(CF TTL, column TTL)}} as the TTL value). Instead, we keep the logic
as is and keep the column family's default TTL value in {{CFMetaData}}.

That's all fine and good, but looking at the code I'm not quite sure as to when we'd check
the column family default TTL. It would seem that we need to pass a {{CFMetaData}} instance
in to {{Column}}'s {{isMarkedForDelete}} so that it can perform logic such as:

{noformat}
    public boolean isMarkedForDelete(CFMetaData metadata)
    {
        if (metadata.getDefaultTimeToLive() > 0)
        {
            // Check if we're using a CF-based TTL.
            return System.currentTimeMillis() >= (timestamp + (metadata.getDefaultTimeToLive()
* 1000));
        }
        else
        {
            return (int) (System.currentTimeMillis() / 1000) >= getLocalDeletionTime();
        }
    }
{noformat}

Is this the correct line of thought? If so, that changes a couple of dozen call sites which
makes me wonder if I'm doing something wrong :)
                  
> Per-CF TTL
> ----------
>
>                 Key: CASSANDRA-3974
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3974
>             Project: Cassandra
>          Issue Type: New Feature
>            Reporter: Jonathan Ellis
>            Assignee: Kirk True
>            Priority: Minor
>             Fix For: 1.2
>
>         Attachments: trunk-3974.txt
>
>
> Per-CF TTL would allow compaction optimizations ("drop an entire sstable's worth of expired
data") that we can't do with per-column.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message