mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-24 19:44:21 +01:00
## Problem There are several problems with our current statically allocated `BufferPool`. 1. You cannot open two databases in the same process with different page sizes, because the `BufferPool`'s `Arena`s will be locked forever into the page size of the first database. This is the case regardless of whether the two `Database`s are open at the same time, or if the first is closed before the second is opened. 2. It is impossible to even write Rust tests for different page sizes because of this, assuming the test uses a single process. ## Solution Make `Database` own `BufferPool` instead of it being statically allocated, so this problem goes away. Note that I didn't touch the still statically-allocated `TEMP_BUFFER_CACHE`, because it should continue to work regardless of this change. It should only be a problem if the user has two or more databases with different page sizes open simultaneously, because `TEMP_BUFFER_CACHE` will only support one pool of a given page size at a time, so the rest of the allocations will go through the global allocator instead. ## Notes I extracted this change out from #2569, because I didn't want it to be smuggled in without being reviewed as an individual piece. Reviewed-by: Avinash Sajjanshetty (@avinassh) Closes #2596