You are correct. The changes were just additions to the API.
> Am 08.02.2016 um 16:55 schrieb Eric Covener <[email protected]>:
>
> I think this went in as a major bump, but I think it only needed a
> minor. Probably not intentional because major would not be
> backportable.
>
> Anyone elses 2c and I'll flip it?
>
> On Thu, Jan 21, 2016 at 11:57 AM, Stefan Eissing
> <[email protected]> wrote:
>> Ah, of course, just a moment...
>>
>>> Am 21.01.2016 um 17:54 schrieb Jim Jagielski <[email protected]>:
>>>
>>> Not seeing a mmn bump... ?
>>>
>>>> On Jan 21, 2016, at 11:36 AM, [email protected] wrote:
>>>>
>>>> Author: icing
>>>> Date: Thu Jan 21 16:36:33 2016
>>>> New Revision: 1726009
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1726009&view=rev
>>>> Log:
>>>> scoreboard addition of protocol, new ap_udpte_child_status methods
>>>>
>>>> Modified:
>>>> httpd/httpd/trunk/include/scoreboard.h
>>>> httpd/httpd/trunk/modules/generators/mod_status.c
>>>> httpd/httpd/trunk/modules/ssl/ssl_engine_kernel.c
>>>> httpd/httpd/trunk/server/scoreboard.c
>>>>
>>>> Modified: httpd/httpd/trunk/include/scoreboard.h
>>>> URL:
>>>> http://svn.apache.org/viewvc/httpd/httpd/trunk/include/scoreboard.h?rev=1726009&r1=1726008&r2=1726009&view=diff
>>>> ==============================================================================
>>>> --- httpd/httpd/trunk/include/scoreboard.h (original)
>>>> +++ httpd/httpd/trunk/include/scoreboard.h Thu Jan 21 16:36:33 2016
>>>> @@ -115,6 +115,7 @@ struct worker_score {
>>>> char client[40]; /* Keep 'em small... but large enough to
>>>> hold an IPv6 address */
>>>> char request[64]; /* We just want an idea... */
>>>> char vhost[32]; /* What virtual host is being accessed? */
>>>> + char protocol[16]; /* What protocol is used on the
>>>> connection? */
>>>> };
>>>>
>>>> typedef struct {
>>>> @@ -181,6 +182,10 @@ AP_DECLARE(int) ap_update_child_status(a
>>>> AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num, int
>>>> thread_num,
>>>> int status, request_rec
>>>> *r);
>>>> AP_DECLARE(int) ap_update_child_status_from_conn(ap_sb_handle_t *sbh, int
>>>> status, conn_rec *c);
>>>> +AP_DECLARE(int) ap_update_child_status_from_server(ap_sb_handle_t *sbh,
>>>> int status,
>>>> + conn_rec *c,
>>>> server_rec *s);
>>>> +AP_DECLARE(int) ap_update_child_status_descr(ap_sb_handle_t *sbh, int
>>>> status, const char *descr);
>>>> +
>>>> AP_DECLARE(void) ap_time_process_request(ap_sb_handle_t *sbh, int status);
>>>>
>>>> AP_DECLARE(worker_score *) ap_get_scoreboard_worker(ap_sb_handle_t *sbh);
>>>>
>>>> Modified: httpd/httpd/trunk/modules/generators/mod_status.c
>>>> URL:
>>>> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_status.c?rev=1726009&r1=1726008&r2=1726009&view=diff
>>>> ==============================================================================
>>>> --- httpd/httpd/trunk/modules/generators/mod_status.c (original)
>>>> +++ httpd/httpd/trunk/modules/generators/mod_status.c Thu Jan 21 16:36:33
>>>> 2016
>>>> @@ -662,7 +662,7 @@ static int status_handler(request_rec *r
>>>> #endif
>>>> "<th>SS</th><th>Req</th>"
>>>> "<th>Conn</th><th>Child</th><th>Slot</th>"
>>>> - "<th>Client</th><th>VHost</th>"
>>>> + "<th>Client</th><th>Protocol</th><th>VHost</th>"
>>>> "<th>Request</th></tr>\n\n", r);
>>>>
>>>> for (i = 0; i < server_limit; ++i) {
>>>> @@ -776,13 +776,15 @@ static int status_handler(request_rec *r
>>>> format_byte_out(r, bytes);
>>>> ap_rputs(")\n", r);
>>>> ap_rprintf(r,
>>>> - " <i>%s {%s}</i> <b>[%s]</b><br />\n\n",
>>>> + " <i>%s {%s}</i> <i>(%s)</i>
>>>> <b>[%s]</b><br />\n\n",
>>>> ap_escape_html(r->pool,
>>>> ws_record->client),
>>>> ap_escape_html(r->pool,
>>>> ap_escape_logitem(r->pool,
>>>>
>>>> ws_record->request)),
>>>> ap_escape_html(r->pool,
>>>> + ws_record->protocol),
>>>> + ap_escape_html(r->pool,
>>>> ws_record->vhost));
>>>> }
>>>> else { /* !no_table_report */
>>>> @@ -860,11 +862,13 @@ static int status_handler(request_rec *r
>>>> (float)conn_bytes / KBYTE, (float) my_bytes /
>>>> MBYTE,
>>>> (float)bytes / MBYTE);
>>>>
>>>> - ap_rprintf(r, "</td><td>%s</td><td nowrap>%s</td>"
>>>> + ap_rprintf(r, "</td><td>%s</td><td>%s</td><td
>>>> nowrap>%s</td>"
>>>> "<td nowrap>%s</td></tr>\n\n",
>>>> ap_escape_html(r->pool,
>>>> ws_record->client),
>>>> ap_escape_html(r->pool,
>>>> + ws_record->protocol),
>>>> + ap_escape_html(r->pool,
>>>> ws_record->vhost),
>>>> ap_escape_html(r->pool,
>>>> ap_escape_logitem(r->pool,
>>>>
>>>> Modified: httpd/httpd/trunk/modules/ssl/ssl_engine_kernel.c
>>>> URL:
>>>> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ssl/ssl_engine_kernel.c?rev=1726009&r1=1726008&r2=1726009&view=diff
>>>> ==============================================================================
>>>> --- httpd/httpd/trunk/modules/ssl/ssl_engine_kernel.c (original)
>>>> +++ httpd/httpd/trunk/modules/ssl/ssl_engine_kernel.c Thu Jan 21 16:36:33
>>>> 2016
>>>> @@ -31,6 +31,7 @@
>>>> #include "ssl_private.h"
>>>> #include "mod_ssl.h"
>>>> #include "util_md5.h"
>>>> +#include "scoreboard.h"
>>>>
>>>> static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn);
>>>> #ifdef HAVE_TLSEXT
>>>> @@ -2218,6 +2219,7 @@ static int ssl_find_vhost(void *serverna
>>>> sslcon->server = s;
>>>> sslcon->cipher_suite = sc->server->auth.cipher_suite;
>>>>
>>>> + ap_update_child_status_from_server(c->sbh, SERVER_BUSY_READ, c,
>>>> s);
>>>> /*
>>>> * There is one special filter callback, which is set
>>>> * very early depending on the base_server's log level.
>>>>
>>>> Modified: httpd/httpd/trunk/server/scoreboard.c
>>>> URL:
>>>> http://svn.apache.org/viewvc/httpd/httpd/trunk/server/scoreboard.c?rev=1726009&r1=1726008&r2=1726009&view=diff
>>>> ==============================================================================
>>>> --- httpd/httpd/trunk/server/scoreboard.c (original)
>>>> +++ httpd/httpd/trunk/server/scoreboard.c Thu Jan 21 16:36:33 2016
>>>> @@ -32,6 +32,7 @@
>>>> #include "http_main.h"
>>>> #include "http_core.h"
>>>> #include "http_config.h"
>>>> +#include "http_protocol.h"
>>>> #include "ap_mpm.h"
>>>>
>>>> #include "scoreboard.h"
>>>> @@ -457,7 +458,9 @@ static int update_child_status_internal(
>>>> int thread_num,
>>>> int status,
>>>> conn_rec *c,
>>>> - request_rec *r)
>>>> + server_rec *s,
>>>> + request_rec *r,
>>>> + const char *descr)
>>>> {
>>>> int old_status;
>>>> worker_score *ws;
>>>> @@ -466,18 +469,22 @@ static int update_child_status_internal(
>>>>
>>>> ws = &ap_scoreboard_image->servers[child_num][thread_num];
>>>> old_status = ws->status;
>>>> - ws->status = status;
>>>> -
>>>> - ps = &ap_scoreboard_image->parent[child_num];
>>>> -
>>>> - if (status == SERVER_READY
>>>> - && old_status == SERVER_STARTING) {
>>>> - ws->thread_num = child_num * thread_limit + thread_num;
>>>> - ap_mpm_query(AP_MPMQ_GENERATION, &mpm_generation);
>>>> - ps->generation = mpm_generation;
>>>> + if (status >= 0) {
>>>> + ws->status = status;
>>>> +
>>>> + ps = &ap_scoreboard_image->parent[child_num];
>>>> +
>>>> + if (status == SERVER_READY
>>>> + && old_status == SERVER_STARTING) {
>>>> + ws->thread_num = child_num * thread_limit + thread_num;
>>>> + ap_mpm_query(AP_MPMQ_GENERATION, &mpm_generation);
>>>> + ps->generation = mpm_generation;
>>>> + }
>>>> }
>>>>
>>>> if (ap_extended_status) {
>>>> + const char *val;
>>>> +
>>>> if (status == SERVER_READY || status == SERVER_DEAD) {
>>>> /*
>>>> * Reset individual counters
>>>> @@ -490,27 +497,42 @@ static int update_child_status_internal(
>>>> ws->conn_bytes = 0;
>>>> ws->last_used = apr_time_now();
>>>> }
>>>> - if (r) {
>>>> - const char *client = ap_get_remote_host(c, r->per_dir_config,
>>>> - REMOTE_NOLOOKUP, NULL);
>>>> - if (!client || !strcmp(client, c->client_ip)) {
>>>> - apr_cpystrn(ws->client, r->useragent_ip,
>>>> sizeof(ws->client));
>>>> + if (status == SERVER_READY) {
>>>> + ws->client[0]='\0';
>>>> + ws->vhost[0]='\0';
>>>> + ws->request[0]='\0';
>>>> + ws->protocol[0]='\0';
>>>> + }
>>>> + else {
>>>> + if (descr) {
>>>> + apr_cpystrn(ws->request, descr, sizeof(ws->request));
>>>> }
>>>> - else {
>>>> - apr_cpystrn(ws->client, client, sizeof(ws->client));
>>>> + else if (r) {
>>>> + copy_request(ws->request, sizeof(ws->request), r);
>>>> }
>>>> - copy_request(ws->request, sizeof(ws->request), r);
>>>> - if (r->server) {
>>>> - apr_snprintf(ws->vhost, sizeof(ws->vhost), "%s:%d",
>>>> - r->server->server_hostname,
>>>> - r->connection->local_addr->port);
>>>> + if (r || c) {
>>>> + val = ap_get_remote_host(c, r? r->per_dir_config : NULL,
>>>> + REMOTE_NOLOOKUP, NULL);
>>>> + if (r && (!val || !strcmp(val, c->client_ip))) {
>>>> + apr_cpystrn(ws->client, r->useragent_ip,
>>>> sizeof(ws->client));
>>>> + }
>>>> + else {
>>>> + apr_cpystrn(ws->client, val, sizeof(ws->client));
>>>> + }
>>>> + }
>>>> + if (s) {
>>>> + if (c) {
>>>> + apr_snprintf(ws->vhost, sizeof(ws->vhost), "%s:%d",
>>>> + s->server_hostname, c->local_addr->port);
>>>> + }
>>>> + else {
>>>> + apr_cpystrn(ws->vhost, s->server_hostname,
>>>> sizeof(ws->vhost));
>>>> + }
>>>> + }
>>>> + if (c) {
>>>> + val = ap_get_protocol(c);
>>>> + apr_cpystrn(ws->protocol, val, sizeof(ws->protocol));
>>>> }
>>>> - }
>>>> - else if (c) {
>>>> - apr_cpystrn(ws->client, ap_get_remote_host(c, NULL,
>>>> - REMOTE_NOLOOKUP, NULL), sizeof(ws->client));
>>>> - ws->request[0]='\0';
>>>> - ws->vhost[0]='\0';
>>>> }
>>>> }
>>>>
>>>> @@ -528,7 +550,8 @@ AP_DECLARE(int) ap_update_child_status_f
>>>>
>>>> return update_child_status_internal(child_num, thread_num, status,
>>>> r ? r->connection : NULL,
>>>> - r);
>>>> + r ? r->server : NULL,
>>>> + r, NULL);
>>>> }
>>>>
>>>> AP_DECLARE(int) ap_update_child_status(ap_sb_handle_t *sbh, int status,
>>>> @@ -540,17 +563,37 @@ AP_DECLARE(int) ap_update_child_status(a
>>>> return update_child_status_internal(sbh->child_num, sbh->thread_num,
>>>> status,
>>>> r ? r->connection : NULL,
>>>> - r);
>>>> + r ? r->server : NULL,
>>>> + r, NULL);
>>>> }
>>>>
>>>> AP_DECLARE(int) ap_update_child_status_from_conn(ap_sb_handle_t *sbh, int
>>>> status,
>>>> - conn_rec *c)
>>>> + conn_rec *c)
>>>> +{
>>>> + if (!sbh || (sbh->child_num < 0))
>>>> + return -1;
>>>> +
>>>> + return update_child_status_internal(sbh->child_num, sbh->thread_num,
>>>> + status, c, NULL, NULL, NULL);
>>>> +}
>>>> +
>>>> +AP_DECLARE(int) ap_update_child_status_from_server(ap_sb_handle_t *sbh,
>>>> int status,
>>>> + conn_rec *c,
>>>> server_rec *s)
>>>> +{
>>>> + if (!sbh || (sbh->child_num < 0))
>>>> + return -1;
>>>> +
>>>> + return update_child_status_internal(sbh->child_num, sbh->thread_num,
>>>> + status, c, s, NULL, NULL);
>>>> +}
>>>> +
>>>> +AP_DECLARE(int) ap_update_child_status_descr(ap_sb_handle_t *sbh, int
>>>> status, const char *descr)
>>>> {
>>>> if (!sbh || (sbh->child_num < 0))
>>>> return -1;
>>>>
>>>> return update_child_status_internal(sbh->child_num, sbh->thread_num,
>>>> - status, c, NULL);
>>>> + status, NULL, NULL, NULL, descr);
>>>> }
>>>>
>>>> AP_DECLARE(void) ap_time_process_request(ap_sb_handle_t *sbh, int status)
>>>> @@ -605,6 +648,7 @@ AP_DECLARE(void) ap_copy_scoreboard_work
>>>> dest->client[sizeof(dest->client) - 1] = '\0';
>>>> dest->request[sizeof(dest->request) - 1] = '\0';
>>>> dest->vhost[sizeof(dest->vhost) - 1] = '\0';
>>>> + dest->protocol[sizeof(dest->protocol) - 1] = '\0';
>>>> }
>>>>
>>>> AP_DECLARE(process_score *) ap_get_scoreboard_process(int x)
>>>
>
>
>
> --
> Eric Covener
> [email protected]