=- James Cameron wrote on Thu 21.Feb'08 at  9:27:08 +1100 -=

> On Wed, Feb 20, 2008 at 09:04:09PM +0100, Rado S wrote:
> > Why do you still keep it (or any server) static then?
> 
> 1. solicitation may not be working, because it was not
> implemented, or because of network path problems, ... from memory
> that is why hockey.tamu.edu is on my metaserver,

- network path problems: well, again, what's the gain for anyone to
see it listed as unreachable rather then not listed at all?
Admins / regular players know what servers are supposed to exist
from their experience when the server was OK.
If it's missing, they know something is wrong.
Casual players have no gain, only a zombie entry in their list.

- not implemented: isn't the goal to have all servers work with
solicitation? Anyone tried contacting the server's admin for a
status update or perhaps to aid implementing solicitation?
If it's dead for good, then it needs no "in memory of" note on the
metas, put it on a history page. ;)

> 2. solicitation may work fine, but by placing the server in the
> static list it is shown to clients as soon as the metaserver
> restarts, rather than waiting for players to join that server ...

You mean "waiting for the server to report to the metas"?
If yes, then it's just a matter of moments per server-cfg.

If not, why is joining the server relevant for its solicitation?
And how could they be joined before being listed on the metas?
(chicken-egg problem, unless you assume people keep local lists
and/or caches, but then this isn't an issue at all)

> 3. the metaserver has an undesired feature that prevents it from
> working unless there is at least one static server.

This can't be overcome?
 Or it isn't wanted to be overcome?

> > Does the metaserver re-check on its own at all when
> > solitications from a server stop?
> 
> Indeed that is the question. I remember coding it so that it
> would, but I can't remember if it was removed.

Ok, I think I found a place to jump in:
scan.c:917
if (servers[i].next_update <= now && !servers[i].solicit) {

Maybe it should be expanded like this:
if (( !servers[i].solicit && servers[i].next_update <= now) ||
    ( servers[i].solicit && (servers[i].last_update + SOLICIT_TIMEOUT) <= now)) {

With some sane value for SOLICIT_TIMEOUT, maybe 1h?

-- 
© Rado S. -- You must provide YOUR effort for your goal!
EVERY effort counts: at least to show your attitude.
You're responsible for ALL you do: you get what you give.