[ https://issues.apache.org/jira/browse/CASSANDRA-7487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Brandon Williams resolved CASSANDRA-7487. ----------------------------------------- Resolution: Invalid Indexes are just regular tables in the end. You can't have two tables with the same name in the same keyspace, but multiple keyspaces can. > Create index does not reject duplicate index name on tables with the same > name but different keyspace > ----------------------------------------------------------------------------------------------------- > > Key: CASSANDRA-7487 > URL: https://issues.apache.org/jira/browse/CASSANDRA-7487 > Project: Cassandra > Issue Type: Bug > Components: Core > Reporter: dan jatnieks > Priority: Minor > > Came across this while experimenting with how index names are managed. > Create index tries to manage index names globally - even though indexes are > maintained per keyspace (table?) - and attempts to create indexes with the > same name are generally rejected. > However, given two tables with the same name in different keyspaces, it's > possible to create an index of the same name on each of those tables. > Here's the scenario: > {noformat} > cqlsh> CREATE KEYSPACE ks1 WITH replication = {'class': 'SimpleStrategy', > 'replication_factor': '1'}; > cqlsh> CREATE KEYSPACE ks2 WITH replication = {'class': 'SimpleStrategy', > 'replication_factor': '1'}; > cqlsh> CREATE TABLE ks1.t1 (c1 int PRIMARY KEY, c2 int ); > cqlsh> CREATE TABLE ks1.t2 (c1 int PRIMARY KEY, c2 int ); > cqlsh> CREATE TABLE ks2.t1 (c1 int PRIMARY KEY, c2 int ); > // First index okay > cqlsh> create index t_idx on ks1.t1 (c2) ; > // Duplicate index on different table rejected - ok > cqlsh> create index t_idx on ks1.t2 (c2) ; > <ErrorMessage code=2300 [Query invalid because of configuration issue] > message="Duplicate index name t_idx"> > // Duplicate index on a different table in another keyspace rejected - ok > cqlsh> create index t_idx on ks2.t2 (c2) ; > <ErrorMessage code=2300 [Query invalid because of configuration issue] > message="Duplicate index name t_idx"> > // Duplicate index name in another keyspace works - wrong? > cqlsh> create index t_idx on ks2.t1 (c2) ; > {noformat} > Describing keyspaces ks1 and ks2 shows that the table t1 in each has an index > named t_idx, so two indexes were created. Also dropping one of the indexes > does not affect the other. > {{CFMetaData.validate()}} calls {{existingIndexNames(cfName)}} to get all the > known index names, but filters out indexes for the current table. > However, using only the {{cfName}}, this masks indexes that may exist on > tables of the same name in another keyspace. The keyspace is needed to > properly filter index names for the table. > Issue CASSANDRA-7314 is related as it adds an optional {{keyspace}} argument > to {{DROP INDEX}}. > So it seems that {{CREATE INDEX}} should either: > - not scope index names globally, but rather by keyspace, or > - continue to mamaging index names globally by rejecting the duplicate index > name created in the above scenario. -- This message was sent by Atlassian JIRA (v6.3.4#6332)