BUG/MEDIUM: acl: fix regression introduced by latest converters support

Since commit 348971e (MEDIUM: acl: use the fetch syntax
'fetch(args),conv(),conv()' into the ACL keyword), ACLs wait on input
that may change. This is visible in the configuration below :

        tcp-request inspect-delay 3s
        tcp-request content accept if REQ_CONTENT

Nothing will pass before the end of the timer. This is because
historically, sample_process() was dedicated to stick tables where
it was absolutely necessary to wait for a stable sample. Now samples
are used by many other things and we can't afford this. So let's move
this check to the stick tables after the call to sample_process()
instead.

This is post-1.5-dev19 work, no backport is required.
This commit is contained in:
Willy Tarreau 2013-12-05 02:19:58 +01:00
parent 26f4a04744
commit 67ff7e0af3
2 changed files with 3 additions and 3 deletions

View File

@ -839,9 +839,6 @@ struct sample *sample_process(struct proxy *px, struct session *l4, void *l7,
if (!expr->fetch->process(px, l4, l7, opt, expr->arg_p, p, expr->fetch->kw))
return NULL;
if ((p->flags & SMP_F_MAY_CHANGE) && !(opt & SMP_OPT_FINAL))
return NULL; /* we can only use stable samples */
list_for_each_entry(conv_expr, &expr->conv_exprs, list) {
/* we want to ensure that p->type can be casted into
* conv_expr->conv->in_type. We have 3 possibilities :

View File

@ -615,6 +615,9 @@ struct stktable_key *stktable_fetch_key(struct stktable *t, struct proxy *px, st
if (!smp)
return NULL;
if ((smp->flags & SMP_F_MAY_CHANGE) && !(opt & SMP_OPT_FINAL))
return NULL; /* we can only use stable samples */
if (!sample_to_key[smp->type][t->type])
return NULL;