daniel,
the patch below upgrades working connection if read operation on another
connection with same priority has failed, i.e., next time the working
connection will be tried before the failing one.
is the patch ok with you? if so, the same could be done on write
operations.
-- juha
*** /usr/src/orig/sip-router/modules_k/db_cluster/dbcl_api.c 2012-03-28 18:26:21.000000000
+0300
--- modules_k/db_cluster/dbcl_api.c 2012-04-07 17:51:28.000000000 +0300
***************
*** 46,51 ****
--- 46,52 ----
int k;\
db1_con_t *dbh=NULL;\
dbcl_cls_t *cls=NULL;\
+ dbcl_con_t *tmp;\
cls = (dbcl_cls_t*)_h->tail;\
ret = 0;\
for(i=DBCL_PRIO_SIZE-1; i>0; i--)\
***************
*** 58,68 ****
if(cls->rlist[i].clist[j] != NULL &&
cls->rlist[i].clist[j]->flags!=0\
&& cls->rlist[i].clist[j]->dbh != NULL)\
{\
! LM_DBG("serial operation - cluster [%.*s] (%d/%d)\n",\
cls->name.len, cls->name.s, i, j);\
dbh = cls->rlist[i].clist[j]->dbh;\
ret = cls->rlist[i].clist[j]->dbf.command;\
if (ret==0) {\
cls->usedcon = cls->rlist[i].clist[j];\
return 0;\
}\
--- 59,76 ----
if(cls->rlist[i].clist[j] != NULL &&
cls->rlist[i].clist[j]->flags!=0\
&& cls->rlist[i].clist[j]->dbh != NULL)\
{\
! LM_DBG("serial operation - cluster [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j);\
dbh = cls->rlist[i].clist[j]->dbh;\
ret = cls->rlist[i].clist[j]->dbf.command;\
if (ret==0) {\
+ if (j > 0) {\
+ LM_INFO("upgrading connection - cluster [%.*s] (%d/%d)\n", \
+ cls->name.len, cls->name.s, i, j);\
+ tmp = cls->rlist[i].clist[j];\
+ cls->rlist[i].clist[j] = cls->rlist[i].clist[j-1];\
+ cls->rlist[i].clist[j-1] = tmp;\
+ }\
cls->usedcon = cls->rlist[i].clist[j];\
return 0;\
}\