about summary refs log tree commit homepage
DateCommit message (Collapse)
2018-02-28use PublicInbox::MIME consistently
It works around some bugs in older Email::MIME which we'll find useful.
2018-02-28searchidxpart: binmode
Probably unnecessary, but set binmode for consistency across platforms.
2018-02-28v2writable: cleanup unused pipes in partitions
Leaking these pipes to child processes wasn't harmful, but made determining relationships and dataflow between processes more confusing.
2018-02-28v2/ui: retry DB reopens in a few more places
Relying more on Xapian requires retrying reopens in more places to ensure it does not fall down and show errors to the user.
2018-02-28v2/ui: some hacky things to get the PSGI UI to show up
Fortunately, Xapian multiple database support makes things easier but we still need to handle the skeleton DB separately.
2018-02-22v2writable: warn on duplicate Message-IDs
This should give us an idea of how much a problem deduplication will be.
2018-02-22searchidxpart: increase pipe size for partitions
We want to reduce the time in the main V2Writable process spends writing to the pipe, as the main process itself is the primary source of contention. While we're at it, always flush after writing to ensure the child sees it at once. (Grr... Perl doesn't use writev)
2018-02-22v2writable: round-robin to partitions based on article number
Instead of relying on the git object_id hash to partition, round-robin to these partitions based on the NNTP article number. This reduces the partition pipes as a source of contention when two (or more) sequential messages end up going to the same partition.
2018-02-22v2: parallelize Xapian indexing
The parallelization requires splitting Msgmap, text+term indexing, and thread-linking out into separate processes. git-fast-import is fast, so we don't bother parallelizing it. Msgmap (SQLite) and thread-linking (Xapian) must be serialized because they rely on monotonically increasing numbers (NNTP article number and internal thread_id, respectively). We handle msgmap in the main process which drives fast-import. When the article number is retrieved/generated, we write the entire message to per-partition subprocesses via pipes for expensive text+term indexing. When these per-partition subprocesses are done with the expensive text+term indexing, they write SearchMsg (small data) to a shared pipe (inherited from the main V2Writable process) back to the threader, which runs its own subprocess. The number of text+term Xapian partitions is chosen at import and can be made equal to the number of cores in a machine. V2Writable --> Import -> git-fast-import \-> SearchIdxThread -> Msgmap (synchronous) \-> SearchIdxPart[n] -> SearchIdx[*] \-> SearchIdxThread -> SearchIdx ("threader", a subprocess) [* ] each subprocess writes to threader
2018-02-22import_vger_from_mbox: use PublicInbox::MIME and avoid clobbering
It is less confusing without the clobber assignment; and PublicInbox::MIME exists to workaround bugs in older Email::MIME (which is in Debian 9 (stretch))
2018-02-22import_vger_from_inbox: allow "-V" option
This will let us quickly test between v2 and v1 inboxes.
2018-02-20v2: support Xapian + SQLite indexing
This is too slow, currently. Working with only 2017 LKML archives: git-only: ~1 minute git + SQLite: ~12 minutes git+Xapian+SQlite: ~45 minutes So yes, it looks like we'll need to parallelize Xapian indexing, at least.
2018-02-19git: reload alternates file on missing blob
Since we'll be adding new repositories to the `alternates' file in git, we must restart the `git cat-file --batch' process as git currently does not detect changes to the alternates file in long-running cat-file processes. Don't bother with the `--batch-check' process since we won't be using it with v2.
2018-02-19v2writable: initial cut for repo-rotation
Wrap the old Import package to enable creating new repos based on size thresholds. This is better than relying on time-based rotation as LKML traffic seems to be increasing.
2018-02-16www: stop assuming mainrepo == git_dir
It won't be in v2
2018-02-16search: stop assuming Message-ID is unique
In general, they are, but there's no way for or general purpose mail server to enforce that. This is a step in allowing us to handle more corner cases which existing lists throw at us.
2018-02-16extmsg: fix broken Xapian MID lookup
This likely has no real world implications, though, as we fall back to Msgmap lookups anyways. Broken since commit 7eeadcb62729b0efbcb53cd9b7b181897c92cf9a ("search: remove unnecessary abstractions and functionality")
2018-02-15import: allow the epoch (0s) as a valid time
Despite email not existing until 1971; "Jan 1, 1970 00:00:00" seems like a common default timestamp for some test emails to use as a Date: header.
2018-02-15import: quiet down warnings from bogus From: lines
There's a lot of crap in archives and git-fast-import accepts empty names and email addresses for authors just fine.
2018-02-15scripts/import_vger_from_mbox: use v2 layout for import
Big lists are orders of magnitude more efficient with v2.
2018-02-15import: pass "raw" dates to git-fast-import(1)
For LKML, it appears we need an even more liberal parser than RFC2822 date parser in git. I have not validated Date::Parse parses dates correctly, but this at least prevents git-fast-import(1) from choking.
2018-02-15address: extract more characters from email addresses
There's a lot of weird characters which show up in LKML archives which we did not support before. Furthermore, allow spaces before the '>' in the From: line as at least some non-spam poster used it.
2018-02-14searchidx: fix comment around next_thread_id
I decided not to copy the notmuch implementation regarding serialization of integers to Xapian metadata.
2018-02-14search: free up 'Q' prefix for a real unique identifier
This will allow easier-compatibility with v2 code which will introduce content_id as the unique identifier. The old "XMID" becomes "XM" as a free text searchable term. "Q" becomes "XMID" as a boolean prefix. There's no user-visible changes in this, but there needs to be a schema version bump later on... (more changes planned which can affect v1)
2018-02-14import: APIs to support v2 use
Wrap "get-mark" and "checkpoint" commands for git-fast-import while documenting/cementing parts of the API.
2018-02-13scripts/import_vger_from_mbox: support --dry-run option
This can be useful for getting baseline of performance of just Email::MIME and Date: header parsing. We'll need to do some Date: header parsing for LKML since there are some wonky date formats which causes the git RFC822 parser to choke.
2018-02-13searchmsg: add mid_mime import for _extract_mid
Oops, I guess this code was never called and may not be needed. But for now, import it so it can run properly.
2018-02-12content_id: add test case
2018-02-12t/import: test for last_object_id insertion
Check for this before doing the Xapian-based v2 importer.
2018-02-12import: initial handling for v2
Call order will need to change a bit since this is going to be tied to Xapian
2018-02-09import: begin supporting this without ssoma.lock
We'll reuse this class in v2, but won't be utilizing per-git-repository ssoma.lock files. Meanwhile, stop treating ::Inbox objects as an afterthought and allow importing name and email into them.
2018-02-08import: stop writing legacy ssoma.index by default
For machines which have never seen ssoma, they don't need the index so stop creating it.
2018-02-08scripts/import_vger_from_mbox: relax From_ line match slightly
The mboxes I got from cregit have two spaces after the email address, while the "git format-patch" output I'm used to dealing with only has one space. It's still a "strict" match in that it checks for something resembling a timestamp, but it relaxes the number of spaces between the email address and date.
2018-02-08watch_maildir: allow '-' in mail filename
Hostnames can contain '-' and this allows public-inbox-watch(1) to work on machines which generate Maildir files with '-' in them.
2018-02-08AUTHORS: add The Linux Foundation
I'll be working as a contractor for The Linux Foundation on v2 in an effort to support LKML and associated lists.
2018-02-08public-inbox 1.0.0 v1.0.0
Might as well, this release is mostly to serve as a checkpoint for the start of new development on v2 stuff mentioned in the TODO.
2018-02-08MANIFEST: add AUTHORS file
2018-02-07add AUTHORS file
This can be useful for tarball distributions which lack full git history.
2018-02-07update copyrights for 2018
Using update-copyrights from gnulib While we're at it, use the SPDX identifier for AGPL-3.0+ to ease mechanical processing.
2018-02-03view: allow expanding directly to "nested" view
Sometimes, it can be desirable to jump directly to the "nested" view when viewing a thread skeleton. This makes it possible. While we're at it, shorten some of the text to ensure it still fits in 80 columns.
2018-01-30view: close <pre> in reply instructions
We leave the mailto: link out when obfuscating address, so do not stuff the "</pre>" closing tag into it. Instead, keep the closing tag in the same context as the opening one, making it easier to keep track of.
2018-01-29reply: follow obfuscation rules for HTML in sh args
Namely, we do not want to obfuscate the mail address of the site itself.
2018-01-29view: adjust wording for reply-to-list configs
This makes the wording less confusing when showing archives for lists where the convention is reply-to-list. I still hate reply-to-list, but it's still better than no archives or list at all.
2018-01-26atom: show metadata before message body
This can allow streaming parsers (SAX) to work a little more efficiently as they can handle/discard all the metadata before the big content.
2018-01-25doc/design_www: adjust some wording and URLs around CSS
I still hate that CSS is over-used, but colors are useful and perhaps using them for highlighting won't be too bad; but user-supplied colors will ALWAYS be supported.
2018-01-16TODO: notes about v2 format for giant archives
Inspired by interest in LKML archival: https://public-inbox.org/meta/d5546b24-5840-4ae9-d25b-5e3e737ed73b@linuxfoundation.org
2018-01-16hval: only allow domain obfuscation in address
Obfuscating username portions of the email address leads to having subsequent parts of the address not being obfuscated; which could mean we show someone else's email entirely. In other words, obfuscating "john.doe@example.com" becomes might mean "doe@example.com" is picked up by scanners. In other news, email address obfuscation is still a horrible usability issue and only exists to appease misguided people.
2017-12-21view: avoid deduping a single word in subject skeletons
It is usually pointless to replace a single word with a '"' character.
2017-12-08search: force large mbox result downloads to POST
This should prevent crawlers (including most robots.txt ignoring ones) from burning our CPU time without severely compromising usability for humans.
2017-12-07searchview: nofollow on mbox downloads
Some search results are gigantic, and search engines are unlikely to be able to handle gzipped mboxes anyways.