{"record":{"id":"d3ad72f88d4f3490","repo":"apache/cassandra","slug":"secondary-indexes-on-counter-tables-aren-t-support","errorCode":null,"errorMessage":"Secondary indexes on counter tables aren't supported","messagePattern":"Secondary indexes on counter tables aren't supported","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java","lineNumber":172,"sourceCode":"        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);\n\n        List<IndexTarget> indexTargets = Lists.newArrayList(transform(rawIndexTargets, t -> t.prepare(table)));\n\n        if (indexTargets.isEmpty() && !attrs.isCustom)","sourceCodeStart":154,"sourceCodeEnd":190,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java#L154-L190","documentation":"CREATE INDEX guard rejecting secondary indexes on tables containing counter columns. Counter increments cannot be indexed, so index creation on a counter table is rejected at schema-change application time.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:172 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Do not index counter tables; query by key or maintain a separate table for lookup patterns."],"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"}