Что было бы хорошим дизайном для достижения этой синхронизации между машинами? - PullRequest
1 голос
/ 04 ноября 2011

У меня 2 машины, каждая из которых работает по одному процессу.Процесс оболочки на компьютере A отправляет что-то на компьютер B, и процесс Java на B будет использовать эти файлы.Оба процесса выполняются как задачи crontab.

Как добиться синхронизации / атомарности и т. Д.?Как сообщить, что весь файл записан.

, чтобы процесс на B всегда имел доступ к последним и полным файлам, а обработчик не устарел ..

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

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

A копирует файл во временную папку на B. Когда загрузка завершена, он перемещает файл с помощью перемещения или символической ссылки в ожидаемое место.В этом случае B может только когда-либо видеть полностью загруженные файлы.

Если ваш процесс на A не может выполнить SSH в B, чтобы сделать последний шаг, он может добавить еще один файл маркера нулевого байта, который указывает, что загрузка завершена.

A загружает FOO.txt, когда эта загрузка завершается, он создает файл FOO.txt.done.Затем B сканирует каталог на наличие файлов * .done и использует соответствующий файл данных.Плюс уборка конечно.

0 голосов
/ 04 ноября 2011

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

  1. создать временный файл (например, файл блокировки) в начале записи файла, наличие которого означает, что файл, по которому идет поток, записывается в файл, и удалить временный файл после завершения записи. OR
  2. Удалите crontab на потребительском процессе, и процесс scp отправил сигнал (JMS / unicast). Процесс Java может быть просто слушателем в очереди / сокете или вызываться при получении одноадресной рассылки.
0 голосов
/ 04 ноября 2011

Быстрое и грязное решение проблемы можно решить с помощью пользовательского элемента управления, установив владельца (и, соответственно, chmod'ing) при копировании файла (используя SCP из A), по завершении, затем изменив владение / разрешения, чтобы процесс на B мог получить доступ к файлу.

...