这是我的示例原始方法
public void insertIntoDb(SampleObject sample){
---------------------------------------
---------------------------------------
code to prepare Insert statement
---------------------------------------
---------------------------------------
session.executeAsync(insertStatement);
}
我正在为上述方法编写测试方法
public void insertIntoDbTest(){
--------------------------------------
---------------------------------------
preparing SampleObject and checking the size of the corresponding table before insert
---------------------------------------
---------------------------------------
obj.insertIntoDb(sampleObject)
---------------------------------------
checking the size of the corresponding table after insert
---------------------------------------
}
期望:执行上述测试方法后,应在cassandra中向表中添加1行,即如果在插入表大小之前为0,然后在插入表大小之后为1
实际:我得到的尺寸相同,即桌子前后的尺寸仅为0。
如果我更换
session.executeAsync(insertStatement);
与
ResultSetFuture future = session.executeAsync(insertStatement);
然后添加以下语句
future.get()
那我得到的是桌子尺寸的差异,即1
最佳答案
我怀疑您第一次尝试验证表大小时,计算(插入)未完成。ResultSetFuture get()
方法在必要时等待计算完成,然后检索其结果。executeAsync
方法不等待。
查询一旦传递到基础网络堆栈,它将立即返回。特别是,从此方法返回并不能保证查询有效,甚至不能提交给活动节点。访问ResultSetFuture时,将引发与查询失败有关的任何异常。资料来源:https://docs.datastax.com/en/drivers/java/2.1/com/datastax/driver/core/ResultSetFuture.html