Debian 4.0
Perl, v5.8.8 built for x86_64-linux-gnu-thread-multi
DBI v1.53
mysqld Ver 5.0.32-Debian_7etch12-log for pc-linux-gnu on x86_64 (Debian 
etch distribution)


since my radiator config is quite lengthy, i'll just post what i think 
is the relevant parts.  if you would like to know more, let me know.  
There are also a few very custom things I do to identify what type of 
service the connection is coming from, handling of Acct Gigawords and 
Acct Octets, etc...  so, there's going to be a few things in the 
debug/config that you wont recognize.

<Client> section allows specific NAS's

#All accounting packets for all NAS'S handled here:
<Handler Request-Type = "Accounting-Request", \
         Acct-Status-Type = Start|Stop>
         Identifier accounting

         SessionDatabase sessdb

         PreProcessingHook file:"%D/conf/hook.PreProcessingHook"

         AuthByPolicy
         AuthBy SQL-1-Accounting
</Handler>
<AuthBy SQL>

         Identifier      SQL-1-Accounting

         DBSource        dbi:mysql:yyy:yyy
         DBUsername      yyy
         DBAuth          yyy


         Timeout       3
         FailureBackoffTime    300


         # a few attributes added to radius packet via previous Hook file.
         AccountingTable `acct`
         AcctColumnDef   `submitted_un`,%u,formatted
         AcctColumnDef   `auth_un`,auth-un
         AcctColumnDef   `zone`,zone
         AcctColumnDef   `uid`,uid
         AcctColumnDef   `timestamp`,Timestamp
         AcctColumnDef   `type`,Acct-Status-Type
         AcctColumnDef   `acct_delay_time`,Acct-Delay-Time
         AcctColumnDef   `upload`,total-input-octets
         AcctColumnDef   `download`,total-output-octets
         AcctColumnDef   `sess_id`,Acct-Session-Id
         AcctColumnDef   `sess_time`,Acct-Session-Time
         AcctColumnDef   `term_cause`,Acct-Terminate-Cause
         AcctColumnDef   `nas_ip_address`,NAS-IP-Address
         AcctColumnDef   `ip_address`,Framed-IP-Address
         AcctColumnDef   `service`,service

         AcctFailedLogFileName 
%L/accounting-missed/logfile.sql-failed.acct.%Y%m%d
</AuthBy>




Thu Sep 16 15:19:48 2010: DEBUG: Packet dump:
*** Received from 192.168.100.1 port 1646 ....
Code:       Accounting-Request
Identifier: 75
Authentic: 
<133><139><188><253><225><157><240>[Lo<175><236><127><144><161><31>
Attributes:
     Acct-Session-Id = "00000620"
     Framed-Protocol = PPP
     Framed-IP-Address = 192.168.100.100
     User-Name = "dsltest"
     Acct-Authentic = RADIUS
     Acct-Status-Type = Start
     NAS-Port-Type = Ethernet
     NAS-Port = 100
     NAS-Port-Id = "0/0/0/431"
     Class = "FED,100,dsltest"
     Service-Type = Framed-User
     NAS-IP-Address = 192.168.100.1
     Ascend-Session-Svr-Key = "AA39FB66"
     NAS-Identifier = "TEST-LNS-1"
     Acct-Delay-Time = 0

Thu Sep 16 15:19:48 2010: DEBUG: hook.service-label: finding 
service-label for NAS-Port=(100)
Thu Sep 16 15:19:48 2010: DEBUG: hook.service-label: service-label=(testing)
Thu Sep 16 15:19:48 2010: DEBUG: hook.service-label: 
add_attr(service=testing)
Thu Sep 16 15:19:48 2010: DEBUG: Handling request with Handler 
'Request-Type = "Accounting-Request", Acct-Status-Type = Start|Stop', 
Identifier 'accounting'
Thu Sep 16 15:19:48 2010: DEBUG: hook.PreProcessingHook: executing.
Thu Sep 16 15:19:48 2010: DEBUG: hook.PreProcessingHook: changed 
Acct-Status-Type Start to login.
Thu Sep 16 15:19:48 2010: DEBUG: hook.PreProcessingHook: loading attrs 
from Class.
Thu Sep 16 15:19:48 2010: DEBUG: Handling with Radius::AuthSQL: 
SQL-1-Accounting
Thu Sep 16 15:19:48 2010: DEBUG: Handling accounting with Radius::AuthSQL
Thu Sep 16 15:19:48 2010: DEBUG: do query is: 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`submitted_un`,`timestamp`,`type`,`uid`,`zone`)
 
values 
('0','dsltest','192.168.100.100','192.168.100.1','testing','00000620','dsltest','1284664788','login','100','FED')':
 

Thu Sep 16 15:19:51 2010: ERR: do failed for 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`submitted_un`,`timestamp`,`type`,`uid`,`zone`)
 
values 
('0','dsltest','192.168.100.100','192.168.100.1','testing','00000620','dsltest','1284664788','login','100','FED')':
 
SQL Timeout
Thu Sep 16 15:19:54 2010: ERR: do failed for 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`submitted_un`,`timestamp`,`type`,`uid`,`zone`)
 
values 
('0','dsltest','192.168.100.100','192.168.100.1','testing','00000620','dsltest','1284664788','login','100','FED')':
 
SQL Timeout
Thu Sep 16 15:19:54 2010: DEBUG: AuthBy SQL result: IGNORE, Database failure

### timeout value 3 * 2 queries = 6 seconds and 2 possible accounting 
duplicates.
### omitted here is the exact same debug lines from another Start packet 
from the NAS since it timed out and retransmitted.


### here's the Stop packet coming through trying an insert again, not 
obeying FailureBackoffTime.

*** Received from 192.168.100.1 port 1646 ....
Code:       Accounting-Request
Identifier: 76
Authentic: <130><28><130><231>C<233><2><135><30><142><206><148><156>T~<160>
Attributes:
     Acct-Session-Id = "00000620"
     Framed-Protocol = PPP
     Framed-IP-Address = 192.168.100.100
     User-Name = "dsltest"
     Acct-Authentic = RADIUS
     Acct-Session-Time = 4
     Acct-Input-Octets = 880
     Acct-Output-Octets = 116
     Acct-Input-Packets = 12
     Acct-Output-Packets = 7
     Acct-Terminate-Cause = User-Request
     Acct-Status-Type = Stop
     NAS-Port-Type = Ethernet
     NAS-Port = 100
     NAS-Port-Id = "0/0/0/431"
     Class = "FED,100,dsltest"
     Service-Type = Framed-User
     NAS-IP-Address = 192.168.100.1
     Ascend-Session-Svr-Key = "AA39FB66"
     NAS-Identifier = "TEST-LNS-1"
     Acct-Delay-Time = 0

Thu Sep 16 15:19:54 2010: DEBUG: hook.service-label: finding 
service-label for NAS-Port=(100)
Thu Sep 16 15:19:54 2010: DEBUG: hook.service-label: service-label=(testing)
Thu Sep 16 15:19:54 2010: DEBUG: hook.service-label: 
add_attr(service=testing)
Thu Sep 16 15:19:54 2010: DEBUG: Handling request with Handler 
'Request-Type = "Accounting-Request", Acct-Status-Type = Start|Stop', 
Identifier 'accounting'
Thu Sep 16 15:19:54 2010: DEBUG: hook.PreProcessingHook: executing.
Thu Sep 16 15:19:54 2010: DEBUG: hook.PreProcessingHook: changed 
Acct-Status-Type Stop to logout.
Thu Sep 16 15:19:54 2010: DEBUG: hook.PreProcessingHook: loading attrs 
from Class.
Thu Sep 16 15:19:54 2010: DEBUG: hook.PreProcessingHook: calculating 
total-output-octets and total-input-octets.
Thu Sep 16 15:19:54 2010: DEBUG: Handling with Radius::AuthSQL: 
SQL-1-Accounting
Thu Sep 16 15:19:54 2010: DEBUG: Handling accounting with Radius::AuthSQL
Thu Sep 16 15:19:54 2010: DEBUG: do query is: 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`download`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`sess_time`,`submitted_un`,`term_cause`,`timestamp`,`type`,`uid`,`upload`,`zone`)
 
values 
('0','dsltest','116','192.168.100.100','192.168.100.1','testing','00000620','4','dsltest','User-Request','1284664794','logout','100','880','FED')':
 

Thu Sep 16 15:19:57 2010: ERR: do failed for 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`download`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`sess_time`,`submitted_un`,`term_cause`,`timestamp`,`type`,`uid`,`upload`,`zone`)
 
values 
('0','dsltest','116','192.168.100.100','192.168.100.1','testing','00000620','4','dsltest','User-Request','1284664794','logout','100','880','FED')':
 
SQL Timeout
Thu Sep 16 15:20:00 2010: ERR: do failed for 'insert into `acct` 
(`acct_delay_time`,`auth_un`,`download`,`ip_address`,`nas_ip_address`,`service`,`sess_id`,`sess_time`,`submitted_un`,`term_cause`,`timestamp`,`type`,`uid`,`upload`,`zone`)
 
values 
('0','dsltest','116','192.168.100.100','192.168.100.1','testing','00000620','4','dsltest','User-Request','1284664794','logout','100','880','FED')':
 
SQL Timeout
Thu Sep 16 15:20:00 2010: DEBUG: AuthBy SQL result: IGNORE, Database failure

### omitted here is the exact same debug lines from another Stop packet 
from the NAS since it timed out and retransmitted.




On 10-09-16 03:00 PM, Hugh Irvine wrote:
>
> Hello Michael -
>
> We'll need to see a copy of the configuration file (no secrets), together 
> with a more complete trace 4 debug showing what is happening.
>
> We will also need to know what hardware/software platform you are running on, 
> what version of Perl, what version of DBI/DBD, what SQL database, and 
> anything else that might be useful.
>
> regards
>
> Hugh
>
>
> On 16 Sep 2010, at 13:33, Michael wrote:
>
>> Hi,
>>
>> I'm having a couple issues with<AuthBy SQL>. Maybe it would be considered a 
>> bug i'm not sure.
>>
>>
>> 1. the Timeout handling.
>> ------------------------
>> > From my testing, it appears that radiator times out at this value, but 
>> > seems to retry the sql query a second time, creating in another timeout 
>> > count.
>>
>> eg debug:
>> Tue Sep 14 12:48:21 2010: DEBUG: Handling accounting with Radius::AuthSQL
>> Tue Sep 14 12:48:21 2010: DEBUG: do query is: 'insert into `acct`<snip>
>> Tue Sep 14 12:48:25 2010: ERR: do failed for 'insert into `acct`<snip>  SQL 
>> Timeout
>> Tue Sep 14 12:48:29 2010: ERR: do failed for 'insert into `acct`<snip>  SQL 
>> Timeout
>> Tue Sep 14 12:48:29 2010: DEBUG: AuthBy SQL result: IGNORE, Database failure
>>
>> Timeout is set for 4 seconds...
>> so, query executed at 12:48:21, ERR timed out 4 seconds later, appeared to 
>> re-try but didn't say anything, and another ERR timeout 4 seconds after 
>> that.  That's 8 seconds of course.  It doubles the Timeout value.
>>
>> This is no good, for me.  If I set my SQL timeout value for 4 seconds, and 
>> my NAS timeout for 5 seconds, I expect my radiator to timeout before my NAS 
>> re-transmits.  my NAS will retry after 5 seconds because radiator hasn't 
>> responded.  And, radiator hasn't obeyed the timeout so it's still waiting 
>> for 8 seconds.  This causes the same accounting packet to enter radiator 
>> again, and causing another 8 seconds delay, and of course duplicate entries 
>> in the accounting logging since I'm also using AcctFailedLogFileName so the 
>> packet will eventually end up in the SQL table.
>>
>>
>> 2. SQL Timeout issue #2.
>> ------------------------
>> using the same debug example above, when the SQL query times out, it doesn't 
>> seem to use the FailureBackoffTime value. It only seems to use 
>> FailureBackoffTime when there is a connection failure, not a timeout.  So, 
>> every query is still presented to the SQL server.  If the timeout is due to 
>> lets say a write lock, when the lock releases, all the queued insert 
>> statements are executed creating in sometimes up to 10 duplicate accounting 
>> entries.
>>
>>
>> 3. AuthBy result after failure
>> ------------------------------
>> an IGNORE occurs when the SQL query fails, but if AcctFailedLogFileName is 
>> used, and successfully wrote the accounting packet to the file, should 
>> radiator not then reply with an ACCEPT?  Dumping the accounting packet to a 
>> file, but replying with IGNORE will cause the NAS to go to the next radius 
>> server possibly accepting the entry, therefore the packet in the acct failed 
>> logfile, is a double.  Even if there's only 1 radiator server in play, there 
>> will be an accounting packet entry in the failed log for each time the NAS 
>> retries.
>>
>>
>> Thanks in advanced for any advice,
>> Michael
>>
>> _______________________________________________
>> radiator mailing list
>> radiator@open.com.au
>> http://www.open.com.au/mailman/listinfo/radiator
>
>
>
> NB:
>
> Have you read the reference manual ("doc/ref.html")?
> Have you searched the mailing list archive 
> (www.open.com.au/archives/radiator)?
> Have you had a quick look on Google (www.google.com)?
> Have you included a copy of your configuration file (no secrets),
> together with a trace 4 debug showing what is happening?
>

_______________________________________________
radiator mailing list
radiator@open.com.au
http://www.open.com.au/mailman/listinfo/radiator

Reply via email to