about summary refs log tree commit homepage
path: root/lib/PublicInbox/Config.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-06-10 07:04:40 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:55:45 +0000
commitcfae078171fc1453be0795e4ba5f0252627ebba3 (patch)
tree743f0b1b5cf356bf018b5619619edd362dcdd0a8 /lib/PublicInbox/Config.pm
parent48180dbb004b5f59b2e80613b6fa2e5e869316f1 (diff)
downloadpublic-inbox-cfae078171fc1453be0795e4ba5f0252627ebba3.tar.gz
Finish up the IMAP-only portion of iterative config reloading,
which allows us to create all sub-ranges of an inbox up front.
The InboxIdler still uses ->each_inbox which will struggle with
100K inboxes.

Having messages in the top-level newsgroup name of an inbox will
still waste bandwidth for clients which want to do full syncs
once there's a rollover to a new 50K range.  So instead, make
every inbox accessible exclusively via 50K slices in the form of
"$NEWSGROUP.$UID_MIN-$UID_END".

This introduces the DummyInbox, which makes $NEWSGROUP
and every parent component a selectable, empty inbox.
This aids navigation with mutt and possibly other MUAs.

Finally, the xt/perf-imap-list maintainer test is broken, now,
so remove it.  The grep perlfunc is already proven effective,
and we'll have separate tests for mocking out ~100k inboxes.
Diffstat (limited to 'lib/PublicInbox/Config.pm')
-rw-r--r--lib/PublicInbox/Config.pm7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index c18c9c75..19535beb 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -105,13 +105,16 @@ sub iterate_start {
         $self->{-iter} = [ \$i, $cb, $arg ];
 }
 
-# for PublicInbox::DS::next_tick
+# for PublicInbox::DS::next_tick, we only call this is if
+# PublicInbox::DS is already loaded
 sub event_step {
         my ($self) = @_;
         my ($i, $cb, $arg) = @{$self->{-iter}};
         my $section = $self->{-section_order}->[$$i++];
         delete($self->{-iter}) unless defined($section);
-        $cb->($self, $section, $arg);
+        eval { $cb->($self, $section, $arg) };
+        warn "E: $@ in ${self}::event_step" if $@;
+        PublicInbox::DS::requeue($self) if defined($section);
 }
 
 sub lookup_newsgroup {