Andrés de la Peña created CASSANDRA-10092:
---------------------------------------------
Summary: Generalize PerRowSecondaryIndex validation
Key: CASSANDRA-10092
URL: https://issues.apache.org/jira/browse/CASSANDRA-10092
Project: Cassandra
Issue Type: Improvement
Components: Core
Reporter: Andrés de la Peña
Priority: Minor
Fix For: 2.1.x, 2.2.x
Attachments: 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|https://issues.apache.org/jira/browse/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
(v6.3.4#6332)