temporalio/temporal · error
there is no addressTranslator configuration in cassandra con
Error message
there is no addressTranslator configuration in cassandra configuration
What it means
FixedAddressTranslatorPlugin.GetTranslator requires a configured addressTranslator section because the fixed translator has nothing to do without one. If cfg.AddressTranslator is nil in the Cassandra config, the plugin returns this error instead of silently producing an identity translator.
Source
Thrown at common/persistence/nosql/nosqlplugin/cassandra/translator/fixed_address_translator.go:54
// The returned rows, representing all other nodes in the cluster, contain IP addresses internal of that cluster.
// They are not necessarily the same hostnames as the ones you would translate with your service resolver
// (they are IP addresses, not hostnames, actually).
//
// For the case if the nodes are behind the proxy, service resolver would translate just the publicly
// visible hostname which a user put into configuration so driver can connect to it, but that is not enough,
// IP addresses behind a proxy are not reachable from client's perspective. These are not translatable
// with service resolver so client can not connect to them directly - that is what gocql address
// translator is exactly for.
//
// The implementation of fixed address translator plugin is fed the internal IP address from the system.peers table,
// and it will always return same fixed ip based on what advertised-hostname is resolved to. That IP address,
// from client's perspective, might be, for example, an IP address of a load balancer which is reachable from client.
// As the IP address of all nodes are some, the difference between the nodes can be achieved by running them on
// a different port for each node.
// see also https://github.com/gocql/gocql/pull/1635
func (plugin *FixedAddressTranslatorPlugin) GetTranslator(cfg *config.Cassandra) (gocql.AddressTranslator, error) {
if cfg.AddressTranslator == nil {
return nil, errors.New("there is no addressTranslator configuration in cassandra configuration")
}
opts := cfg.AddressTranslator.Options
if opts == nil {
return nil, errors.New("there are no options for translator plugin")
}
advertisedHostname, found := opts[advertisedHostnameKey]
if !found || len(advertisedHostname) == 0 {
return nil, errors.New("detected no advertised-hostname key or empty value for translator plugin options")
}
var resolvedIp net.IP = nil
ips, _ := net.LookupIP(advertisedHostname)
for _, ip := range ips {
if ipv4 := ip.To4(); ipv4 != nil {
resolvedIp = ipv4View on GitHub (pinned to bde624efd1)
Solutions
- Add an addressTranslator block to the cassandra config with options.server-address and options.advertised-hostname (or the fixed translator's expected option keys)
- If address translation is not needed, do not use the fixed translator plugin
- Check the effective merged config (dynamicconfig + yaml) actually contains addressTranslator before selecting the plugin
Example fix
// before
cassandra:
hosts: "10.0.0.1"
# addressTranslator missing
// after
cassandra:
hosts: "10.0.0.1"
addressTranslator:
options:
server-address: "127.0.0.1"
advertised-hostname: "cassandra-0"
Defensive patterns
Strategy: validation
Validate before calling
if cfg.AddressTranslator == nil {
return errors.New("fixed translator selected but addressTranslator config section is missing")
} Prevention
- Only select the fixed translator when an addressTranslator block is present
- Keep a canonical config sample including addressTranslator when using the plugin
- Check effective merged config (yaml + dynamicconfig) before deploy
When it happens
Trigger: Calling translator.LookupTranslator("fixed").GetTranslator(cfg) (as TestFixedAddressTranslator does) with a *config.Cassandra whose AddressTranslator field is nil, or the config YAML lacking the addressTranslator key while the fixed plugin is registered.
Common situations: Enabling the fixed translator plugin (e.g. behind a load balancer / mTLS SNI setups) but forgetting to add the addressTranslator block; a config merge dropping the section; using defaults that omit it.
Related errors
- there are no options for translator plugin
- detected no advertised-hostname key or empty value for trans
- only one of keyData or keyFile properties should be specifie
- only one of caData or caFile properties should be specified
- translator_plugin: invalid translator plugin requested
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/25f03fe6d9359276.
Report an issue: GitHub.