Changeset 5780

Show
Ignore:
Timestamp:
01/29/08 15:16:44 (5 years ago)
Author:
kazuho
Message:

add load property, to control avg. load of the replication

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/DBIx-Replicate/trunk/lib/DBIx/Replicate.pm

    r5771 r5780  
    88use DBI; 
    99use List::Util qw/min/; 
     10use Time::HiRes qw/time sleep/; 
    1011 
    1112use base qw/Exporter/; 
     
    2728    $args->{block} = 1000 
    2829        unless $args->{block}; 
     30    $args->{load} = 1 
     31        unless $args->{load}; 
    2932    my $columns_str = join ',', @{$args->{columns}}; 
    3033    my $extra_cond = $args->{extra_cond} ? "and ($args->{extra_cond})" : ''; 
     
    4144        my $last_key; 
    4245        while (1) { 
     46            my $start = time; 
    4347            $sql = sprintf( 
    4448                'select %s from %s where %s=(select min(%s) from %s where %s) %s', 
     
    9599            $args->{dest_conn}->commit 
    96100                or die $args->{dest_conn}->errstr; 
     101            sleep(min(time - $start, 0) / ($args->{load} - 1)) 
     102                if $args->{load}; 
    97103        } 
    98104        $sql = sprintf( 
     
    117123        my ($start_srcconn, $start_destconn) = qw/1 1/; 
    118124        while (1) { 
     125            my $start = time; 
    119126            $sql = "select $columns_str from $args->{src_table} where $start_srcconn $extra_cond order by $order_by limit $args->{block}"; 
    120127            my $rows = $args->{src_conn}->selectall_arrayref( 
     
    159166            $args->{dest_conn}->commit 
    160167                or die $args->{dest_conn}->errstr; 
     168            sleep(min(time - $start, 0) / ($args->{load} - 1)) 
     169                if $args->{load}; 
    161170            ($start_srcconn, $start_destconn) 
    162171                = ($next_srcconn, $next_destconn);