{"record":{"id":"2b9bc5a3b8f70666","repo":"apache/cassandra","slug":"index-s-is-a-duplicate-of-existing-index-s","errorCode":null,"errorMessage":"Index %s is a duplicate of existing index %s","messagePattern":"Index (.+?) is a duplicate of existing index (.+?)","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java","lineNumber":221,"sourceCode":"\n        IndexMetadata.Kind kind = attrs.isCustom ? IndexMetadata.Kind.CUSTOM : IndexMetadata.Kind.COMPOSITES;\n\n        indexTargets.forEach(t -> validateIndexTarget(table, kind, t, attrs));\n\n        String name = null == indexName ? generateIndexName(keyspace, indexTargets) : indexName;\n\n        Map<String, String> options = attrs.isCustom ? attrs.getOptions() : Collections.emptyMap();\n\n        IndexMetadata index = IndexMetadata.fromIndexTargets(indexTargets, name, kind, options);\n\n        // check to disallow creation of an index which duplicates an existing one in all but name\n        IndexMetadata equalIndex = tryFind(table.indexes, i -> i.equalsWithoutName(index)).orNull();\n        if (null != equalIndex)\n        {\n            if (ifNotExists)\n                return schema;\n\n            throw ire(INDEX_DUPLICATE_OF_EXISTING, index.name, equalIndex.name);\n        }\n\n        expandedCql = index.toCqlString(table, ifNotExists);\n        verifyExpandedCql(expandedCql);\n\n        TableMetadata newTable = table.withSwapped(table.indexes.with(index));\n        newTable.validate();\n\n        return schema.withAddedOrUpdated(keyspace.withSwapped(keyspace.tables.withSwapped(newTable)));\n    }\n\n    @Override\n    Set<String> clientWarnings(KeyspacesDiff diff)\n    {\n        if (attrs.isCustom && attrs.customClass.equals(SASIIndex.class.getName()))\n            return ImmutableSet.of(SASIIndex.USAGE_WARNING);\n\n        return ImmutableSet.of();","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java#L203-L239","documentation":"CreateIndexStatement.apply: the requested index is identical (same targets/kind) to an existing index in the keyspace except for its name; Cassandra disallows such duplicate indexes to prevent redundant indexing.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:221 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reuse the existing index instead of creating a new one.","DROP the existing index first if a different definition is truly needed."],"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"}