inotify: сообщаются ли события строго в том же порядке, в котором они произошли в файловой системе?

Я использую inotify для мониторинга различных каталогов на различных разделах (которые, возможно, расположены на разных жестких дисках). Чтобы быть уверенным, что собраны все события, которые произошли до определенного момента времени T, я прикасаюсь к специальному файлу в своем домашнем каталоге и жду, пока inotify сообщит эта модификация. Получив это уведомление, могу ли я быть уверен, что получил все события для всех изменений до T (для всех каталогов и всех разделов)?


person mstrap    schedule 21.05.2014    source источник
comment
Из любопытства, почему вам нужно знать, какое событие на самом деле происходит раньше, и какие критерии вы бы использовали, чтобы сказать, какое событие на самом деле происходит раньше?   -  person n. 1.8e9-where's-my-share m.    schedule 21.05.2014


Ответы (2)


В документации inotify в ядре указано " что каждый экземпляр [inotify] связан с уникальной упорядоченной очередью." Итак, я думаю, что события, связанные с часами, добавленными к данному экземпляру (созданному с помощью inotify_init()), принимаются в том же порядке, в котором они происходят .

person Christophe Vu-Brugier    schedule 21.05.2014
comment
Я прочитал эту часть документации, однако она не отвечает на мой вопрос (хотя я согласен, вполне вероятно, что это так). - person mstrap; 21.05.2014
comment
В документации есть еще одна часть: Вопрос. Какое дизайнерское решение стоит за использованием fd-per-instance, а не fd-per-watch? это объясняет, что экземпляр inotify позволяет сохранить порядок событий. - person Christophe Vu-Brugier; 21.05.2014
comment
Спасибо, Кристоф, я думаю, что это утверждение, которое я искал. Скажем, включая ссылку на kernel.org/doc/Documentation/filesystems/ inotify.txt, к ответу, и я приму его. - person mstrap; 22.05.2014

Я не уверен, работает ли это для наблюдения за разными файловыми системами в одном и том же экземпляре inotify, но могу с уверенностью сказать, что в целом этот метод работает: мы используем его в Watchman (мы описываем его здесь: https://facebook.github.io/watchman/docs/cookies.html)

Мы предположили, что это не будет правильно упорядочено через границы файловой системы и создаст один экземпляр для каждого наблюдаемого корня; это упрощает нам правильное отслеживание и связывание событий. Нам также приходится иметь дело с fsevents, kqueue и другими реализациями наблюдения, поэтому мы стараемся избегать слишком тесной связи с базовой реализацией.

В зависимости от того, каков ваш конкретный вариант использования, вы можете обойтись одним экземпляром для каждой файловой системы и прикоснуться к специальному файлу в корне каждой в свое время T. При условии, что вы наблюдали оба изменения ваших специальных файлов, вы знайте, что вы видели все до времени Т и, возможно, даже немного больше. Если часть «возможно, немного больше» не является нарушителем условий сделки, тогда вы золотой.

person Wez Furlong    schedule 22.05.2014
comment
Большое спасибо, Вез, за ​​то, что поделились этим опытом. - person mstrap; 22.05.2014