{"record":{"id":"ee225ccb54f7508d","repo":"apache/cassandra","slug":"index-s-already-exists","errorCode":null,"errorMessage":"Index '%s' already exists","messagePattern":"Index '(.+?)' already exists","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java","lineNumber":168,"sourceCode":"\n        if (attrs.isCustom && attrs.customClass.equals(SASIIndex.class.getName()) && !DatabaseDescriptor.getSASIIndexesEnabled())\n            throw new InvalidRequestException(SASI_INDEX_DISABLED);\n\n        Keyspaces schema = metadata.schema.getKeyspaces();\n        KeyspaceMetadata keyspace = schema.getNullable(keyspaceName);\n        if (null == keyspace)\n            throw ire(KEYSPACE_DOES_NOT_EXIST, keyspaceName);\n\n        TableMetadata table = keyspace.getTableOrViewNullable(tableName);\n        if (null == table)\n            throw ire(TABLE_DOES_NOT_EXIST, tableName);\n\n        if (null != indexName && keyspace.hasIndex(indexName))\n        {\n            if (ifNotExists)\n                return schema;\n\n            throw ire(INDEX_ALREADY_EXISTS, indexName);\n        }\n\n        if (table.isCounter())\n            throw ire(COUNTER_TABLES_NOT_SUPPORTED);\n\n        if (table.isView())\n            throw ire(MATERIALIZED_VIEWS_NOT_SUPPORTED);\n\n        if (keyspace.replicationStrategy.hasTransientReplicas())\n            throw new InvalidRequestException(TRANSIENTLY_REPLICATED_KEYSPACE_NOT_SUPPORTED);\n\n        // guardrails to limit number of secondary indexes per table.\n        Guardrails.secondaryIndexesPerTable.guard(table.indexes.size() + 1,\n                                                  Strings.isNullOrEmpty(indexName)\n                                                  ? String.format(\"on table %s\", table.name)\n                                                  : String.format(\"%s on table %s\", indexName, table.name),\n                                                  false,\n                                                  state);","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java#L150-L186","documentation":"CreateIndexStatement.apply: an index with the given/generated name already exists in the keyspace and IF NOT EXISTS was not specified, so creation is rejected to avoid silently overwriting index definitions.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:168 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use IF NOT EXISTS if the existing index is acceptable.","Drop the existing index (DROP INDEX) or choose a different index name."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}