You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

系统区域为tr_TR.UTF-8时Cassandra启动失败报SyntaxException

Apache Cassandra启动失败排查与修复建议

问题背景

通过以下源安装Apache Cassandra:
deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 50x main

启动服务后,systemctl显示状态为active (exited),正常数据库服务应处于active (running)状态。查看/var/log/cassandra/system.log发现启动异常,系统环境为Ubuntu 24.02。

错误日志详情

ERROR [main] 2024-09-25 14:50:58,401 CassandraDaemon.java:900 - Exception encountered during startup
java.lang.ExceptionInInitializerError: null
    at org.apache.cassandra.service.CassandraDaemon.setupVirtualKeyspaces(CassandraDaemon.java:575)
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:286)
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:744)
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:878)
Caused by: org.apache.cassandra.exceptions.SyntaxException: Failed parsing CREATE TABLE: [CREATE TABLE streaming (  id timeuuid,
  follower boolean,
  operation text, 
  peers frozen<list<text>>,
  status text,
  progress_percentage float,
  last_updated_at timestamp,
  duration_millis bigint,
  failure_cause text,
  success_message text,

  bytes_to_receive bigint, 
  bytes_received bigint, 
  bytes_to_send bigint, 
  bytes_sent bigint, 
  files_to_receive bigint, 
  files_received bigint, 
  files_to_send bigint, 
  files_sent bigint, 

  status_ınıt_timestamp timestamp,
  status_start_timestamp timestamp,
  status_success_timestamp timestamp,
  status_faılure_timestamp timestamp,

PRIMARY KEY ((id)))] reason: SyntaxException line 21:9 no viable alternative at character 'ı'
    at org.apache.cassandra.cql3.CQLFragmentParser.parseAny(CQLFragmentParser.java:48)
    at org.apache.cassandra.cql3.statements.schema.CreateTableStatement.parse(CreateTableStatement.java:465)
    at org.apache.cassandra.db.virtual.StreamingVirtualTable.<init>(StreamingVirtualTable.java:37)
    at org.apache.cassandra.db.virtual.SystemViewsKeyspace.<init>(SystemViewsKeyspace.java:47)
    at org.apache.cassandra.db.virtual.SystemViewsKeyspace.<clinit>(SystemViewsKeyspace.java:26)
    ... 4 common frames omitted

已尝试的无效操作

  • 将系统区域从tr_TR.UTF-8切换为en_US.UTF-8,修改GNOME设置并重新配置区域,问题未解决
  • 切换到稳定版本41x,重新安装前彻底删除/var/lib/cassandra和/var/log/cassandra目录,结果相同

问题根源定位

Cassandra自动创建streaming虚拟表时生成了无效字段名。查看StreamingVirtualTable.java的stateColumns()方法,发现代码使用无区域参数的toLowerCase():

sb.append(" status_").append(state.name().toLowerCase()).append("_timestamp timestamp,
");

在土耳其语区域中,大写字母“I”的小写转换结果是“ı”,导致生成的字段名如status_ınıt_timestamp包含CQL不识别的字符ı,触发语法解析错误。

修复方案

将toLowerCase()修改为toLowerCase(Locale.ENGLISH),强制使用英文规则进行大小写转换,避免区域化带来的字符异常。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:22:36