Catching DB errors in sqlippool
Бенджамин Томпсон
b.thompson at latera.ru
Wed Apr 11 11:38:57 CEST 2018
>
>> Hmm... I can't fix the database problem. But I will push a fix for
>>> 3.0.17 which makes the module return "fail" in this situation.
>>>
>>>
>> Tested, works, many thanks
>>
>
>
> The module now returns fail which is great. However I noticed that when I
> call the sqlipool for a second time it skips the allocate_clear request and
> goes straight to allocate_find:
>
> (66) sqlippool: EXPAND %{User-Name}
> (66) sqlippool: --> testusername34
> (66) sqlippool: SQL-User-Name set to 'testusername34'
> (66) sqlippool: EXPAND START TRANSACTION
> (66) sqlippool: --> START TRANSACTION
> (66) sqlippool: Executing query: START TRANSACTION
> (66) sqlippool: EXPAND UPDATE radippool SET nasipaddress = '',
> callingstationid = '', expiry_time = NOW() - INTERVAL 1 SECOND WHERE
> pool_key = '%{User-Name}'
> (66) sqlippool: --> UPDATE radippool SET nasipaddress = '',
> callingstationid = '', expiry_time = NOW() - INTERVAL 1 SECOND WHERE
> pool_key = 'testusername34'
> (66) sqlippool: Executing query: UPDATE radippool SET nasipaddress
> = '', callingstationid = '', expiry_time = NOW() - INTERVAL 1 SECOND
> WHERE pool_key = 'testusername34'
> (66) sqlippool: ERROR: rlm_sql_mysql: ERROR 1213 (WSREP detected
> deadlock/conflict and aborted the transaction. Try restarting the
> transaction): 40001
> rlm_sql (sql): Released connection (4)
> (66) [sqlippool] = fail
> (66) if (!ok) {
> (66) if (!ok) -> TRUE
> (66) if (!ok) {
> (66) update reply {
> (66) &Framed-IP-Address !* ANY
> (66) } # update reply = noop
> rlm_sql (sql): Reserved connection (0)
> (66) sqlippool: EXPAND %{User-Name}
> (66) sqlippool: --> testusername34
> (66) sqlippool: SQL-User-Name set to 'testusername34'
> (66) sqlippool: EXPAND START TRANSACTION
> (66) sqlippool: --> START TRANSACTION
> (66) sqlippool: Executing query: START TRANSACTION
> (66) sqlippool: EXPAND SELECT framedipaddress FROM radippool WHERE
> pool_name = '%{control:Pool-Name}' AND (pool_key = '%{User-Name}' or
> expiry_time < NOW()) ORDER BY (pool_key <> '%{User-Name}'), expiry_time
> LIMIT 1 FOR UPDATE
>
>
> I also tried to call do_not_respond but the problem is that it does not
> seem to work in the post_auth section.
>
>
I solved the issued with do_not_respond by calling sqlippool.post-auth from
the authorize section.
More information about the Freeradius-Users
mailing list