在示例安装和配置说明中,似乎建议 OpenGrok 需要两个临时区域,其基本原理是,一个区域是索引再生工作区域,另一个区域是是一个生产区域,它们随着每个索引再生而旋转。
真的有必要吗?我可以只有一个区域而不是两个区域吗?
我正在寻找一个特定于opengrok的答案,而不是一个可能遇到的竞争条件的一般列表。
答案 0 :(得分:0)
严格来说,这没有必要。事实上,我很确定绝大多数部署都没有临时区域。
也就是说,您需要决定是否对可能导致某些搜索失败/不精确的不一致窗口感到满意。假设源已更新(例如,在 Git 的情况下通过 git pull
)并且索引器尚未完成处理新更改。因此,索引仍然包含反映源旧状态的数据。假设应用于源的更改删除了一个文件。现在,如果有人发起与已删除文件内容匹配的搜索,搜索结果可能会以错误结束。这可能是更好的选择 - 考虑对文件进行更细微更改的情况,例如删除/添加几行代码。在这种情况下,符号定义将关闭,因此搜索结果会将您带到错误的代码行。或者,不是那么微妙的变化,例如从文件中删除函数定义,该函数引用的搜索结果将包含无效位置。
不一致窗口的长度源于索引时间,这在很大程度上取决于两件事,至少目前是:
第一个是相关的,因为历史处理。传入的历史变更越多(例如 Git 中的变更集),索引器为索引生成历史缓存和/或历史字段所需的工作就越多(假设历史处理处于开启状态)。
第二个是相关的,因为索引器遍历整个源目录树以找出哪些文件已更改,这可能会导致大量系统调用和潜在的大量 I/O。至少在 https://github.com/oracle/opengrok/issues/3077 实施之前,这将仅有助于基于变更集的源代码管理系统。