Я использую freeradius 1.0.5 как аккаунтинговый сервер. Аккаунтинговая информация хранится в фаябирдовской базе данных (FB 1.5.2, Linux). Доступ к базе осуществляется или через odbc (sql-драйвер rlm_sql_unixodbc, odbc драйвер взят здесь:
http://prdownloads.sourceforge.net/fire ... .69.tar.gz),
или напрямую через API (sql-драйвер rlm_sql_firebird, самописный).
Не могу понять следующую ситуацию:
После заливки нового IOS-а cisco стала слать одновременно два ALIVE пакета. В первом пакете аттрибут Framed-IP-Address равен пустой строке, во втором IP адресу полученному от радиуса. Соответственно имеем одновременный апдейтит одной и той же записи в разных транзакциях. При доступе к БД через odbc эта ситуация почти всегда успешно разрешается, а в случае прямого доступа (через API) где-то в 90% случаев получаю deadlock. При этом, судя по всему(беглый просмотр сырцов odbc-драйвера), уровень изоляции транзакций в обоих случаях (и при использование API, и при использовании odbc) одинаков:
isc_tpb_version3
isc_tpb_wait
isc_tpb_write
isc_tpb_read_committed
isc_tpb_no_rec_version
Проблема не критична(так как в случае ошибки пакет через несколько секунд пересылается вновь), но слегка действует на нервы. Кто-нибудь может дать объяснение или высказать предположение почему odbc почти всегда разруливает это дело, а прямой доступ к БД - нет (уж очень не хочется ковырять сырцы odbc-драйвера и freeradius-а)?
P.S. Гипотеза о "кривых руках" выдвинута в первую очередь и проверяется до сих пор, но пока не находит подтверждения, хотя и помогла выявить некоторые глюки
