submit - 强制提交原子操作实际上是如何工作的

标签 submit perforce atomic rollback

perforce 提交是原子的。

这意味着如果更改列表包含 3 个要 checkin 的文件, 并且操作成功检查了前 2 个文件,但随后出现错误 当对第三个文件进行操作时,它能够回滚前两个文件的操作,以便一切都回到原来的状态。

我对此感到敬畏和印象深刻,并试图寻找它的实际工作原理,但似乎找不到它。

如果有人能帮助我了解所有这些在后台如何工作的技术细节,我将不胜感激。

提前非常感谢您。

最佳答案

Perforce 使用数据库作为其事实来源的事实使这变得非常简单:

  1. 仓库文件被锁定(在数据库中,就像您运行 p4 lock 一样)。
  2. 新的修订内容已上传到仓库存档。
  3. 数据库表被锁定,以进行最后一组检查以确保一切正常。
  4. 新的修订记录写入数据库并释放所有锁定。

如果提交在第 2 部分中的某个地方失败,则不需要回滚任何内容,因为新的修订内容不会覆盖任何内容,并且在第 4 步之前它们不会作为文件历史记录的一部分可见。(不幸的一面这样做的影响是,Perforce 实际上可以在提交失败时“泄漏”磁盘空间,但这与预期的磁盘使用量随时间正常增加相比通常很小。)

如果您希望能够实时观察这种情况的发生,跟踪日志 (P4JOURNAL) 将向您显示发生时的数据库写入情况,并跟踪日志 ( P4LOG)将向您显示提交操作的各个阶段,从用户启动操作到完全提交更改。

关于submit - 强制提交原子操作实际上是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377522/

相关文章:

javascript - 用于表单提交的自定义帖子字符串

c++ - 原子释放可以是 "overwritten"吗?

javascript - 如何防止表单从客户端多次提交?

javascript - 动态行表单提交

git - 在 Perforce 中,如何像 Git 一样在分支之间切换?

teamcity - 如何在 TeamCity 上使用 p4 check out 文件?

multithreading - 一条汇编指令是否总是以原子方式执行?

c++ - 我可以创建字符串和 atomic<int> 键值对的 unordered_map 吗?

javascript - 提交时删除类并刷新页面

svn - 寻找有关 SubVersion 最佳实践、分支和社交方面的提示