1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
lei design notes
----------------
Daemon architecture
-------------------
The use of a persistent daemon works around slow startup time of
Perl. This is especially important for built-in support for
shell completion. It attempts to support inotify and EVFILT_VNODE
background monitoring of Maildir keyword changes.
If lei were reimplemented in a language with faster startup
time, the daemon architecture would likely remain since it also
lets us easily decouple the local storage from slow IMAP/NNTP
backends and allow us to serialize writes to git-fast-import,
SQLite, and Xapian across multiple processes.
The coupling of IMAP and NNTP network latency to local storage
is a current weakness of public-inbox-watch. Therefore, -watch
will likely adopt the daemon architecture of lei in the future.
Read/write vs read-only storage
-------------------------------
public-inboxes are intended to be written and read by different
Unix users. Commonly, a single Unix user or group will write to
a public-inbox, but the inbox will be served by a user with
read-only permissions (e.g. "www-data" or "nobody").
lei/store is intended to be read and written by a single user,
thus we can rely on the Write-Ahead-Log journal of SQLite to
improve performance: <https://sqlite.org/wal.html>
|