Hi Chris,

I check out the latest CVS and tried, however the auto-failover still not
working. I changed the part of the code to make it work, explicitly
release a sql
socket when a query fail, and get a new socket b4 every query execution.
I wonder will this cause any performance issues, need your experty on
this.
Below is a portion of the rlm_sql.c code that I customized: (I append "change" at each 
line I
customized")

case PW_STATUS_START:

        if(sql_set_user(inst, request, sqlusername, 0) < 0)
        return RLM_MODULE_FAIL;

    radius_xlat(querystr, MAX_QUERY_LEN, inst->config->accounting_start_query, 
request, NULL);
    query_log(inst, querystr);

    sqlsocket = sql_get_socket(inst);
    if (sqlsocket == NULL)
        return(RLM_MODULE_FAIL);         //change
    if (querystr) {
        if ((inst->module->sql_query)(sqlsocket, inst->config, querystr) < 0) {
                radlog(L_ERR, "rlm_sql: Couldn't update SQL accounting" " for START 
packet - %s", (char *)(inst->module->sql_error)(sqlsocket, inst->config));
                        (inst->module->sql_finish_query)(sqlsocket, inst->config);     
 //change
                        sql_release_socket(inst, sqlsocket);                           
                 //change

            radius_xlat(querystr, MAX_QUERY_LEN, 
inst->config->accounting_start_query_alt, request, NULL);
            query_log(inst, querystr);

                sqlsocket = sql_get_socket(inst);                                      
                 //change
                if (sqlsocket == NULL)                                                 
                         //change
                        return(RLM_MODULE_FAIL);                                       
                         //change

            if (querystr) {
                if ((inst->module->sql_query)(sqlsocket, inst->config, querystr) < 0) {
                        radlog(L_ERR, "rlm_sql: Couldn't update SQL" "accounting START 
record - %s", (char*)(inst->module->sql_error)(sqlsocket, inst->config));
                                        (inst->module->sql_finish_query)(sqlsocket, 
inst->config);      //change
                                        sql_release_socket(inst, sqlsocket);           
                                 //change
                                return(RLM_MODULE_FAIL);                               
                                         //change

                }

                                (inst->module->sql_finish_query)(sqlsocket, 
inst->config);
             }
         }

                (inst->module->sql_finish_query)(sqlsocket, inst->config);
        }

   break;


//end of code

thx

-- 
Cheers,
CM.




- 
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to