根据文档,使用lock=true的fsync应该会阻止写入。但值得注意的是,尽管它阻止了写操作,但它仍然在写。这是预期的行为吗?
我在本地机器上安装了MongoDB,并将其作为单节点副本集运行。正在使用的MongoDB版本为4.2.11

我执行fsync,如下所示。

然后尝试写入,它就会被阻塞。我会取消的。

然后执行fsync解锁。

预计写操作不会起作用,但无论如何它都是持久的。fsync中有bug吗?

发布于 2021-12-02 18:24:04
当你关闭被阻止的插入(例如,通过control+ C或任何其他机制),但不知何故进程没有停止,并且在你运行unblock fsync之后,命令仍然在后台进行并被插入,或者当插入命令被阻止之后,你运行unblock fsync,使块插入自动解锁,这可能是可能的。我在v4.4.10(比你的版本更高的版本)上测试了这一点,根据文档,它工作得很好。
首先插入一条记录

然后使用fsync

然后尝试再插入一条记录,该记录将被阻塞,并随后使用Ctrl +C组合键终止

然后取消阻止fsync

确认第二次插入没有成功(这就是预期的行为)

您还可以检查插入之前和之后的db.serverStatus(),以查看服务器接受的"insert“命令的差异。这可以为您提供有关命令是否以某种方式到达的提示。信息如下所示

https://stackoverflow.com/questions/70197494
复制相似问题