最近从cassandra 2.0.8升级到2.1.2,在考察2.1.2的时候,发现了一个2.1.2版的一个bug,一直怀疑是java驱动的原因,后来发现只要满足特定条件,就可以重现,用cqlsh客户端也可以。 bug重现步骤: 首先创建keyspace space1和space2. 在space1里创建一个表table3 在space2里创建两个表table1,table2 在table3里插入一条记录 删除表table1 删除table3插入的那条记录 删除表table2 再根据主键,在tbale3里查询,会发现之前那条记录并未删除。
CREATE KEYSPACE space1 WITH replication =
{'class': 'SimpleStrategy', 'replication_factor': 3};
CREATE TABLE space1.table3(a int, b int, c text,primary key(a,b));
CREATE KEYSPACE space2 WITH replication =
{'class': 'SimpleStrategy', 'replication_factor': 3};
CREATE TABLE space2.table1(a int, b int, c int, primary key(a,b));
CREATE TABLE space2.table2(a int, b int, c int, primary key(a,b));
INSERT INTO space1.table3(a,b,c) VALUES(1,1,'1');
drop table space2.table1;
DELETE FROM space1.table3 where a=1 and b=1;
drop table space2.table2;
select * from space1.table3 where a=1 and b=1;
you will find that the row (a=1 and b=1) in space1.table3 is not deleted
虽然,这个问题不影响一个表结构确定稳定运行的业务,但是也是让人不爽的一件事情。 我已经通过我蹩脚的英文,把这个bug提交到cassandra的jira上了: https://issues.apache.org/jira/browse/CASSANDRA-8558