卡桑德拉表现出突然的行为

时间:2015-08-10 18:55:43

标签: java cassandra cassandra-2.0 datastax-java-driver

我有一个单元测试,其中我正在编写并多次从cassandra中读取。

future = function(Cassandra update with value x) - async //write and read updated value
value = future.get(); //reading
print value; 
assert value == x;

//doing the above operation multiple times with different values of x; 

多次运行相同的代码会显示不同的结果,即打印不同的值'值'属性。

我在本地主机上使用cassandra

replication = {
 'class': 'SimpleStrategy',
  'replication_factor': '1'
};

值得注意的是,我正在写表并在表中的同一行读取(在所有读写中,主键是相同的)。 虽然我多次修改同一个对象,但它们应该按顺序运行,因为我在每个更新语句之后运行阻塞函数future.get()

我正在使用Cassandra 2.0.14 datastax驱动程序和jdk 1.8

为什么我必须面对这样的行为呢?

1 个答案:

答案 0 :(得分:0)

弄清楚原因。 在我的代码(不是测试代码)中,我实际上并没有按顺序编写和阅读。读取不等待写入完成。

我在做什么:

Dim hh As Variant
Dim hi As Variant

hh = Range("A" & hd)
hi = Range("B" & hd)

If hi = Application.VLookup(hh, Worksheets("Equivalency Table").Range("A1:D20"), 2, False) Then

If Not IsError(hi) Then
   Range("A" & hd & ":B" & hd).Select
   Selection.Style = "Good"
   hf = hf + 1

Else
   Range("A" & hd & ":B" & hd).Select
   Selection.Style = "Bad"

End If

我应该做什么:

`CompletionStage<Void> Function() {
   someOperation
    .thenAccept(variable -> AsyncWriteInDb(variable));
}
// AsyncWriteInDb returns CompletionStage<Void> when write is completed.
// I was reading just after execution of this function. 
`

如果我编写如下(错误的)代码部分,则更容易理解:

` CompletionStage<Void> Function() {
   someOperation
    .thenCompose(variable -> AsyncWriteInDb(variable));
}
//AsyncWriteInDb returns CompletionStage<Void> when write is completed.
`