Добрый день.
На одном из NASов (Cisco) стоит вот такой скрипт
Код:
import bitel.billing.server.radius.*;
prefix = "client-mac-address";
length = prefix.length();
attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair );
if( attributes != null )
for( it = attributes.iterator(); it.hasNext(); )
{
ra = it.next();
value = ra.getValue();
if( value.startsWith( prefix ) )
{
request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, value.substring( length + 1 ) );
}
}
Временами в error.log радиуса сыпятся вот такие вот ошибки
Код:
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - java.sql.SQLException: Connection com.mysql.jdbc.JDBC4Connection@db66d4e is closed.
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingConnection.checkOpen(DelegatingConnection.java:398)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:279)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at bitel.billing.server.processor.dialup.DialUpSessionRealtime.setCalculatePeriod(DialUpSessionRealtime.java:1957)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at bitel.billing.server.processor.dialup.DialUpSessionRealtime.calculateService(DialUpSessionRealtime.java:904)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at bitel.billing.server.processor.dialup.DialUpSessionRealtime.calculateTime(DialUpSessionRealtime.java:737)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at bitel.billing.server.processor.dialup.DialUpSessionRealtime.calculate(DialUpSessionRealtime.java:479)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpNasConnection.updateConnectionImpl(DialUpNasConnection.java:450)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpNasConnection.updateConnection(DialUpNasConnection.java:137)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpNas.updateConnection(DialUpNas.java:525)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpNas.updateConnection(DialUpNas.java:1)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accounting(RadiusProcessor.java:494)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpRadiusProcessor.accounting(DialUpRadiusProcessor.java:1228)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.modules.dialup.radius.DialUpRadiusProcessor.accounting(DialUpRadiusProcessor.java:1)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accountingRequest(RadiusProcessor.java:431)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.accountingRequest(RadiusListenerWorker.java:333)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processPacket(RadiusListenerWorker.java:201)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.runImpl(RadiusListenerWorker.java:87)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at java.lang.Thread.run(Thread.java:662)
radius 02-07/00:00:22 ERROR [rdsLstnr-p-8-t-111] LoggingPrintStream - at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)
Опытным путем было установлено, что это именно из-за скрипта. Как только его отключаешь - проблем нет. Со времен 5.1 скрипт не менялся (если быть точным в 5.1 он даже выполнял больше действий и таких проблем не было).
Такое ощущение, что когда циска начинает слать больше запросов - просто не успевает пробегать этот скрипт по всем запросам и потому некоторые из них отбрасывает.
В связи с этим пара вопросов:
1) Скрипт предобработки радиус запроса действует и на апдейт пакеты? (у нас шлются раз в минуту если мне память не отшибло)
2) if(1==true){Можно ли сделать как-нибудь, чтобы скрипт действовал только на запросы авторизации?}
3) Может снизить частоту отсылки апдейт пакетов? У кого какая из собственного опыта?
4) Эта проблема появилась в 5.2. В 5.1 ничего подобного не было. Разработчики гляньте, что там такое. Вдруг что можно оптимизировать
Код:
#cat ./radius.properties
db.url=jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&characterEncoding=Cp1251&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&elideSetAutoCommits=true&cachePrepStmts=true&queryTimeoutKillsConnection=true&connectTimeout=1000
db.maxIdle=20
db.maxActive=900
db.validationTimeout=1
Код:
#cat /etc/my.cnf
wait_timeout = 28800
Собственно этот вопрос у меня до сих пор висит в хелпдеске. Что такие ошибки в еррор.логе. Обратился на форум, чтобы узнать может у кого этот скрипт более оптимизирован или т.п.