Koldun писал(а):
stark писал(а):
Koldun писал(а):
Скрипт шлюза коммутаторов D-Link на основе примеров из wiki.bgbilling.ru
Покажите код вашего скрипта. Он вызывает deadlock. Там у вас никакие потоки дополнительные не запускаются ?
Метод executeUpdate в вашем скрипте входят в deadlock c методом закрытия соединения в планировщике .
На 5.1 скрипты работали нормально, а с переходом на 5.2 и переводом таблиц в innodb, все и началось.
deadlock у нас получался из-за своей таблицы. Мы перевели ее обратно в myisam и deadlock больше не возникает.
Скрипт все равно приложил.
В общем проблема в следующем . У вас скрипте порождается поток отдельный , который ждет асинхронного ответа от snmp . А вы еще используете connection к mysql в этом потоке . А мы не ждем ваш поток , мы закрываем connnectipn. В 5.1 это возможно работало случайно, потому что там был общий connection на всю задачу проверки шлюзов. Хотя тоже странно, потому что в июле 2012 года там тоже этот код поменялся(возможно не обновлялись). Верните innodb обратно. Варианты решения проблемы следующие:
1. Использовать синхронную работу с snmp. В 5.2 для этого есть класс SnmpClient. Тогда никаких потоков не будет.
2. Весь ваш код в методе update(он работает в отдельном потоке как раз) обернуть в try finally и взять новый connection к бд, который потом вы закроете.
Код:
Connection connection = null;
try
{
con = Setup.getSetup().getDBConnectionFromPool();
//ваш код тут.
}
finnally
{
ServerUtils.closeConnection( con );
}