{"record":{"id":"ce7fba21b22aa313","repo":"temporalio/temporal","slug":"unable-to-decode-cassandra-serial-consistency-v","errorCode":null,"errorMessage":"unable to decode cassandra serial consistency: %v","messagePattern":"unable to decode cassandra serial consistency: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"common/config/persistence.go","lineNumber":207,"sourceCode":"\t}\n\tif ds.Elasticsearch != nil {\n\t\tif err := ds.Elasticsearch.Validate(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetConsistency returns the gosql.Consistency setting from the configuration for the given store type\nfunc (c *CassandraStoreConsistency) GetConsistency() gocql.Consistency {\n\treturn gocql.ParseConsistency(c.getConsistencySettings().Consistency)\n}\n\n// GetSerialConsistency returns the gosql.SerialConsistency setting from the configuration for the store\nfunc (c *CassandraStoreConsistency) GetSerialConsistency() gocql.SerialConsistency {\n\tres, err := parseSerialConsistency(c.getConsistencySettings().SerialConsistency)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"unable to decode cassandra serial consistency: %v\", err))\n\t}\n\treturn res\n}\n\nfunc (c *CassandraStoreConsistency) getConsistencySettings() *CassandraConsistencySettings {\n\treturn ensureStoreConsistencyNotNil(c).Default\n}\n\nfunc ensureStoreConsistencyNotNil(c *CassandraStoreConsistency) *CassandraStoreConsistency {\n\tif c == nil {\n\t\tc = &CassandraStoreConsistency{}\n\t}\n\tif c.Default == nil {\n\t\tc.Default = &CassandraConsistencySettings{}\n\t}\n\tif c.Default.Consistency == \"\" {\n\t\tc.Default.Consistency = \"LOCAL_QUORUM\"\n\t}","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/config/persistence.go#L189-L225","documentation":"CassandraStoreConsistency.GetSerialConsistency parses the configured SerialConsistency string via parseSerialConsistency; if the value is not a recognized serial consistency (e.g. 'serial'/'local_serial'), it panics. This fails fast at store construction because an invalid consistency setting would break every CassCacheSession query.","triggerScenarios":"Setting `persistence.default.cassandra.consistency.serialConsistency` (or per-store consistency) in the Temporal config YAML to a misspelled or unsupported value, e.g. 'SERIAL ' with whitespace, 'quorum', or an empty string where parsing requires a valid token.","commonSituations":"Copy-pasting consistency settings between stores; renaming keys during config upgrades; environment-specific config overlays that override serialConsistency with an invalid value.","solutions":["Set serialConsistency to a valid value (e.g. 'serial' or 'local_serial') in the persistence config","Remove the serialConsistency key so the default is used","Log/inspect the wrapped parse error (%v) to see which token was rejected","Validate config with the service's config validation tooling before deploy"],"exampleFix":"// before (config)\npersistence:\n  default:\n    cassandra:\n      consistency:\n        serialConsistency: quorum\n// after\npersistence:\n  default:\n    cassandra:\n      consistency:\n        serialConsistency: serial","handlingStrategy":"validation","validationCode":"if sc != \"serial\" && sc != \"local_serial\" && sc != \"\" { return err }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate config before deploy","Use canonical lowercase values"],"tags":["go","panic","config","cassandra","persistence"],"backgroundTag":"invalid-config-value","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}