deps: move to snafu 0.9 and fjall 3 - #39
Merged
Merged
Conversation
snafu 0.9 makes Location a type alias for std's, which has no public constructor, so eight manual Location::default() sites stop compiling. Location::caller() records the identical site: 0.8's default() was itself track_caller, and these helpers are not, so the chain terminated at the same place either way. fjall 3 swapped its vocabulary -- the whole store is now Database, and what was PartitionHandle is now Keyspace -- and moved persist from the partition handle to the store. The data API is byte-identical either side; only the type names and the open and persist entry points moved. fjall 3 does change the on-disk format, and it fails closed rather than silently: recover() checks the version marker before any journal or manifest recovery runs, so the destructive path that drops segments absent from the manifest never executes against a 2.x store -- it errors and names the migration tool instead. A comment claiming this pin matched kanon's archeion crate is corrected: archeion still pins fjall 2, so the two now diverge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finding
Two dependabot bumps that needed real migrations, landed together so the lockfile moves once.
snafu 0.8.9 → 0.9.2.
snafu::Locationis now a type alias for&'static core::panic::Location<'static>, and std'sLocationhas no public constructor. Eight manualLocation::default()sites stop compiling withE0599.Note the existing
snafu-location-migrate.pytool found zero matches here — it targetsLocation::new(file!(), line!(), column!()), a different shape. The fix was applied by hand.Location::caller()records the identical site: 0.8'sdefault()was itself#[track_caller], and these helper functions are not annotated, so the chain terminated at the same place either way. Zero behaviour change — verified by reading both crate sources, not assumed.fjall 2.11.2 → 3.1.9. fjall 3 swapped its vocabulary: the whole store is now
Database, and what wasPartitionHandleis nowKeyspace.persistmoved from the partition handle to the store. The data API (insert/get/remove) is byte-identical either side — only type names and the open/persist entry points moved. All API shapes were read from the vendored 3.1.9 source, not inferred from error text.The on-disk question, answered
fjall 3 does change the on-disk format (
FormatVersion::V3), and it fails closed.Database::recover()callscheck_version()before any journal or segment-manifest recovery runs. Against a 2.x store it logs an error naming the official migration tool (fjall-rs/migrate-v2-v3) and returnsErr(Error::InvalidVersion(...)). The destructive recovery path — the one that deletes segments absent from the levels manifest — is gated behind that check succeeding, so it never runs against a 2.x-written store. Verified atdb.rs:538-554.Practically moot here:
thesauros's fjall-backed persistence dates to 2026-08-16, so a live 2.x keyspace is unlikely to exist. But if one does, it errors loudly rather than eating data.One correction
A WHY comment claimed this pin matched "the same major version kanon's own archeion crate already uses fleet-wide". Checked against kanon
origin/main: archeion still pinsfjall = "2". That claim is now false, so it is replaced with a NOTE flagging the divergence rather than left as stale prose.Decision worth making separately: either archeion takes the same bump, or the two diverge deliberately.
Supersedes #35 and #34.