stable-bot: Bugfixes waiting for a release 2.4 (1), 2.3 (2), 2.2 (1)
Hi, This is a friendly bot that watches fixes pending for the next haproxy-stable release! One such e-mail is sent periodically once patches are waiting in the last maintenance branch, and an ideal release date is computed based on the severity of these fixes and their merge date. Responses to this mail must be sent to the mailing list. Last release 2.4.3 was issued on 2021-08-17. There are currently 1 patches in the queue cut down this way: - 1 MEDIUM, first one merged on 2021-08-20 Thus the computed ideal release date for 2.4.4 would be 2021-09-19, which is in three weeks or less. Last release 2.3.13 was issued on 2021-08-17. There are currently 2 patches in the queue cut down this way: - 2 MEDIUM, first one merged on 2021-08-20 Thus the computed ideal release date for 2.3.14 would be 2021-09-19, which is in three weeks or less. Last release 2.2.16 was issued on 2021-08-17. There are currently 1 patches in the queue cut down this way: - 1 MEDIUM, first one merged on 2021-08-20 Thus the computed ideal release date for 2.2.17 would be 2021-10-19, which is in seven weeks or less. The current list of patches in the queue is: - 2.3 - MEDIUM : sock: really fix detection of early connection failures in for 2.3- - 2.2, 2.3, 2.4 - MEDIUM : h2: match absolute-path not path-absolute for :path -- The haproxy stable-bot is freely provided by HAProxy Technologies to help improve the quality of each HAProxy release. If you have any issue with these emails or if you want to suggest some improvements, please post them on the list so that the solutions suiting the most users can be found.
Re: [PATCH] variables cleanup/fixup
On Tue, Aug 31, 2021 at 06:37:45PM +0200, Willy Tarreau wrote: > > As such: Your patches LGTM, thanks. Please proceed :-) > > Will do, and reference the issue above and update the doc regarding ifexist, > just mentioning that it's now ignored for legacy compatibility. I'll finally wait for Christopher next week to confirm that we can get rid of the equivalent in SPOE. By default it protects itself against registration of random variable names and there's a force-set-var option to bypass that for trusted agents. In my opinion this can go since we do not have this problem anymore, but let's confirm before risking to break setups. Cheers, Willy
Re: [PATCH] variables cleanup/fixup
On Tue, Aug 31, 2021 at 04:41:16PM +0200, Tim Düsterhus wrote: > Willy, > > On 8/31/21 9:07 AM, Willy Tarreau wrote: > > I've finally implemented the replacement of the global variables table > > Okay, please refer to issue #624 in the commit: > https://github.com/haproxy/haproxy/issues/624. I believe it should be > resolved afterwards. Ah yes, thank you, I forgot about this one! > > with a hash instead. However it now obviously breaks the "ifexist" > > argument that you added to Lua's set_var() that was designed to work > > around the growing table problem. > > > > Given that the limitation used to be made on the existence of a similarly > > named variable anywhere in the process (and not of the variable in the > > current list), I conclude that it was only used to preserve precious > > resources and never to conditionally set a variable in one's context. > > As such we could simply remove this test and silently ignore the ifexist > > argument now. Do you agree with this ? I'd really like it if we could > > definitely get rid of this old mess! > > For the record this is my the repository I care about: > > https://github.com/TimWolla/haproxy-auth-request > > It includes tests based on VTest. I just ran the tests with patches applied: > > > $ vtest -Dhaproxy_version=2.5.0 -q -k -t 10 -C test/*.vtc > > #top TEST test/no_variable_leak.vtc FAILED (0.203) exit=2 > > 1 tests failed, 0 tests skipped, 19 tests passed > > Naturally the no_variable_leak.vtc test > (https://github.com/TimWolla/haproxy-auth-request/blob/main/test/no_variable_leak.vtc) > fails now, as it specifically tests that my detection of the ifexist > parameter works as expected. I can simply exclude HAProxy 2.5 from that test > and all is well. Yeah that's the same now in 2.5-dev with the dedicated test. > In my case I only care about not bloating HAProxy's memory usage infinitely, > in case the backend sends sends headers with randomly generated names (these > are exposed as req.auth_response_header.*). The fact that variables are > unavailable to Lua is a side-effect of this, not a feature. That's what I remembered as well, thanks for confirming! > It would certainly be preferable for the user if they could simply use the > variables from Lua, without needing to reference them in the config. ... and without eating all the memory :-) > As such: Your patches LGTM, thanks. Please proceed :-) Will do, and reference the issue above and update the doc regarding ifexist, just mentioning that it's now ignored for legacy compatibility. Thanks! Willy
Re: [PATCH] variables cleanup/fixup
Willy, On 8/31/21 9:07 AM, Willy Tarreau wrote: I've finally implemented the replacement of the global variables table Okay, please refer to issue #624 in the commit: https://github.com/haproxy/haproxy/issues/624. I believe it should be resolved afterwards. with a hash instead. However it now obviously breaks the "ifexist" argument that you added to Lua's set_var() that was designed to work around the growing table problem. Given that the limitation used to be made on the existence of a similarly named variable anywhere in the process (and not of the variable in the current list), I conclude that it was only used to preserve precious resources and never to conditionally set a variable in one's context. As such we could simply remove this test and silently ignore the ifexist argument now. Do you agree with this ? I'd really like it if we could definitely get rid of this old mess! For the record this is my the repository I care about: https://github.com/TimWolla/haproxy-auth-request It includes tests based on VTest. I just ran the tests with patches applied: $ vtest -Dhaproxy_version=2.5.0 -q -k -t 10 -C test/*.vtc #top TEST test/no_variable_leak.vtc FAILED (0.203) exit=2 1 tests failed, 0 tests skipped, 19 tests passed Naturally the no_variable_leak.vtc test (https://github.com/TimWolla/haproxy-auth-request/blob/main/test/no_variable_leak.vtc) fails now, as it specifically tests that my detection of the ifexist parameter works as expected. I can simply exclude HAProxy 2.5 from that test and all is well. In my case I only care about not bloating HAProxy's memory usage infinitely, in case the backend sends sends headers with randomly generated names (these are exposed as req.auth_response_header.*). The fact that variables are unavailable to Lua is a side-effect of this, not a feature. It would certainly be preferable for the user if they could simply use the variables from Lua, without needing to reference them in the config. As such: Your patches LGTM, thanks. Please proceed :-) For reference I'm appending the current patch series. Best regards Tim Düsterhus
Bid Writing, Fundraising and Volunteering Workshops
NFP WORKSHOPS Affordable Training Courses Bid Writing Do you know the most common reasons for rejection? Are you gathering the right evidence? Are you making the right arguments? Are you using the right terminology? Are your numbers right? Are you learning from rejections? Are you assembling the right documents? Do you know how to create a clear and concise standard funding bid? Are you communicating with people or just excluding them? Do you know your own organisation well enough? Are you thinking through your projects carefully enough? Do you know enough about your competitors? Are you answering the questions funders will ask themselves about your application? Are you submitting applications correctly? ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE MON 06 SEP 2021 MON 20 SEP 2021 MON 04 OCT 2021 MON 18 OCT 2021 MON 01 NOV 2021 MON 15 NOV 2021 Trust Fundraising Are you applying to the right trusts? Are you applying to enough trusts? Are you asking for the right amount of money? Are you applying in the right ways? Are your projects the most fundable projects? Are you carrying out trust fundraising in a professional way? Are you delegating enough work? Are you highly productive or just very busy? Are you looking for trusts in all the right places? How do you compare with your competitors for funding? Is the rest of your fundraising hampering your bids to trusts? Do you understand what trusts are ideally looking for? ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE TUE 21 SEP 2021 TUE 19 OCT 2021 TUE 16 NOV 2021 Recruiting and Managing Volunteers Where do you find volunteers? How do you find the right volunteers? How do you attract volunteers? How do you run volunteer recruitment events? How do you interview volunteers? How do you train volunteers? How do you motivate volunteers? How do you involve volunteers? How do you recognise volunteers? How do you recognise problems with volunteers? How do you learn from volunteer problems? How do you retain volunteers? How do you manage volunteers? What about volunteers and your own staff? What about younger, older and employee volunteers? ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE WED 08 SEP 2021 WED 03 NOV 2021 Legacy Fundraising Why do people make legacy gifts? What are the ethical issues? What are the regulations? What are the tax issues? What are the statistics? What are the trends? How can we integrate legacy fundraising into our other fundraising? What are the sources for research? How should we set a budget? How should we evaluate our results? How should we forecast likely income? Should we use consultants? How should we build a case for support? What media and marketing channels should we use? What about in memory giving? How should we setup our admin systems? What are the common problems & pitfalls? ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE WED 22 SEP 2021 WED 17 NOV 2021 Major Donor Fundraising Major Donor Characteristics, Motivations and Requirements. Researching and Screening Major Donors. Encouraging, Involving and Retaining Major Donors. Building Relationships with Major Donors. Major Donor Events and Activities. Setting Up Major Donor Clubs. Asking For Major Gifts. Looking After and Reporting Back to Major Donors. Delivering on Major Donor Expectations. Showing Your Appreciation to Major Donors. Fundraising Budgets and Committees. ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE WED 06 OCT 2021 WED 01 DEC 2021 Corporate Fundraising Who are these companies? Why do they get involved? What do they like? What can you get from them? What can you offer them? What are the differences between donations, sponsorship, advertising and cause related marketing? Are companies just like trusts? How do you find these companies? How do you research them? How do you contact them? How do you pitch to them? How do you negotiate with them? When should you say no? How do you draft contracts? How do you manage the relationships? What could go wrong? What are the tax issues? What are the legal considerations? ONLINE VIA ZOOM 10.00 TO 12.30 COST £95.00 CLICK ON DATE TO BOOK YOUR PLACE WED 20 OCT 2021 WED 15 DEC 2021 Feedback From Past Attendees I must say I was really impressed with the course and the content. My knowledge and confidence has increased hugely. I got a lot from your course and a lot of pointers! I can say after years of fundraising I learnt so much from your bid writing course. It was a very informative day and for someone who has not written bids before I am definitely more confident to get involved with them. I found the workshops very helpful. It is a whole new area for me but the information you imparted has given me a lot of confidence with the direction I need to take and for that I am very grateful.
[PATCH] variables cleanup/fixup
Hi Tim, I've finally implemented the replacement of the global variables table with a hash instead. However it now obviously breaks the "ifexist" argument that you added to Lua's set_var() that was designed to work around the growing table problem. Given that the limitation used to be made on the existence of a similarly named variable anywhere in the process (and not of the variable in the current list), I conclude that it was only used to preserve precious resources and never to conditionally set a variable in one's context. As such we could simply remove this test and silently ignore the ifexist argument now. Do you agree with this ? I'd really like it if we could definitely get rid of this old mess! For reference I'm appending the current patch series. Thanks! Willy >From 6abb2e9fd745311c091029933a86fe363d09a7fb Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 31 Aug 2021 08:13:25 +0200 Subject: MINOR: vars: rename vars_init() to vars_init_head() The vars_init() name is particularly confusing as it does not initialize the variables code but the head of a list of variables passed in arguments. And we'll soon need to have proper initialization code, so let's rename it now. --- include/haproxy/vars.h | 2 +- src/haproxy.c | 2 +- src/http_ana.c | 6 +++--- src/session.c | 2 +- src/stream.c | 6 +++--- src/tcpcheck.c | 2 +- src/vars.c | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/haproxy/vars.h b/include/haproxy/vars.h index f809c62d5..fedc8ca15 100644 --- a/include/haproxy/vars.h +++ b/include/haproxy/vars.h @@ -29,7 +29,7 @@ extern struct vars proc_vars; -void vars_init(struct vars *vars, enum vars_scope scope); +void vars_init_head(struct vars *vars, enum vars_scope scope); void var_accounting_diff(struct vars *vars, struct session *sess, struct stream *strm, int size); unsigned int var_clear(struct var *var); void vars_prune(struct vars *vars, struct session *sess, struct stream *strm); diff --git a/src/haproxy.c b/src/haproxy.c index db957256e..32a08441d 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1529,7 +1529,7 @@ static void init(int argc, char **argv) hlua_init(); /* Initialize process vars */ - vars_init(&proc_vars, SCOPE_PROC); + vars_init_head(&proc_vars, SCOPE_PROC); global.tune.options |= GTUNE_USE_SELECT; /* select() is always available */ #if defined(USE_POLL) diff --git a/src/http_ana.c b/src/http_ana.c index b36054088..3443f7ec4 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -2955,7 +2955,7 @@ int http_eval_after_res_rules(struct stream *s) if (s->vars_reqres.scope != SCOPE_RES) { if (!LIST_ISEMPTY(&s->vars_reqres.head)) vars_prune(&s->vars_reqres, s->sess, s); - vars_init(&s->vars_reqres, SCOPE_RES); + vars_init_head(&s->vars_reqres, SCOPE_RES); } ret = http_res_get_intercept_rule(s->be, &s->be->http_after_res_rules, s); @@ -5083,8 +5083,8 @@ struct http_txn *http_create_txn(struct stream *s) txn->auth.method = HTTP_AUTH_UNKNOWN; - vars_init(&s->vars_txn,SCOPE_TXN); - vars_init(&s->vars_reqres, SCOPE_REQ); + vars_init_head(&s->vars_txn,SCOPE_TXN); + vars_init_head(&s->vars_reqres, SCOPE_REQ); return txn; } diff --git a/src/session.c b/src/session.c index 92d03eaed..7ad5cbb3e 100644 --- a/src/session.c +++ b/src/session.c @@ -47,7 +47,7 @@ struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type sess->accept_date = date; /* user-visible date for logging */ sess->tv_accept = now; /* corrected date for internal use */ memset(sess->stkctr, 0, sizeof(sess->stkctr)); - vars_init(&sess->vars, SCOPE_SESS); + vars_init_head(&sess->vars, SCOPE_SESS); sess->task = NULL; sess->t_handshake = -1; /* handshake not done yet */ sess->t_idle = -1; diff --git a/src/stream.c b/src/stream.c index 132ee3abd..27062ea4b 100644 --- a/src/stream.c +++ b/src/stream.c @@ -451,8 +451,8 @@ struct stream *stream_new(struct session *sess, enum obj_type *origin, struct bu /* Initialise all the variables contexts even if not used. * This permits to prune these contexts without errors. */ - vars_init(&s->vars_txn,SCOPE_TXN); - vars_init(&s->vars_reqres, SCOPE_REQ); + vars_init_head(&s->vars_txn,SCOPE_TXN); + vars_init_head(&s->vars_reqres, SCOPE_REQ); /* this part should be common with other protocols */ if (si_reset(&s->si[0]) < 0) @@ -2201,7 +2201,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state) if (s->vars_reqres.scope != SCOPE_RES) { if (!LIST_ISEMPTY(&s->vars_reqres.head))