You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Weijun Li <we...@gmail.com> on 2010/03/10 22:43:52 UTC

Re: Strategy to delete/expire keys in cassandra

Hi Sylvain,

I applied your patch to 0.5 but it seems that it's not compilable:

1) column.getTtl() is no defined in RowMutation.java
public static RowMutation getRowMutation(String table, String key,
Map<String, List<ColumnOrSuperColumn>> cfmap)
    {
        RowMutation rm = new RowMutation(table, key.trim());
        for (Map.Entry<String, List<ColumnOrSuperColumn>> entry :
cfmap.entrySet())
        {
            String cfName = entry.getKey();
            for (ColumnOrSuperColumn cosc : entry.getValue())
            {
                if (cosc.column == null)
                {
                    assert cosc.super_column != null;
                    for (org.apache.cassandra.service.Column column :
cosc.super_column.columns)
                    {
                        rm.add(new QueryPath(cfName, cosc.super_column.name,
column.name), column.value, column.timestamp, column.getTtl());
                    }
                }
                else
                {
                    assert cosc.super_column == null;
                    rm.add(new QueryPath(cfName, null, cosc.column.name),
cosc.column.value, cosc.column.timestamp, cosc.column.getTtl());
                }
            }
        }
        return rm;
    }

2) CassandraServer.java: Column.setTtl() is not defined.
if (column instanceof ExpiringColumn)
            {
                thrift_column.setTtl(((ExpiringColumn)
column).getTimeToLive());
            }

3) CliClient.java: type mismatch for ColumnParent
thriftClient_.insert(tableName, key, new ColumnParent(columnFamily,
superColumnName),
                             new Column(columnName, value.getBytes(),
System.currentTimeMillis()), ConsistencyLevel.ONE);

It seems that the patch doesn't add getTtl()/setTtl() stuff to Column.java?

Thanks,
-Weijun

-----Original Message-----
> From: Sylvain Lebresne [mailto:sylvain@yakaz.com]
> Sent: Thursday, February 25, 2010 2:23 AM
> To: Weijun Li
> Cc: cassandra-user@incubator.apache.org
> Subject: Re: Strategy to delete/expire keys in cassandra
>
> Hi,
>
> > Should I just run command (in Cassandra 0.5 source folder?) like:
> > patch –p1 –i  0001-Add-new-ExpiringColumn-class.patch
> > for all of the five patches in your ticket?
>
> Well, actually I lied. The patches were made for a version a little after
> 0.5.
> If you really want to try, I attach a version of those patches that
> (should)
> work with 0.5 (There is only the 3 first patch, but the fourth one is for
> tests so not necessary per se). Apply them with your patch command.
> Still, to compile that you will have to regenerate the thrift java
> interface
> (with ant gen-thrift-java), but for that you will have to install the right
> svn revision of thrift (which is libthrift-r820831 for 0.5). And if you
> manage to make it work, you will have to digg in cassandra.thrift as it
> make
> change to it.
>
> In the end, remember that this is not an official patch yet and it *will
> not* make it in Cassandra in its current form. All I can tell you is that I
> need those expiring columns for quite some of my usage and I will do what I
> can to make this feature included if and when possible.
>
> > Also what’s your opinion on extending ExpiringColumn to expire a key
> > completely? Otherwise it will be difficult to track what are expired
> > or old rows in Cassandra.
>
> I'm not sure how to make full rows (or even full superColumns for that
> matter) expire. What if you set a row to expire after some time and add new
> columns before this expiration ? Should you update the expiration of the
> row
> ? Which is to say that a row will expires when it's last column expire,
> which is almost what you get with expiring column.
> The one thing you may want though is that when all the columns of a row
> expire (or, to be precise, get physically deleted), the row itself is
> deleted. Looking at the code, I'm not convince this happen and I'm not sure
> why.
>
> --
> Sylvain
>
>

Re: Strategy to delete/expire keys in cassandra

Posted by Weijun Li <we...@gmail.com>.
Never mind. Figured out I forgot to compile thrift :)

Thanks,

-Weijun

On Wed, Mar 10, 2010 at 1:43 PM, Weijun Li <we...@gmail.com> wrote:

> Hi Sylvain,
>
> I applied your patch to 0.5 but it seems that it's not compilable:
>
> 1) column.getTtl() is no defined in RowMutation.java
> public static RowMutation getRowMutation(String table, String key,
> Map<String, List<ColumnOrSuperColumn>> cfmap)
>     {
>         RowMutation rm = new RowMutation(table, key.trim());
>         for (Map.Entry<String, List<ColumnOrSuperColumn>> entry :
> cfmap.entrySet())
>         {
>             String cfName = entry.getKey();
>             for (ColumnOrSuperColumn cosc : entry.getValue())
>             {
>                 if (cosc.column == null)
>                 {
>                     assert cosc.super_column != null;
>                     for (org.apache.cassandra.service.Column column :
> cosc.super_column.columns)
>                     {
>                         rm.add(new QueryPath(cfName,
> cosc.super_column.name, column.name), column.value, column.timestamp,
> column.getTtl());
>                     }
>                 }
>                 else
>                 {
>                     assert cosc.super_column == null;
>                     rm.add(new QueryPath(cfName, null, cosc.column.name),
> cosc.column.value, cosc.column.timestamp, cosc.column.getTtl());
>                 }
>             }
>         }
>         return rm;
>     }
>
> 2) CassandraServer.java: Column.setTtl() is not defined.
> if (column instanceof ExpiringColumn)
>             {
>                 thrift_column.setTtl(((ExpiringColumn)
> column).getTimeToLive());
>             }
>
> 3) CliClient.java: type mismatch for ColumnParent
> thriftClient_.insert(tableName, key, new ColumnParent(columnFamily,
> superColumnName),
>                              new Column(columnName, value.getBytes(),
> System.currentTimeMillis()), ConsistencyLevel.ONE);
>
> It seems that the patch doesn't add getTtl()/setTtl() stuff to Column.java?
>
>
> Thanks,
> -Weijun
>
>  -----Original Message-----
>> From: Sylvain Lebresne [mailto:sylvain@yakaz.com]
>> Sent: Thursday, February 25, 2010 2:23 AM
>> To: Weijun Li
>> Cc: cassandra-user@incubator.apache.org
>> Subject: Re: Strategy to delete/expire keys in cassandra
>>
>> Hi,
>>
>> > Should I just run command (in Cassandra 0.5 source folder?) like:
>> > patch –p1 –i  0001-Add-new-ExpiringColumn-class.patch
>> > for all of the five patches in your ticket?
>>
>> Well, actually I lied. The patches were made for a version a little after
>> 0.5.
>> If you really want to try, I attach a version of those patches that
>> (should)
>> work with 0.5 (There is only the 3 first patch, but the fourth one is for
>> tests so not necessary per se). Apply them with your patch command.
>> Still, to compile that you will have to regenerate the thrift java
>> interface
>> (with ant gen-thrift-java), but for that you will have to install the
>> right
>> svn revision of thrift (which is libthrift-r820831 for 0.5). And if you
>> manage to make it work, you will have to digg in cassandra.thrift as it
>> make
>> change to it.
>>
>> In the end, remember that this is not an official patch yet and it *will
>> not* make it in Cassandra in its current form. All I can tell you is that
>> I
>> need those expiring columns for quite some of my usage and I will do what
>> I
>> can to make this feature included if and when possible.
>>
>> > Also what’s your opinion on extending ExpiringColumn to expire a key
>> > completely? Otherwise it will be difficult to track what are expired
>> > or old rows in Cassandra.
>>
>> I'm not sure how to make full rows (or even full superColumns for that
>> matter) expire. What if you set a row to expire after some time and add
>> new
>> columns before this expiration ? Should you update the expiration of the
>> row
>> ? Which is to say that a row will expires when it's last column expire,
>> which is almost what you get with expiring column.
>> The one thing you may want though is that when all the columns of a row
>> expire (or, to be precise, get physically deleted), the row itself is
>> deleted. Looking at the code, I'm not convince this happen and I'm not
>> sure
>> why.
>>
>> --
>> Sylvain
>>
>>
>
>