Changeset 108


Ignore:
Timestamp:
12/10/10 19:54:46 (13 years ago)
Author:
nanardon
Message:
  • use a timeout to not overload SQL server
Location:
server/trunk/web
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • server/trunk/web/lib/Sophie/Controller/0Explorer.pm

    r107 r108  
    22use Moose; 
    33use namespace::autoclean; 
     4use DBD::Pg qw(:async); 
     5use Sophie::Base::Async; 
    46 
    57BEGIN {extends 'Catalyst::Controller'; } 
     
    3133            $c->session->{__explorer}, 1 ]); 
    3234    my %uniq; 
    33     foreach ( 
    34         $c->model('Base') 
    35         ->resultset('Files') 
    36         ->search( 
    37             { 
    38                 dirname => '/' . ($dir ? "$dir/" : ''), 
    39                 ($rsdist  
    40                     ? (pkgid => { IN => $rsdist->get_column('pkgid')->as_query, },) 
    41                     : ()), 
    42                 ($c->req->param('filename') 
    43                     ? ( basename => { LIKE => $c->req->param('filename') . '%' } ) 
    44                     : ()), 
    45             }, 
    46             { 
    47                 #order_by => [ 'basename' ], 
    48                 #group_by => [ 'basename' ],  
    49                 select => [ 'basename' ], 
    50             } 
    51         )->get_column('basename')->all) { 
    52         $uniq{$_} = 1; 
     35 
     36    my $query = Sophie::Base::Async->new( 
     37        $c->model('Base'), 
     38        timeout => 10, 
     39        build => sub { $_[0] 
     40            ->resultset('Files') 
     41            ->search( 
     42                { 
     43                    dirname => '/' . ($dir ? "$dir/" : ''), 
     44                    ($rsdist  
     45                        ? (pkgid => { IN => $rsdist->get_column('pkgid')->as_query, },) 
     46                        : ()), 
     47                    ($c->req->param('filename') 
     48                        ? ( basename => { LIKE => $c->req->param('filename') . '%' } ) 
     49                        : ()), 
     50                }, 
     51                { 
     52                    #order_by => [ 'basename' ], 
     53                    #group_by => [ 'basename' ],  
     54                    select => [ 'basename' ], 
     55                } 
     56            ) 
     57            ->get_column('basename') 
     58        }, 
     59    ); 
     60 
     61    if(my $sth = $query->wait_result) { 
     62        while (my $res = $sth->fetchrow_hashref()) { 
     63            $uniq{$res->{basename}} = 1; 
     64        } 
     65    } else { 
     66        $c->stash->{timeout} = 1; 
    5367    } 
     68 
    5469    $c->stash->{xmlrpc} = [ sort keys %uniq ];  
    5570} 
  • server/trunk/web/root/templates/html/0explorer/dir.tt

    r38 r108  
    11<!-- $Id --> 
    22 
     3[% IF timeout %] 
     4[% ELSE %] 
    35[% IF xmlrpc.size %] 
    46[% FOREACH dir = xmlrpc %] 
     
    911No sub directories 
    1012[% END %] 
     13[% END %] 
Note: See TracChangeset for help on using the changeset viewer.