[InterNetNews/inn] c40ea6: ovsqlite: add mmapsize configuration
Julien ÉLIE
noreply at github.com
Tue Jun 2 21:04:12 UTC 2026
Branch: refs/heads/2.7
Home: https://github.com/InterNetNews/inn
Commit: c40ea666213ba0667e471528c796f114a66c74f9
https://github.com/InterNetNews/inn/commit/c40ea666213ba0667e471528c796f114a66c74f9
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/ovsqlite/ovsqlite-server.c
Log Message:
-----------
ovsqlite: add mmapsize configuration
close #337
Commit: f65f46e34e0b63fa2e97468217dab332f2f34e65
https://github.com/InterNetNews/inn/commit/f65f46e34e0b63fa2e97468217dab332f2f34e65
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/news.pod
Log Message:
-----------
Add a NEWS entry for the previous commit
see #337
Commit: 7aeb051f179e740c48aea2e74221b429bbca35be
https://github.com/InterNetNews/inn/commit/7aeb051f179e740c48aea2e74221b429bbca35be
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M configure.ac
Log Message:
-----------
Mention libcanlock in configure output for FreeBSD
Kevin Bowling recently created this package for FreeBSD, so let's
reference it!
Commit: 903ccb37943a86837e62d854b995a57a0b619c31
https://github.com/InterNetNews/inn/commit/903ccb37943a86837e62d854b995a57a0b619c31
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M tests/util/inndf.t
Log Message:
-----------
Add DragonFly as a BSD OS in inndf test suite
Commit: 6c2ae4b4cb31b3b32ac5741fe5c6efc3cf5cd46b
https://github.com/InterNetNews/inn/commit/6c2ae4b4cb31b3b32ac5741fe5c6efc3cf5cd46b
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/inn.conf.pod
M doc/pod/news.pod
M lib/messageid.c
M nnrpd/post.c
M tests/lib/messageid-t.c
Log Message:
-----------
Allow Message-IDs without any "@" with laxmid
In his attempt to inject old articles from BNews, Jesse Rehmer found it
useful to accept such articles in the laxmid syntax check.
Commit: 3811762b83f478559a4b195793856136274b3dd8
https://github.com/InterNetNews/inn/commit/3811762b83f478559a4b195793856136274b3dd8
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/ovsqlite/ovsqlite-server.c
M storage/ovsqlite/sql-main.sql
Log Message:
-----------
ovsqlite: Add WAL mode configuration
close #336
see #338
Commit: 875bb58c58866d6321dac9eee6d7f55a1d80e2a0
https://github.com/InterNetNews/inn/commit/875bb58c58866d6321dac9eee6d7f55a1d80e2a0
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M .gitignore
M MANIFEST
M Makefile.global.in
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/Makefile
M storage/ovsqlite/ovmethod.config
M storage/ovsqlite/ovmethod.mk
M storage/ovsqlite/ovsqlite-server.c
M storage/ovsqlite/ovsqlite.c
A storage/ovsqlite/sql-read.sql
M support/mkmanifest
M tests/Makefile
M tests/TESTS
A tests/overview/ovsqlite-integ.t
A tests/overview/ovsqlite-read-t.c
A tests/overview/ovsqlite-t.c
A tests/overview/ovsqlite-write-t.c
Log Message:
-----------
ovsqlite: Add direct reader mode for nnrpd with WAL
When WAL mode is enabled, nnrpd processes now open the overview database
directly with SQLITE_OPEN_READONLY instead of routing reads through
ovsqlite-server. This eliminates the IPC round-trip and the
single-threaded server bottleneck for read operations, allowing read
performance to scale with the number of concurrent readers.
Direct reader mode activates automatically when walmode is true in
ovsqlite.conf AND the database is actually in WAL mode (verified via
pragma journal_mode). Without WAL, behavior is unchanged -- readers
connect to ovsqlite-server as before to avoid EXCLUSIVE lock contention.
Key changes:
- ovsqlite.c: direct_open() opens the database read-only with schema
version validation, journal mode verification, decompression support,
and goto-based cleanup. Read functions (groupstats, getartinfo,
search) branch on direct_reader flag. Write operations return errors
in direct reader mode. Falls back to server path gracefully.
- ovsqlite-server.c: WAL checkpoint at shutdown uses PASSIVE first
(non-blocking, safe with readers connected) then TRUNCATE only if no
readers hold pins. Prevents server shutdown from hanging.
- ovsqlite.c: Fix pre-existing buffer leak in ovsqlite_close():
request and response buffers from server_connect() were never freed.
- sql-read.sql: read-only prepared statements with busy_timeout=10000
and query_only=1.
- New readercachesize config parameter (default 8 MB per reader).
Includes unit tests (WAL gating, write rejection) and integration tests
that start a real ovsqlite-server, write compressed data through it,
kill the server, and verify the direct reader can read it back correctly
including a server restart cycle.
see #338
Commit: aefdb3d888a6120eeb064d2ad03127e7dca707fa
https://github.com/InterNetNews/inn/commit/aefdb3d888a6120eeb064d2ad03127e7dca707fa
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite.c
M tests/overview/ovsqlite-t.c
Log Message:
-----------
call sqlite3_close_v2 when sqlite3_open_v2 fails
see #338
Commit: 0eadd8d77dfa35df3a426d594c2f0acef6b3a31f
https://github.com/InterNetNews/inn/commit/0eadd8d77dfa35df3a426d594c2f0acef6b3a31f
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/ovsqlite/ovsqlite-server.c
M storage/ovsqlite/sql-main.sql
Log Message:
-----------
ovsqlite: Add runtime WAL checkpoint to prevent unbounded WAL growth
When WAL mode is enabled with direct readers, the WAL file can grow
without bound if checkpointing never occurs between commits. Add a
configurable walcheckpointthreshold (default 1000 pages) that triggers
a TRUNCATE checkpoint during the server's idle period.
The checkpoint temporarily lowers the busy_timeout to 10 seconds
(from ~31 years) so the server waits for readers to finish their
current queries but doesn't stall indefinitely. Readers use
autocommit with sub-millisecond snapshots, so the checkpoint
typically completes in milliseconds.
Also fix notice() messages being lost after daemon() by registering
message_handlers_notice, remove the unused checkpoint_wal prepared
statement from sql-main.sql, and update close_db() comment.
see #338
Commit: 87c5029b47c83f24b2f1cb94756a7cd9bed317ec
https://github.com/InterNetNews/inn/commit/87c5029b47c83f24b2f1cb94756a7cd9bed317ec
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite-server.c
M storage/ovsqlite/sql-main.sql
Log Message:
-----------
ovsqlite: Set journal mode from open_db() based on configuration
Move pragma journal_mode out of the sql-main.sql preamble and into
open_db() where it is set conditionally: WAL when walmode is true,
PERSIST otherwise. Previously the preamble unconditionally set
PERSIST mode before open_db() re-set WAL, causing a pointless
WAL->PERSIST->WAL transition on every startup (or silently failing
if direct readers held the WAL open).
see #338
Commit: f70d3ff8e49718a103384b3eaa147f10d11e553b
https://github.com/InterNetNews/inn/commit/f70d3ff8e49718a103384b3eaa147f10d11e553b
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M Makefile
M contrib/makestorconf.in
M frontends/cnfsheadconf.in
M frontends/scanspool.in
M scripts/inncheck.in
Log Message:
-----------
Add new --warn-label-types perltidy code check
Report labels not written uppercase, unused, or referenced but missing.
Fix the occurrences of these nits, add the author of makestorconf, and
reformat inncheck with the latest upstream perltidy version.
Commit: 56634ed7beae2c5b55f72ca056cb975ff2da5db1
https://github.com/InterNetNews/inn/commit/56634ed7beae2c5b55f72ca056cb975ff2da5db1
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite.c
Log Message:
-----------
ovsqlite: Fix unused variable without zlib support
see #338
Commit: 79137c49ac40de0389603c878cd6c74388f372e1
https://github.com/InterNetNews/inn/commit/79137c49ac40de0389603c878cd6c74388f372e1
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
Log Message:
-----------
Homogenize POD formatting for default values
Commit: 713c073a87b8421d0faaa0ac6bd8dc4e2d93aa29
https://github.com/InterNetNews/inn/commit/713c073a87b8421d0faaa0ac6bd8dc4e2d93aa29
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M scripts/innreport_inn.pm
Log Message:
-----------
innreport: Recognize new notice logs for WAL mode
see #338
Commit: e41c58386368acac5f45295d998beed4862b78cd
https://github.com/InterNetNews/inn/commit/e41c58386368acac5f45295d998beed4862b78cd
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/news.pod
M storage/ovsqlite/ovsqlite.c
M tests/overview/ovsqlite-integ.t
M tests/overview/ovsqlite-read-t.c
M tests/overview/ovsqlite-t.c
M tests/overview/ovsqlite-write-t.c
Log Message:
-----------
Add NEWS entry for additions to ovsqlite.conf
Also reference the author of the new contributed files.
see #338
Commit: 8721849ed2de3e1810d2f963b0dae1a33a53234c
https://github.com/InterNetNews/inn/commit/8721849ed2de3e1810d2f963b0dae1a33a53234c
Author: Bo Lindbergh <blgl at stacken.kth.se>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite-server.c
Log Message:
-----------
ovsqlite: Improved error messages from sqlite3_open
Commit: ac97051a306b77f38489ce187ac240dd01f8ac39
https://github.com/InterNetNews/inn/commit/ac97051a306b77f38489ce187ac240dd01f8ac39
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M scripts/innreport_inn.pm
Log Message:
-----------
innreport: Do not count ctlinnd pause twice
Also remove old flush_file log.
Commit: 4f9a3c62a78a413ae8b0b35eb280432b04f68ca8
https://github.com/InterNetNews/inn/commit/4f9a3c62a78a413ae8b0b35eb280432b04f68ca8
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/ovsqlite/ovsqlite.c
Log Message:
-----------
Decrease the default value of readercachesize
The documentation recommends a value smaller than cachesize.
see #338
Commit: 5abd17395d08b8c60ae60e23bc4785050b9fb234
https://github.com/InterNetNews/inn/commit/5abd17395d08b8c60ae60e23bc4785050b9fb234
Author: Bo Lindbergh <blgl at stacken.kth.se>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite-server.c
Log Message:
-----------
ovsqlite: Ensure the base is in read/write mode
Paranoid verification of successful read/write database open.
Commit: 9a8cddb6ec74ab153eda988a03a2ea02a193e361
https://github.com/InterNetNews/inn/commit/9a8cddb6ec74ab153eda988a03a2ea02a193e361
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M .gitignore
M MANIFEST
M doc/pod/expireover.pod
M doc/pod/inn.conf.pod
M doc/pod/libinnhist.pod
M expire/expireover.c
M history/his.c
M history/hisinterface.h
M history/hisv6/hisv6-private.h
M history/hisv6/hisv6.c
M history/hisv6/hisv6.h
A include/inn/bloom.h
M include/inn/history.h
M include/inn/innconf.h
M include/inn/ov.h
M lib/Makefile
A lib/bloom.c
M lib/innconf.c
M samples/inn.conf.in
M storage/expire.c
M storage/ov.c
M storage/ovinterface.h
M support/mkmanifest
M tests/Makefile
M tests/TESTS
A tests/lib/bloom-hiswalk-t.c
A tests/lib/bloom-t.c
Log Message:
-----------
expireover: Bloom filter for fast history checks
Add a bloom filter for fast history existence checks.
expireover checks every article in the overview database against the
history file to detect orphaned entries. This requires a per-article
HISlookup, which does random pread() calls into the DBZ index and
history text file. On large spools (1B+ articles), this takes months.
Add a bloom filter that is built from a single sequential HISwalk of
the history file at startup. The bloom filter acts as a positive-only
cache in OVhisthasmsgid: bloom hits skip the slow HISlookup, bloom
misses fall through to HISlookup for correctness. False positives
are benign (an orphaned overview entry survives one extra cycle).
The bloom filter is controlled by the new inn.conf parameter
expirebloomfp, which specifies the false positive rate as a reciprocal
(default 10000 = 0.01%). Setting it to 0 disables the bloom filter.
Memory usage is approximately 20 bits per article (48 MB for 20M
articles, 2.4 GB for 1B articles).
Changes:
- Add lib/bloom.c and include/inn/bloom.h (bloom filter implementation
using enhanced double hashing, Kirsch & Mitzenmacher 2006)
- Extend HISwalk callback signature to include the message-ID HASH
(HISwalk has had zero callers since it was added in 2001)
- Set hisv6_walk ignore=true so corrupt lines don't abort the walk
- Add OVTOKENCACHE to OVctl for passing the bloom filter to
OVhisthasmsgid
- Add expirebloomfp to innconf
- Add unit tests (lib/bloom-t.c) and integration tests
(lib/bloom-hiswalk-t.c)
close #339
Commit: f2ab3bf8da6e8faf2f1fdbf9781bff91181ffbdc
https://github.com/InterNetNews/inn/commit/f2ab3bf8da6e8faf2f1fdbf9781bff91181ffbdc
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M backends/Makefile
M control/Makefile
M expire/Makefile
M history/Makefile
M innd/Makefile
M lib/Makefile
M nnrpd/Makefile
M storage/Makefile
Log Message:
-----------
Update make dependencies
see #339
Commit: 0aa4d16abac91a0b4be1a0711692dfb9a1f25ebd
https://github.com/InterNetNews/inn/commit/0aa4d16abac91a0b4be1a0711692dfb9a1f25ebd
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M history/his.c
M history/hisinterface.h
M history/hisv6/hisv6-private.h
M history/hisv6/hisv6.h
M include/inn/bloom.h
M include/inn/history.h
M include/inn/innconf.h
M include/inn/ov.h
M lib/bloom.c
M lib/innconf.c
M storage/expire.c
M storage/ov.c
M storage/ovinterface.h
M support/mkmanifest
M tests/lib/bloom-hiswalk-t.c
M tests/lib/bloom-t.c
Log Message:
-----------
Update authors and copyright years
see #339
Commit: c03b7157aa54e0a411609c0e44615f3b479e7253
https://github.com/InterNetNews/inn/commit/c03b7157aa54e0a411609c0e44615f3b479e7253
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/news.pod
Log Message:
-----------
Add a NEWS entry for the new Bloom filter
see #339
Commit: 642da9e2cbeb9d93dd51b53669ffe5283d7257e8
https://github.com/InterNetNews/inn/commit/642da9e2cbeb9d93dd51b53669ffe5283d7257e8
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M MANIFEST
M doc/pod/expireover.pod
M doc/pod/inn.conf.pod
M expire/expireover.c
M history/hisv6/hisv6.c
M include/inn/bloom.h
M lib/bloom.c
M storage/expire.c
M tests/lib/bloom-hiswalk-t.c
Log Message:
-----------
Uppercase Bloom
see #339
Commit: 3cc2a204d89447cb2956867ab1e77bc38195680d
https://github.com/InterNetNews/inn/commit/3cc2a204d89447cb2956867ab1e77bc38195680d
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M lib/snprintf.c
Log Message:
-----------
snprintf: Silence stringop-overflow GCC warning
Not worth the effort fixing. This function replacement will probably be
removed in a future release.
see #159
Commit: 819313718d7ef9edca595fbba879fe0e4824ad94
https://github.com/InterNetNews/inn/commit/819313718d7ef9edca595fbba879fe0e4824ad94
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M configure.ac
Log Message:
-----------
Silence 3 warnings which are not actual problems
class-varargs, c++-keyword and implicit-void-ptr-cast
Commit: c1d342532d512aaa989e877a222aa43c273badc0
https://github.com/InterNetNews/inn/commit/c1d342532d512aaa989e877a222aa43c273badc0
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M history/hisv6/hisv6.c
Log Message:
-----------
Silence overflow warning (mips)
The code works fine but emits a warning on mips because dev_t and
st_dev do not have the same size.
Silence the warning, and update the comment to mention what would be
the proper fix (an Autoconf check).
Commit: 6d238c1387646a194876ef3091e68f28d32df218
https://github.com/InterNetNews/inn/commit/6d238c1387646a194876ef3091e68f28d32df218
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M scripts/innreport_inn.pm
Log Message:
-----------
innreport: Recognize ovsqlite-server WAL notices
These notices are attributed to ovsqlite-server, not nnrpd.
see #338
Commit: a670115141cfc4b876597c280517f25958399e82
https://github.com/InterNetNews/inn/commit/a670115141cfc4b876597c280517f25958399e82
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/install.pod
M doc/pod/news.pod
M m4/blocklist.m4
M nnrpd/nnrpd.c
M nnrpd/nnrpd.h
M nnrpd/perm.c
Log Message:
-----------
blocklist.m4: Also recognize old blacklist name
It will help the transition introduced by the renaming.
see #335
Commit: 86d56da65231009f5e827739d1a0669bef91e145
https://github.com/InterNetNews/inn/commit/86d56da65231009f5e827739d1a0669bef91e145
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M MANIFEST
M doc/pod/expire.pod
M doc/pod/expireover.pod
M doc/pod/inn.conf.pod
M doc/pod/sm.pod
M expire/expire.c
M expire/expireover.c
M expire/expirerm.in
M expire/makehistory.c
M frontends/sm.c
M include/inn/innconf.h
M include/inn/ov.h
M include/inn/storage.h
A include/inn/tombstone.h
M innd/art.c
M lib/innconf.c
M samples/inn.conf.in
M storage/Makefile
M storage/expire.c
M storage/interface.c
M storage/ovinterface.h
A storage/tombstone.c
M support/mkmanifest
M tests/Makefile
M tests/TESTS
A tests/expire/tombstone-e2e.t
A tests/expire/tombstone-hisexpire-t.c
A tests/expire/tombstone-t.c
A tests/storage/cancel-tombstone-t.c
Log Message:
-----------
expire: skip per-article SMretrieve (cancel log)
Adds an opt-in (expiretombstone in inn.conf, default false)
side-channel that records every cancellation alongside the existing
storage and overview deletions, so a subsequent expire run can drop
matching history entries without doing per-article
SMretrieve(RETR_STAT) syscalls. At billion-article scale on
tradspool/timehash this turns a billion access(2) calls into a few
thousand hash lookups.
Two log files cooperate:
${pathdb}/expireover.tombstone -- written by expireover after each
successful inline SMcancel; in delayrm mode written up front and
promoted by expirerm after fastrm succeeds. Atomic .NEW -> final
rename under an exclusive non-blocking fcntl POSIX lock. A
crashed-or-failed previous run's leftover .NEW is verified
per-token via SMretrieve and merged into the next run, so partial
rmfile failures cannot orphan articles on disk.
${pathdb}/cancels.tombstone -- appended by innd's ARTcancel and by
sm -r through a new public SMcanceltombstone() helper. Shared
fcntl POSIX lock for appenders, exclusive for expire's snapshot
rename to .processing; one retry on EAGAIN closes the appender
vs consumer race window. POSIX O_APPEND atomicity for sub-
PIPE_BUF writes keeps single-line tokens from interleaving.
expire reads both files into one hashset, treats every article in
either log as already gone, and falls back to per-article SMretrieve
only for storage methods where SMprobe(SELFEXPIRE) is true (CNFS
wrap-around). An empty-but-present tombstone correctly says "no
cancels this cycle" and skips SMretrieve for everything; truly absent
files fall back to the slow path.
The format is line-per-token; readers ignore blank and #-prefixed
lines, and expireover writes "# inn-tombstone v1" as a forward-
compatibility header. Disk and memory footprint scale linearly:
~38 bytes per entry on disk, ~50 bytes in expire's hash table.
Tests cover the public library (tombstone_hash_create, _read,
_rename_for_processing, _present), SMcanceltombstone branches
including expiretombstone=false bypass and unwritable-pathdb
non-crash, two-file merge with dedup, comment-line skip,
HISexpire integration with a callback that mirrors EXPdoline's
full decision tree (kept / tombstoned / selfexpire-gone /
selfexpire-alive), and an end-to-end shell test that exercises
sm + cancels.tombstone + expiretombstone toggling.
Default is false; sites should opt in after validating the
option's behavior against their workload.
see #340
Commit: fd5fae2736807847e21df19477888af98c5e8d3b
https://github.com/InterNetNews/inn/commit/fd5fae2736807847e21df19477888af98c5e8d3b
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M Makefile
M scripts/inncheck.in
Log Message:
-----------
inncheck: Disambiguate the names of the labels
Spotten by the new reuse of label names warning (perltidy).
Commit: 8913f11acdadcab635b49f820e5d33c7da1b0538
https://github.com/InterNetNews/inn/commit/8913f11acdadcab635b49f820e5d33c7da1b0538
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/inn.conf.pod
M nnrpd/article.c
Log Message:
-----------
nnrpd: fast-path nnrpdcheckart via cancels.tombstone
When both innconf->expiretombstone and PERMaccessconf->nnrpdcheckart
are true, ARTinstorebytoken now consults ${pathdb}/cancels.tombstone
before calling SMretrieve(RETR_STAT). A token recorded in the log is
reported gone without a syscall; a token absent from the log is
trusted to still exist on storage methods that do not self-expire,
again without a syscall. Self-expiring backends (CNFS) still go
through SMretrieve because cyclic-buffer wrap-around bypasses the
tombstone.
The same trade-off as the expire-side fast path applies: the
tombstone catches in-band cancellations (innd ARTcancel, sm -r) but
not out-of-band events (manual filesystem deletes, corruption).
Admins running nnrpdcheckart=true to catch the brief overview-vs-
storage race during innd cancel processing, or to catch sm -r
artifacts before the next expireover cleans overview, still get those
paths. Loss is bounded to events the tombstone subsystem cannot
see, which is consistent with the contract documented for
expiretombstone.
Loading is lazy: the hashset is built on first call into
ARTinstorebytoken and the file is stat()ed on every subsequent call
to detect change, with reload only when mtime or size changes.
Statting a fixed path stays in the dentry cache and is trivially
cheap compared to the per-article SMretrieve syscalls the fast path
elides, so cancellations recorded by other processes become visible
to long-lived connections immediately. Freshness is keyed on both
mtime and size: mtime alone has 1-second granularity, so a rename-
and-recreate within the same second can land a fresh inode with
the cached mtime; size is monotonic-append between rotations and
catches every modification. Partial reads (mid-file ferror) leave
the cached freshness key untouched so the next call retries.
The SMprobe(SELFEXPIRE) probe is checked before the tombstone
refresh so pure-CNFS sites pay only that probe (a static per-method
attribute, no I/O) and skip both the hash lookup and the cache load
entirely.
Memory cost is dominated by the hashset (~50 bytes per cancel;
typical sites have hundreds of entries). When the file is missing
entirely, expiretombstone is off, or nnrpdcheckart is off, the
original SMretrieve path is unchanged.
inn.conf.pod's nnrpdcheckart entry now describes the fast-path
gating, the mtime/size-driven reload model, the manual-rm caveat
on non-self-expiring backends, and the OVERartcheck counter
becoming an undercount when the fast path is active.
see #340
Commit: 68524273479c8b300dbfa0209b6fb9f501c8c123
https://github.com/InterNetNews/inn/commit/68524273479c8b300dbfa0209b6fb9f501c8c123
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M .gitignore
M expire/Makefile
M frontends/Makefile
M nnrpd/Makefile
M storage/Makefile
Log Message:
-----------
Update .gitignore and make dependencies
see #340
Commit: 17fac84c736672361355ca7ce2821b837449e0f6
https://github.com/InterNetNews/inn/commit/17fac84c736672361355ca7ce2821b837449e0f6
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M frontends/sm.c
M include/inn/storage.h
M include/inn/tombstone.h
M scripts/innreport_inn.pm
M storage/interface.c
M storage/tombstone.c
M tests/expire/tombstone-e2e.t
M tests/expire/tombstone-hisexpire-t.c
M tests/expire/tombstone-t.c
M tests/storage/cancel-tombstone-t.c
Log Message:
-----------
Update authors and copyright years
see #340
Commit: fbaad3df6950a7db40c60a837ac829c51e04aeb3
https://github.com/InterNetNews/inn/commit/fbaad3df6950a7db40c60a837ac829c51e04aeb3
Author: Bo Lindbergh <blgl at stacken.kth.se>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M perl/INN/ovsqlite_client.pm
Log Message:
-----------
Fix the no-unix-sockets path of ovsqlite_client.pm
Commit: 198013062c0616a3731a4d8b0fe584337f68fd6f
https://github.com/InterNetNews/inn/commit/198013062c0616a3731a4d8b0fe584337f68fd6f
Author: Bo Lindbergh <blgl at stacken.kth.se>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M storage/ovsqlite/ovsqlite-server.c
M storage/ovsqlite/sql-main.sql
Log Message:
-----------
ovsqlite-server: Use sqlite3_randomness
It simplifies things!
Commit: 5f06fbeddd9ea2b36a784c84eabc83bf4727e9e8
https://github.com/InterNetNews/inn/commit/5f06fbeddd9ea2b36a784c84eabc83bf4727e9e8
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/news.pod
Log Message:
-----------
Update NEWS with the latest improvements
Commit: a9e3b4f2f8d6d167cd1b1fefe88f3a5ee0b44b11
https://github.com/InterNetNews/inn/commit/a9e3b4f2f8d6d167cd1b1fefe88f3a5ee0b44b11
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M lib/dbz.c
Log Message:
-----------
dbz: Fix NULL innconf deref with mmaped tables
dbz set() dereferenced innconf->nfswriter unconditionally when writing
to an INCORE_MMAP table, but innconf may be NULL (it defaults to NULL
and is only populated by innconf_read()). This segfaulted any caller
that opens history for writing without loading innconf first.
The crash surfaced under --enable-tagged-hash because hisv6 forces
pag_incore = INCORE_MMAP unconditionally in tagged-hash builds, whereas
non-tagged builds only use INCORE_MMAP when the HIS_MMAP flag is set.
The lib/bloom-hiswalk and expire/tombstone-hisexpire tests, which open
history for writing without setting up innconf, segfaulted only in
tagged-hash builds.
Guard the dereference with a NULL check, matching the idiom already used
in other libinn/storage code. nfswriter defaults to false, so a NULL
innconf correctly skips the NFS-writer msync optimization.
close #339
close #341
Commit: 5494cc8d85b56cc3e9ee6d1beda6f77f96557825
https://github.com/InterNetNews/inn/commit/5494cc8d85b56cc3e9ee6d1beda6f77f96557825
Author: Kevin Bowling <kevin.bowling at kev009.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/ovsqlite.pod
M samples/ovsqlite.conf
M storage/ovsqlite/ovsqlite.c
Log Message:
-----------
ovsqlite: honor mmapsize in the direct reader path
The mmapsize parameter was only applied by ovsqlite-server. When WAL
mode is enabled, nnrpd readers open the database directly via
direct_open(), bypassing the server, so they never set pragma mmap_size.
Read mmapsize in direct_open() and apply it to the read connection,
mirroring the server. Besides the read-performance benefit, memory-
mapping lets multiple nnrpd readers share the same physical pages through
the OS page cache. Document the caveat that this helps little on ZFS or
other filesystems without a unified buffer cache, where the mapped pages
would be cached twice.
close #342
Commit: c894ca85d107ace9b99553f39f5c2375f44aeced
https://github.com/InterNetNews/inn/commit/c894ca85d107ace9b99553f39f5c2375f44aeced
Author: Christian Clauss <cclauss at me.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M .github/workflows/build.yaml
Log Message:
-----------
Update GitHub Actions checkout from v4 to v 6
https://github.com/actions/checkout/releases is currently v6.0.2
Why: Stop building on EOL versions of Node.js.
Fixes: Annotation on https://github.com/InterNetNews/inn/actions/runs/26530786871/job/78146587295
> Node.js 20 actions are deprecated. The following actions
are running on Node.js 20 and may not work as expected:
actions/checkout at v4. Actions will be forced to run with Node.js 24
by default starting June 2nd, 2026. Node.js 20 will be removed from
the runner on September 16th, 2026. Please check if updated versions
of these actions are available that support Node.js 24. To opt into
Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true
environment variable on the runner or in your workflow file. Once
Node.js 24 becomes the default, you can temporarily opt out by
setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For
more information, see:
https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners
close #343
Commit: d4f5045bf595ede2610bb56a0710a5ee8eb474ab
https://github.com/InterNetNews/inn/commit/d4f5045bf595ede2610bb56a0710a5ee8eb474ab
Author: Julien ÉLIE <Julien-Elie at users.noreply.github.com>
Date: 2026-06-02 (Tue, 02 Jun 2026)
Changed paths:
M doc/pod/expire.pod
M doc/pod/expireover.pod
Log Message:
-----------
Mention groupbaseexpiry along with expiretombstone
see #340
Compare: https://github.com/InterNetNews/inn/compare/fce56b09800f...d4f5045bf595
To unsubscribe from these emails, change your notification settings at https://github.com/InterNetNews/inn/settings/notifications
More information about the inn-committers
mailing list