После последнего обновления в контекстном меню сервиса модуля Inet появилось новое действие "Синхронизация", которое, судя по логам, сначала удаляет сервис, а потом снова его создаёт.
При выполнении синхронизации обнаружил следующие проблемы:
1. Синхронизация никак не влияет на активную сессию сервиса. Логично было бы предположить, что при удалении сервиса вызовется метод connectionModify, который удалит активные сервисы сессии с железа и включит disabled-сервисы (сервисы, прописанные в параметре radius.serviceName.disable), а при создании сервиса метод connectionModify сделает обратные действия. Ну естественно, всё-это должно происходить при наличии активной сессии.
2. При выполнении синхронизации из активных опций исчезают опции, перечисленные в параметрах сервиса на договоре. Попробую привести пример логов:
Код:
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Do InetSaServInitEvent task
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Do task deviceId: 1; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaServModifyEvent] moduleId: 8; pluginId: no; cid: global; scid: -1; userId: -1; oldInetServ: VK-001/12; newInetServ: null; newInetServState: 1; newInetServOptionList: InetServOption [serviceId:1; optionId:9; 06.08.2012-01.01.1970]; timestamp: 1345097568854
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=3; inetServId: 1; call: true; oldState: 1; newState: 1; oldOptionSet: 3,9; newOptionSet: 3
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Processing deviceId:1; command ServiceActivatorEvent type=3; inetServId: 1; call: true; oldState: 1; newState: 1; oldOptionSet: 3,9; newOptionSet: 3
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorSet - Invoking serviceCancel
mq 08-16/10:12:48 INFO [event-proc-p-2-t-1] InetServRuntimeMap - Taked event: Event[ru.bitel.bgbilling.modules.inet.access.event.InetServDeviceStateAndOptionsModifiedEvent] moduleId: 8; pluginId: no; cid: global; scid: -1; userId: -1; deviceId: 1; inetServId: 1; state: -1000; optionSet: 3; timestamp: 1345097568857
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=1; inetServId: 1; call: true; oldState: 1; newState: 1; oldOptionSet: 3; newOptionSet: 3
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Processing deviceId:1; command ServiceActivatorEvent type=1; inetServId: 1; call: true; oldState: 1; newState: 1; oldOptionSet: 3; newOptionSet: 3
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorSet - Invoking serviceCreate
connection 08-16/10:12:48 INFO [sa-p-10-t-1] ServiceActivatorDeviceWorker - Process event type[1] result=true
Видна запись: oldOptionSet: 3,9; newOptionSet: 3. Опция 9 как раз прописана статически в сервисе договора, а опция 3 - из тарифного плана. Дальше сервис живёт без опции 9 до перезагрузки сервера BGInetAccess (может она появиться и раньше, но я особо не ждал).
Теперь, если сервис отключиться, то у активной сессии уберётся сервис, соответсвующий опции 3, а сервис, соответствующий опции 9 останется. Т. е. абонент сможет пользоваться, например, локальной сетью в отключенном состоянии! При повторной авторизации тоже не всё гладно: сначала выдаётся только сервис для опции 3, и только потом на активную сессию через CoA вешается ещё один сервис для опции 9.
P. S. Используется схема PPPoE + ISG.