卡桑德拉:未配置的表

4
TLDR; 当 system_schema.tables 已经包含有关该表的记录时,该表仍然无法访问。
我正在尝试并发使用Cassandra。 Cassandra版本:[cqlsh 5.0.1 | Cassandra 3.11.3 | CQL spec 3.4.4 | Native protocol v4] 我有两个Python脚本,使用cassandra-driver==3.16.0分别作为消费者和生产者在不同进程中运行。
当生产者创建并填充表时,消费者通过运行CQL语句等待表的创建。但是,即使system_schema.tables已经包含有关该表的记录,该表仍无法访问。
table_exists = False
while not table_exists:
    cql = SimpleStatement(
        "SELECT table_name FROM system_schema.tables WHERE keyspace_name = 'test_keyspace' AND table_name = 'test_table'"
    )
    results = cassandra_session.execute(cql)
    table_exists = bool(results.current_rows)

在至少有一条记录的情况下,通过语句结果我得出结论表已被创建,并尝试使用SELECT读取:

SELECT * FROM test_keyspace.test_table WHERE ...

但有时我会遇到非常烦人的错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/stress.py", line 128, in runner
    for r in select(TEST_KEYSPACE, table_name):
  File "/stress.py", line 63, in select
    results = cassandra_session.execute(statement)
  File "cassandra/cluster.py", line 2171, in cassandra.cluster.Session.execute
  File "cassandra/cluster.py", line 4062, in cassandra.cluster.ResponseFuture.result
cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table test_table"

根据我发现的信息,当SELECT语句在一个尚未被创建的表上执行时,就会出现错误。 因此,虽然system_schema.tables中已经包含有关该表的记录,但该表尚不可访问。
也许有一种更可靠的方法来检查表的可访问性?或者是常见的解决办法?

你正在测试的集群设置是什么?它是本地节点吗? - Jan Dörrenhaus
1
@JanDoerrenhaus,是的,只有一个本地节点,并且创建了一个名为WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}的键空间。 - Symon
等等,什么?当你只有一个节点时,你怎么能运行3个RF呢? - Jan Dörrenhaus
@JanDoerrenhaus 我是从示例中复制的。将 replication_factor 更改为 1 会导致该错误更频繁地发生。 - Symon
2个回答

4

在单节点Cassandra设置中,我曾经发现结构性更改不能立即传播。例如,创建一个表,然后插入数据,但插入失败,因为表不存在。接着你检查表是否存在,它确实存在。但由于一些时间已经过去,插入操作就可以成功了。

让单节点Cassandras保持一致的唯一方法是在每次结构性更改后引入一秒钟的等待时间。这对我来说还可以,因为单节点Cassandras仅用于本地开发场景。在生产环境中,我只需禁用等待操作即可。


那么,您是想说在多节点Cassandra集群中这样的错误会消失吗? - Symon
顺便说一句,这是一个相当丑陋的hack。有没有办法联系Cassandra开发团队或者至少报告一个bug? - Symon
是的,在多节点Cassandra设置中,我从未见过这种错误。当然,你可以在他们的JIRA上报告错误。我没有这样做,因为1)很难复制,2)只发生在非常不寻常的(单节点)设置中。所以我不会指望他们能够解决这个问题。 - Jan Dörrenhaus

0
在我的情况下,它是在另一个键空间中搜索表格。
错误:
cassandra.InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table <table_name>"

我确保__keyspace__指向正确的keyspace,然后它就可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接