about summary refs log tree commit homepage
path: root/lib/PublicInbox/Inbox.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-06-11 00:57:53 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:58:30 +0000
commit2a717d13f10fcdc69921d80cf94c47a694a175d4 (patch)
tree188b2834628fd448f9397daefb4a8a77c00cdce1 /lib/PublicInbox/Inbox.pm
parent3d52c093ad5ce7a32f8842d9ae020712f9786352 (diff)
downloadpublic-inbox-2a717d13f10fcdc69921d80cf94c47a694a175d4.tar.gz
For v1 inboxes (and possibly v2 in the future, for VACUUM),
public-inbox-compact replaces over.sqlite3 with a new file.

This currently doesn't need an extra inotify watch descriptor
(or FD for kevent) at the moment, so it can coexist nicely for
systems w/o IO::KQueue or Linux::Inotify2.
Diffstat (limited to 'lib/PublicInbox/Inbox.pm')
-rw-r--r--lib/PublicInbox/Inbox.pm14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm
index b2b0b56f..7d5e0483 100644
--- a/lib/PublicInbox/Inbox.pm
+++ b/lib/PublicInbox/Inbox.pm
@@ -31,7 +31,7 @@ sub cleanup_task () {
         for my $ibx (values %$CLEANUP) {
                 my $again;
                 if ($have_devel_peek) {
-                        foreach my $f (qw(mm search over)) {
+                        foreach my $f (qw(mm search)) {
                                 # we bump refcnt by assigning tmp, here:
                                 my $tmp = $ibx->{$f} or next;
                                 next if Devel::Peek::SvREFCNT($tmp) > 2;
@@ -45,9 +45,9 @@ sub cleanup_task () {
                                 $again = 1 if $git->cleanup;
                         }
                 }
+                check_inodes($ibx);
                 if ($have_devel_peek) {
-                        $again ||= !!($ibx->{over} || $ibx->{mm} ||
-                                      $ibx->{search});
+                        $again ||= !!($ibx->{mm} || $ibx->{search});
                 }
                 $next->{"$ibx"} = $ibx if $again;
         }
@@ -407,9 +407,17 @@ sub unsubscribe_unlock {
         delete $self->{unlock_subs}->{$ident};
 }
 
+sub check_inodes ($) {
+        my ($self) = @_;
+        for (qw(over)) { # TODO: search, mm
+                $self->{$_}->check_inodes if $self->{$_};
+        }
+}
+
 # called by inotify
 sub on_unlock {
         my ($self) = @_;
+        check_inodes($self);
         my $subs = $self->{unlock_subs} or return;
         for (values %$subs) {
                 eval { $_->on_inbox_unlock($self) };