Home /
Input Output /
lsm-tree
Nov 14, 2-3 PM (4)
Nov 14, 3-4 PM (4)
Nov 14, 4-5 PM (12)
Nov 14, 5-6 PM (0)
Nov 14, 6-7 PM (1)
Nov 14, 7-8 PM (0)
Nov 14, 8-9 PM (1)
Nov 14, 9-10 PM (0)
Nov 14, 10-11 PM (0)
Nov 14, 11-12 AM (0)
Nov 15, 12-1 AM (0)
Nov 15, 1-2 AM (0)
Nov 15, 2-3 AM (0)
Nov 15, 3-4 AM (0)
Nov 15, 4-5 AM (0)
Nov 15, 5-6 AM (0)
Nov 15, 6-7 AM (0)
Nov 15, 7-8 AM (0)
Nov 15, 8-9 AM (0)
Nov 15, 9-10 AM (0)
Nov 15, 10-11 AM (1)
Nov 15, 11-12 PM (0)
Nov 15, 12-1 PM (0)
Nov 15, 1-2 PM (1)
Nov 15, 2-3 PM (1)
Nov 15, 3-4 PM (0)
Nov 15, 4-5 PM (3)
Nov 15, 5-6 PM (1)
Nov 15, 6-7 PM (0)
Nov 15, 7-8 PM (0)
Nov 15, 8-9 PM (0)
Nov 15, 9-10 PM (0)
Nov 15, 10-11 PM (0)
Nov 15, 11-12 AM (0)
Nov 16, 12-1 AM (0)
Nov 16, 1-2 AM (0)
Nov 16, 2-3 AM (0)
Nov 16, 3-4 AM (0)
Nov 16, 4-5 AM (0)
Nov 16, 5-6 AM (0)
Nov 16, 6-7 AM (0)
Nov 16, 7-8 AM (0)
Nov 16, 8-9 AM (0)
Nov 16, 9-10 AM (0)
Nov 16, 10-11 AM (0)
Nov 16, 11-12 PM (0)
Nov 16, 12-1 PM (0)
Nov 16, 1-2 PM (0)
Nov 16, 2-3 PM (0)
Nov 16, 3-4 PM (0)
Nov 16, 4-5 PM (0)
Nov 16, 5-6 PM (0)
Nov 16, 6-7 PM (0)
Nov 16, 7-8 PM (0)
Nov 16, 8-9 PM (0)
Nov 16, 9-10 PM (0)
Nov 16, 10-11 PM (0)
Nov 16, 11-12 AM (0)
Nov 17, 12-1 AM (0)
Nov 17, 1-2 AM (0)
Nov 17, 2-3 AM (0)
Nov 17, 3-4 AM (0)
Nov 17, 4-5 AM (0)
Nov 17, 5-6 AM (0)
Nov 17, 6-7 AM (0)
Nov 17, 7-8 AM (0)
Nov 17, 8-9 AM (0)
Nov 17, 9-10 AM (0)
Nov 17, 10-11 AM (0)
Nov 17, 11-12 PM (0)
Nov 17, 12-1 PM (0)
Nov 17, 1-2 PM (0)
Nov 17, 2-3 PM (0)
Nov 17, 3-4 PM (0)
Nov 17, 4-5 PM (1)
Nov 17, 5-6 PM (0)
Nov 17, 6-7 PM (0)
Nov 17, 7-8 PM (0)
Nov 17, 8-9 PM (0)
Nov 17, 9-10 PM (0)
Nov 17, 10-11 PM (0)
Nov 17, 11-12 AM (0)
Nov 18, 12-1 AM (0)
Nov 18, 1-2 AM (0)
Nov 18, 2-3 AM (0)
Nov 18, 3-4 AM (0)
Nov 18, 4-5 AM (0)
Nov 18, 5-6 AM (0)
Nov 18, 6-7 AM (0)
Nov 18, 7-8 AM (0)
Nov 18, 8-9 AM (6)
Nov 18, 9-10 AM (5)
Nov 18, 10-11 AM (0)
Nov 18, 11-12 PM (0)
Nov 18, 12-1 PM (1)
Nov 18, 1-2 PM (0)
Nov 18, 2-3 PM (0)
Nov 18, 3-4 PM (1)
Nov 18, 4-5 PM (0)
Nov 18, 5-6 PM (1)
Nov 18, 6-7 PM (9)
Nov 18, 7-8 PM (0)
Nov 18, 8-9 PM (0)
Nov 18, 9-10 PM (0)
Nov 18, 10-11 PM (1)
Nov 18, 11-12 AM (0)
Nov 19, 12-1 AM (0)
Nov 19, 1-2 AM (0)
Nov 19, 2-3 AM (0)
Nov 19, 3-4 AM (0)
Nov 19, 4-5 AM (0)
Nov 19, 5-6 AM (0)
Nov 19, 6-7 AM (0)
Nov 19, 7-8 AM (0)
Nov 19, 8-9 AM (1)
Nov 19, 9-10 AM (2)
Nov 19, 10-11 AM (0)
Nov 19, 11-12 PM (0)
Nov 19, 12-1 PM (0)
Nov 19, 1-2 PM (0)
Nov 19, 2-3 PM (0)
Nov 19, 3-4 PM (0)
Nov 19, 4-5 PM (0)
Nov 19, 5-6 PM (0)
Nov 19, 6-7 PM (0)
Nov 19, 7-8 PM (0)
Nov 19, 8-9 PM (0)
Nov 19, 9-10 PM (0)
Nov 19, 10-11 PM (0)
Nov 19, 11-12 AM (0)
Nov 20, 12-1 AM (0)
Nov 20, 1-2 AM (0)
Nov 20, 2-3 AM (0)
Nov 20, 3-4 AM (0)
Nov 20, 4-5 AM (0)
Nov 20, 5-6 AM (0)
Nov 20, 6-7 AM (0)
Nov 20, 7-8 AM (0)
Nov 20, 8-9 AM (0)
Nov 20, 9-10 AM (0)
Nov 20, 10-11 AM (0)
Nov 20, 11-12 PM (0)
Nov 20, 12-1 PM (0)
Nov 20, 1-2 PM (0)
Nov 20, 2-3 PM (0)
Nov 20, 3-4 PM (2)
Nov 20, 4-5 PM (0)
Nov 20, 5-6 PM (0)
Nov 20, 6-7 PM (0)
Nov 20, 7-8 PM (0)
Nov 20, 8-9 PM (0)
Nov 20, 9-10 PM (0)
Nov 20, 10-11 PM (0)
Nov 20, 11-12 AM (0)
Nov 21, 12-1 AM (0)
Nov 21, 1-2 AM (0)
Nov 21, 2-3 AM (0)
Nov 21, 3-4 AM (0)
Nov 21, 4-5 AM (0)
Nov 21, 5-6 AM (0)
Nov 21, 6-7 AM (0)
Nov 21, 7-8 AM (0)
Nov 21, 8-9 AM (0)
Nov 21, 9-10 AM (1)
Nov 21, 10-11 AM (9)
Nov 21, 11-12 PM (0)
Nov 21, 12-1 PM (0)
Nov 21, 1-2 PM (1)
Nov 21, 2-3 PM (0)
69 commits this week
Nov 14, 2024
-
Nov 21, 2024
Add ForgottenRefs checking into main testsuite
Done in two parts: 1. generally, for all tests, but exceptions are fatal to the test 2. specifically for the state machine tests, properly integrated so that failure reporting and shrinking work. Doing 1. properly for all tests would be quite an effort, because it needs setup and teardown for each test run. Without it, exceptions from refs that are forgotten before being released are thrown to the main thread (which interrupts the tests).
Add new Ref API, but keep the old API for now
This is centered around the notion of singular references, as opposed to actions to manage a reference count. Under the hood, a (Ref obj) does manage a reference count within the obj, but each reference is a single thing. So instead of operations to increment and decrement reference counts, we have functions to create a Ref, duplicate a new Ref and release a Ref. The weak reference API is given similar treatment.
Add tests for the new Ref API
Including the mechanism to check that: * Refs are not freed more than once * Refs are not used after being freed * Refs are not freed less than once
Convert WriteBufferBlobs to Ref style, and update users
In particular, WBB.removeReference is replaced by releaseRef, and WBB.addReference by dupRef. The TableContent and Cursor contain a WriteBufferBlobs, which becomes a Ref WriteBufferBlobs.
Convert Run, MergingRun and users to the new Ref API
Most of the changes are just replacing Run m h with Ref (Run m h) all over the place, and replacing Run.removeReference with releaseRef. The slightly more interesting changes are in the modules Run and MergeSchedule, where we have to change the style of duplication from incrementing reference countsto returning new references.
Minor refactor: simplify summing run sizes
Make NumEntries a monoid for addition.
Introduce a few Run access functions to simplify later refactoring
When we switch Run to use the Ref API, these access functions will avoid having to make changes at all use sites (using DeRef).
Drop unused MonadFix class constraints everywhere
Eliminate use of RecursiveDo in Run construction
Pass just the necesary fields to the finaliser, rather than passing the whole Run (which creates an apparent recursive knot).
Make ref counter finaliser manditory, not optional
All use cases provide a finaliser. The new API will require it.
Add SerialisedWriteBuffer by analogy to Run
TOSQUASH: change the order of table arguments
prototype: implement lookups in unions
Introduce a unified `LSMTree` API
The new API unifies the `Normal` and `Monoidal` APIs, supporting both blob references and mupserts, and is strictly more expressive. If a user does not want to use blobs, then the blob type can be set to `Void`. If a user does not intend to use the full potential of `Mupserts`, then the `ResolveAsFirst` wrapper provides a sensible default instance for the `ResolveValue` class.
Introduce classes for indexes and their accumulators
prototype: fix last level merges
prototype: fix: put MergingTree in LSMContent instead
prototype: add MergingTree
prototype: combine lookups as in implementation (foldl)
prototype: refactor lookups
prototype: tweak credit supply
As a preparation for table unions, we need to know how many credits are left over when supplying them to a MergingRun. Also, this cleans up the namespace a little before new function are added.
prototype: move MergePolicy out of MergingRun
prototype: refactoring/renaming related to IncomingRun