Устанавливаю часы через интерфейс сокета, а потом подписываюсь на изменения.
Для каждого входящего 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 ...`
Но я бы предпочел иметь способ сбросить предупреждение без необходимости отмены и повторной подписки на мою подписку. Например. прямо сейчас я должен с помощью control-c убить мою программу, запустить команду watchman watch-del
, а затем перезапустить мою программу.
Который я мог бы автоматизировать внутри, например. пусть моя программа обнаружит предупреждающее сообщение «произошло переполнение», аннулирует подписку, выдаст watch-del
, а затем повторно выдаст watch
.
Но даже если бы я мог сбросить предупреждение через интерфейс сокета или сделать это внутреннее watch-del
, мне интересно, почему предупреждение вообще нужно сбрасывать - например. Теоретически, если сторож уже выполнил повторное сканирование, и я сообщил пользователю, что это произошло (путем регистрации в консоли), разве теперь все не должно быть хорошо? Почему в первую очередь требуется watch-del
+ re-watch
?
Например. пока переполнения не происходят постоянно, похоже, что сторож выполняет повторное сканирование (поэтому возвращается синхронизация с файловой системой) + выдача одного PDU с предупреждением должна означать, что все возвращается к норме, и моя пользовательская программа, в идеале, могла бы оставаться тупой /simple и просто продолжайте получать PDU после переполнения/после повторного сканирования в той же/существующей подписке.