mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-23 23:45:37 +00:00
MINOR: proxy: store the default target into the frontend's configuration
Some services such as peers and CLI pre-set the target applet immediately during accept(), and for this reason they're forced to have a dedicated accept() function which does not even properly follow everything the regular one does (eg: sndbuf/rcvbuf/linger/nodelay are not set, etc). Let's store the default target when known into the frontend's config so that it's session_accept() which automatically sets it.
This commit is contained in:
parent
91d9628a51
commit
f87ab94e3b
@ -329,6 +329,7 @@ struct proxy {
|
|||||||
time_t last_change; /* last time, when the state was changed */
|
time_t last_change; /* last time, when the state was changed */
|
||||||
int (*accept)(struct session *s); /* application layer's accept() */
|
int (*accept)(struct session *s); /* application layer's accept() */
|
||||||
struct conn_src conn_src; /* connection source settings */
|
struct conn_src conn_src; /* connection source settings */
|
||||||
|
enum obj_type *default_target; /* default target to use for accepted sessions or NULL */
|
||||||
struct proxy *next;
|
struct proxy *next;
|
||||||
|
|
||||||
unsigned int log_count; /* number of logs produced by the frontend */
|
unsigned int log_count; /* number of logs produced by the frontend */
|
||||||
|
@ -234,7 +234,6 @@ extern const char *stat_status_codes[];
|
|||||||
*/
|
*/
|
||||||
static int stats_accept(struct session *s)
|
static int stats_accept(struct session *s)
|
||||||
{
|
{
|
||||||
s->target = &cli_applet.obj_type;
|
|
||||||
/* no need to initialize the applet, it will start with st0=st1 = 0 */
|
/* no need to initialize the applet, it will start with st0=st1 = 0 */
|
||||||
|
|
||||||
tv_zero(&s->logs.tv_request);
|
tv_zero(&s->logs.tv_request);
|
||||||
@ -277,6 +276,7 @@ static struct proxy *alloc_stats_fe(const char *name, const char *file, int line
|
|||||||
fe->conf.file = strdup(file);
|
fe->conf.file = strdup(file);
|
||||||
fe->conf.line = line;
|
fe->conf.line = line;
|
||||||
fe->accept = stats_accept;
|
fe->accept = stats_accept;
|
||||||
|
fe->default_target = &cli_applet.obj_type;
|
||||||
|
|
||||||
/* the stats frontend is the only one able to assign ID #0 */
|
/* the stats frontend is the only one able to assign ID #0 */
|
||||||
fe->conf.id.key = fe->uuid = 0;
|
fe->conf.id.key = fe->uuid = 0;
|
||||||
|
@ -1096,7 +1096,6 @@ static void peer_session_forceshutdown(struct session * session)
|
|||||||
*/
|
*/
|
||||||
static int peer_accept(struct session *s)
|
static int peer_accept(struct session *s)
|
||||||
{
|
{
|
||||||
s->target = &peer_applet.obj_type;
|
|
||||||
/* no need to initialize the applet, it will start with st0=st1 = 0 */
|
/* no need to initialize the applet, it will start with st0=st1 = 0 */
|
||||||
|
|
||||||
tv_zero(&s->logs.tv_request);
|
tv_zero(&s->logs.tv_request);
|
||||||
@ -1126,6 +1125,7 @@ void peers_setup_frontend(struct proxy *fe)
|
|||||||
fe->conn_retries = CONN_RETRIES;
|
fe->conn_retries = CONN_RETRIES;
|
||||||
fe->timeout.client = MS_TO_TICKS(5000);
|
fe->timeout.client = MS_TO_TICKS(5000);
|
||||||
fe->accept = peer_accept;
|
fe->accept = peer_accept;
|
||||||
|
fe->default_target = &peer_applet.obj_type;
|
||||||
fe->options2 |= PR_O2_INDEPSTR | PR_O2_SMARTCON | PR_O2_SMARTACC;
|
fe->options2 |= PR_O2_INDEPSTR | PR_O2_SMARTCON | PR_O2_SMARTACC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ int session_complete(struct session *s)
|
|||||||
s->si[1].flags |= SI_FL_INDEP_STR;
|
s->si[1].flags |= SI_FL_INDEP_STR;
|
||||||
|
|
||||||
session_init_srv_conn(s);
|
session_init_srv_conn(s);
|
||||||
s->target = NULL;
|
s->target = p->default_target; /* used by peers and CLI */
|
||||||
s->pend_pos = NULL;
|
s->pend_pos = NULL;
|
||||||
|
|
||||||
/* init store persistence */
|
/* init store persistence */
|
||||||
|
Loading…
Reference in New Issue
Block a user