{"record":{"id":"b1435f3c9f6b9c2c","repo":"apache/cassandra","slug":"index-s-s-doesn-t-exist","errorCode":null,"errorMessage":"Index '%s.%s' doesn't exist'","messagePattern":"Index '(.+?)\\.(.+?)' doesn't exist'","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/DropIndexStatement.java","lineNumber":72,"sourceCode":"        return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);\n    }\n\n    @Override\n    public Keyspaces apply(ClusterMetadata metadata)\n    {\n        Keyspaces schema = metadata.schema.getKeyspaces();\n        KeyspaceMetadata keyspace = schema.getNullable(keyspaceName);\n\n        TableMetadata table = null == keyspace\n                            ? null\n                            : keyspace.findIndexedTable(indexName).orElse(null);\n\n        if (null == table)\n        {\n            if (ifExists)\n                return schema;\n\n            throw ire(\"Index '%s.%s' doesn't exist'\", keyspaceName, indexName);\n        }\n\n        TableMetadata newTable = table.withSwapped(table.indexes.without(indexName));\n        return schema.withAddedOrUpdated(keyspace.withSwapped(keyspace.tables.withSwapped(newTable)));\n    }\n\n    SchemaChange schemaChangeEvent(KeyspacesDiff diff)\n    {\n        assert diff.altered.size() == 1;\n        KeyspaceDiff ksDiff = diff.altered.get(0);\n\n        assert ksDiff.tables.altered.size() == 1;\n        Diff.Altered<TableMetadata> tableDiff = ksDiff.tables.altered.iterator().next();\n\n        return new SchemaChange(Change.UPDATED, Target.TABLE, keyspaceName, tableDiff.after.name);\n    }\n\n    public void authorize(ClientState client)","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/DropIndexStatement.java#L54-L90","documentation":"DROP INDEX failed because the named index does not exist (or the backing table does not exist) and IF EXISTS was not given. Note the message contains a stray trailing quote (\"doesn't exist'\") — that typo is in the source string itself.","triggerScenarios":"DROP INDEX ks.idx_name where the keyspace's table indexes have no entry for indexName (table lookup by index name returns null) and ifExists is false.","commonSituations":"Assuming index names equal column names (secondary indexes default to table_col_idx unless explicitly named); index already dropped; wrong keyspace.","solutions":["Check the actual index name via system_schema.indexes or DESCribe TABLE.","Add IF EXISTS: DROP INDEX IF EXISTS ks.index_name.","Verify the keyspace name is correct."],"exampleFix":"// before\nDROP INDEX ks.user_email_idx;\n// after\nDROP INDEX IF EXISTS ks.users_email_idx;","handlingStrategy":"try-catch","validationCode":"boolean exists = schema.getKeyspace(ks).tables.stream()\n    .flatMap(t -> t.indexes.stream())\n    .anyMatch(i -> i.name.equals(idxName));\nif (!exists) skipOrUseIfExists();","typeGuard":null,"tryCatchPattern":"try { dropIndex(...); } catch (InvalidRequestException e) { if (e.getMessage().contains(\"doesn't exist\")) { /* treat as already dropped */ } else throw e; }","preventionTips":["Name indexes explicitly at CREATE time","Use IF EXISTS in idempotent deployment scripts","Query system_schema.indexes before dropping"],"tags":["cql","schema","index"],"backgroundTag":"entity-not-found","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"}