[MEDIUM] session: move the conn_retries attribute to the stream interface
The conn_retries still lies in the session and its initialization depends
on the backend when it may not yet be known. Let's first move it to the
stream interface.
diff --git a/src/dumpstats.c b/src/dumpstats.c
index bbda255..dee7aa4 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -2540,7 +2540,7 @@
chunk_printf(&msg,
" flags=0x%x, conn_retries=%d, srv_conn=%p, pend_pos=%p\n",
- sess->flags, sess->conn_retries, sess->srv_conn, sess->pend_pos);
+ sess->flags, sess->si[1].conn_retries, sess->srv_conn, sess->pend_pos);
chunk_printf(&msg,
" frontend=%s (id=%u mode=%s), listener=%s (id=%u)\n",
diff --git a/src/frontend.c b/src/frontend.c
index 9bd793f..d51f2fd 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -157,7 +157,7 @@
s->srv = s->prev_srv = s->srv_conn = NULL;
s->pend_pos = NULL;
- s->conn_retries = s->be->conn_retries;
+ s->si[1].conn_retries = s->be->conn_retries;
/* init store persistence */
s->store_count = 0;
diff --git a/src/log.c b/src/log.c
index b323d7e..25e5f03 100644
--- a/src/log.c
+++ b/src/log.c
@@ -327,7 +327,7 @@
struct tm tm;
/* if we don't want to log normal traffic, return now */
- err = (s->flags & (SN_ERR_MASK | SN_REDISP)) || (s->conn_retries != be->conn_retries);
+ err = (s->flags & (SN_ERR_MASK | SN_REDISP)) || (s->req->cons->conn_retries != be->conn_retries);
if (!err && (fe->options2 & PR_O2_NOLOGNORM))
return;
@@ -371,7 +371,7 @@
sess_fin_state[(s->flags & SN_FINST_MASK) >> SN_FINST_SHIFT],
actconn, fe->feconn, be->beconn, s->srv ? s->srv->cur_sess : 0,
(s->flags & SN_REDISP)?"+":"",
- (s->conn_retries>0)?(be->conn_retries - s->conn_retries):be->conn_retries,
+ (s->req->cons->conn_retries>0)?(be->conn_retries - s->req->cons->conn_retries):be->conn_retries,
s->logs.srv_queue_size, s->logs.prx_queue_size);
s->logs.logwait = 0;
diff --git a/src/proto_http.c b/src/proto_http.c
index a1ff02c..280abf7 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -860,7 +860,7 @@
prx_log = fe;
err = (s->flags & (SN_ERR_MASK | SN_REDISP)) ||
- (s->conn_retries != be->conn_retries) ||
+ (s->req->cons->conn_retries != be->conn_retries) ||
txn->status >= 500;
if (s->cli_addr.ss_family == AF_INET)
@@ -976,7 +976,7 @@
w = snprintf(h, sizeof(tmpline) - (h - tmpline),
" %d %d %d %d %d %ld %ld",
actconn, fe->feconn, be->beconn, s->srv ? s->srv->cur_sess : 0,
- (s->conn_retries > 0) ? (be->conn_retries - s->conn_retries) : be->conn_retries,
+ (s->req->cons->conn_retries > 0) ? (be->conn_retries - s->req->cons->conn_retries) : be->conn_retries,
s->logs.srv_queue_size, s->logs.prx_queue_size);
if (w < 0 || w >= sizeof(tmpline) - (h - tmpline))
@@ -1082,7 +1082,7 @@
/* if we don't want to log normal traffic, return now */
err = (s->flags & (SN_ERR_MASK | SN_REDISP)) ||
- (s->conn_retries != be->conn_retries) ||
+ (s->req->cons->conn_retries != be->conn_retries) ||
txn->status >= 500;
if (!err && (fe->options2 & PR_O2_NOLOGNORM))
return;
@@ -1187,7 +1187,7 @@
(be->options & PR_O_COOK_ANY) ? sess_set_cookie[(txn->flags & TX_SCK_MASK) >> TX_SCK_SHIFT] : '-',
actconn, fe->feconn, be->beconn, s->srv ? s->srv->cur_sess : 0,
(s->flags & SN_REDISP)?"+":"",
- (s->conn_retries>0)?(be->conn_retries - s->conn_retries):be->conn_retries,
+ (s->req->cons->conn_retries>0)?(be->conn_retries - s->req->cons->conn_retries):be->conn_retries,
s->logs.srv_queue_size, s->logs.prx_queue_size, tmpline);
s->logs.logwait = 0;
@@ -6726,7 +6726,7 @@
s->store_count = 0;
s->pend_pos = NULL;
- s->conn_retries = s->be->conn_retries;
+ s->req->cons->conn_retries = s->be->conn_retries;
s->req->flags |= BF_READ_DONTWAIT; /* one read is usually enough */
diff --git a/src/proxy.c b/src/proxy.c
index 98ff94d..cd7f682 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -719,7 +719,7 @@
proxy_inc_be_ctr(be);
/* assign new parameters to the session from the new backend */
- s->conn_retries = be->conn_retries;
+ s->si[1].conn_retries = be->conn_retries;
s->si[1].flags &= ~SI_FL_INDEP_STR;
if (be->options2 & PR_O2_INDEPSTR)
s->si[1].flags |= SI_FL_INDEP_STR;
diff --git a/src/session.c b/src/session.c
index 08bb4c3..79432cf 100644
--- a/src/session.c
+++ b/src/session.c
@@ -254,8 +254,8 @@
}
/* ensure that we have enough retries left */
- s->conn_retries--;
- if (s->conn_retries < 0) {
+ si->conn_retries--;
+ if (si->conn_retries < 0) {
if (!si->err_type) {
si->err_type = SI_ET_CONN_ERR;
si->err_loc = s->srv;
@@ -284,7 +284,7 @@
* bit to ignore any persistence cookie. We won't count a retry nor a
* redispatch yet, because this will depend on what server is selected.
*/
- if (s->srv && s->conn_retries == 0 &&
+ if (s->srv && si->conn_retries == 0 &&
s->be->options & PR_O_REDISP && !(s->flags & SN_FORCE_PRST)) {
if (may_dequeue_tasks(s->srv, s->be))
process_srv_queue(s->srv);
@@ -970,7 +970,7 @@
s->req->flags, s->rep->flags,
s->req->l, s->rep->l, s->rep->cons->state, s->req->cons->state,
s->rep->cons->err_type, s->req->cons->err_type,
- s->conn_retries);
+ s->req->cons->conn_retries);
/* nothing special to be done on client side */
if (unlikely(s->req->prod->state == SI_ST_DIS))