You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Nick Santini <ni...@kaseya.com> on 2010/12/15 23:26:20 UTC

batch mutate with only deletions on 0.7beta2

since the 0.7beta2 version doesnt support indexes for Super CF or for
columns that you might not now the name yet, im supporting them manually by
adding a row on the same CF where the key is the name of the column plus the
value, and in the columns hold the key to the referenced rows

this works as in i can actually find my rows using the secondary index rows

but when i try to delete the original row i want to update my secondary
indexs, so i create a mutation map in the same way i did it when i saved my
information, but this time it only contains deletions for those secondary
indexs rows and only for the column referencing to the row being deleted.
but this doesnt seem to work, it comes back successfully (no erros), but im
still able to find the references to the deleted row in those secondary
indexes

is there any issue trying to run a batch_mutate with only deletions?

thanks

Nicolas Santini

Re: batch mutate with only deletions on 0.7beta2

Posted by Nate McCall <na...@riptano.com>.
There are a couple of .NET clients listed on the wiki. Aquiles
particularly seems to be getting a lot of attention recently:
http://aquiles.codeplex.com/

Unless you have a specific use case (or are just experimenting) it's
best to avoid raw Thrift and make use of an existing library so you do
not have to roll your own pooling, configuration, etc.

On Wed, Dec 15, 2010 at 9:04 PM, Nick Santini <ni...@kaseya.com> wrote:
> found the issue, was on the logic of the test
> sorry about crying wolf :-p
> thanks for reading and all your help guys
>
> Nicolas Santini
> On Thu, Dec 16, 2010 at 3:55 PM, Nick Santini <ni...@kaseya.com>
> wrote:
>>
>> btw, inside the test the data row gets deleted, but not the secondary
>> index row/columns
>>
>> Nicolas Santini
>>
>>
>> On Thu, Dec 16, 2010 at 3:53 PM, Nick Santini <ni...@kaseya.com>
>> wrote:
>>>
>>> ok, after a few tests and debugs ive found that is actually deleting
>>> those columns, so great
>>> but the problem is different than what I thought it was. Im running the
>>> test which does:
>>> - create and save a row (here I save the secondary indexes)
>>> - find the row by a secondary index
>>> - delete the row (here I update the secondary indexes deleting the
>>> corresponding columns)
>>> - find the row by the same index -> this shouldnt return my row
>>> but it does!
>>> so apparently the deletion is not getting there when I read again, even
>>> if I put the thread to sleep 10 seconds
>>> funny is that, after the test finished, I try to get that row manually
>>> but all the deletes have gone through, even the secondary index ones
>>>
>>>
>>> Nicolas Santini
>>>
>>> On Thu, Dec 16, 2010 at 3:11 PM, Aaron Morton <aa...@thelastpickle.com>
>>> wrote:
>>>>
>>>> Nick,
>>>> The docs for the DateTime in .net say it's resolution is only 10ms. You
>>>> should try to find a higher resolution time source to
>>>> avoid accidentally sending multiple mutations (including deletions) with the
>>>> same time stamp. I'm not sure it's the cause of this problem, but it can
>>>> result in cases where a delete is not applied because there is an insert
>>>> with the same timestamp.
>>>> In python I use the seconds since epoch with 6 decimal places shifted
>>>> left.
>>>> Also, turn up the cassanfra logging level to DEBUG and make sure you are
>>>> sending what you think you are. Chances are you are sending the wrong data
>>>> in the request.
>>>>
>>>> Let me know how you get on.
>>>> Aaron
>>>> On 16 Dec, 2010,at 02:11 PM, Nick Santini <ni...@kaseya.com>
>>>> wrote:
>>>>
>>>> Im using thrift directly on C#
>>>> the code that is trying to delete all the columns referencing the row im
>>>> deleting on the secondary index rows looks like this
>>>> Mutation mutation = new Mutation();
>>>> mutation.Deletion = new Deletion();
>>>> mutation.Deletion.Timestamp = DateTime.Now.ToBinary();
>>>> List<byte[]> predicate = new List<byte[]>();
>>>> predicate.Add(utf8.GetBytes(columnName));
>>>> mutation.Deletion.Predicate = new SlicePredicate()
>>>> {
>>>>    Column_names = predicate
>>>> };
>>>> mutations.Add(mutation);
>>>> entry = new Dictionary<string, List<Mutation>>();
>>>> entry.Add(cfName, mutations);
>>>> mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);
>>>> CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);
>>>>
>>>> now, the code where I inserted the references is exactly the same, but
>>>> without the deletion part in the mutations
>>>>
>>>>
>>>> Nicolas Santini
>>>>
>>>> On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:
>>>>>
>>>>> What client are you using? If you're not using a client, what does your
>>>>> deletion code look like?
>>>>>
>>>>> - Tyler
>>>>>
>>>>>
>>>>> On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>
>>>>> wrote:
>>>>>>
>>>>>> thats not exactly what im seeing, is not a row, but columns on a row
>>>>>> that i was deleting
>>>>>> ie:
>>>>>> suppose i have a row where the key is sec_index_1 where i have two
>>>>>> columns with information about other row keys
>>>>>> sec_index_1 { key1:key1, key2:key2 }
>>>>>> then i add a deletion for the column named key2, run it through batch
>>>>>> mutate for the key sec_index_1
>>>>>> then i load the row again to see all my "references" stored in
>>>>>> columns, and im still getting
>>>>>> key1, key2
>>>>>>
>>>>>> Nicolas Santini
>>>>>>
>>>>>>
>>>>>> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> There's no problem doing deletions with batch_mutate, but you are
>>>>>>> probably seeing this:
>>>>>>>
>>>>>>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>>>>>>
>>>>>>> - Tyler
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini
>>>>>>> <ni...@kaseya.com> wrote:
>>>>>>>>
>>>>>>>> since the 0.7beta2 version doesnt support indexes for Super CF or
>>>>>>>> for columns that you might not now the name yet, im supporting them manually
>>>>>>>> by adding a row on the same CF where the key is the name of the column plus
>>>>>>>> the value, and in the columns hold the key to the referenced rows
>>>>>>>> this works as in i can actually find my rows using the secondary
>>>>>>>> index rows
>>>>>>>> but when i try to delete the original row i want to update my
>>>>>>>> secondary indexs, so i create a mutation map in the same way i did it when i
>>>>>>>> saved my information, but this time it only contains deletions for those
>>>>>>>> secondary indexs rows and only for the column referencing to the row being
>>>>>>>> deleted.
>>>>>>>> but this doesnt seem to work, it comes back successfully (no erros),
>>>>>>>> but im still able to find the references to the deleted row in those
>>>>>>>> secondary indexes
>>>>>>>> is there any issue trying to run a batch_mutate with only deletions?
>>>>>>>> thanks
>>>>>>>> Nicolas Santini
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Nick Santini <ni...@kaseya.com>.
found the issue, was on the logic of the test

sorry about crying wolf :-p

thanks for reading and all your help guys


Nicolas Santini

On Thu, Dec 16, 2010 at 3:55 PM, Nick Santini <ni...@kaseya.com>wrote:

> btw, inside the test the data row gets deleted, but not the secondary index
> row/columns
>
>
> Nicolas Santini
>
>
>
> On Thu, Dec 16, 2010 at 3:53 PM, Nick Santini <ni...@kaseya.com>wrote:
>
>> ok, after a few tests and debugs ive found that is actually deleting those
>> columns, so great
>>
>> but the problem is different than what I thought it was. Im running the
>> test which does:
>> - create and save a row (here I save the secondary indexes)
>> - find the row by a secondary index
>> - delete the row (here I update the secondary indexes deleting the
>> corresponding columns)
>> - find the row by the same index -> this shouldnt return my row
>>
>> but it does!
>>
>> so apparently the deletion is not getting there when I read again, even if
>> I put the thread to sleep 10 seconds
>> funny is that, after the test finished, I try to get that row manually but
>> all the deletes have gone through, even the secondary index ones
>>
>>
>>
>> Nicolas Santini
>>
>>
>> On Thu, Dec 16, 2010 at 3:11 PM, Aaron Morton <aa...@thelastpickle.com>wrote:
>>
>>> Nick,
>>> The docs for the DateTime in .net say it's resolution is only 10ms. You
>>> should try to find a higher resolution time source to
>>> avoid accidentally sending multiple mutations (including deletions) with the
>>> same time stamp. I'm not sure it's the cause of this problem, but it can
>>> result in cases where a delete is not applied because there is an insert
>>> with the same timestamp.
>>>
>>> In python I use the seconds since epoch with 6 decimal places shifted
>>> left.
>>>
>>> Also, turn up the cassanfra logging level to DEBUG and make sure you are
>>> sending what you think you are. Chances are you are sending the wrong data
>>> in the request.
>>>
>>> Let me know how you get on.
>>> Aaron
>>>
>>> On 16 Dec, 2010,at 02:11 PM, Nick Santini <ni...@kaseya.com>
>>> wrote:
>>>
>>> Im using thrift directly on C#
>>> the code that is trying to delete all the columns referencing the row im
>>> deleting on the secondary index rows looks like this
>>>
>>> Mutation mutation = new Mutation();
>>> mutation.Deletion = new Deletion();
>>> mutation.Deletion.Timestamp = DateTime.Now.ToBinary();
>>>
>>> List<byte[]> predicate = new List<byte[]>();
>>> predicate.Add(utf8.GetBytes(columnName));
>>>
>>> mutation.Deletion.Predicate = new SlicePredicate()
>>> {
>>>    Column_names = predicate
>>> };
>>>
>>> mutations.Add(mutation);
>>>
>>> entry = new Dictionary<string, List<Mutation>>();
>>> entry.Add(cfName, mutations);
>>>
>>> mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);
>>>
>>> CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);
>>>
>>>
>>> now, the code where I inserted the references is exactly the same, but
>>> without the deletion part in the mutations
>>>
>>>
>>> Nicolas Santini
>>>
>>>
>>> On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:
>>>
>>>> What client are you using? If you're not using a client, what does your
>>>> deletion code look like?
>>>>
>>>> - Tyler
>>>>
>>>>
>>>>
>>>> On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>wrote:
>>>>
>>>>> thats not exactly what im seeing, is not a row, but columns on a row
>>>>> that i was deleting
>>>>>
>>>>> ie:
>>>>> suppose i have a row where the key is sec_index_1 where i have two
>>>>> columns with information about other row keys
>>>>> sec_index_1 { key1:key1, key2:key2 }
>>>>>
>>>>> then i add a deletion for the column named key2, run it through batch
>>>>> mutate for the key sec_index_1
>>>>>
>>>>> then i load the row again to see all my "references" stored in columns,
>>>>> and im still getting
>>>>> key1, key2
>>>>>
>>>>> Nicolas Santini
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com>wrote:
>>>>>
>>>>>> There's no problem doing deletions with batch_mutate, but you are
>>>>>> probably seeing this:
>>>>>>
>>>>>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>>>>>
>>>>>> - Tyler
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <
>>>>>> nick.santini@kaseya.com> wrote:
>>>>>>
>>>>>>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>>>>>>> columns that you might not now the name yet, im supporting them manually by
>>>>>>> adding a row on the same CF where the key is the name of the column plus the
>>>>>>> value, and in the columns hold the key to the referenced rows
>>>>>>>
>>>>>>> this works as in i can actually find my rows using the secondary
>>>>>>> index rows
>>>>>>>
>>>>>>> but when i try to delete the original row i want to update my
>>>>>>> secondary indexs, so i create a mutation map in the same way i did it when i
>>>>>>> saved my information, but this time it only contains deletions for those
>>>>>>> secondary indexs rows and only for the column referencing to the row being
>>>>>>> deleted.
>>>>>>> but this doesnt seem to work, it comes back successfully (no erros),
>>>>>>> but im still able to find the references to the deleted row in those
>>>>>>> secondary indexes
>>>>>>>
>>>>>>> is there any issue trying to run a batch_mutate with only deletions?
>>>>>>>
>>>>>>> thanks
>>>>>>>
>>>>>>> Nicolas Santini
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Nick Santini <ni...@kaseya.com>.
btw, inside the test the data row gets deleted, but not the secondary index
row/columns


Nicolas Santini



On Thu, Dec 16, 2010 at 3:53 PM, Nick Santini <ni...@kaseya.com>wrote:

> ok, after a few tests and debugs ive found that is actually deleting those
> columns, so great
>
> but the problem is different than what I thought it was. Im running the
> test which does:
> - create and save a row (here I save the secondary indexes)
> - find the row by a secondary index
> - delete the row (here I update the secondary indexes deleting the
> corresponding columns)
> - find the row by the same index -> this shouldnt return my row
>
> but it does!
>
> so apparently the deletion is not getting there when I read again, even if
> I put the thread to sleep 10 seconds
> funny is that, after the test finished, I try to get that row manually but
> all the deletes have gone through, even the secondary index ones
>
>
>
> Nicolas Santini
>
>
> On Thu, Dec 16, 2010 at 3:11 PM, Aaron Morton <aa...@thelastpickle.com>wrote:
>
>> Nick,
>> The docs for the DateTime in .net say it's resolution is only 10ms. You
>> should try to find a higher resolution time source to
>> avoid accidentally sending multiple mutations (including deletions) with the
>> same time stamp. I'm not sure it's the cause of this problem, but it can
>> result in cases where a delete is not applied because there is an insert
>> with the same timestamp.
>>
>> In python I use the seconds since epoch with 6 decimal places shifted
>> left.
>>
>> Also, turn up the cassanfra logging level to DEBUG and make sure you are
>> sending what you think you are. Chances are you are sending the wrong data
>> in the request.
>>
>> Let me know how you get on.
>> Aaron
>>
>> On 16 Dec, 2010,at 02:11 PM, Nick Santini <ni...@kaseya.com>
>> wrote:
>>
>> Im using thrift directly on C#
>> the code that is trying to delete all the columns referencing the row im
>> deleting on the secondary index rows looks like this
>>
>> Mutation mutation = new Mutation();
>> mutation.Deletion = new Deletion();
>> mutation.Deletion.Timestamp = DateTime.Now.ToBinary();
>>
>> List<byte[]> predicate = new List<byte[]>();
>> predicate.Add(utf8.GetBytes(columnName));
>>
>> mutation.Deletion.Predicate = new SlicePredicate()
>> {
>>    Column_names = predicate
>> };
>>
>> mutations.Add(mutation);
>>
>> entry = new Dictionary<string, List<Mutation>>();
>> entry.Add(cfName, mutations);
>>
>> mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);
>>
>> CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);
>>
>>
>> now, the code where I inserted the references is exactly the same, but
>> without the deletion part in the mutations
>>
>>
>> Nicolas Santini
>>
>>
>> On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:
>>
>>> What client are you using? If you're not using a client, what does your
>>> deletion code look like?
>>>
>>> - Tyler
>>>
>>>
>>>
>>> On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>wrote:
>>>
>>>> thats not exactly what im seeing, is not a row, but columns on a row
>>>> that i was deleting
>>>>
>>>> ie:
>>>> suppose i have a row where the key is sec_index_1 where i have two
>>>> columns with information about other row keys
>>>> sec_index_1 { key1:key1, key2:key2 }
>>>>
>>>> then i add a deletion for the column named key2, run it through batch
>>>> mutate for the key sec_index_1
>>>>
>>>> then i load the row again to see all my "references" stored in columns,
>>>> and im still getting
>>>> key1, key2
>>>>
>>>> Nicolas Santini
>>>>
>>>>
>>>>
>>>> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com>wrote:
>>>>
>>>>> There's no problem doing deletions with batch_mutate, but you are
>>>>> probably seeing this:
>>>>>
>>>>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>>>>
>>>>> - Tyler
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <nick.santini@kaseya.com
>>>>> > wrote:
>>>>>
>>>>>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>>>>>> columns that you might not now the name yet, im supporting them manually by
>>>>>> adding a row on the same CF where the key is the name of the column plus the
>>>>>> value, and in the columns hold the key to the referenced rows
>>>>>>
>>>>>> this works as in i can actually find my rows using the secondary index
>>>>>> rows
>>>>>>
>>>>>> but when i try to delete the original row i want to update my
>>>>>> secondary indexs, so i create a mutation map in the same way i did it when i
>>>>>> saved my information, but this time it only contains deletions for those
>>>>>> secondary indexs rows and only for the column referencing to the row being
>>>>>> deleted.
>>>>>> but this doesnt seem to work, it comes back successfully (no erros),
>>>>>> but im still able to find the references to the deleted row in those
>>>>>> secondary indexes
>>>>>>
>>>>>> is there any issue trying to run a batch_mutate with only deletions?
>>>>>>
>>>>>> thanks
>>>>>>
>>>>>> Nicolas Santini
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Nick Santini <ni...@kaseya.com>.
ok, after a few tests and debugs ive found that is actually deleting those
columns, so great

but the problem is different than what I thought it was. Im running the test
which does:
- create and save a row (here I save the secondary indexes)
- find the row by a secondary index
- delete the row (here I update the secondary indexes deleting the
corresponding columns)
- find the row by the same index -> this shouldnt return my row

but it does!

so apparently the deletion is not getting there when I read again, even if I
put the thread to sleep 10 seconds
funny is that, after the test finished, I try to get that row manually but
all the deletes have gone through, even the secondary index ones



Nicolas Santini


On Thu, Dec 16, 2010 at 3:11 PM, Aaron Morton <aa...@thelastpickle.com>wrote:

> Nick,
> The docs for the DateTime in .net say it's resolution is only 10ms. You
> should try to find a higher resolution time source to
> avoid accidentally sending multiple mutations (including deletions) with the
> same time stamp. I'm not sure it's the cause of this problem, but it can
> result in cases where a delete is not applied because there is an insert
> with the same timestamp.
>
> In python I use the seconds since epoch with 6 decimal places shifted left.
>
> Also, turn up the cassanfra logging level to DEBUG and make sure you are
> sending what you think you are. Chances are you are sending the wrong data
> in the request.
>
> Let me know how you get on.
> Aaron
>
> On 16 Dec, 2010,at 02:11 PM, Nick Santini <ni...@kaseya.com> wrote:
>
> Im using thrift directly on C#
> the code that is trying to delete all the columns referencing the row im
> deleting on the secondary index rows looks like this
>
> Mutation mutation = new Mutation();
> mutation.Deletion = new Deletion();
> mutation.Deletion.Timestamp = DateTime.Now.ToBinary();
>
> List<byte[]> predicate = new List<byte[]>();
> predicate.Add(utf8.GetBytes(columnName));
>
> mutation.Deletion.Predicate = new SlicePredicate()
> {
>    Column_names = predicate
> };
>
> mutations.Add(mutation);
>
> entry = new Dictionary<string, List<Mutation>>();
> entry.Add(cfName, mutations);
>
> mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);
>
> CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);
>
>
> now, the code where I inserted the references is exactly the same, but
> without the deletion part in the mutations
>
>
> Nicolas Santini
>
>
> On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:
>
>> What client are you using? If you're not using a client, what does your
>> deletion code look like?
>>
>> - Tyler
>>
>>
>>
>> On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>wrote:
>>
>>> thats not exactly what im seeing, is not a row, but columns on a row that
>>> i was deleting
>>>
>>> ie:
>>> suppose i have a row where the key is sec_index_1 where i have two
>>> columns with information about other row keys
>>> sec_index_1 { key1:key1, key2:key2 }
>>>
>>> then i add a deletion for the column named key2, run it through batch
>>> mutate for the key sec_index_1
>>>
>>> then i load the row again to see all my "references" stored in columns,
>>> and im still getting
>>> key1, key2
>>>
>>> Nicolas Santini
>>>
>>>
>>>
>>> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com> wrote:
>>>
>>>> There's no problem doing deletions with batch_mutate, but you are
>>>> probably seeing this:
>>>>
>>>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>>>
>>>> - Tyler
>>>>
>>>>
>>>>
>>>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com>wrote:
>>>>
>>>>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>>>>> columns that you might not now the name yet, im supporting them manually by
>>>>> adding a row on the same CF where the key is the name of the column plus the
>>>>> value, and in the columns hold the key to the referenced rows
>>>>>
>>>>> this works as in i can actually find my rows using the secondary index
>>>>> rows
>>>>>
>>>>> but when i try to delete the original row i want to update my secondary
>>>>> indexs, so i create a mutation map in the same way i did it when i saved my
>>>>> information, but this time it only contains deletions for those secondary
>>>>> indexs rows and only for the column referencing to the row being deleted.
>>>>> but this doesnt seem to work, it comes back successfully (no erros),
>>>>> but im still able to find the references to the deleted row in those
>>>>> secondary indexes
>>>>>
>>>>> is there any issue trying to run a batch_mutate with only deletions?
>>>>>
>>>>> thanks
>>>>>
>>>>> Nicolas Santini
>>>>>
>>>>>
>>>>
>>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Aaron Morton <aa...@thelastpickle.com>.
Nick, 
The docs for the DateTime in .net say it's resolution is only 10ms. You should try to find a higher resolution time source to avoid accidentally sending multiple mutations (including deletions) with the same time stamp. I'm not sure it's the cause of this problem, but it can result in cases where a delete is not applied because there is an insert with the same timestamp. 

In python I use the seconds since epoch with 6 decimal places shifted left.

Also, turn up the cassanfra logging level to DEBUG and make sure you are sending what you think you are. Chances are you are sending the wrong data in the request. 

Let me know how you get on. 
Aaron

On 16 Dec, 2010,at 02:11 PM, Nick Santini <ni...@kaseya.com> wrote:

Im using thrift directly on C#
the code that is trying to delete all the columns referencing the row im deleting on the secondary index rows looks like this

Mutation mutation = new Mutation();
mutation.Deletion = new Deletion();
mutation.Deletion.Timestamp = DateTime.Now.ToBinary();

List<byte[]> predicate = new List<byte[]>();
predicate.Add(utf8.GetBytes(columnName));

mutationDeletion.Predicate = new SlicePredicate()
{
   Column_names = predicate
};

mutations.Add(mutation);

entry = new Dictionary<string, List<Mutation>>();
entry.Add(cfName, mutations);

mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);

CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);


now, the code where I inserted the references is exactly the same, but without the deletion part in the mutations


Nicolas Santini


On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:
What client are you using? If you're not using a client, what does your deletion code look like?

- Tyler



On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com> wrote:
thats not exactly what im seeing, is not a row, but columns on a row that i was deleting

ie:
suppose i have a row where the key is sec_index_1 where i have two columns with information about other row keys
sec_index_1 { key1:key1, key2:key2 }

then i add a deletion for the column named key2, run it through batch mutate for the key sec_index_1

then i load the row again to see all my "references" stored in columns, and im still getting
key1, key2

Nicolas Santini



On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com> wrote:
There's no problem doing deletions with batch_mutate, but you are probably seeing this:

http://wiki.apache.org/cassandra/FAQ#range_ghosts

- Tyler



On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com> wrote:
since the 0.7beta2 version doesnt support indexes for Super CF or for columns that you might not now the name yet, im supporting them manually by adding a row on the same CF where the key is the name of the column plus the value, and in the columns hold the key to the referenced rows

this works as in i can actually find my rows using the secondary index rows

but when i try to delete the original row i want to update my secondary indexs, so i create a mutation map in the same way i did it when i saved my information, but this time it only contains deletions for those secondary indexs rows and only for the column referencing to the row being deleted.
but this doesnt seem to work, it comes back successfully (no erros), but im still able to find the references to the deleted row in those secondary indexes

is there any issue trying to run a batch_mutate with only deletions?

thanks 

Nicolas Santini






Re: batch mutate with only deletions on 0.7beta2

Posted by Nick Santini <ni...@kaseya.com>.
Im using thrift directly on C#
the code that is trying to delete all the columns referencing the row im
deleting on the secondary index rows looks like this

Mutation mutation = new Mutation();
mutation.Deletion = new Deletion();
mutation.Deletion.Timestamp = DateTime.Now.ToBinary();

List<byte[]> predicate = new List<byte[]>();
predicate.Add(utf8.GetBytes(columnName));

mutation.Deletion.Predicate = new SlicePredicate()
{
   Column_names = predicate
};

mutations.Add(mutation);

entry = new Dictionary<string, List<Mutation>>();
entry.Add(cfName, mutations);

mutation_map.Add(utf8EncodingInstance.GetBytes(secIndexKey), entry);

CassandraClient.batch_mutate(mutation_map, ConsistencyLevel.ONE);


now, the code where I inserted the references is exactly the same, but
without the deletion part in the mutations


Nicolas Santini


On Thu, Dec 16, 2010 at 12:55 PM, Tyler Hobbs <ty...@riptano.com> wrote:

> What client are you using? If you're not using a client, what does your
> deletion code look like?
>
> - Tyler
>
>
> On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>wrote:
>
>> thats not exactly what im seeing, is not a row, but columns on a row that
>> i was deleting
>>
>> ie:
>> suppose i have a row where the key is sec_index_1 where i have two columns
>> with information about other row keys
>> sec_index_1 { key1:key1, key2:key2 }
>>
>> then i add a deletion for the column named key2, run it through batch
>> mutate for the key sec_index_1
>>
>> then i load the row again to see all my "references" stored in columns,
>> and im still getting
>> key1, key2
>>
>> Nicolas Santini
>>
>>
>> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com> wrote:
>>
>>> There's no problem doing deletions with batch_mutate, but you are
>>> probably seeing this:
>>>
>>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>>
>>> - Tyler
>>>
>>>
>>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com>wrote:
>>>
>>>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>>>> columns that you might not now the name yet, im supporting them manually by
>>>> adding a row on the same CF where the key is the name of the column plus the
>>>> value, and in the columns hold the key to the referenced rows
>>>>
>>>> this works as in i can actually find my rows using the secondary index
>>>> rows
>>>>
>>>> but when i try to delete the original row i want to update my secondary
>>>> indexs, so i create a mutation map in the same way i did it when i saved my
>>>> information, but this time it only contains deletions for those secondary
>>>> indexs rows and only for the column referencing to the row being deleted.
>>>> but this doesnt seem to work, it comes back successfully (no erros), but
>>>> im still able to find the references to the deleted row in those secondary
>>>> indexes
>>>>
>>>> is there any issue trying to run a batch_mutate with only deletions?
>>>>
>>>> thanks
>>>>
>>>> Nicolas Santini
>>>>
>>>>
>>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Tyler Hobbs <ty...@riptano.com>.
What client are you using? If you're not using a client, what does your
deletion code look like?

- Tyler

On Wed, Dec 15, 2010 at 4:58 PM, Nick Santini <ni...@kaseya.com>wrote:

> thats not exactly what im seeing, is not a row, but columns on a row that i
> was deleting
>
> ie:
> suppose i have a row where the key is sec_index_1 where i have two columns
> with information about other row keys
> sec_index_1 { key1:key1, key2:key2 }
>
> then i add a deletion for the column named key2, run it through batch
> mutate for the key sec_index_1
>
> then i load the row again to see all my "references" stored in columns, and
> im still getting
> key1, key2
>
> Nicolas Santini
>
>
> On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com> wrote:
>
>> There's no problem doing deletions with batch_mutate, but you are probably
>> seeing this:
>>
>> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>>
>> - Tyler
>>
>>
>> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com>wrote:
>>
>>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>>> columns that you might not now the name yet, im supporting them manually by
>>> adding a row on the same CF where the key is the name of the column plus the
>>> value, and in the columns hold the key to the referenced rows
>>>
>>> this works as in i can actually find my rows using the secondary index
>>> rows
>>>
>>> but when i try to delete the original row i want to update my secondary
>>> indexs, so i create a mutation map in the same way i did it when i saved my
>>> information, but this time it only contains deletions for those secondary
>>> indexs rows and only for the column referencing to the row being deleted.
>>> but this doesnt seem to work, it comes back successfully (no erros), but
>>> im still able to find the references to the deleted row in those secondary
>>> indexes
>>>
>>> is there any issue trying to run a batch_mutate with only deletions?
>>>
>>> thanks
>>>
>>> Nicolas Santini
>>>
>>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Nick Santini <ni...@kaseya.com>.
thats not exactly what im seeing, is not a row, but columns on a row that i
was deleting

ie:
suppose i have a row where the key is sec_index_1 where i have two columns
with information about other row keys
sec_index_1 { key1:key1, key2:key2 }

then i add a deletion for the column named key2, run it through batch mutate
for the key sec_index_1

then i load the row again to see all my "references" stored in columns, and
im still getting
key1, key2

Nicolas Santini


On Thu, Dec 16, 2010 at 11:52 AM, Tyler Hobbs <ty...@riptano.com> wrote:

> There's no problem doing deletions with batch_mutate, but you are probably
> seeing this:
>
> http://wiki.apache.org/cassandra/FAQ#range_ghosts
>
> - Tyler
>
>
> On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com>wrote:
>
>> since the 0.7beta2 version doesnt support indexes for Super CF or for
>> columns that you might not now the name yet, im supporting them manually by
>> adding a row on the same CF where the key is the name of the column plus the
>> value, and in the columns hold the key to the referenced rows
>>
>> this works as in i can actually find my rows using the secondary index
>> rows
>>
>> but when i try to delete the original row i want to update my secondary
>> indexs, so i create a mutation map in the same way i did it when i saved my
>> information, but this time it only contains deletions for those secondary
>> indexs rows and only for the column referencing to the row being deleted.
>> but this doesnt seem to work, it comes back successfully (no erros), but
>> im still able to find the references to the deleted row in those secondary
>> indexes
>>
>> is there any issue trying to run a batch_mutate with only deletions?
>>
>> thanks
>>
>> Nicolas Santini
>>
>>
>

Re: batch mutate with only deletions on 0.7beta2

Posted by Tyler Hobbs <ty...@riptano.com>.
There's no problem doing deletions with batch_mutate, but you are probably
seeing this:

http://wiki.apache.org/cassandra/FAQ#range_ghosts

- Tyler

On Wed, Dec 15, 2010 at 4:26 PM, Nick Santini <ni...@kaseya.com>wrote:

> since the 0.7beta2 version doesnt support indexes for Super CF or for
> columns that you might not now the name yet, im supporting them manually by
> adding a row on the same CF where the key is the name of the column plus the
> value, and in the columns hold the key to the referenced rows
>
> this works as in i can actually find my rows using the secondary index rows
>
> but when i try to delete the original row i want to update my secondary
> indexs, so i create a mutation map in the same way i did it when i saved my
> information, but this time it only contains deletions for those secondary
> indexs rows and only for the column referencing to the row being deleted.
> but this doesnt seem to work, it comes back successfully (no erros), but im
> still able to find the references to the deleted row in those secondary
> indexes
>
> is there any issue trying to run a batch_mutate with only deletions?
>
> thanks
>
> Nicolas Santini
>
>