From: Eric Wong Date: Tue, 17 Dec 2024 21:27:36 +0000 (+0000) Subject: v2writable: simplify epoch directory generation X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a4a3036d8fdd891ae8c10a5eae90736a804eecf;p=thirdparty%2Fpublic-inbox.git v2writable: simplify epoch directory generation 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. --- diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm index 8e95cb286..b995a8adc 100644 --- a/lib/PublicInbox/InboxWritable.pm +++ b/lib/PublicInbox/InboxWritable.pm @@ -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) = @_; diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 15945b355..194524b71 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -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")) {