diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 3293048a7..f28bf8cab 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -5659,8 +5659,8 @@ sub update { PTDEBUG && _d('Source op time:', $n, 'n /', $t, 's'); if ( $self->{avg_n} && $self->{avg_t} ) { - $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + $n; - $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + $t; + $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + ($n * (1 - $self->{weight})); + $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + ($t * (1 - $self->{weight})); $self->{avg_rate} = $self->{avg_n} / $self->{avg_t}; PTDEBUG && _d('Weighted avg rate:', $self->{avg_rate}, 'n/s'); } diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 1fed83eec..0e697eae7 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -9724,8 +9724,8 @@ sub update { PTDEBUG && _d('Source op time:', $n, 'n /', $t, 's'); if ( $self->{avg_n} && $self->{avg_t} ) { - $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + $n; - $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + $t; + $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + ($n * (1 - $self->{weight})); + $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + ($t * (1 - $self->{weight})); $self->{avg_rate} = $self->{avg_n} / $self->{avg_t}; PTDEBUG && _d('Weighted avg rate:', $self->{avg_rate}, 'n/s'); } diff --git a/lib/WeightedAvgRate.pm b/lib/WeightedAvgRate.pm index 138c1f6e1..3ae7fd65a 100644 --- a/lib/WeightedAvgRate.pm +++ b/lib/WeightedAvgRate.pm @@ -69,8 +69,8 @@ sub update { PTDEBUG && _d('Source op time:', $n, 'n /', $t, 's'); if ( $self->{avg_n} && $self->{avg_t} ) { - $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + $n; - $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + $t; + $self->{avg_n} = ($self->{avg_n} * $self->{weight}) + ($n * (1 - $self->{weight})); + $self->{avg_t} = ($self->{avg_t} * $self->{weight}) + ($t * (1 - $self->{weight})); $self->{avg_rate} = $self->{avg_n} / $self->{avg_t}; PTDEBUG && _d('Weighted avg rate:', $self->{avg_rate}, 'n/s'); } diff --git a/t/lib/WeightedAvgRate.t b/t/lib/WeightedAvgRate.t index 99ccd8790..beaefe07d 100644 --- a/t/lib/WeightedAvgRate.t +++ b/t/lib/WeightedAvgRate.t @@ -36,7 +36,7 @@ for (1..5) { } is( $rll->update(1000, 2), - 540, + 548, "Decrease rate, decrease n" );