Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id 7781D9FB44F for ; Mon, 19 Mar 2007 06:01:33 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-new, port 10024) with ESMTP id 99876-04; Mon, 19 Mar 2007 06:01:26 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from svr2.hagander.net (svr2.hagander.net [88.198.128.226]) by postgresql.org (Postfix) with ESMTP id 4DDD69FB312; Mon, 19 Mar 2007 06:01:25 -0300 (ADT) Received: by svr2.hagander.net (Postfix, from userid 1000) id 35E91DCC6F1; Mon, 19 Mar 2007 10:01:24 +0100 (CET) Date: Mon, 19 Mar 2007 10:01:24 +0100 From: Magnus Hagander To: Dave Page Cc: PostgreSQL www Subject: Re: Remembering the last used mirror Message-ID: <20070319090124.GB8049@svr2.hagander.net> References: <200703182034470000@268949553> <45FDB25C.4010508@hagander.net> <45FE4F24.9040406@postgresql.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="6TrnltStXW4iwmi0" Content-Disposition: inline In-Reply-To: <45FE4F24.9040406@postgresql.org> User-Agent: Mutt/1.5.11 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.015 tagged_above=0 required=5 tests=AWL, BAYES_50 X-Spam-Level: X-Archive-Number: 200703/37 X-Sequence-Number: 11734 --6TrnltStXW4iwmi0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Mar 19, 2007 at 08:51:48AM +0000, Dave Page wrote: > Magnus Hagander wrote: > > Dave Page wrote: > >>> (Or for that matter, does anybody think this whole > >>> thing is a crappy idea?) > >> Yes, we used to do that and it was a real pita that caused nothing but trouble. > > > > Really? That must've been before my time, 'cuz I don't remember any of > > that. > > It almost certainly was, back when Vince did most of the web stuff. That was certainly way back. And I *do* remember there being problems around that. I thoguht yo were referring to ftp downloads specifically. > > Out of curiosity, exactly what were the issues, if you recall? > > (Not questioning you, just want to know given that so many others to it > > that way..) > > Well it was slightly different back then so what you have now may be OK > - I just want to make sure it's gonna work this time before > inadvertently annoying people! :-) Yeah, that's why I brought it up before I committed anything. > Back then, the front page of the website was an auto-redirect to one of > the mirror sites. This used to lead to two problems: > > - If the site you got directed to was down or slow, it was a nightmare > to get to another mirror because the auto-redirect kicked in instantly > when you hit the back button. This shouldn't be a problem this time as > now I'm in a position to look at what you've done, I can see you display > the page, a warning and give a delay before redirecting. Right, this is the very reason why I want to discuss that timeout of 5 seconds. It will direct you off there in 5 seconds. If the site is very slow, you can click on another link. If the site is 404 (but hasn't been picked up by the mirror checkign script yet), you will get redirected to that 404 page. But at least in my tests with firefox, if I then hit back, I get to the mirror list and it will *not* redirect me again. But that's a client-side thing, so it might be different in different browsers. > - After the auto-redirect had kicked in, some browsers (notably, IE) > misbehave and won't respond to the stop or back button for some time - > seemingly whilst they wait for the initial connection to succeed or > timeout. This could also be a PITA, but should be purely a browser issue > with the delay you've included (it magnified the annoyance levels caused > by the bad design previously). I haven't seen that with any other sites, so maybe it's just been fixed in more recent versions of the browsers. There have been a couple coming out since that time :-) > So I *think* the main issues that auto-redirecting had last time round > are not problems with your code. > > One thought that does spring to mind though, what happens if the mirror > used previously has dropped out of use when you return? Will it still > default to it? No, then it will not show a default mirror at all - it will look like you had never picked a mirror. I'll attach a diff for the actual code, so you can check that part out. Should've done that the first time :-) //Magnus --6TrnltStXW4iwmi0 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="autodownload.patch" Index: template/common.html =================================================================== RCS file: /usr/local/cvsroot/pgweb/portal/template/common.html,v retrieving revision 1.37 diff -c -r1.37 common.html *** template/common.html 12 Mar 2007 16:00:46 -0000 1.37 --- template/common.html 19 Mar 2007 09:00:18 -0000 *************** *** 18,23 **** --- 18,26 ---- + + {extra_header_data} + Index: template/download.html =================================================================== RCS file: /usr/local/cvsroot/pgweb/portal/template/download.html,v retrieving revision 1.10 diff -c -r1.10 download.html *** template/download.html 18 Mar 2007 17:55:59 -0000 1.10 --- template/download.html 19 Mar 2007 09:00:18 -0000 *************** *** 16,28 ****

func_lang("Download PostgreSQL from the primary site")

func_lang("We think these mirrors are near you:")

! --- 16,37 ----

func_lang("Download PostgreSQL from the primary site")

+ +

func_lang("You have used this mirror before:")

+

+ {urlh} +

+

Your download will start automatically from this mirror in 5 seconds unless you select + another mirror in the list below.

+ +

func_lang("We think these mirrors are near you:")

{country}
{country}
http | ftp
 
 
! *************** *** 38,44 **** ! --- 47,53 ---- ! Index: system/redir.php =================================================================== RCS file: /usr/local/cvsroot/pgweb/portal/system/redir.php,v retrieving revision 1.5 diff -c -r1.5 redir.php *** system/redir.php 12 Mar 2007 14:51:43 -0000 1.5 --- system/redir.php 19 Mar 2007 09:00:18 -0000 *************** *** 2,8 **** require_once './global/settings.php'; // Get the URL and hostname ! $url = urldecode($_SERVER['QUERY_STRING']); $bits = parse_url($url); $scheme = $bits['scheme']; $host = $bits['host']; --- 2,18 ---- require_once './global/settings.php'; // Get the URL and hostname ! if (isset($_GET['url'])) { ! $url = $_GET['url']; ! if (isset($_GET['setmir']) && isset($_GET['typ'])) { ! if ($_GET['typ'] == 'h' || $_GET['typ'] == 'f') { ! setcookie('dlmirror', intval($_GET['setmir']), time()+60*60*24*300); ! setcookie('dlmirrortype', $_GET['typ'], time()+60*60*24*300); ! } ! } ! } ! else ! $url = urldecode($_SERVER['QUERY_STRING']); $bits = parse_url($url); $scheme = $bits['scheme']; $host = $bits['host']; Index: system/page/mirrors.php =================================================================== RCS file: /usr/local/cvsroot/pgweb/portal/system/page/mirrors.php,v retrieving revision 1.13 diff -c -r1.13 mirrors.php *** system/page/mirrors.php 18 Mar 2007 17:55:59 -0000 1.13 --- system/page/mirrors.php 19 Mar 2007 09:00:18 -0000 *************** *** 11,16 **** --- 11,22 ---- function Render() { $file = isset($_GET['file'])?$_GET['file']:''; + if (isset($_COOKIE['dlmirror']) && isset($_COOKIE['dlmirrortype'])) { + $lastmirrid = intval($_COOKIE['dlmirror']); + $lastmirrtype = $_COOKIE['dlmirrortype']; + } + else + $lastmirrid = -1; $this->tpl->touchBlock('ftp_mirror_greeting'); *************** *** 18,24 **** $this->tpl->setVariable('file', htmlentities($file)); ! $rs = $this->pg_query("SELECT CASE WHEN mirror_index = 0 THEN ''::text ELSE mirror_index::text END || '.' || country_code || '.postgresql.org' AS hostname, host_port AS port, host_path AS path, country_name AS country, country_code, alternate_protocol FROM mirrors WHERE mirror_type='ftp' AND mirror_active AND NOT mirror_private AND mirror_dns AND mirror_last_rsync > (now() - '48 hrs'::interval) ORDER BY country_name, alternate_protocol DESC, mirror_index"); if (pg_num_rows($rs) == 0) throw new Exception('No mirrors were found'); --- 24,30 ---- $this->tpl->setVariable('file', htmlentities($file)); ! $rs = $this->pg_query("SELECT CASE WHEN mirror_index = 0 THEN ''::text ELSE mirror_index::text END || '.' || country_code || '.postgresql.org' AS hostname, host_port AS port, host_path AS path, country_name AS country, country_code, alternate_protocol, id FROM mirrors WHERE mirror_type='ftp' AND mirror_active AND NOT mirror_private AND mirror_dns AND mirror_last_rsync > (now() - '48 hrs'::interval) ORDER BY country_name, alternate_protocol DESC, mirror_index"); if (pg_num_rows($rs) == 0) throw new Exception('No mirrors were found'); *************** *** 35,41 **** $this->tpl->setVariable(array( 'url' => urlencode('ftp://ftp' . $mirror['hostname'] . (0 < intval($mirror['port'])? ':' . $mirror['port']: '') . $mirror['path'] . $mirror['file']), 'img' => str_replace(' ', '', $mirror['country']) . '.gif', ! 'country' => ucwords($mirror['country']) )); if ($mirror['alternate_protocol'] == 't') $this->tpl->setVariable('httpurl', 'http://ftp' . $mirror['hostname'] . $mirror['path'] . $mirror['file']); --- 41,48 ---- $this->tpl->setVariable(array( 'url' => urlencode('ftp://ftp' . $mirror['hostname'] . (0 < intval($mirror['port'])? ':' . $mirror['port']: '') . $mirror['path'] . $mirror['file']), 'img' => str_replace(' ', '', $mirror['country']) . '.gif', ! 'country' => ucwords($mirror['country']), ! 'mirid' => $mirror['id'] )); if ($mirror['alternate_protocol'] == 't') $this->tpl->setVariable('httpurl', 'http://ftp' . $mirror['hostname'] . $mirror['path'] . $mirror['file']); *************** *** 52,57 **** --- 59,86 ---- $this->tpl->parse('std_mirror_row_loop'); } } + if ($lastmirrid == $mirror['id']) { + // used this mirror the last time + if ($lastmirrtype == 'f') + $host = 'ftp://ftp' . $mirror['hostname']; + elseif ($lastmirrtype == 'h') { + if ($mirror['alternate_protocol'] == 't') + $host = 'http://ftp' . $mirror['hostname']; + else + continue; // requested http, but http no longer available + } + else + continue; // Unknown type, so don't show it at all + + $url = $host . (0 < intval($mirror['port'])? ':' . $mirror['port']: '') . $mirror['path'] . $mirror['file']; + $this->tpl->setVariable(array( + 'url' => urlencode($url), + 'urlh' => htmlentities($host) + )); + $this->tpl->parse('last_mirror_block'); + + $this->tpl->setVariable('extra_header_data', ''); + } } // Add some empty cells if needed --6TrnltStXW4iwmi0--
{country}
{country}
http | ftp
 
 
{country}
{country}
http | ftp
 
 
{country}
{country}
http | ftp