]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
v2writable: simplify epoch directory generation
authorEric Wong <e@80x24.org>
Tue, 17 Dec 2024 21:27:36 +0000 (21:27 +0000)
committerEric Wong <e@80x24.org>
Wed, 18 Dec 2024 21:42:26 +0000 (21:42 +0000)
As noted in a now-removed comment, InboxWritable->git_dir_latest
seems redundant and an unnecessary function.  Instead, we can
use MultiGit->epoch_dir for these v2-only (non-extindex)
codepaths.

lib/PublicInbox/InboxWritable.pm
lib/PublicInbox/V2Writable.pm

index 8e95cb2866403fa195f2ad22717042a18e1fd1b5..b995a8adc5dc3ac69a7af669101ebe7b0d0052d1 100644 (file)
@@ -172,13 +172,6 @@ sub cleanup ($) {
        delete @{$_[0]}{qw(over mm git search)};
 }
 
-# v2+ only, XXX: maybe we can just rely on ->max_git_epoch and remove
-sub git_dir_latest {
-       my ($self, $max) = @_;
-       defined($$max = $self->max_git_epoch) ?
-               "$self->{inboxdir}/git/$$max.git" : undef;
-}
-
 # for unconfigured inboxes
 sub detect_indexlevel ($) {
        my ($ibx) = @_;
index 15945b355044febd91c09ee15049a75ba79041ba..194524b7196f71d4d2d9d421b80c13a2dd78e022 100644 (file)
@@ -630,22 +630,20 @@ sub importer {
                        return $self->import_init($git, 0);
                }
        }
-       my $epoch = 0;
-       my $max;
-       my $latest = $self->{ibx}->git_dir_latest(\$max);
-       if (defined $latest) {
-               my $git = PublicInbox::Git->new($latest);
+       my $epoch = $self->{ibx}->max_git_epoch;
+       if (defined $epoch) { # use existing if not too big
+               my $git = PublicInbox::Git->new(
+                       $self->{mg}->epoch_dir."/$epoch.git");
                my $packed_bytes = $git->packed_bytes;
                my $unpacked_bytes = $packed_bytes / $PACKING_FACTOR;
 
-               if ($unpacked_bytes >= $self->{rotate_bytes}) {
-                       $epoch = $max + 1;
-               } else {
-                       $self->{epoch_max} = $max;
+               if ($unpacked_bytes < $self->{rotate_bytes}) { # ok, space left
+                       $self->{epoch_max} = $epoch;
                        return $self->import_init($git, $packed_bytes);
                }
+               ++$epoch; # too big, start a new epoch on fall through
        }
-       $self->{epoch_max} = $epoch;
+       $self->{epoch_max} = $epoch //= 0;
        my $dir = $self->{mg}->add_epoch($epoch);
        $self->import_init(PublicInbox::Git->new($dir), 0);
 }
@@ -1211,8 +1209,8 @@ sub index_sync {
        local $self->{need_checkpoint} = 0;
        return xapian_only($self, $opt) if $opt->{xapian_only};
 
-       my $epoch_max;
-       my $latest = $self->{ibx}->git_dir_latest(\$epoch_max) // return;
+       my $epoch_max = $self->{ibx}->max_git_epoch // return;
+       my $latest = $self->{mg}->epoch_dir."/$epoch_max.git";
        if ($opt->{'fast-noop'}) { # nanosecond (st_ctim) comparison
                use Time::HiRes qw(stat);
                if (my @mm = stat("$self->{ibx}->{inboxdir}/msgmap.sqlite3")) {