Использование интерфейса сокета продолжает отправлять предупреждения о переполнении

Устанавливаю часы через интерфейс сокета, а потом подписываюсь на изменения.

Для каждого входящего 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 после переполнения/после повторного сканирования в той же/существующей подписке.


person Stephen Haberman    schedule 18.10.2016    source источник


Ответы (1)


Извините, что это не так ясно, как могло бы быть.

Во-первых: здесь не обязательно предпринимать какие-то действия, так как служба сторожа уже восстановилась после переполнения.

Он просто сообщает вам, что у вас может быть проблема с локальной конфигурацией; если вы работаете в Linux, вы можете подумать об увеличении различных параметров sysctl inotify. Если вы находитесь на Mac, вы мало что можете с этим поделать. Предупреждение является липким, поэтому оно принудительно отображается перед лицом пользователя. Позже у нас были пользователи, запрашивающие способ подавить его, поэтому было добавлено предложение удалить и перезапустить часы.

В результате появилось довольно шумное предупреждение, которое вызвало еще большую путаницу.

В watchman 4.7 мы добавили параметр конфигурации для отключения этого предупреждения: https://facebook.github.io/watchman/docs/config.html#suppress_recrawl_warnings Цель здесь — скрыть предупреждение от пользователей, которые не знают, как (или не имеют разрешения) исправить конфигурацию системы. Он хорошо работает в сочетании с (недокументированными) параметрами конфигурации выборки производительности, которые могут записывать и сообщать об объеме повторных обходов в систему отчетов для конкретного сайта.

person Wez Furlong    schedule 19.10.2016
comment
Имеет смысл, спасибо! FWIW, я думаю, было бы здорово иметь команду только для сброса липкого предупреждения. Затем я мог бы сбросить его (после того, как я повторил его пользователю) через интерфейс сокета без использования watch-del, который, как я полагаю, сделает текущую подписку недействительной. (Проверка конфигурации также имеет смысл; моя программа делает это при запуске и просто завершает работу, если ограничения слишком низкие/по умолчанию, если только пользователь явно не отменит пропуск проверок.) - person Stephen Haberman; 20.10.2016