[STATUS] (flood) Wed Jul 28 23:45:39 EDT 2004

2004-07-29 Thread Rodent of Unusual Size
flood STATUS:   -*-text-*-
Last modified at [$Date: 2003/07/01 20:55:12 $]

Release:

1.0:   Released July 23, 2002
milestone-03:  Tagged January 16, 2002
ASF-transfer:  Released July 17, 2001
milestone-02:  Tagged August 13, 2001
milestone-01:  Tagged July 11, 2001 (tag lost during transfer)

RELEASE SHOWSTOPPERS:

* Everything needs to work perfectly

Other bugs that need fixing:

* I get a SIGBUS on Darwin with our examples/round-robin-ssl.xml
  config, on the second URL. I'm using OpenSSL 0.9.6c 21 dec 2001.
  
* iPlanet sends Content-length - there is a hack in there now
  to recognize it.  However, all HTTP headers need to be normalized
  before checking their values.  This isn't easy to do.  Grr.

* OpenSSL 0.9.6
  Segfaults under high load.  Upgrade to OpenSSL 0.9.6b.
   Aaron says: I just found a big bug that might have been causing
   this all along (we weren't closing ssl sockets).
   How can I reproduce the problem you were seeing
   to verify if this was the fix?

* SEGVs when /tmp/.rnd doesn't exist are bad. Make it configurable
  and at least bomb with a good error message. (See Doug's patch.)
   Status: This is fixed, no?

* If APR has disabled threads, flood should as well. We might want
  to have an enable/disable parameter that does this also, providing
  an error if threads are desired but not available.

* flood needs to clear pools more often. With a long running test
  it can chew up memory very quickly. We should just bite the bullet
  and create/destroy/clear pools for each level of our model:
  farm, farmer, profile, url/request-cycle, etc.

* APR needs to have a unified interface for ephemeral port
  exhaustion, but aparently Solaris and Linux return different
  errors at the moment. Fix this in APR then take advantage of
  it in flood.

* The examples/analyze-relative scripts fail when there are less
  than 5 unique URLs.

Other features that need writing:

* More analysis and graphing scripts are needed

* Write robust tool (using tethereal perhaps) to take network dumps 
  and convert them to flood's XML format.
Status: Justin volunteers.  Aaron had a script somewhere that is
a start. Jacek is working on a Mozilla application, codename
Flood URL bag (much like Live HTTP Headers) and small
HTTP proxy.

* Get chunked encoding support working.
Status: Justin volunteers.  He got sidetracked by the httpd
implementation of input filtering and never finished 
this.  This is a stopgap until apr-serf is completed.

* Maybe we should make randfile and capath runtime directives that
  come out of the XML, instead of autoconf parameters.

* We are using apr_os_thread_current() and getpid() in some places
  when what we really want is a GUID. The GUID will be used to
  correlate raw output data with each farmer. We may wish to print
  a unique ID for each of farm, farmer, profile, and url to help in
  postprocessing.

* We are using strtol() in some places and strtoll() in others.
  Pick one (Aaron says strtol(), but he's not sure).

* Validation of responses (known C-L, specific strings in response)
   Status: Justin volunteers

* HTTP error codes (ie. teach it about 302s)
   Justin says: Yeah, this won't be with round_robin as implemented.  
Need a linked list-based profile where we can insert 
new URLs into the sequence.

* Farmer (Single-thread, multiple profiles)
   Status: Aaron says: If you have threads, then any Farmer can be
   run as part of any Farm. If you don't have threads, you can
   currently only run one Farmer named Joe right now (this will
   be changed so that if you don't have threads, flood will attempt
   to run all Farmers in serial under one process).

* Collective (Single-host, multiple farms)
  This is a number of Farms that have been fork()ed into child processes.

* Megaconglomerate (Multiple hosts each running a collective)
  This is a number of Collectives running on a number of hosts, invoked
  via RSH/SSH or maybe even some proprietary mechanism.

* Other types of urllists
a) Random / Random-weighted
b) Sequenced (useful with cookie propogation)
c) Round-robin
d) Chaining of the above strategies
  Status: Round-robin is complete.

* Other types of reports
  Status: Aaron says: simple reports are functional. Justin added
  a new type that simply prints the approx. timestamp when
  the test was run, and the result as OK/FAIL; it is called
  easy reports (see flood_easy_reports.h).
  Furthermore, 

[STATUS] (perl-framework) Wed Jul 28 23:45:40 EDT 2004

2004-07-29 Thread Rodent of Unusual Size
httpd-test/perl-framework STATUS:   -*-text-*-
Last modified at [$Date: 2002/03/09 05:22:48 $]

Stuff to do:
* finish the t/TEST exit code issue (ORed with 0x2C if
  framework failed)

* change existing tests that frob the DocumentRoot (e.g.,
  t/modules/access.t) to *not* do that; instead, have
  Makefile.PL prepare appropriate subdirectory configs
  for them.  Why?  So t/TEST can be used to test a
  remote server.

* problems with -d perl mode, doesn't work as documented
  Message-ID: [EMAIL PROTECTED]
  Date: Sat, 20 Oct 2001 12:58:33 +0800
  Subject: Re: perldb

Tests to be written:

* t/apache
  - simulations of network failures (incomplete POST bodies,
chunked and unchunked; missing POST bodies; slooow
client connexions, such as taking 1 minute to send
1KiB; ...)

* t/modules/autoindex
  - something seems possibly broken with inheritance on 2.0

* t/ssl
  - SSLPassPhraseDialog exec:
  - SSLRandomSeed exec:


Re: cookie_jar ignored with requests_redirectable = 1

2004-07-29 Thread Stas Bekman
Stas Bekman wrote:
David?
Boris Zentner wrote:
We are all at the OSCon at the moment, so we hardly get a chance to 
sleep. I suppose David will follow up soonish :)

--
__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


Re: cookie_jar ignored with requests_redirectable = 1

2004-07-29 Thread David Wheeler
On Jul 28, 2004, at 1:29 AM, Stas Bekman wrote:
Boris Zentner wrote:
Hi,
recently I try to use Apache::Test with HTTP::Cookies. But it did not 
work as expected. I suppose the way to add a cookie_jar to A::T was 
with 'Apache::TestRequest::user_agent'. I read the docs from 
Apache::TestRequest::user_agent. Here is the relevant part of it.
   And finally, the semantics of the requests_redirectable
   parameter is different than for LWP::UserAgent: It
   either follows redirects for a request, or it doesn't.
   Thus requests_redirectable is a boolean value instead of
   the array reference that LWP::UserAgent expects. To
This implies to me that I have the choice to enable or disable 
redirects for this useragent with a bool value.
Apache::TestRequest::user_agent(
  reset = 1,   cookie_jar = $cookie_jar,   requests_redirectable = 
1 );
But this way the cookies are ignored. I expected that 
HTTP::Cookies-extract_cookies is called after every request. 
Therefor I create the cookie_jar from
Oops.
package My::Cookies;
use base 'HTTP::Cookies';
sub extract_cookies {
  warn extract_cookies!!!;
  shift-SUPER::extract_cookies(@_);
}
To get it work, I need to parse the cookie headers myself or 
Apache::TestRequest::user_agent(
  reset = 1,   cookie_jar = $cookie_jar,   requests_redirectable = 
0 );
But here I need to redirect myself or do it with the undocumented 
Apache::TestRequest::user_agent(
  reset = 1,   cookie_jar = $cookie_jar,   requests_redirectable = 
[qw~x y~]
);
that does anything I want but is undocumented!
Here is a part from Apache::TestRequest::user_agent that looks wrong 
to me.
my $redir = $args-{requests_redirectable};
if (ref $redir and (@$redir  1 or $redir-[0] ne 'POST')) {
$RedirectOK = 1;
} else {
$RedirectOK = 0;
}
Does this address the issue?
--- TestRequest.pm.~1.96.~  Thu May  6 12:11:33 2004
+++ TestRequest.pm  Thu Jul 29 14:03:58 2004
@@ -115,7 +115,7 @@
 if (exists $args-{requests_redirectable}) {
 my $redir = $args-{requests_redirectable};
-if (ref $redir and (@$redir  1 or $redir-[0] ne 'POST')) {
+if ((ref $redir and (@$redir  1 or $redir-[0] ne 'POST')) or 
$redir) {
 $RedirectOK = 1;
 } else {
 $RedirectOK = 0;

I think that I might have changed this code to work this way, and 
overlooked that it could be passed as a simple boolean, even though 
that's the _only_ way it worked before I got my hands on it.

So does passing the array reference actually affect the way the LWP 
user agent object operates? If so, that's cool, but it's undocumented. 
I'm not sure whether it should be documented, though, since if LWP 
isn't installed it certainly won't work with the simple request 
interface that Apache::TestRequest uses in its place.

Regards,
David


smime.p7s
Description: S/MIME cryptographic signature


Re: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread William A. Rowe, Jr.
At 05:55 PM 7/28/2004, [EMAIL PROTECTED] wrote:
minfrin 2004/07/28 15:55:15

  Modified:.Tag: APACHE_2_0_BRANCH STATUS
  Log:
  Propose a backport
  
  +*) Add load balancer support to the scoreboard in preparation for
  +   load balancing support in mod_proxy.
  + include/scoreboard.h: 1.52
  + server/scoreboard.c: 1.75
  +   +1: minfrin

Rather than vote... afraid I have to veto (for 2.0)...

  --- scoreboard.h  9 Feb 2004 20:38:21 -   1.51
  +++ scoreboard.h  28 Jul 2004 22:50:54 -  1.52
  @@ -32,6 +32,7 @@
   #include apr_thread_proc.h
   #include apr_portable.h
   #include apr_shm.h
  +#include apr_optional.h
   
   /* Scoreboard file, if there is one */
   #ifndef DEFAULT_SCOREBOARD
  @@ -118,6 +119,7 @@
   typedef struct {
   int server_limit;
   int thread_limit;
  +int lb_limit;
   ap_scoreboard_e sb_type;
   ap_generation_t running_generation;  /* the generation of children which
* should still be serving requests. */

This definitely breaks binary compatibility.

Bill  



RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Mladen Turk
 

William A. Rowe, Jr. wrote:

/* Scoreboard file, if there is one */
#ifndef DEFAULT_SCOREBOARD
   @@ -118,6 +119,7 @@
typedef struct {
int server_limit;
int thread_limit;
   +int lb_limit;
ap_scoreboard_e sb_type;
ap_generation_t running_generation;  /* the 
 generation of children which
 * should still 
 be serving 
  requests. */
 
 This definitely breaks binary compatibility.


Moving the lb_limit to the end of the struct will not break the binary
compatibility. Correct?

MT.


smime.p7s
Description: S/MIME cryptographic signature


Re: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Andr Malo
* Mladen Turk [EMAIL PROTECTED] wrote:

 William A. Rowe, Jr. wrote:
 
 /* Scoreboard file, if there is one */
 #ifndef DEFAULT_SCOREBOARD
@@ -118,6 +119,7 @@
 typedef struct {
 int server_limit;
 int thread_limit;
+int lb_limit;
 ap_scoreboard_e sb_type;
 ap_generation_t running_generation;  /* the 
  generation of children which
  * should still 
  be serving 
   requests. */
  
  This definitely breaks binary compatibility.
 
 
 Moving the lb_limit to the end of the struct will not break the binary
 compatibility. Correct?

Not Correct. It *may* be the case. Depending on who allocates the stuff.

nd
-- 
Das Verhalten von Gates hatte mir bewiesen, dass ich auf ihn und seine
beiden Gefährten nicht zu zählen brauchte -- Karl May, Winnetou III

Im Westen was neues: http://pub.perlig.de/books.html#apache2


Hi

2004-07-29 Thread fanf
Important document!



Norton AntiVirus Deleted1.txt
Description: plain/text


[PATCH] Bug #9037 reminder

2004-07-29 Thread Federico Mennite
Hi,
I've received yet another mail from someone asking me about the patch 
for bug #9037 at
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9037
The patch is attacched to the bug report.
Also many distributions (e.g. Debian) ship apache with a patch for this 
issue.

So far it seems to me that there is enough interest to have this problem 
fixed.

I'm interested to bring the patch to an appliable state if it isn't ok 
as it is.

Regards.
Note: probably the severity (set to minor) of this problem ins't 
appropriate because when you hit it in a productive environment it 
causes a major pain.

--
Federico Mennite


RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Mladen Turk
 

André Malo wrote:
 
  William A. Rowe, Jr. wrote:
   
   This definitely breaks binary compatibility.
  
  Moving the lb_limit to the end of the struct will not break 
 the binary 
  compatibility. Correct?
 
 Not Correct. It *may* be the case. Depending on who allocates 
 the stuff.


Can you explain that a bit.
Seems to me that there is a single ap_scoreboard_image-global, and it is
allocated when the scoreboard gets created.
IMO if the lb_limit is moved to the end of the struct it will not affect the
existing binaries.
Cannot speak on all builds but FreeBSD 4.1.10 and WIN32 are binary
compatible (mod_status is the only that directly uses global).

The only way where it might create problems is ap_scoreboard_image::servers
not global, for some 3rd party module that directly uses this pointer array
instead using ap_get_scoreboard_worker.

Scoreboard file format is not binary compatible for sure, and this is the
only part that might rise concerns, but only if that compatibility is
required after all.

MT.


smime.p7s
Description: S/MIME cryptographic signature


RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread William A. Rowe, Jr.
At 02:24 AM 7/29/2004, Mladen Turk wrote:
 
William A. Rowe, Jr. wrote:

/* Scoreboard file, if there is one */
#ifndef DEFAULT_SCOREBOARD
   @@ -118,6 +119,7 @@
typedef struct {
int server_limit;
int thread_limit;
   +int lb_limit;
ap_scoreboard_e sb_type;
ap_generation_t running_generation;  /* the 
 generation of children which
 * should still 
 be serving 
  requests. */
 
 This definitely breaks binary compatibility.

Moving the lb_limit to the end of the struct will not break the binary
compatibility. Correct?

Yes, in the case of global_score, that would be safer.  It seems that
the additional lb_score 's element point was better placed.

If you changed worker_score, it would still have broken (or if you change
balancers in the future.)  Agents reviewing the scoreboard are presuming 
scoreboard_entry *psb can be accessed as psb[0..n] and that -will- be 
broken with any size/alignment change to the struct.

E.g.

Bill 



RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Mladen Turk
 

William A. Rowe, Jr. wrote:
 
 Moving the lb_limit to the end of the struct will not break 
 the binary 
 compatibility. Correct?
 
 Yes, in the case of global_score, that would be safer.  It 
 seems that the additional lb_score 's element point was better placed.
 
 If you changed worker_score, it would still have broken (or 
 if you change balancers in the future.)  Agents reviewing the 
 scoreboard are presuming scoreboard_entry *psb can be 
 accessed as psb[0..n] and that -will- be broken with any 
 size/alignment change to the struct.


I was afraid you've gonna said that. Those 3rd party... :).

How about adding extra data to the end of the entire scoreboard withouth
touching any existing structs or data?
It will require an extra copy on child_init, but there will be no
compatibility issues, thought.

Will that rise any objections?


MT.


smime.p7s
Description: S/MIME cryptographic signature


RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread William A. Rowe, Jr.
At 10:26 AM 7/29/2004, William A. Rowe, Jr. wrote:
If you changed worker_score, it would still have broken (or if you change
balancers in the future.)  Agents reviewing the scoreboard are presuming 
scoreboard_entry *psb can be accessed as psb[0..n] and that -will- be 
broken with any size/alignment change to the struct.

E.g. [...?]

we have individual element accessors, but older style code presumes it
can loop through the array of individual worker threads/procs.  Adding
another element to worker_score would break the starting offset of the
members psb[1..n].  Although we create the pointer-pointer logic in the
children to avoid this, it's still possible that the code would break some 
modules.

I can't envision a case where any of the scoreboard entries are allocated
outside of our scoreboard.c code.

At 11:01 AM 7/29/2004, Mladen Turk wrote:

 I was afraid you've gonna said that. Those 3rd party... :).

 How about adding extra data to the end of the entire scoreboard withouth
 touching any existing structs or data?
 It will require an extra copy on child_init, but there will be no
 compatibility issues, thought.

You aren't changing worker_score so this isn't an issue.  The patch
already creates (new) a fourth lb_score array.

Bill





RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Mladen Turk
 

William A. Rowe, Jr. wrote:
 Although 
 we create the pointer-pointer logic in the children to avoid 
 this, it's still possible that the code would break some modules.
 
 I can't envision a case where any of the scoreboard entries 
 are allocated outside of our scoreboard.c code.
 

OK, then.
I'll revert the patch and for 2.1 too, and we'll use our own shm for
loadbalancer.

Can we then create two extra hooks aka on_scoreboard_create and
on_scoreboard_attach with ap_scoreboard_e, thread and server limit params.
It will also help other modules like mod_ssl (currently using pool tag to
supress double creation on post_config).



MT.


smime.p7s
Description: S/MIME cryptographic signature


[PATCH] scoreboard WAS RE: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Mladen Turk
Hi all,

Since there was some concerns regarding binary compatibility, here is the
patch that uses different approach.

1. Revert the patch with changes to scoreboard structures
2. Add an extra hook that is run during ap_reopen_scoreboard with detached
param.

We will use our own shm, opening by hooking pre_mpm, and attaching in child
on reopen_scoreboard.

This will resolve any binary compatibility concerns.


Regards,
MT.
Index: scoreboard.h
===
RCS file: /home/cvspublic/httpd-2.0/include/scoreboard.h,v
retrieving revision 1.53
diff -u -r1.53 scoreboard.h
--- scoreboard.h29 Jul 2004 15:18:40 -  1.53
+++ scoreboard.h29 Jul 2004 18:28:21 -
@@ -124,7 +124,6 @@
  * should still be serving requests.
  */
 apr_time_t restart_time;
-int lb_limit;
 } global_score;
 
 /* stuff which the parent generally writes and the children rarely read */
@@ -138,13 +137,6 @@
  */
 };
 
-/* stuff which is lb specific */
-typedef struct lb_score lb_score;
-struct lb_score{
-/* TODO: make a real stuct from this */
-unsigned char data[1024];
-};
-
 /* Scoreboard is now in 'local' memory, since it isn't updated once created,
  * even in forked architectures.  Child created-processes (non-fork) will
  * set up these indicies into the (possibly relocated) shmem records.
@@ -153,7 +145,6 @@
 global_score *global;
 process_score *parent;
 worker_score **servers;
-lb_score **balancers;
 } scoreboard;
 
 typedef struct ap_sb_handle_t ap_sb_handle_t;
@@ -179,7 +170,6 @@
 AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y);
 AP_DECLARE(process_score *) ap_get_scoreboard_process(int x);
 AP_DECLARE(global_score *) ap_get_scoreboard_global(void);
-AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int child_num, int lb_num);
 
 AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image;
 AP_DECLARE_DATA extern const char *ap_scoreboard_fname;
@@ -198,11 +188,13 @@
 AP_DECLARE_HOOK(int, pre_mpm, (apr_pool_t *p, ap_scoreboard_e sb_type))
 
 /**
-  * proxy load balancer
-  * @return the number of load balancer workers.
+  * Hook for reopening scoreboard, reopen scoreboard.
+  * @param detached Non-zero if this is a seperate child process. 
+  * @ingroup hooks
+  * @return OK or DECLINE on success; anything else is a error
   */  
-APR_DECLARE_OPTIONAL_FN(int, ap_proxy_lb_workers,
-(void));
+AP_DECLARE_HOOK(int, reopen_scoreboard, (int detached))
+
 
 /* for time_process_request() in http_main.c */
 #define START_PREQUEST 1

Index: scoreboard.c
===
RCS file: /home/cvspublic/httpd-2.0/server/scoreboard.c,v
retrieving revision 1.75
diff -u -r1.75 scoreboard.c
--- scoreboard.c28 Jul 2004 22:50:54 -  1.75
+++ scoreboard.c29 Jul 2004 18:33:01 -
@@ -53,21 +53,23 @@
 
 APR_HOOK_STRUCT(
 APR_HOOK_LINK(pre_mpm)
+APR_HOOK_LINK(reopen_scoreboard)
 )
  
 AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_mpm,
   (apr_pool_t *p, ap_scoreboard_e sb_type),
   (p, sb_type),OK,DECLINED)
 
-static APR_OPTIONAL_FN_TYPE(ap_proxy_lb_workers)
-*proxy_lb_workers;
+AP_IMPLEMENT_HOOK_RUN_ALL(int,reopen_scoreboard,
+  (int detached),
+  (detached),OK,DECLINED)
 
 struct ap_sb_handle_t {
 int child_num;
 int thread_num;
 };
 
-static int server_limit, thread_limit, lb_limit;
+static int server_limit, thread_limit;
 static apr_size_t scoreboard_size;
 
 /*
@@ -93,18 +95,9 @@
 ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, thread_limit);
 ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, server_limit);
 
-if (!proxy_lb_workers)
-proxy_lb_workers = APR_RETRIEVE_OPTIONAL_FN(ap_proxy_lb_workers);
-if (proxy_lb_workers)
-lb_limit = proxy_lb_workers();
-else
-lb_limit = 0;
-
 scoreboard_size = sizeof(global_score);
 scoreboard_size += sizeof(process_score) * server_limit;
 scoreboard_size += sizeof(worker_score) * server_limit * thread_limit;
-if (lb_limit)
-scoreboard_size += sizeof(lb_score) * server_limit * lb_limit;
 
 return scoreboard_size;
 }
@@ -116,8 +109,7 @@
 
 ap_calc_scoreboard_size();
 ap_scoreboard_image = 
-calloc(1, sizeof(scoreboard) + server_limit * sizeof(worker_score *) +
-   server_limit * lb_limit * sizeof(lb_score *));
+calloc(1, sizeof(scoreboard) + server_limit * sizeof(worker_score *));
 more_storage = shared_score;
 ap_scoreboard_image-global = (global_score *)more_storage;
 more_storage += sizeof(global_score);
@@ -129,19 +121,9 @@
 ap_scoreboard_image-servers[i] = (worker_score *)more_storage;
 more_storage += thread_limit * sizeof(worker_score);
 }
-if 

Ideas for Smart Filtering

2004-07-29 Thread Nick Kew

The filter architecture periodically gets discussed here, and I've
been meaning to write up my thoughts for some time.  I'm using a
module that implements a slightly different filter API, primarily
for filtering in a proxy context.

I've now written a brief discussion document on the subject.  It's
mostly an abstraction of what I'm currently using, although it does
propose some additional improvements, primarily with regard to
protocol handling (reflecting the recent byteranges thread here).

It generated an interesting discussion, including some interesting
alternative ideas, last night on IRC.  Perhaps it can lead to a
general-purpose module for 2.0 and an architecture update for 2.2?

http://www.apachetutor.org/dev/smart-filter

-- 
Nick Kew


Re: cvs commit: httpd-2.0 STATUS

2004-07-29 Thread Roy T . Fielding
On Thursday, July 29, 2004, at 05:58  AM, André Malo wrote:
* Mladen Turk [EMAIL PROTECTED] wrote:
William A. Rowe, Jr. wrote:
  /* Scoreboard file, if there is one */
  #ifndef DEFAULT_SCOREBOARD
 @@ -118,6 +119,7 @@
  typedef struct {
  int server_limit;
  int thread_limit;
 +int lb_limit;
  ap_scoreboard_e sb_type;
  ap_generation_t running_generation;  /* the
generation of children which
   * should still
be serving
requests. */
This definitely breaks binary compatibility.
Moving the lb_limit to the end of the struct will not break the binary
compatibility. Correct?
Not Correct. It *may* be the case. Depending on who allocates the 
stuff.
Then the question to ask is whether any independent modules
(those that are not installed when the server is installed)
are likely to use that structure, and how they are expected
to use it.
I'd be surprised if it were even possible for an independent
module to allocate a scoreboard struct, but it has been a while
since I looked at that code.
Roy