到目前为止,我已将“is_fresh_instance”视为“我不知道以前的历史,所以我再次向您发送所有数据”。当我的“自”为“0”或类似时,这种方法很好。我得到了所有内容,我将“is_fresh_instance”解释为这不是增量更新而是完全转储的信号。
但我今天看到了这一点。
我正在监视一棵树,其中包含200多个目录和12.000个文件。我在里面创建了一个新文件。我的文件监视器处于脱机状态(守望者进程正在运行,但没有人订阅)。我启动了我的文件监视器,它请求“增量”转储“自”。我明白了:
{'unilateral': True, 'subscription': 'Buffy', 'root': '/home/meta', 'is_fresh_instance': True, 'version': '4.9.0', 'clock': 'c:1517109517:10868:2:97', 'files': [{'name': 'dir', 'exists': True, 'oclock': 'c:1517109517:10868:2:97', 'ctime_ns': 1517168825691348944, 'new': True, 'mode': 16877}, {'name': 'dir/FILE.TXT', 'exists': True, 'oclock': 'c:1517109517:10868:2:97', 'ctime_ns': 1517168825787349000, 'new': True, 'mode': 33188}]}
这里我收到“is_fresh_instance = True”,但我收到了增量通知。如何进行?。目录“dir”被标记为“新”(它不是)然后我想我应该做一个“查询”来请求内容,但后来我不明白为什么我得到新文件的通知,如果我是应该扫描目录,因为它是“新的”(它不是)。
我觉得守望者的语义真的很混乱。文档导航很糟糕,我没有看到任何我可以学习的例子。
当我得到“is_fresh_instance = True”时,守望者期待我做什么?
此案例100%可重复。如果我在订阅过程中创建文件,我会看到“is_fresh_instance = False”。如果我的显示器处于脱机状态,并且当它返回时它会请求具有最新时钟的“自”,我会收到相同的通知(目录和文件),但是“is_fresh_instance = True”。
帮助! Python代码示例?。
答案 0 :(得分:0)
我怀疑你的一些问题与https://stackoverflow.com/a/48493592/149111有关,但你说我们的文档可能更好是正确的,所以这里有一些背景信息。
当守望者无法告诉您在您请求的时间范围内发生的事件时,会生成一个新的实例结果。有几种情况可以触发:
since
生成器的空白时钟字符串(这与查询表达式中的since
项不同!)守望者希望确保你不会错过你感兴趣的事件,所以它是错误的或错过的东西,它会告诉你一切,以防万一。
is_fresh_instance
标志在这些情况下设置,这意味着它会告诉您查询时存在和匹配的所有内容。
如果您有来自先前监视器查询的文件系统的任何缓存信息,则必须丢弃它,因为它现在已过时。 watchman的结果包括有关当前存在的所有文件的信息。这是一个重要的信号,有助于防止有状态的消费者的守望者数据偏离世界的观点。这会阻止的问题是:
A
已存在并显示在先前的查询结果中,并且您缓存了该信息A
已删除如果您没有清除缓存,则可能会错误地认为A
仍然存在,因为它在缓存状态下存在。
如果您没有任何缓存信息,那么您无需执行任何其他操作,您可以忽略该标记。
对于某些消费者,特别是那些树木非常大的消费者,如果您遇到新的实例结果集,可能需要执行一些其他应用程序定义的后备处理。
您可以在查询中设置empty_on_fresh_instance: true
,告诉守望者为您提供一个空的files: []
列表,而不是有关所有当前文件的信息。
如果您决定使用此标记,我建议您跟进since
clock
is_fresh_instance
/* Renew cookie at every page load */
function renew_wp_cookie() {
//Return early if its on login/logout page
if(in_array($GLOBALS['pagenow'], array('wp-login.php'))) return;
if (is_user_logged_in() && current_user_can('user_role')) {
$current_logged_user = get_current_user_id();
wp_set_auth_cookie($current_logged_user, true);
}
}
add_action('init', 'renew_wp_cookie');
查询结果中的{{1}}密码,以确保您还没有错过在后备处理过程中可能发生的任何其他更改。
一般情况下,除非您确定需要,否则我不建议使用此标志。
我们在python中没有很多教育示例,但您可以查看一些真正的程序: