我有一个两节点 Cassandra 集群启动并运行,我正在通过 python-driver API 执行构造的 CQL 查询。我正在对我构建的一系列模型进行单元测试,以抽象出大部分 Cassandra API,以方便其他开发人员使用。我的所有测试在单节点集群上测试时都通过了,但是在添加另一个节点后,测试完全不一致,要么失败,要么出错,要么以最小的韵律或理由通过。
我正在比较插入 Cassandra 的对象和由 Cassandra 查询产生的对象self.__dict__ == other.__dict__
,因为我根据从 Cassandra 接收到的列值填充类的字段。
我相信我已经隔离了这个问题。在我的种子节点上:
cqlsh:mykeyspace> select id,created_at from users;
id | created_at
----+--------------
10 | 139621386780
11 | 139621386780
8 | 139621386780
7 | 139621386780
6 | 139621386780
9 | 139621386780
12 | 139621386780
(7 rows)
在我的第二个节点上:
cqlsh:mykeyspace> select id,created_at from users;
id | created_at
----+--------------
8 | 139621370181
7 | 139621370181
9 | 139621370181
(3 rows)
,其中第一列是整数 id,第二列是 Pythondatetime
对象。我相信正在发生的事情是,当我在 中插入一行时users
,该行被插入到第一个或第二个节点上,但是当我尝试从 Cassandra 检索这个对象时,我正在从一个与我刚才不同的节点读取插入,因为 Cassandra 允许这样做。但是,如果我有consistency_level=ALL
(它用于我的 python CQL 调用),我不应该接收最新的行数据,而不是最近插入之前的行吗?
更新
请注意,我们特意删除了唯一标识符。
在种子节点上:
$ nodetool status
Datacenter: 243
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN IP Address 0 136.47 KB 256 100.0% ownsuuid 58
$ nodetool gossipinfo
/IP Address 0
HOST_ID:ownsuuid
SCHEMA:schema
RPC_ADDRESS:0.0.0.0
RELEASE_VERSION:2.0.4
STATUS:NORMAL,-1102599059356328037
SEVERITY:0.0
RACK:58
LOAD:150498.0
DC:243
NET_VERSION:7
/IP Address 1
SCHEMA:schema
HOST_ID:ownsuuid
RPC_ADDRESS:0.0.0.0
RELEASE_VERSION:2.0.4
STATUS:NORMAL,-1102599059356328037
SEVERITY:0.0
RACK:181
LOAD:148937.0
DC:241
NET_VERSION:7
在另一个非种子节点上:
~$ nodetool status
Datacenter: 241
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN IP Address 1 145.45 KB 256 100.0% ownsuuid 181
$ nodetool gossipinfo
/IP Address 0
STATUS:NORMAL,-1102599059356328037
LOAD:139743.0
RELEASE_VERSION:2.0.4
RACK:58
SCHEMA:schema
SEVERITY:0.0
NET_VERSION:7
HOST_ID:ownsuuid
RPC_ADDRESS:0.0.0.0
DC:243
/IP Address 1
STATUS:NORMAL,-1102599059356328037
LOAD:164405.0
RELEASE_VERSION:2.0.4
RACK:181
NET_VERSION:7
SCHEMA:schema
SEVERITY:0.0
HOST_ID:ownsuuid
RPC_ADDRESS:0.0.0.0
DC:241