我正在通过套接字接口建立一个监视,然后订阅更改。
对于每个传入的PDU,如果地图有“警告”键,我会按照文档的建议将警告输出到控制台/用户。
然而,当发生溢出时,看起来我没有得到“警告”键一次,而是每次传入的PDU都反复发出相同的警告(“重新发生一次”)(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
。
但是,即使我可以通过套接字接口重置警告,或者执行内部watch-del
,我也想知道为什么警告需要重置 - 例如。从理论上来说,如果守望者已经进行了重新抓取,并且我告诉用户它发生了(通过将其记录到控制台),现在不应该没事吗?为什么首先需要watch-del
+重新watch
?
E.g。只要溢出不会不断发生,看起来像守望者正在进行重新抓取(因此与文件系统同步)+发出一个警告PDU应该意味着一切都恢复正常,我的用户程序可以理想地保持愚蠢/ simple并且只是继续获得溢出/后重新抓取PDU的相同/现有订阅。
答案 0 :(得分:0)
很抱歉这不是很清楚。
首先:你没有严格要求采取行动,因为守望者服务已经从溢出中恢复过来。
它只是建议您可能有本地配置问题;如果你在Linux上,你可以考虑增加各种inotify sysctl参数。如果你在Mac上,你可以做的很少。警告是粘性的,因此它被强制面对用户。我们后来让用户请求一种方法来抑制它,因此添加了删除和重新启动手表的建议。
结果是一个非常嘈杂的警告,引起了更多的混乱。
在watchman 4.7中,我们添加了一个配置选项来关闭此警告:https://facebook.github.io/watchman/docs/config.html#suppress_recrawl_warnings 这里的目的是隐藏不知道如何(或没有权限)修复系统配置的用户的警告。它与(未记录的)perf采样配置选项配合使用,可以记录并报告重新抓取的数量到特定于站点的报告系统。