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
для Consumer и Producer, работающих в разных процессах.
Пока Producer создает и заполняет таблицу, Consumer ожидает, пока таблица не будет создана сСкрипт Python, выполняющий оператор CQL:
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
уже содержит запись о таблице, таблица еще не доступна.
Может быть, есть более надежный способ проверить доступность таблицы?Или обычный обходной путь?