Как я могу атомарно заменить файл на веб-сервере, чтобы его последняя версия была постоянно доступна? - PullRequest
1 голос
/ 27 апреля 2009

Я работаю над проектом, который генерирует файлы Google Планета Земля KML и сохраняет файл в доступном через Интернет каталоге. Он работает на Windows с ActivePerl. (не моя предпочтительная платформа, но это то, с чем я должен работать.)

Метод, который я использую для этого: написать в temp.kml , использовать File :: Copy для копирования temp.kml в real.kml . Это происходит раз в секунду.

Google Планета Земля получает этот real.kml через веб-сервер apache2. Проблема заключается в том, что возникают ошибки, когда Google Планета Земля захватывает real.kml одновременно с копированием temp.kml в real.kml .

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

1 Ответ

3 голосов
/ 27 апреля 2009

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

Используйте файл :: Копировать для перемещения файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...