0

我正在通过套接字接口建立一个手表,然后订阅更改。

对于每个传入的 PDU,如果地图有一个“警告”键,我会向控制台/用户输出警告,正如文档所建议的那样。

但是,当发生溢出时,看起来我并没有得到一次“警告”键,而是每个传入的 PDU 一遍又一遍地有相同的警告(“重新抓取发生 1 次”)(AFAICT?),所以我最终使用相同的错误消息向控制台发送垃圾邮件。

对我来说,如果 Watchman 每次溢出事件只发送一次“警告”键会更好。否则,我正在考虑必须缓存“已向用户显示的警告”以避免向控制台发送垃圾邮件。

此外,就一般溢出行为而言,警告说:

To resolve, please review the information on
https://facebook.github.io/watchman/docs/troubleshooting.html#recrawl
To clear this warning, run:
`watchman watch-del ... ; watchman watch-project ...`

但我希望有一种方法可以重置警告,而不必取消并重新订阅我的订阅。例如,现在我必须控制-c 杀死我的程序,运行watchman watch-del命令,然后重新启动我的程序。

我可以在内部实现自动化,例如让我的程序检测到“发生溢出”警告消息,终止它的订阅,watch-del发出watch.

但是,即使我可以通过套接字接口重置警告,或者这样做 internal watch-del,我想知道为什么警告需要重置 - 例如理论上如果守望者已经进行了重新抓取,我告诉用户它发生了(通过将其记录到控制台),现在不应该好吗?为什么首先需要watch-del+重新watch

例如,只要不经常发生溢出,就好像守望者在进行重新抓取(因此与文件系统重新同步)+发出一个警告 PDU 应该意味着一切都恢复正常,理想情况下,我的用户程序可以保留愚蠢/简单,只是继续在它的相同/现有订阅上获取溢出后/重新抓取后 PDU。

4

1 回答 1

0

抱歉,这还不是很清楚。

首先:您不必在这里采取行动,因为守望者服务已经从溢出中恢复。

它只是建议您可能有本地配置问题;如果您在 Linux 上,您可能会考虑增加各种 inotify sysctl 参数。如果你在 Mac 上,你几乎无能为力。警告是粘性的,因此它被迫面对用户。后来我们有用户请求一种方法来抑制它,所以添加了删除并重新启动手表的建议。

结果是一个相当嘈杂的警告,引起了更多的混乱。

在 watchman 4.7 中,我们添加了一个配置选项来关闭此警告:https ://facebook.github.io/watchman/docs/config.html#suppress_recrawl_warnings 这里的目的是向不知道如何操作的用户隐藏警告(或没有权限)来修复系统配置。它与(未记录的)性能采样配置选项结合使用可以很好地记录重新抓取的数量并将其报告给特定于站点的报告系统。

于 2016-10-19T23:18:12.083 回答