Mar 18, 2-3 PM (130)
Mar 18, 3-4 PM (44)
Mar 18, 4-5 PM (26)
Mar 18, 5-6 PM (33)
Mar 18, 6-7 PM (43)
Mar 18, 7-8 PM (39)
Mar 18, 8-9 PM (23)
Mar 18, 9-10 PM (32)
Mar 18, 10-11 PM (40)
Mar 18, 11-12 AM (31)
Mar 19, 12-1 AM (30)
Mar 19, 1-2 AM (13)
Mar 19, 2-3 AM (6)
Mar 19, 3-4 AM (4)
Mar 19, 4-5 AM (4)
Mar 19, 5-6 AM (1)
Mar 19, 6-7 AM (29)
Mar 19, 7-8 AM (58)
Mar 19, 8-9 AM (118)
Mar 19, 9-10 AM (73)
Mar 19, 10-11 AM (199)
Mar 19, 11-12 PM (54)
Mar 19, 12-1 PM (61)
Mar 19, 1-2 PM (48)
Mar 19, 2-3 PM (76)
Mar 19, 3-4 PM (138)
Mar 19, 4-5 PM (29)
Mar 19, 5-6 PM (19)
Mar 19, 6-7 PM (31)
Mar 19, 7-8 PM (19)
Mar 19, 8-9 PM (36)
Mar 19, 9-10 PM (13)
Mar 19, 10-11 PM (41)
Mar 19, 11-12 AM (18)
Mar 20, 12-1 AM (4)
Mar 20, 1-2 AM (4)
Mar 20, 2-3 AM (8)
Mar 20, 3-4 AM (9)
Mar 20, 4-5 AM (10)
Mar 20, 5-6 AM (4)
Mar 20, 6-7 AM (51)
Mar 20, 7-8 AM (27)
Mar 20, 8-9 AM (29)
Mar 20, 9-10 AM (38)
Mar 20, 10-11 AM (33)
Mar 20, 11-12 PM (22)
Mar 20, 12-1 PM (33)
Mar 20, 1-2 PM (91)
Mar 20, 2-3 PM (19)
Mar 20, 3-4 PM (52)
Mar 20, 4-5 PM (24)
Mar 20, 5-6 PM (20)
Mar 20, 6-7 PM (14)
Mar 20, 7-8 PM (15)
Mar 20, 8-9 PM (15)
Mar 20, 9-10 PM (16)
Mar 20, 10-11 PM (22)
Mar 20, 11-12 AM (18)
Mar 21, 12-1 AM (8)
Mar 21, 1-2 AM (2)
Mar 21, 2-3 AM (5)
Mar 21, 3-4 AM (2)
Mar 21, 4-5 AM (1)
Mar 21, 5-6 AM (2)
Mar 21, 6-7 AM (6)
Mar 21, 7-8 AM (3)
Mar 21, 8-9 AM (9)
Mar 21, 9-10 AM (7)
Mar 21, 10-11 AM (5)
Mar 21, 11-12 PM (4)
Mar 21, 12-1 PM (3)
Mar 21, 1-2 PM (8)
Mar 21, 2-3 PM (3)
Mar 21, 3-4 PM (9)
Mar 21, 4-5 PM (7)
Mar 21, 5-6 PM (12)
Mar 21, 6-7 PM (12)
Mar 21, 7-8 PM (2)
Mar 21, 8-9 PM (1)
Mar 21, 9-10 PM (5)
Mar 21, 10-11 PM (24)
Mar 21, 11-12 AM (21)
Mar 22, 12-1 AM (0)
Mar 22, 1-2 AM (6)
Mar 22, 2-3 AM (5)
Mar 22, 3-4 AM (0)
Mar 22, 4-5 AM (1)
Mar 22, 5-6 AM (6)
Mar 22, 6-7 AM (6)
Mar 22, 7-8 AM (1)
Mar 22, 8-9 AM (1)
Mar 22, 9-10 AM (2)
Mar 22, 10-11 AM (3)
Mar 22, 11-12 PM (5)
Mar 22, 12-1 PM (1)
Mar 22, 1-2 PM (1)
Mar 22, 2-3 PM (2)
Mar 22, 3-4 PM (6)
Mar 22, 4-5 PM (6)
Mar 22, 5-6 PM (17)
Mar 22, 6-7 PM (32)
Mar 22, 7-8 PM (48)
Mar 22, 8-9 PM (7)
Mar 22, 9-10 PM (1)
Mar 22, 10-11 PM (21)
Mar 22, 11-12 AM (23)
Mar 23, 12-1 AM (5)
Mar 23, 1-2 AM (4)
Mar 23, 2-3 AM (9)
Mar 23, 3-4 AM (7)
Mar 23, 4-5 AM (2)
Mar 23, 5-6 AM (4)
Mar 23, 6-7 AM (1)
Mar 23, 7-8 AM (7)
Mar 23, 8-9 AM (33)
Mar 23, 9-10 AM (36)
Mar 23, 10-11 AM (17)
Mar 23, 11-12 PM (97)
Mar 23, 12-1 PM (62)
Mar 23, 1-2 PM (53)
Mar 23, 2-3 PM (74)
Mar 23, 3-4 PM (67)
Mar 23, 4-5 PM (86)
Mar 23, 5-6 PM (65)
Mar 23, 6-7 PM (21)
Mar 23, 7-8 PM (18)
Mar 23, 8-9 PM (16)
Mar 23, 9-10 PM (16)
Mar 23, 10-11 PM (35)
Mar 23, 11-12 AM (31)
Mar 24, 12-1 AM (1)
Mar 24, 1-2 AM (3)
Mar 24, 2-3 AM (14)
Mar 24, 3-4 AM (4)
Mar 24, 4-5 AM (3)
Mar 24, 5-6 AM (4)
Mar 24, 6-7 AM (3)
Mar 24, 7-8 AM (102)
Mar 24, 8-9 AM (40)
Mar 24, 9-10 AM (30)
Mar 24, 10-11 AM (167)
Mar 24, 11-12 PM (26)
Mar 24, 12-1 PM (42)
Mar 24, 1-2 PM (129)
Mar 24, 2-3 PM (12)
Mar 24, 3-4 PM (40)
Mar 24, 4-5 PM (47)
Mar 24, 5-6 PM (110)
Mar 24, 6-7 PM (16)
Mar 24, 7-8 PM (9)
Mar 24, 8-9 PM (14)
Mar 24, 9-10 PM (14)
Mar 24, 10-11 PM (27)
Mar 24, 11-12 AM (14)
Mar 25, 12-1 AM (1)
Mar 25, 1-2 AM (2)
Mar 25, 2-3 AM (13)
Mar 25, 3-4 AM (2)
Mar 25, 4-5 AM (10)
Mar 25, 5-6 AM (5)
Mar 25, 6-7 AM (7)
Mar 25, 7-8 AM (14)
Mar 25, 8-9 AM (22)
Mar 25, 9-10 AM (48)
Mar 25, 10-11 AM (28)
Mar 25, 11-12 PM (36)
Mar 25, 12-1 PM (80)
Mar 25, 1-2 PM (14)
Mar 25, 2-3 PM (5)
4,295 commits this week Mar 18, 2026 - Mar 25, 2026
Update 2026-03-25T14:42:23Z
added:
* github:input-output-hk/mithril/2bbef5a24cfb113a21c55d2d04d7a30b6046ba03#mithril-client-cli
* github:input-output-hk/mithril/2bbef5a24cfb113a21c55d2d04d7a30b6046ba03#mithril-signer
removed:
* github:input-output-hk/mithril/7127c11c6113d39222ae659c8e366da058c513a0#mithril-client-cli
* github:input-output-hk/mithril/7127c11c6113d39222ae659c8e366da058c513a0#mithril-signer
Rework forker usage pattern to avoid Registries (#1910)
# Description

Forkers have been a source of headaches for a very long time already,
and all due to the limitation of the Resource registry that enforces
registries to only be used from known threads. This has lead to a
situation where we had hierarchies of registries just to satisfy that
rule and even we had to extend the resource-registry API to allow
transferring between registries which is unsafe.

The general pattern followed now is:
1. At the ledgerdb level we only keep track of the resources, running
WithTempRegistry while opening the DB and then closing them when closing
the LedgerDB.
2. Forkers that open new handles are open in a `with*` combinator style,
so the handles are deallocated when exiting the scope (or committed).
3. Forkers that only duplicate existing handles (read-only forkers) are
only used in Mempool and LocalStateQuery and there we put them in a
registry, in particular in the top level registry.
4. The handles are not tracked directly---each handle is tracked
indirectly because some forker or the LedgerDB owns it and is tracked.
Forkers are tracked so that they can be released promptly which avoids
space-leaks and permits the backends (LSM/LMDB) to do their gradual
bookkeeping/rearranging work.
5. In particular, when the node is shutting down, there is no need to
close each handle/forker:
   1. in InMemory it doesn't matter as it is pure
2. in LSM, closing the session will close any open handles, and closing
the session happen when shutting down the node,
3. in LMDB, each forker has one single read-transaction open and it will
be closed as described above. There are no further resources allocated
on each step. Also closing the backing store is optional as described in
the LMDB docs (also mentioned in LedgerDB API).

Sadly, the change is so fundamental that there is no meaningful way of
splitting the changes into reviewable commits that compile on their own.

Proposed review order (recommended to disable whitespace-diff in Github
diff view and hide already viewed files):

1. Ouroboros.Consensus.Storage.ChainDB.API
5. Ouroboros.Consensus.MiniProtocol.LocalStateQuery.Server +
Ouroboros.Consensus.Network.NodeToClient
7. Ouroboros.Consensus.Mempool.{Impl.Common, Update, Init}
8. Ouroboros.Consensus.Storage.ChainDB.ChainSel
9. Ouroboros.Consensus.Storage.ChainDB.Impl.Types +
Ouroboros.Consensus.Storage.ChainDB.Impl.Query
10. Ouroboros.Consensus.Storage.ChainDB.Impl
11. Ouroboros.Consensus.Storage.ImmutableDB.{Impl, Impl.Validation}
12. Ouroboros.Consensus.Storage.VolatileDB.Impl
13. Ouroboros.Consensus.Storage.LedgerDB.API (both the API changes and
the initialization)
14. Ouroboros.Consensus.Storage.LedgerDB
15. Ouroboros.Consensus.Storage.LedgerDB.Forker
16. Ouroboros.Consensus.Node (just comments changes)
17. Ouroboros.Consensus.NodeKernel
18. Ouroboros.Consensus.Storage.LedgerDB.V2.LedgerSeq
19. Ouroboros.Consensus.Storage.LedgerDB.V2.Forker
20. Ouroboros.Consensus.Storage.LedgerDB.V2.Backend
21. Ouroboros.Consensus.Storage.LedgerDB.V2.InMemory
22. Ouroboros.Consensus.Storage.LedgerDB.V2.LSM
23. Ouroboros.Consensus.Storage.LedgerDB.V2    
24. Ouroboros.Consensus.Storage.LedgerDB.V1.Forker
25. Ouroboros.Consensus.Storage.LedgerDB.V1.Snapshots
26. Ouroboros.Consensus.Storage.LedgerDB.V1

The rest of the changes are just adapting tests or adapting the
cardano-tools to use the new access pattern. I did not do any meaningful
change in the tests by my will, I only followed GHC errors where they
took me.