If you're really paranoid about the ASF mirrors you can use ezt to embed the [preferred] mirror inside some javascript within the page and run a test HEAD request on the url to ensure it exists.
I don't see the point of the MirrorBrain stuff at this point tho- will just make things more messy than they already are dealing with SF + ASF mirrors. ----- Original Message ----- > From: Rob Weir <robw...@apache.org> > To: ooo-dev@incubator.apache.org > Cc: > Sent: Saturday, April 7, 2012 4:03 PM > Subject: Re: [DL LOGIC] How to choose a mirror when more than 1 is available? > > On Sat, Apr 7, 2012 at 3:35 PM, Marcus (OOo) <marcus.m...@wtnet.de> wrote: >> Am 04/07/2012 07:38 PM, schrieb Marcus (OOo): >> >>> Am 04/07/2012 05:34 PM, schrieb Rob Weir: >>>> >>>> On Sat, Apr 7, 2012 at 10:13 AM, Marcus > (OOo)<marcus.m...@wtnet.de> >>>> wrote: >>>>> >>>>> For our new release we will have a changed set of conditions: >>>>> >>>>> - new central mirror hosts for redirecting download requests >>>>> - therefore also a new set of mirror server that host our > builds >>>>> - new set of supported platforms and languages >>>>> - slighty changed file name schema >>>>> >>>>> To get this all under one hat, we have to improve the download > logic >>>>> that is >>>>> currently done by JavaScript. >>>>> >>>>> To fulfill the first condition the download requests have to be >>>>> split-up to >>>>> more than 1 central mirror redirector. >>>>> >>>>> Here is a suggestion for choosing when (by random number) to > redirect to >>>>> which mirror: >>>>> >>>>> http://www.openoffice.org/download/test/index_new_dl.html >>>>> >>>>> Test results: >>>>> - to make debugging easier I've included some screen output > and comments >>>>> - I've tested it locally with different combinations of > active/inactive >>>>> hosts and it works well >>>>> - the fallback method works well, too >>>>> - I've tested different percent values as ratio, but not > yet for the >>>>> 2nd case >>>>> >>>>> What do you think? >>>>> >>>> >>>> The logic on the test pages works for me. >>>> >>>> But two additional complexities: >>>> >>>> 1) MirrorBrain let's us link directly to a download file. We > then >>>> send the user to http://www.openoffice.org/download/contribute.html >>>> while the file is downloading. But SourceForge and Apache mirror >>>> systems take the user to a different page (not controlled by us). > So >>>> in those cases the user does not see the contribute.html page. >>> >>> >>> This should work also for SourceForge. The root path is always the > same. >>> We just need to add a subdir and file name. >>> >>> I don't know how to do it for Apache. >>> >>>> Since the contribute.html page has very useful information for the >>>> user, like links to the install instructions, information on > support, >>>> contributing to the project, etc., I think it is important that the >>>> user sees this information in all paths. >>> >>> >>> ACK >>> >>>> What could we do? Pop-up (or pop-under) a new HTML page? But that > is >>>> annoying to some users. >>> >>> >>> Right >>> >>>> The Apache and SF approaches both direct a user off of the >>>> OpenOffice.org website, which is risky. >>>> >>>> 2) What if we have more than three mirror systems? It sounds like > you >>>> prefer to keep MirrorBrain. That is fine with me. So maybe we have >>>> Apache, SF and MirrorBrain? >>> >>> >>> Yes, would be great. Another available system as possible backup is not >>> bad. >>> >>> For any change of the number of available systems we have to adapt the >>> JS logic. >>> >>>> Imagine an array of mirror networks, each with weights, in sorted >>>> order from smallest to largest. (or sort the array in code) >>>> >>>> Apache:1 >>>> MirrorBrain:2 >>>> SourceForge:3 >>>> >>>> TotalWeight = MirrorBrain + Apache + SourceForge == 6 >>>> >>>> x = rand() >>>> >>>> if (x< Apache/TotalWeight) >>>> doApache() >>>> else if (x< MirrorBrain/TotalWeight) >>>> doMirrorBrain() >>>> else >>>> doSourceForge() >>>> >>>> Something like that. >>> >>> >>> Redirecting due to weighted values looks good. But also this is working >>> with a fixed set of mirror hosts. A forth had to be build in and >>> therefore the logic has to be adapted. >>> >>> Thanks for your feedback. I'll adapt the script later in the > evening. >> >> >> I've adapted it now. But I'm not sure if it's working correct > with some >> disabled mirrors. >> > > I'm not sure my logic was right in the above code. For example, if > two mirrors have the same weight it would always pick the first one in > the array. > > But take a look at the approach in this article: > > http://www.javascriptkit.com/javatutors/weighrandom2.shtml > > I think that is much clearer and easier to use. > > Essentially, it says if you want weighted random selection with weights like: > > Apache:1 > MirrorBrain:2 > SourceForge:3 > > Then create an array with each item repeated according to its weight, so: > > Apache > MirrorBrain > MirrorBrain > SourceForge > SourceForge > SourceForge > > Then just pick a random number 0...length-1 and return the value at that > index. > > As for unavailable mirrors, or even unavailable servers within a > mirror network, is there really anything we can do? Other than tell > the user to refresh and try again? > > -Rob > >> Marcus >