При обновлении услуги выполняется проверка на наличие расхождений в описании услуги между версиями, система проверяет присутствие скрипта миграции. При наличии расхождений система отправляет аварию о необходимости обновления xml-описателя. Если в новой версии xml присутствуют свойства, которых не было в предыдущей версии xml, то система проверяет, есть ли правило миграции для данного свойства. Если правила миграции присутствуют для всех полей - миграция проходит в автоматическом режиме. Если в новой версии xml присутствует свойство, правило миграции для которого отсутствует - необходимо указать правило миграции вручную. Для этого система посредством wizzard-а запросит у администратора ввести значение для инициализации данного свойства у абонентов, у которых данная услуга уже активирована.
Возможны три варианта инициализации:
- Инициализация значением по умолчанию. Свойство может быть инициализировано значением по умолчанию только тогда, когда значение по умолчанию описано в xml-файле;
- Получить значение из установленного свойства. Если в ранней версии услуги было свойство того же типа, что и новое свойство, то значение для нового свойства можно скопировать из значения установленного свойства;
- Указать явно. Можно явно указать, каким значением инициализировать новое свойство.
Для обновления услуг с текущей версии (установленной в системе) до версии, указанной в xml, используется следующая команда CLI:
/cluster/storage/<SOME_STORAGE>/ss/update <NAME_DS> -<Flag> <SSTemplate>
либо
/node/<NAME_DS>/ss/update -<Flag> <SSTemplate>
где <SOME_STORAGE> - имя кластера хранения долговременных данных (DS);
<NAME_DS> - имя ноды DS;
<Flag> - флаг, принимает значения:
- -a, --auto - использовать правила миграции, описанные в xml (если они прописаны);
- -m, --manual - не использовать правила миграции, описанные в xml (если они прописаны). В данном случае для всех новых свойств необходимо будет явно задать значения;
<SSTemplate> - имя xml файла-описания услуги. В качестве файла-описания услуги может использоваться маска поиска. В этом случае все файлы, имена которых удовлетворяют этой маске, будут установлены в систему. В маске поиска используются символы: * - любое количество символов, ? - ровно один символ.
Пример
Обновление услуги "test" с версии 1 до версии 2.
admin@[mycelium1@ecss1]:/$ cluster/storage/ds1/ss/update ds1@ecss1 --manual ss_test_2.xml [update] The value of the property restrict_number_22 may be copied from one of the prope rty: test_field, restrict_number Would you like to copy properties' value?: yes/no ?> yes [update] Select property to copy it's value to the restrict_number_22. Avaliable values: test_field, restrict_number Property name: : test_field/restrict_number ?> test_field [update] New property test_field_2 have default value 9. Would you like to apply this value for all activate aliases?: yes/no ?> yes [update] Would you like to enter default value search_strategy :: enum for already activated aliases?: yes/no ?> yes [update] Default value for search_strategy: first [update] Would you like to enter default value test_field_without_value :: [integer] for already activated aliases?: yes/no ?> yes [update] Default value for test_field_without_value: 234 [update] Default value for test_field_without_value: [234] Successfully updated: /var/lib/ecss/ss/ss_test_2.xml