Кассандра: ненастроенный стол - PullRequest
0 голосов
/ 16 мая 2019

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 уже содержит запись о таблице, таблица еще не доступна.

Может быть, есть более надежный способ проверить доступность таблицы?Или обычный обходной путь?

1 Ответ

1 голос
/ 17 мая 2019

С установками Cassandra с одним узлом я стал свидетелем структурных изменений, которые не распространяются немедленно.Т.е. создание таблицы, затем вставка в нее, и вставка завершается неудачно, потому что таблица не существует.Затем вы проверяете, существует ли таблица и есть ли она.И затем, с тех пор, как прошло некоторое время, вставки работают.

Единственный способ, которым мне удалось заставить Cassandras вести себя одинаково, - это ввести одну секунду ожидания после каждого структурного изменения.Это было хорошо для меня, поскольку Cassandras с одним узлом используются только в локальных сценариях разработки.В продуктивной среде я просто отключаю ожидание.

...