cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrés de la Peña (JIRA) <>
Subject [jira] [Commented] (CASSANDRA-10092) Generalize PerRowSecondaryIndex validation
Date Tue, 27 Oct 2015 19:01:27 GMT


Andrés de la Peña commented on CASSANDRA-10092:

Thanks for your revision. I have uploaded a new version of the patch for 2.2. I have fixed
the validation in {{CassandraServer.createMutationList}} and I have added tests for the three
{{CassandraServer}} methods. All the tests check validation both in key and columns. I hope
you find it OK, and sorry for the inconvenience, I'm not familiarized with the Thrift API.

> Generalize PerRowSecondaryIndex validation
> ------------------------------------------
>                 Key: CASSANDRA-10092
>                 URL:
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Andrés de la Peña
>            Assignee: Andrés de la Peña
>            Priority: Minor
>              Labels: 2i, secondary_index, validation
>             Fix For: 2.1.x, 2.2.x
>         Attachments: CASSANDRA-10092_v2.patch, CASSANDRA-10092_v3.patch, improve_2i_validation.patch
> Index validation is currently done in a per-cell basis. However, per-row secondary index
developers can be interested in validating all the written columns at once, because some implementations
need to check the validity of a row write by comparing some column values against others.
For example, a per row 2i implementation indexing time ranges (composed by a start date column
and an end date column) should check that the start date is before the stop date.
> I'm attaching a patch adding a new method to {{PerRowSecondaryIndex}}:
> {code:java}
> public void validate(ByteBuffer key, ColumnFamily cf) throws InvalidRequestException
> {code}
> and a new method to {{SecondaryIndexManager}}:
> {code:java}
> public void validateRowLevelIndexes(ByteBuffer key, ColumnFamily cf) throws InvalidRequestException
>   {
>       for (SecondaryIndex index : rowLevelIndexMap.values())
>       {
>           ((PerRowSecondaryIndex) index).validate(key, cf);
>       }
>   }
> {code}
> This method is invoked in CQL {{UpdateStatement#validateIndexedColumns}}. This way, {{PerRowSecondaryIndex}}
could perform complex write validation.
> I have tried to do the patch in the least invasive way possible. Maybe the current method
{{SecondaryIndex#validate(ByteBuffer, Cell)}} should be moved to {{PerColumnSecondaryIndex}},
and the {{InvalidRequestException}} that informs about the particular 64k limitation should
be thrown by {{AbstractSimplePerColumnSecondaryIndex}}. However, given the incoming  [CASSANDRA-9459|],
I think that the proposed patch is more than enough to provide rich validation features to
2i implementations based on 2.1.x and 2.2.x.

This message was sent by Atlassian JIRA

View raw message