LINUX.ORG.RU

Java Directory Watcher

 ,


0

3

Привет! Опишу проблему: Есть удаленная директория, NFS. Туда сгружаются некоторые файлы(логи), мини-батчами, по 25-30мб. И хранятся там, не модифицируются и не удаляются.

Соответственно, если коротко: watcher service из nio не видит добавление новых файлов в nfs директорию, в которую файлы выгружает EMM.

Подробнее:

Я обрабатываю файлы и навесил специальный watcher на директорию, который отслеживает появление новых файлов.

Watcher из NIO:

 WatchService watchService = null; 
        try { 
            watchService = path.getFileSystem().newWatchService(); 
            path.register(watchService, 
                    StandardWatchEventKinds.ENTRY_CREATE); 
        } catch (IOException e1) { 
            e1.printStackTrace(); 
        } 

for (;;) { 
            WatchKey key = null; 
            try { 
                key = watchService.take(); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
            // Итерации для каждого события 
            for (WatchEvent event : key.pollEvents()) { 
                switch (event.kind().name()) { 
                case "ENTRY_CREATE": 
                    System.out.println("File " + event.context() 
                            + " is created!"); 
                    break; 
                }
            }
 key.reset(); 

Так вот, если я руками добавляю файлы, копирую или перемещаю(cp или mv), тогда он регистрирует этот эвент и пишет мне это сообщение. Но! Файлы туда выгружаются с помощью EMM. И вот тут возникает проблема, ибо он не видит добавление файлов новых.

Права на чтение у меня есть, права на директорию для other группы

r-x

В чем может быть проблема?Сталкивался ли кто-то с этим?


inotify FAQ:

Q: Can I watch sysfs (procfs, nfs...)?
Simply spoken: yes, but with some limitations. These limitations vary between kernel versions and tend to get smaller. Please read information about particular filesystems.

Вполне себе может быть причиной.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

А откуда это вообще? В смысле я впервые вижу этот сайт и почему вы думаете, что это лежит под java.nio?

aarexer
() автор топика
Ответ на: комментарий от xaizek

Да, там вроде Centos стоит..

Но я же говорю, все работает если я создаю файлы или копирую туда. Мне кажется дело в EMM..Я не сталкивался с этим, как может EMM выкладывать файлы?

aarexer
() автор топика
Ответ на: комментарий от aarexer

Я даже не знаю что такое EMM. Но разница как я понял в том, что в одном случае событие генерируется и обрабатывается локально, а в другом генерируется удалённо. Чтобы это работало, нужно чтобы NFS эти события пересылал по сети, что он скорее всего не делает так, как этого хочет inotify.

xaizek ★★★★★
()
Ответ на: комментарий от aarexer

Хотя записывать тоже можно по-разному. Могут создавать на месте, а могут создать и потом переместить.

xaizek ★★★★★
()

Так вот, если я руками добавляю файлы, копирую или перемещаю(cp или mv), тогда он регистрирует этот эвент и пишет мне это сообщение.

Это где? Там же где крутится это приложение?

Hater ★★
()
Ответ на: комментарий от Hater

Да я могу файл создать и на NFS, он же примонтирован к серверу, где приложение крутится.

aarexer
() автор топика
Ответ на: комментарий от xaizek

Это эриксоновская система, она ждет создания бинарного файла на коммутаторе, преобразует его в текстовый формат и передает по FTP на NFS.

aarexer
() автор топика
Ответ на: комментарий от aarexer

Вот попробуй создать именно с другого NFS клиента. Готов поспорить что не поймаешь этот ивент.

Я намекаю на то, что твоё приложение ловит только локальные ивенты (манипуляции с ФС только с данного хоста). Всё же NFS не делает бродкаста об изменении всем клиентам.

Hater ★★
()
Ответ на: комментарий от Hater

Да ты прав, NFS просто напросто не сообщает о изменениях. Watcher работает только для локальной ФС..

Хм, и как быть?Как отслеживать в рантайме появление новых файлов? Кроме супер-решения держать в памяти(в файле, бд) список файлов сейчас и в отдельном треде получать новый список каждые N-секунд, например..

aarexer
() автор топика
Ответ на: комментарий от aarexer

Не проще по дате файла отслеживать? Ставишь точку последнего отслеживания, затем делаешь поиск новых файлов после этой точки...

foror ★★★★★
()
Ответ на: комментарий от foror

Я понимаю вашу идею, можно, но все же это будет не реалтайме , а мне бы хотелось именно в реалтайме обрабатывать, чтобы как только пояивлся - сразу в работу взял бы его...

aarexer
() автор топика
Ответ на: комментарий от Hater

Я файлы не могу трогать, так как заказчик очень трепетно относится к данным, не могу взять и куда-то их сложить, поэтому мне и подходила идеально идея с watcher-ом...

aarexer
() автор топика
Ответ на: комментарий от aarexer

А NFS сервер чей? Мы в похожей ситуации запустили на NFS сервере incron job, который и сообщал приложению что пора бы выкачать файл.

Hater ★★
()
Ответ на: комментарий от aarexer

Я не спец по NFS, эта штука шлет броадкасты удаленным системам об изменениях? Если нет, то это не выполнимо by design. Если да, то вешай своего слушателя на сокет NFS.

foror ★★★★★
()
Ответ на: комментарий от foror

Я тоже не спец по NFS, но судя по всему - нет, не шлет

aarexer
() автор топика
Ответ на: комментарий от cnupm

Не работал с JMS, но похоже по описанию на akka, тут вопрос в том, как я буду детектить в реалтайме, что появился новый файл?

aarexer
() автор топика

WatchService не работает гарантированно с удалёнными файлухами. ни с самвой ни с нфс. Есть три варианта.

1. Сделать по времени опрос на кол-во файлов - самый нормальный вариант.

2. Что такое emm не знаю, но, если e это enterprise, то возможно оно умеет слать евенты само.

3. Поставить какую-нить Alfresco в ней есть реализация ftp/cifs, а так же всякие правила обработки по созданию/обновлению контента. Бонусом - удобное средство для хранения и просмотра контента.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

1. Ну окей, кол-во файлов поменялось, а дальше что? Надо или по именам или как-то по другому сравнивать, если кол-во файлов непрерывно растет(а оно растет), то не круто будет каждый раз кучу бесполезной инфы обрабатывать.

2. Нет доступа к нему, оно просто есть.

3. Ставить не могу ничего, требование заказчика.

aarexer
() автор топика
Ответ на: комментарий от Hater

Да, но прямо на машину у которой мой NFS - это локальная ФС, меня не пустят..

aarexer
() автор топика
Ответ на: комментарий от aarexer

то не круто будет каждый раз кучу бесполезной инфы обрабатывать.

не круто это элементарную задачу на два часа работы второй день мусолить. а обработка информации имеет соответствующие временные критерии, которые очень легко проверить тестированием, а не пустопорожними разговорами про «круто»/«не круто».

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

При чем здесь мусолить? Когда у меня есть время, я захожу и отвечаю/смотрю что ответили, также, как и вы.

Пустопорожние разговоры? Вы предложили сделать опрос на кол-во файлов - отличное решение. Только не моего вопроса и задачи.

Обработка информации, безусловно, имеет критерии, я же просто пытаюсь рассмотреть всевозможные варианты и выбрать лучший.

Если у вас неудачный день, то это не повод срываться тут, мне кажется.

aarexer
() автор топика
Последнее исправление: aarexer (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.