| 6 Dec 2025 |
K900 | SQLite can only do multiple concurrent readers in WAL mode | 11:28:30 |
0x4fbb09 it/its ⛯✇ΘΔ | wait, really? i thought WAL provided one writer and multiple readers, as opposed to one writer or multiple readers | 11:41:46 |
0x4fbb09 it/its ⛯✇ΘΔ | that's what https://sqlite.org/wal.html implies | 11:42:10 |
Martin Häcker | Hey, we had a discussion in the bugtracker about adding nix develop —print-phases which was rejected on the grounds that nixpkgs would need to provide the infra for that. I provided a pull request to nixpkgs to provide that which got favorable reviews, but could perhaps use one more - or someone who dares merge it (as it will trigger a rebuild of everything).
I was hoping there are some people here on the channel wo think this useful and would be willing to help?
| 11:42:41 |
0x4fbb09 it/its ⛯✇ΘΔ | wal is in general faster though yeah | 11:43:17 |
raitobezarius | In reply to @dont.wanna.tell:matrix.org
Hey, we had a discussion in the bugtracker about adding nix develop —print-phases which was rejected on the grounds that nixpkgs would need to provide the infra for that. I provided a pull request to nixpkgs to provide that which got favorable reviews, but could perhaps use one more - or someone who dares merge it (as it will trigger a rebuild of everything).
I was hoping there are some people here on the channel wo think this useful and would be willing to help?
If all comments are resolved, I will merge it for you :) | 12:10:49 |
aloisw | I expect rollback journal to be disastrously slow with the Lix store database, as it does at least one fsync per commit. You can try out yourself with the use-sqlite-wal setting if you want. | 12:14:13 |
aloisw | We're already running in NORMAL synchronous mode, which sacrifices durability (which is in most cases, including Lix, not a big deal). Turning it off completely can (on most stock filesystems) give you a corrupted database after unclean shutdown which is absolutely not what you want. | 12:16:03 |
aloisw | Yes, this is correct. Rollback journal allows any number of readers but the writer needs exclusive access. | 12:16:40 |
aloisw | raitobezarius could you test https://gerrit.lix.systems/c/lix/+/4712 in your real-world setting? Be advised that if you use the daemon, the change will also be needed there, and for whatever reason there may happen a weird deadlock during the generation switch (I need to debug that). | 12:37:02 |
raitobezarius | will do! | 12:58:29 |
Martin Häcker | I think they are, are you missing anyhting? | 13:57:18 |
Martin Häcker | * | 13:57:43 |
raitobezarius | In reply to @dont.wanna.tell:matrix.org I think they are, am I missing anything? https://github.com/NixOS/nixpkgs/pull/441897#discussion_r2343911652 ? | 14:08:11 |
Martin Häcker | ah; I should have marked that as resolved, he did agree that minimal churn (especially in high stakes code like this) is an equally valuable goal. | 14:16:49 |
Jassuko | In reply to @raitobezarius:matrix.org It's the metadata layer of the Nix store, the actual source of truth How is this handled currently? And how big of a deal is rebuilding said metadata if everything goes wrong?
I’m trying to figure out what are the a actual requirements for the consistency of this DB. In some cases it might make sense to provide fast ”happy path” usage in expense of having to do considerably more costly repair operation in case of total failure. | 14:34:15 |
aloisw | This database is extremely important, if things go wrong you can of course still access the store paths that were already there as files so the system is not immediately broken, but from the Lix perspective the entire store might as well be trash. | 14:35:23 |
Jassuko | In reply to @aloisw:julia0815.de I expect rollback journal to be disastrously slow with the Lix store database, as it does at least one fsync per commit. You can try out yourself with the use-sqlite-wal setting if you want. How many write operations are needed per a build or other store operations? Or do you need a write per some file in derivation? Or what exactly? | 14:35:48 |