Cassandra: rpc_timeout при вставке в новую таблицу в кластере

Я использую Cassandra 2.0.3, и я удаляю и воссоздаю простую таблицу через cqlsh, загружая файл (исходная команда). В том же файле я вставляю несколько строк во вновь созданную таблицу.

Примерно раз в 3-4 попытки я получаю rpc_timeout на некоторых вставках. В этом случае у меня всегда есть это исключение на одном узле кластера:

 WARN [Thread-63] 2014-05-07 10:52:39,658 IncomingTcpConnection.java (line 83) UnknownColumnFamilyException reading from socket; closing
org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=15a8520e-bb08-3a79-82a0-f735287315bf
    at org.apache.cassandra.db.ColumnFamilySerializer.deserializeCfId(ColumnFamilySerializer.java:178)
    at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamilySerializer.java:103)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserializeOneCf(RowMutation.java:304)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:284)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:312)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:254)
    at org.apache.cassandra.net.MessageIn.read(MessageIn.java:99)
    at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:153)
    at org.apache.cassandra.net.IncomingTcpConnection.handleModernVersion(IncomingTcpConnection.java:130)
    at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:74)

Даже если я делаю INSERT непосредственно в cqlsh, он также не работает с rpc_timeout. Обычно примерно через одну минуту вставка проходит успешно.

Мои узлы синхронизированы по времени (я использую 3 виртуальные машины на своем ПК), и локальная сеть, конечно, очень быстрая на всех виртуальных машинах, работающих локально.

Я создал кластер, добавив 2 узла к существующей Cassandra, работающей на одном узле. Мое пространство ключей не использует репликацию:

CREATE KEYSPACE eras
  WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

Вот содержимое файла, который я использую для воспроизведения проблемы:

DROP TABLE IF EXISTS erasconfig;

CREATE TABLE erasconfig (
  name text,
  category text,
  description text,
  ismodifiablebyuser int,
  value text,
  format text,
  PRIMARY KEY (name, category)
);

INSERT INTO ErasConfig (isModifiableByUser, format, name, value, category, description) VALUES (1, '', 'RECORD_IN_BASE', 'garbage', 'Path', 'Absolute path used for RECORD INPUT files');

Этот INSERT переходит в 3-й узел кластера, который иногда выходит из строя во время создания таблицы, за исключением выше.


person Benoit Thiery    schedule 07.05.2014    source источник
comment
Только что попробовал после обновления до версии 2.0.7, и у меня была такая же проблема.   -  person Benoit Thiery    schedule 08.05.2014


Ответы (1)


Проблема в том, что репликация схемы асинхронна с завершением создания. Таким образом, в многоузловом кластере вам необходимо убедиться, что изменения схемы распространились на все узлы, прежде чем пытаться их использовать. nodetool describecluster можно использовать для проверки согласования схем. Из клиента вы можете проверить таблицу system.peers, чтобы убедиться, что все версии схемы обновлены.

person Zanson    schedule 13.05.2014
comment
Спасибо за команду! Как вы думаете, я должен поднять ошибку в проекте Cassandra для этого? - person Benoit Thiery; 13.05.2014