diff options
author | Eric Wong <e@80x24.org> | 2021-02-21 07:41:34 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-02-21 08:59:33 +0000 |
commit | dda6a67ce8865641edad51f83aab2eb2fc27bda8 (patch) | |
tree | b9325f65c2fa77f3a11d40cd5c463b700bca5c42 /lib/PublicInbox/NetReader.pm | |
parent | 9dafc7333ee43a77ad18629d1e30195b4a7ea482 (diff) | |
download | public-inbox-dda6a67ce8865641edad51f83aab2eb2fc27bda8.tar.gz |
This lets us make use of multiple cores on IMAP and Maildir backed by SSD (or better) storage. This benefits IMAP stores with high network latency, but may still penalize IMAP servers with rotational storage.
Diffstat (limited to 'lib/PublicInbox/NetReader.pm')
-rw-r--r-- | lib/PublicInbox/NetReader.pm | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index 4c412491..0956d5da 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -363,8 +363,11 @@ sub _imap_fetch_all ($$$) { } return if $l_uid >= $r_uid; # nothing to do $l_uid ||= 1; - - warn "# $uri fetching UID $l_uid:$r_uid\n" unless $self->{quiet}; + my ($mod, $shard) = @{$self->{shard_info} // []}; + unless ($self->{quiet}) { + my $m = $mod ? " [(UID % $mod) == $shard]" : ''; + warn "# $uri fetching UID $l_uid:$r_uid$m\n"; + } $mic->Uid(1); # the default, we hope my $bs = $self->{imap_opt}->{$sec}->{batch_size} // 1; my $req = $mic->imap4rev1 ? 'BODY.PEEK[]' : 'RFC822.PEEK'; @@ -391,6 +394,8 @@ sub _imap_fetch_all ($$$) { $l_uid = $uids->[-1] + 1; # for next search my $last_uid; my $n = $self->{max_batch}; + + @$uids = grep { ($_ % $mod) == $shard } @$uids if $mod; while (scalar @$uids) { my @batch = splice(@$uids, 0, $bs); $batch = join(',', @batch); |