On Sunday 02 May 2010 15:55:02 Андрей П. Ковбович wrote: > в приложении, работающем в режиме 24х7, есть группа объектов, которые > занимаются какими-то своими делами, взаимодействуют друг с другом. С > выходом новой версии приложения настала пора обновить часть классов > (скажем обновить парочку методов, добавить несколько свойств в классе > и в его экземплярах, поправить баги). Как это сделать в работающей > системе?
Я когда-то делал обновление пакета на лету так: пакет "бэкапится" (указатель на таблицу символов) удаляем запись в %INC. пробуем сделать requre; если получилось - удаляем бэкап. если не получилось, очищаем неймспейс и возвращаем бэкап. Но в этой ситуации, в каждой новой версии объекта придется учитывать как "выглядел" этот объект в предыдущей версии, т.к. новые методы будут вызваны у старых объектов. Вобщем мне не нравится вариант динамического обновления. Хотя решаемо. Сейчас я использую в постепенный апгрейд, как это делается, например, в nginx. (замещение новыми процессами старых). Кстати такой механизм работы также помогает "держать память в узде" в окружениях с непредсказуемыми объемами данных (напр. я качаю xml'ки и парсю их. они могут быть от 1к до 100м. после обработки 100м я "скушаю" кучу памяти, но она мне больше не будет нужна до следующей 100м xml'ки, которая будет, например через день. Соотв. процесс по достижении vsize > limit может мягко заапгрейдиться, не прерывая работу системы). -- Mons Anderson aka Vladimir Perepelitsa <[email protected]> / #99779956 / [email protected] -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
