PThorpe92
cb12a1319d
Fix page cache clear method to not re-initialize every slot
2025-09-09 15:55:59 -04:00
PThorpe92
8cc4e7f7a0
Fix rollback method to stop using highly inefficient cache::clear_dirty
2025-09-09 13:28:17 -04:00
PThorpe92
01d64977d7
Use more efficient circular list and rely on clock hand for pagecache
2025-09-05 22:40:27 -04:00
PThorpe92
644d0f270b
Add evict slot method in page cache
2025-09-05 16:13:30 -04:00
PThorpe92
b89513f031
remove useless saturating sub
2025-09-05 16:13:30 -04:00
PThorpe92
39a47d67e6
Apply PR suggestions
2025-09-05 16:13:29 -04:00
PThorpe92
f45a7538fe
Use true sieve/gclock algo instead of lru,dont link pages circilarly
2025-09-05 16:13:29 -04:00
PThorpe92
e418a902e5
Fix scoping issues now that refcells are gone to prevent extra destructors
2025-09-05 16:13:28 -04:00
PThorpe92
c85a61442f
Remove type alias in page cache
2025-09-05 16:13:28 -04:00
PThorpe92
5ba273eea5
remove unused impl for refbit
2025-09-05 16:13:28 -04:00
PThorpe92
246b62d513
Remove unnecessary refcells, as PageCacheEntry has interior mutability
2025-09-05 16:13:27 -04:00
PThorpe92
582e25241e
Implement GClock algorithm to distinguish between hot pages and scan touches
2025-09-05 16:13:27 -04:00
PThorpe92
254a0a9342
Apply fix and rename ignore_existing to upsert
2025-09-05 16:13:27 -04:00
PThorpe92
3a0b9b360a
Fix clippy warnings
2025-09-05 16:13:26 -04:00
PThorpe92
03d5598cfb
Use sieve algorithm in page cache in place of full LRU
2025-09-05 16:13:26 -04:00
PThorpe92
cfadc4f579
Fix memory leak in page cache during balancing
2025-09-02 10:35:04 -04:00
pedrocarlo
bc707fd9be
cleanup + comments
2025-09-01 11:10:40 -03:00
pedrocarlo
6f1eed7aca
clippy
2025-09-01 11:10:39 -03:00
pedrocarlo
4618df9d1a
because we can abort a read_page completion, this means that the page can be in the cache but be unloaded and unlocked. However, if we do not evict that page from the page cache, we will return an unloaded page later
2025-09-01 11:10:39 -03:00
pedrocarlo
be3f944c4f
impl Error for CacheError and propagate it into LimboError
2025-09-01 11:10:39 -03:00
Nikita Sivukhin
89e180c2a8
add few tests
2025-08-21 18:27:54 +04:00
Nikita Sivukhin
94f2e5a4b9
add truncate method to the page cache
2025-08-21 18:27:54 +04:00
Jussi Saurio
687e593361
Add pgno field to CacheError::Locked for debugging
2025-08-19 15:44:16 +03:00
Jussi Saurio
359cba0474
Use BufferPool owned by Database instead of a static global
...
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.
2025-08-14 10:29:52 +03:00
PThorpe92
faf248df03
Add more docs and comments for TempBufferCache
2025-08-08 10:55:28 -04:00
PThorpe92
4ffb273b53
Adjust IO to use new buffer pool and buffer API
2025-08-08 10:55:26 -04:00
PThorpe92
f6a68cffc2
Remove RefCell from IO and Page apis
2025-08-05 16:24:49 -04:00
Pere Diaz Bou
5f8e386b48
reset internal states on rollback
2025-07-24 15:29:06 +02:00
Glauber Costa
4749ce95c1
implement Debug for Database
...
Very useful in printing data structures containing databases, like maps
Example output:
Connecting to Database { path: "sq.db", open_flags: OpenFlags(1), db_state: "initialized", mv_store: "none", init_lock: "unlocked", wal_state: "present", page_cache: "( capacity 100000, used: 0 )" }
2025-07-19 09:29:46 -05:00
Jussi Saurio
01ad75ecd0
page cache: temporarily increase default size until WAL spill is implemented
2025-07-17 12:28:44 +03:00
Jussi Saurio
8558675c4c
page cache: pin pages on the stack
2025-07-16 17:09:05 +03:00
Jussi Saurio
a48b6d049a
Another post-rebase clippy round with 1.88.0
2025-07-12 19:10:56 +03:00
Nils Koch
1a91966c7e
fix clippy errors for rust 1.88.0 (manual fix)
2025-07-12 18:58:55 +03:00
Nils Koch
828d4f5016
fix clippy errors for rust 1.88.0 (auto fix)
2025-07-12 18:58:41 +03:00
Ihor Andrianov
564bb28dea
rewrite test to make fix verifiable
2025-07-01 17:27:58 +03:00
Ihor Andrianov
68e638e955
fix second occurance
2025-07-01 17:27:58 +03:00
Ihor Andrianov
647183938f
fix sub with below 0 in tests
2025-07-01 17:27:58 +03:00
Ihor Andrianov
56b1fcf3b3
remove unused imports
2025-07-01 17:27:58 +03:00
Ihor Andrianov
41a11afe7c
leaking box memory
2025-07-01 17:27:47 +03:00
Jussi Saurio
ad20e306f7
dont panic on cache clear error
2025-06-24 14:41:50 -03:00
Jussi Saurio
cc2e14b11c
Read page 1 from pager always, no separate db_header
2025-06-24 14:41:49 -03:00
Nils Koch
2827b86917
chore: fix clippy warnings
2025-06-23 19:52:13 +01:00
Pere Diaz Bou
dd15b7df7f
remove dumb comment from pagecachekey
2025-05-29 14:12:16 +02:00
Pere Diaz Bou
93161e9fce
remove lru size > 0 check on page cache fuzz
2025-05-29 14:12:16 +02:00
Pere Diaz Bou
37e834b092
remove unnecessary test
2025-05-29 14:12:16 +02:00
Pere Diaz Bou
44007075d9
remove frame_id from PageCacheKey
...
After reading sqlite a bit, it isn't needed because we have RWlock for
each table in the database file.
2025-05-29 14:12:16 +02:00
Pere Diaz Bou
28bd24b7d4
clear page cache on transaction failure
...
This is the first step towards rollback, since we still don't spill
pages with WAL, we can simply invalidate page cache in case of failure.
2025-05-28 15:54:28 +02:00
Pere Diaz Bou
7143e43dd4
clippy
2025-05-21 15:27:15 +02:00
Pere Diaz Bou
a69f85be84
cacheflush clear cache
2025-05-21 14:20:11 +02:00
Pere Diaz Bou
ddb166f0f0
custom hashmap for page cache
2025-05-21 14:19:56 +02:00