当系统区域设置设置为 tr_TR.UTF-8 并出现 SyntaxException 时,CQL 模式解析器在启动时失败:“在字符 'ı' 处没有可行的替代方案”

问题描述 投票:0回答:1

我是新手。回复之前请考虑一下。

我从此源列表安装了 Apache Cassandra:

deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 50x main

然后我从systemctl启动它。我知道它应该自动启动,对吗?开始后我得到了

active (exited)
。我知道像数据库或 Web 服务器这样的服务应该是持久的,
active (running)
我深入挖掘并在
/var/log/cassandra/system.log
中我发现了以下错误:

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 设置中更改了它。

我使用Ubuntu 24.02。在此错误中,您会看到使用了“ı”(土耳其语字符,i,但没有点),并且 Java 基本上无法找到“ı”的替代品,但问题是我刚刚安装了 Cassandra。我没有创建这个表。这可能是针对 Cassandra 的,由 Cassandra 自动创建(我没有使用 Cassandra,这将是我第一次使用,但如你所见,我遇到了错误)。

我现在应该做什么?我将系统语言设置为 en_US.UTF-8 但错误未解决。这是一个错误吗?

另外,我尝试了其他稳定版本41x,结果相同。我在安装之前也完全删除了

/var/lib/cassandra
/var/log cassandra

编辑:我想我发现了,这可能是一个错误。

StreamingVirtualTable.java
文件中,
stateCoulmns()
函数包含一个
toLowerCase()

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

在我的语言中,小写“I”等于“ı”。那么我们可以用

.toLowerCase(Locale.ENGLISH)
修复吗?

java apache ubuntu cassandra
1个回答
0
投票

这是一个非常有趣的错误,我以前从未见过。我认为系统语言不重要,但我们需要进一步调查。

如果您愿意请在 Jira 项目上记录一张票证,其中包含有关如何复制问题的详细说明,那就太棒了。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.