私は Cassandra 2.0.3 を使用しており、ファイル (source コマンド) をロードして、cqlsh を介して単純なテーブルをドロップして再作成します。同じファイルで、新しく作成したテーブルにいくつかの行を挿入します。
3 ~ 4 回の試行ごとに、いくつかの挿入で rpc_timeout が発生します。この場合、クラスターの 1 つのノードで常に次の例外が発生します。
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)
cqlsh で直接 INSERT を実行しても、rpc_timeout で失敗します。通常、約 1 分後に挿入が成功します。
私のノードは時間同期されており (PC で 3 つの VM を使用しています)、LAN はもちろんすべての VM がローカルで実行されているため超高速です。
単一ノードで実行されている既存の Cassandra に 2 つのノードを追加してクラスターを作成しました。私のキースペースはレプリケーションを使用していません:
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 番目のノードに入ります。これは、上記の例外を除いて、テーブルの作成中に時々失敗するノードです。