我正在编写一个测试,在实际运行任何测试之前,我需要在couchbase桶中插入一些文档(比如10)。因此,我有一个带有@BeforeAll注释的方法,试图破坏这些文档。现在,当我尝试运行测试时,测试失败了,因为那时文档没有持久保存。为了等待这些文件被插入,我正在做这样的事情-
Flux.fromIterable(couchDocs)
.map(couchDoc -> bucket.upsert(couchDoc, persistTo)
.collectList()
.block();
但是,当我运行测试时,我仍然可以看到,到那时,文档并没有持久化,断言失败了。我是不是漏掉了什么?
发布于 2020-02-02 22:27:18
用.flatMap
代替.map
。你的内流没有被订阅。
发布于 2022-10-01 00:25:51
对于使用block()
将条目向上插入couchbase,然后执行get而不存在这些项,我也会遇到同样的问题。在get找到项目之前,似乎有一小部分时间是在block()
之后插入的。这不是应该完成的block()
的预期行为。
如果我真的创造了
Thread.sleep(5000)
GetItems
效果很好。
发布于 2022-10-01 01:13:22
我认为您可能需要将此添加到查询中。
在继续查询之前,它基本上要等到couchbase上的所有索引都在内部完成。它解决了我的问题,我有一个大容量重新插入,然后尝试执行一个get项,返回一个不一致的行数(简单地根据多少couchbase索引已经在内部完全解决)。恶心的症状,但这是你通往荣耀的道路!
QueryOptions.queryOptions().scanConsistency(QueryScanConsistency.REQUEST_PLUS)
https://stackoverflow.com/questions/60033730
复制