[ 
https://issues.apache.org/jira/browse/CASSANDRA-8206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tyler Hobbs updated CASSANDRA-8206:
-----------------------------------
    Attachment: 8206-WIP.txt

So, the root of the issue is that {{CompositesIndexOnClusteringKey}} returns 
{{true}} for any column name in {{indexes()}}.  Any time an individual column 
is deleted, {{delete()}} gets called and the index entry for the whole row is 
deleted.

I've attached a WIP patch that overrides {{delete()}} in 
{{CompositesIndexOnClusteringKey}} to make it do nothing, since the row should 
only be removed from the index when the full row is deleted.  However, I'm not 
at all familiar with the other ways that the secondary index is updated, so I 
believe there's more work to be done (or maybe a better approach).

Additionally, we definitely need some test coverage around deletions for 
secondary indexes on partition keys and clustering keys.  There are a couple of 
dtests that could be expanded (clustering_index_test, 
edge_2i_on_complex_pk_test).

[~slebresne] or [~beobal], would one of you two like to take over this ticket?

> Deleting columns breaks secondary index on clustering column
> ------------------------------------------------------------
>
>                 Key: CASSANDRA-8206
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8206
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: Tuukka Mustonen
>            Assignee: Tyler Hobbs
>            Priority: Critical
>             Fix For: 2.0.12, 2.1.2
>
>         Attachments: 8206-WIP.txt
>
>
> Removing items from a set breaks index for field {{id}}:
> {noformat}
> cqlsh:cs> CREATE TABLE buckets (
>       ...   tenant int,
>       ...   id int,
>       ...   items set<text>,
>       ...   PRIMARY KEY (tenant, id)
>       ... );
> cqlsh:cs> CREATE INDEX buckets_ids ON buckets(id);
> cqlsh:cs> INSERT INTO buckets (tenant, id, items) VALUES (1, 1, {'foo', 
> 'bar'});
> cqlsh:cs> SELECT * FROM buckets;
>  tenant | id | items
> --------+----+----------------
>       1 |  1 | {'bar', 'foo'}
> (1 rows)
> cqlsh:cs> SELECT * FROM buckets WHERE id = 1;
>  tenant | id | items
> --------+----+----------------
>       1 |  1 | {'bar', 'foo'}
> (1 rows)
> cqlsh:cs> UPDATE buckets SET items=items-{'foo'} WHERE tenant=1 AND id=1;
> cqlsh:cs> SELECT * FROM buckets;
>  tenant | id | items
> --------+----+---------
>       1 |  1 | {'bar'}
> (1 rows)
> cqlsh:cs> SELECT * FROM buckets WHERE id = 1;
> (0 rows)
> {noformat}
> Re-building the index fixes the issue:
> {noformat}
> cqlsh:cs> DROP INDEX buckets_ids;
> cqlsh:cs> CREATE INDEX buckets_ids ON buckets(id);
> cqlsh:cs> SELECT * FROM buckets WHERE id = 1;
>  tenant | id | items
> --------+----+---------
>       1 |  1 | {'bar'}
> (1 rows)
> {noformat}
> Adding items does not cause similar failure, only delete. Also didn't test if 
> other collections are also affected(?)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to