forum.bitel.ru http://forum.bitel.ru/ |
|
Соединение не найдено в BGInetAccounting http://forum.bitel.ru/viewtopic.php?f=44&t=7536 |
Страница 1 из 1 |
Автор: | vkulakov [ 14 дек 2012, 16:08 ] |
Заголовок сообщения: | Соединение не найдено в BGInetAccounting |
После запуска сервера BGInetAccounting в логах периодически появляются следующие ошибки: Код: mq 12-14/13:54:48 ERROR [event-proc-p-2-t-1] Consumer - Соединение не найдено (connectionId=91168, deviceId=2, servId=17340) ru.bitel.bgbilling.common.BGException: Соединение не найдено (connectionId=91168, deviceId=2, servId=17340) at ru.bitel.bgbilling.modules.inet.accounting.Accounting.onConnectionCommand(Accounting.java:1919) at ru.bitel.bgbilling.modules.inet.accounting.Accounting.notify(Accounting.java:1878) at ru.bitel.bgbilling.kernel.event.AbstractConsumer.notify(AbstractConsumer.java:344) at ru.bitel.bgbilling.kernel.event.Consumer.notify(Consumer.java:1) at ru.bitel.bgbilling.kernel.event.Consumer.onMessage0(Consumer.java:112) at ru.bitel.bgbilling.kernel.event.Consumer$EventListenerRunnable.runImpl(Consumer.java:51) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) С чем они связаны и как их побороть? |
Автор: | Amir [ 14 дек 2012, 16:22 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Похоже radius.connection.checkDuplicate=2|3 пытается завершить сессию (Access отправляет команду Accounting'у), но сессии уже нет. Или не было - возможно, после lock wait timeout возникли записи в inet_connection_ со status>0 без соответствующей записи в inet_session_. |
Автор: | vkulakov [ 14 дек 2012, 16:27 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
И что с этим делать? Можно как-то вычистить из базы левые записи, или со временем всё само устаканится? |
Автор: | Amir [ 14 дек 2012, 16:35 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Если есть такие записи - лучше удалить запросом: Код: DELETE FROM inet_connection as cc LEFT JOIN inet_session as ss ON ss.connectionId=cc.id WHERE cc.connectionStatus>0 AND ss.id IS NULL
|
Автор: | vkulakov [ 15 дек 2012, 19:16 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Базу почистили ещё вчера. С тех пор в базе нет соединений без сессий. В логах по-прежнему наблюдаются указанные сообщения об ошибках. |
Автор: | Amir [ 16 дек 2012, 00:15 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
В конфигурации присутствует параметр radius.connection.checkDuplicate=2|3 ? |
Автор: | vkulakov [ 17 дек 2012, 10:35 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Не успел дописать в субботу - компьютер сдох ![]() Да, параметр radius.connection.checkDuplicate=2 присутствует, и как показало небольшое расследование, ошибки были связаны с ним. Вообще, логика работы данного параметра не до конца понятна. Сейчас (при radius.connection.checkDuplicate=2), если сессия висит и приходит Access-Request, то выдаётся Access-Reject с кодом Too many sessions и тут же сбрасывается существующая сессия. Но почему бы сначала не сбрасывать сессию, а потом выдавать нормальный Access-Accept? При radius.connection.checkDuplicate=1 понятно, что нужно сначала дождаться ответа. А что будет, если ответ не придёт, или NAS вернёт ошибку? Ждать пока сессия по таймауту не закроется? |
Автор: | vkulakov [ 18 дек 2012, 11:34 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Вопрос ещё актуален. Что будет, если установлена опция radius.connection.checkDuplicate=1 и 1. ответ от NAS на дисконнект не пришёл, 2. NAS вернул ошибку (типа "сессия не найдена"), 3. в промежутке между запросом на дисконнект и получением стоп-пакета было ещё несколько попыток поднять сессию? |
Автор: | Amir [ 18 дек 2012, 16:52 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
radius.connection.checkDuplicate практически дублирует функционал из dialup. При radius.connection.checkDuplicate=1 идет просто попытка сброса на NAS (изначально в dialup просили такой режим, зачем - не знаю). Т.е. пока так и не придет стоп пакет или сессия не завершится по таймауту - не пустит. При radius.connection.checkDuplicate=2 попытается сбросить, а потом завершить сессию в базе (вот тут и возникает ошибка в логах - он просто пытается завершить сессию, которая успела уже все-таки завершиться). При radius.connection.checkDuplicate=3 - просто завершает а базе. Т.е. еще в dialup было сделано с тем условием, что сессия отваливается редко и не страшно, если клиенту придется два раза переподключиться после отваливания. Можем попробовать добавить дополнительные режимы. |
Автор: | vkulakov [ 18 дек 2012, 17:38 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Проблема тогда получается вот в чём: При radius.connection.checkDuplicate=1 и если сессия на NAS'е уже завершилась, то при попытке завершить эту сессию биллингом, NAS вернёт ошибку, и придётся ждать таймаут (~30 мин). Это не очень хорошо. При radius.connection.checkDuplicate=2 если всё-таки приходит Stop-пакет, то в логах возникает ошибка "Соединение не найдено", и в результате не понятно, то ли это не найдена просто подвисшая сессия, то ли это реальная проблема... Можно ли для данной опции вызывать не Exception и ERROR, а просто писать в лог WARN с комментарием типа "Пришёл стоп-пакет для подвисшей сессии"? |
Автор: | Amir [ 19 дек 2012, 14:55 ] |
Заголовок сообщения: | Re: Соединение не найдено в BGInetAccounting |
Цитата: Можно ли для данной опции вызывать не Exception и ERROR, а просто писать в лог WARN с комментарием типа "Пришёл стоп-пакет для подвисшей сессии"? Сегодня выложим билд.
|
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |