1

在示例安装和配置说明中,似乎建议OpenGrok需要两个暂存区,理由是,一个区域是 index-regeneration-work-area,另一个是生产区域,它们是旋转的每个索引重新生成。

这真的有必要吗?我可以只有一个区域而不是两个区域吗?

我正在寻找一个特定于 opengrok 的答案,而不是一个可能遇到的竞争条件的一般列表。

4

1 回答 1

0

严格来说,这是没有必要的。事实上,我很确定绝大多数部署都没有暂存区。

也就是说,您需要确定您是否对可能导致某些失败/不精确搜索的不一致窗口感到满意。假设源已更新(例如,通过git pull在 Git 的情况下)并且索引器尚未完成对新更改的处理。因此,索引仍然包含反映源旧状态的数据。假设应用于源的更改删除了一个文件。现在,如果有人启动了与已删除文件的内容相匹配的搜索,则搜索结果可能会以错误结束。这可能是更好的选择 - 考虑对文件进行更细微更改的情况,例如删除/添加几行代码。在这种情况下,符号定义将关闭,因此搜索结果会将您带到错误的代码行。或者,不是那么细微的变化,例如,当从文件中删除函数定义时,该函数引用的搜索结果将包含无效位置。

不一致窗口的长度源于索引时间,这在很大程度上取决于两件事,至少目前是:

  • 应用于源的更改的大小
  • 源目录树的大小

第一个是相关的,因为历史处理。传入的历史更改越多(例如 Git 中的更改集),索引器为生成索引的历史缓存和/或历史字段(假设启用历史处理)必须做的工作就越多。

第二个是相关的,因为索引器遍历整个源目录树以找出哪些文件已更改,这可能会导致大量系统调用和潜在的大量 I/O。至少在实现https://github.com/oracle/opengrok/issues/3077之前,这将仅有助于基于变更集的源代码管理系统。

于 2021-05-14T13:13:48.947 回答