summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2018-08-24 02:55:44 +0200
committerThomas Deutschmann <whissi@gentoo.org>2018-08-24 02:55:44 +0200
commitf3fdd0e0b70833ffebc5a45732a48eb6a359fce5 (patch)
treea36670656961526240b25f3015180c62b7f90cc1 /www-servers/apache
parentapp-emulation/virtualbox-guest-additions: fix building against >=linux-4.18 (diff)
downloadgentoo-f3fdd0e0b70833ffebc5a45732a48eb6a359fce5.tar.gz
gentoo-f3fdd0e0b70833ffebc5a45732a48eb6a359fce5.tar.bz2
gentoo-f3fdd0e0b70833ffebc5a45732a48eb6a359fce5.zip
www-servers/apache: fix the issue with lbmethod_* load order
Closes: https://bugs.gentoo.org/663312 Package-Manager: Portage-2.3.48, Repoman-2.3.10 RepoMan-Options: --force
Diffstat (limited to 'www-servers/apache')
-rw-r--r--www-servers/apache/apache-2.4.34-r2.ebuild (renamed from www-servers/apache/apache-2.4.34-r1.ebuild)1
-rw-r--r--www-servers/apache/files/apache-2.4.34-PR62557.patch216
2 files changed, 217 insertions, 0 deletions
diff --git a/www-servers/apache/apache-2.4.34-r1.ebuild b/www-servers/apache/apache-2.4.34-r2.ebuild
index d9a72b6f05c..db0368ea9f7 100644
--- a/www-servers/apache/apache-2.4.34-r1.ebuild
+++ b/www-servers/apache/apache-2.4.34-r2.ebuild
@@ -151,6 +151,7 @@ REQUIRED_USE="apache2_modules_http2? ( ssl )
PATCHES=(
"${FILESDIR}/${PN}-2.4.34-suexec_parallel_install.patch" #661358
+ "${FILESDIR}"/${P}-PR62557.patch #663312
)
pkg_setup() {
diff --git a/www-servers/apache/files/apache-2.4.34-PR62557.patch b/www-servers/apache/files/apache-2.4.34-PR62557.patch
new file mode 100644
index 00000000000..d95a9864d1b
--- /dev/null
+++ b/www-servers/apache/files/apache-2.4.34-PR62557.patch
@@ -0,0 +1,216 @@
+From d7713339dbde7cfa4cfc9914f683b4644dcab92e Mon Sep 17 00:00:00 2001
+From: Ruediger Pluem <rpluem@apache.org>
+Date: Fri, 20 Jul 2018 19:27:31 +0000
+Subject: [PATCH] * mod_proxy: Remove load order and link dependency between
+ mod_lbmethod_* modules and mod_proxy by providing mod_proxy's
+ ap_proxy_balancer_get_best_worker as an optional function.
+
+PR: 62557
+
+
+git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1836381 13f79535-47bb-0310-9956-ffa450edef68
+---
+ CHANGES | 3 +++
+ include/ap_mmn.h | 5 +++-
+ modules/proxy/balancers/mod_lbmethod_bybusyness.c | 28 ++++++++++++++++++++++-
+ modules/proxy/balancers/mod_lbmethod_byrequests.c | 28 ++++++++++++++++++++++-
+ modules/proxy/balancers/mod_lbmethod_bytraffic.c | 28 ++++++++++++++++++++++-
+ modules/proxy/mod_proxy.h | 8 +++++++
+ modules/proxy/proxy_util.c | 1 +
+ 7 files changed, 97 insertions(+), 4 deletions(-)
+
+--- apache2.orig/modules/proxy/balancers/mod_lbmethod_bybusyness.c
++++ apache2/modules/proxy/balancers/mod_lbmethod_bybusyness.c
+@@ -22,6 +22,9 @@
+
+ module AP_MODULE_DECLARE_DATA lbmethod_bybusyness_module;
+
++static APR_OPTIONAL_FN_TYPE(ap_proxy_balancer_get_best_worker)
++ *ap_proxy_balancer_get_best_worker_fn = NULL;
++
+ static int is_best_bybusyness(proxy_worker *current, proxy_worker *prev_best, void *baton)
+ {
+ int *total_factor = (int *)baton;
+@@ -44,7 +47,7 @@ static proxy_worker *find_best_bybusynes
+ {
+ int total_factor = 0;
+ proxy_worker *worker =
+- ap_proxy_balancer_get_best_worker(balancer, r, is_best_bybusyness,
++ ap_proxy_balancer_get_best_worker_fn(balancer, r, is_best_bybusyness,
+ &total_factor);
+
+ if (worker) {
+@@ -82,9 +85,32 @@ static const proxy_balancer_method bybus
+ NULL
+ };
+
++/* post_config hook: */
++static int lbmethod_bybusyness_post_config(apr_pool_t *pconf, apr_pool_t *plog,
++ apr_pool_t *ptemp, server_rec *s)
++{
++
++ /* lbmethod_bybusyness_post_config() will be called twice during startup. So, don't
++ * set up the static data the 1st time through. */
++ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
++ return OK;
++ }
++
++ ap_proxy_balancer_get_best_worker_fn =
++ APR_RETRIEVE_OPTIONAL_FN(ap_proxy_balancer_get_best_worker);
++ if (!ap_proxy_balancer_get_best_worker_fn) {
++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO()
++ "mod_proxy must be loaded for mod_lbmethod_bybusyness");
++ return !OK;
++ }
++
++ return OK;
++}
++
+ static void register_hook(apr_pool_t *p)
+ {
+ ap_register_provider(p, PROXY_LBMETHOD, "bybusyness", "0", &bybusyness);
++ ap_hook_post_config(lbmethod_bybusyness_post_config, NULL, NULL, APR_HOOK_MIDDLE);
+ }
+
+ AP_DECLARE_MODULE(lbmethod_bybusyness) = {
+--- apache2.orig/modules/proxy/balancers/mod_lbmethod_byrequests.c
++++ apache2/modules/proxy/balancers/mod_lbmethod_byrequests.c
+@@ -22,6 +22,9 @@
+
+ module AP_MODULE_DECLARE_DATA lbmethod_byrequests_module;
+
++static APR_OPTIONAL_FN_TYPE(ap_proxy_balancer_get_best_worker)
++ *ap_proxy_balancer_get_best_worker_fn = NULL;
++
+ static int is_best_byrequests(proxy_worker *current, proxy_worker *prev_best, void *baton)
+ {
+ int *total_factor = (int *)baton;
+@@ -81,7 +84,7 @@ static proxy_worker *find_best_byrequest
+ request_rec *r)
+ {
+ int total_factor = 0;
+- proxy_worker *worker = ap_proxy_balancer_get_best_worker(balancer, r, is_best_byrequests, &total_factor);
++ proxy_worker *worker = ap_proxy_balancer_get_best_worker_fn(balancer, r, is_best_byrequests, &total_factor);
+
+ if (worker) {
+ worker->s->lbstatus -= total_factor;
+@@ -123,6 +126,28 @@ static const proxy_balancer_method byreq
+ NULL
+ };
+
++/* post_config hook: */
++static int lbmethod_byrequests_post_config(apr_pool_t *pconf, apr_pool_t *plog,
++ apr_pool_t *ptemp, server_rec *s)
++{
++
++ /* lbmethod_byrequests_post_config() will be called twice during startup. So, don't
++ * set up the static data the 1st time through. */
++ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
++ return OK;
++ }
++
++ ap_proxy_balancer_get_best_worker_fn =
++ APR_RETRIEVE_OPTIONAL_FN(ap_proxy_balancer_get_best_worker);
++ if (!ap_proxy_balancer_get_best_worker_fn) {
++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO()
++ "mod_proxy must be loaded for mod_lbmethod_byrequests");
++ return !OK;
++ }
++
++ return OK;
++}
++
+ static void register_hook(apr_pool_t *p)
+ {
+ /* Only the mpm_winnt has child init hook handler.
+@@ -130,6 +155,7 @@ static void register_hook(apr_pool_t *p)
+ * initializes and after the mod_proxy
+ */
+ ap_register_provider(p, PROXY_LBMETHOD, "byrequests", "0", &byrequests);
++ ap_hook_post_config(lbmethod_byrequests_post_config, NULL, NULL, APR_HOOK_MIDDLE);
+ }
+
+ AP_DECLARE_MODULE(lbmethod_byrequests) = {
+--- apache2.orig/modules/proxy/balancers/mod_lbmethod_bytraffic.c
++++ apache2/modules/proxy/balancers/mod_lbmethod_bytraffic.c
+@@ -22,6 +22,9 @@
+
+ module AP_MODULE_DECLARE_DATA lbmethod_bytraffic_module;
+
++static APR_OPTIONAL_FN_TYPE(ap_proxy_balancer_get_best_worker)
++ *ap_proxy_balancer_get_best_worker_fn = NULL;
++
+ static int is_best_bytraffic(proxy_worker *current, proxy_worker *prev_best, void *baton)
+ {
+ apr_off_t *min_traffic = (apr_off_t *)baton;
+@@ -59,7 +62,7 @@ static proxy_worker *find_best_bytraffic
+ {
+ apr_off_t min_traffic = 0;
+
+- return ap_proxy_balancer_get_best_worker(balancer, r, is_best_bytraffic,
++ return ap_proxy_balancer_get_best_worker_fn(balancer, r, is_best_bytraffic,
+ &min_traffic);
+ }
+
+@@ -93,6 +96,28 @@ static const proxy_balancer_method bytra
+ NULL
+ };
+
++/* post_config hook: */
++static int lbmethod_bytraffic_post_config(apr_pool_t *pconf, apr_pool_t *plog,
++ apr_pool_t *ptemp, server_rec *s)
++{
++
++ /* lbmethod_bytraffic_post_config() will be called twice during startup. So, don't
++ * set up the static data the 1st time through. */
++ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
++ return OK;
++ }
++
++ ap_proxy_balancer_get_best_worker_fn =
++ APR_RETRIEVE_OPTIONAL_FN(ap_proxy_balancer_get_best_worker);
++ if (!ap_proxy_balancer_get_best_worker_fn) {
++ ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO()
++ "mod_proxy must be loaded for mod_lbmethod_bytraffic");
++ return !OK;
++ }
++
++ return OK;
++}
++
+ static void register_hook(apr_pool_t *p)
+ {
+ /* Only the mpm_winnt has child init hook handler.
+@@ -100,6 +125,7 @@ static void register_hook(apr_pool_t *p)
+ * initializes and after the mod_proxy
+ */
+ ap_register_provider(p, PROXY_LBMETHOD, "bytraffic", "0", &bytraffic);
++ ap_hook_post_config(lbmethod_bytraffic_post_config, NULL, NULL, APR_HOOK_MIDDLE);
+ }
+
+ AP_DECLARE_MODULE(lbmethod_bytraffic) = {
+--- apache2.orig/modules/proxy/mod_proxy.h
++++ apache2/modules/proxy/mod_proxy.h
+@@ -846,6 +846,14 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_b
+ request_rec *r,
+ proxy_is_best_callback_fn_t *is_best,
+ void *baton);
++/*
++ * Needed by the lb modules.
++ */
++APR_DECLARE_OPTIONAL_FN(proxy_worker *, ap_proxy_balancer_get_best_worker,
++ (proxy_balancer *balancer,
++ request_rec *r,
++ proxy_is_best_callback_fn_t *is_best,
++ void *baton));
+
+ /**
+ * Find the shm of the worker as needed
+--- apache2.orig/modules/proxy/proxy_util.c
++++ apache2/modules/proxy/proxy_util.c
+@@ -4028,4 +4028,5 @@ void proxy_util_register_hooks(apr_pool_
+ {
+ APR_REGISTER_OPTIONAL_FN(ap_proxy_retry_worker);
+ APR_REGISTER_OPTIONAL_FN(ap_proxy_clear_connection);
++ APR_REGISTER_OPTIONAL_FN(ap_proxy_balancer_get_best_worker);
+ }