From f30f94236525a2360779f00ad56f82bff663a582 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 19 Nov 2024 21:47:51 +0000 Subject: [PATCH] treewide: warn on SQLite `PRAGMA optimize' failure While `PRAGMA optimize' isn't a strict requirement for proper functionality anywhere, displaying the failure can help detect bigger problems in the future in case of failing hardware. --- lib/PublicInbox/LeiMailSync.pm | 5 +++-- lib/PublicInbox/Msgmap.pm | 9 +++++++++ lib/PublicInbox/OverIdx.pm | 1 + lib/PublicInbox/SearchIdx.pm | 4 +--- lib/PublicInbox/V2Writable.pm | 7 ++----- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index c498421c9..d0f6d7b4f 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -49,8 +49,9 @@ sub lms_write_prepare { ($_[0]->{dbh} //= dbh_new($_[0])); $_[0] } sub lms_pause { my ($self) = @_; $self->{fmap} = {}; - my $dbh = delete $self->{dbh}; - eval { $dbh->do('PRAGMA optimize') } if $dbh; + my $dbh = delete $self->{dbh} // return; + eval { $dbh->do('PRAGMA optimize') }; + warn 'W: optimize ', $dbh->sqlite_db_filename, ': ', $@ if $@; } sub create_tables { diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index c4bc766d2..3101fd7dc 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -275,4 +275,13 @@ sub check_inodes { $self->{dbh} //= PublicInbox::Over::dbh_new($self, !$rw); } +sub mm_commit { + my ($self) = @_; + my $dbh = $self->{dbh} // return; + $dbh->commit; + eval { $dbh->do('PRAGMA optimize') }; + warn 'W: optimize ', $dbh->sqlite_db_filename, ': ', $@ if $@; + $dbh; +} + 1; diff --git a/lib/PublicInbox/OverIdx.pm b/lib/PublicInbox/OverIdx.pm index 4f8533f72..879ae0453 100644 --- a/lib/PublicInbox/OverIdx.pm +++ b/lib/PublicInbox/OverIdx.pm @@ -439,6 +439,7 @@ sub commit_lazy { delete $self->{txn} or return; $self->{dbh}->commit; eval { $self->{dbh}->do('PRAGMA optimize') }; + warn 'W: optimize ', $self->{dbh}->sqlite_db_filename, ': ', $@ if $@; } sub begin_lazy { diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 7829c7d47..48ba806a6 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -860,9 +860,7 @@ sub v1_checkpoint ($$;$) { } } ${$sync->{max}} = $self->{batch_bytes}; - - $self->{mm}->{dbh}->commit; - eval { $self->{mm}->{dbh}->do('PRAGMA optimize') }; + $self->{mm}->mm_commit; my $xdb = $self->{xdb}; if ($newest && $xdb) { my $cur = $xdb->get_metadata('last_commit'); diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index f70573595..721fbb4a0 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -522,11 +522,8 @@ sub checkpoint ($;$) { $self->{im}->barrier if $self->{im}; my $shards = $self->{idx_shards}; if ($shards) { - my $dbh = $self->{mm}->{dbh} if $self->{mm}; - - # SQLite msgmap data is second in importance - $dbh->commit if $dbh; - eval { $dbh->do('PRAGMA optimize') }; + # SQLite msgmap is second in importance (not in eidx) + my $dbh = $self->{mm} ? $self->{mm}->mm_commit : undef; # SQLite overview is third $self->{oidx}->commit_lazy; -- 2.47.2