Pekka Enberg
0638550be7
Merge 'Remove unnecessary reference counting from completion I/O callbacks' from Preston Thorpe
...
I am on a bit of a mission to revisit a lot of the ref counting, this
was an easy first win.
It seems to be a linear path of function calls or hashmaps which can own
the completions directly, no cloning needed.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #912
2025-02-10 12:11:30 +02:00
Jorge López
83b158fb3a
core: silence some unused warnings when building without default features
2025-02-09 01:13:12 +01:00
PThorpe92
75898027a0
Remove unnecessary reference counting from completion io callbacks
2025-02-08 08:20:19 -05:00
PThorpe92
575a524d04
Replace hashmap for io_uring pending ops with static array
2025-02-07 09:05:08 -05:00
PThorpe92
b5a5b34329
Use Cell for size in memoryio in place of unsafecell
2025-02-01 23:04:42 -05:00
PThorpe92
5c00b3dc6e
Improve in-memory IO performance, remove runtime borrow checking
2025-02-01 21:54:39 -05:00
Jorge López
55e06b0c72
core/io: make file locks non-blocking so they fail right away
2025-01-14 11:01:11 +01:00
Pekka Enberg
5c9505e8f7
Revert "core/io/io_uring: replace nix and libc calls with their rustix counterparts."
...
This reverts commit b146f5d4cb because it
causes tests to hang.
2025-01-14 10:25:23 +02:00
Jorge López
2f90a06533
core/io/unix: replace O_NONBLOCK flag from libc with equivalent from rustix
2025-01-13 21:03:05 +01:00
Jorge López
5e9cb58f04
core/io/io_uring: remove unnecessary path prefix for log macros, and replace one unwrap with ?
2025-01-13 20:21:37 +01:00
Jorge López
b146f5d4cb
core/io/io_uring: replace nix and libc calls with their rustix counterparts.
...
core: remove dependency on nix. We keep depending on libc, though, because crate io_uring requires libc's iovec.
2025-01-13 20:21:37 +01:00
Jorge López
b1e8f2da73
core/io/unix: minor formatting
2025-01-13 20:21:37 +01:00
Jorge López
7b5e5efd14
core/io/unix: replace libc calls and types with their rustix counterparts
2025-01-13 20:21:37 +01:00
Jorge López
7808665c92
core: make MAX_IOVECS u32 instead of usize, to match the type expected by io_uring
2025-01-13 20:21:37 +01:00
Jorge López
5a45df84db
core: add debug line when an IO backend is created. A user can check that the correct one has been selected.
2025-01-11 16:08:41 +01:00
Jorge López
2596e0800e
core: expose UnixIO apart from PlatformIO on any Unix, and expose UringIO on Linux with feature io_uring.
...
cli: add a new argument to select I/O backend (more than one option only for Linux with io_uring feature).
cli: make both Limbo::new() and Limbo::open_db() use get_io(), unifying parsing of database path and eliminating duplicated code.
2025-01-11 15:21:26 +01:00
Jorge López
511c0b495d
Rename LinuxIOError to UringIOError to match the IO backend renames
2025-01-07 15:19:31 +01:00
Jorge López
e5a12bdf01
Rename linux backend to io_uring and darwin to unix. Add new feature flag to IO backend selection
2025-01-07 15:19:29 +01:00
psvri
e7d4fa0a53
Minor clippy fixes
2025-01-01 16:11:52 +05:30
PThorpe92
4e77840ee5
Setup io_uring with sqpoll enabled
2024-12-29 15:34:17 -05:00
adamnemecek
97647ff056
Clean up code to use Self
...
Closes #556
2024-12-29 10:07:38 +02:00
Dezhi Wu
bea49549ed
feat(core/io): Add support for file creation in open_file function
...
`cargo test` is always failing on FreeBSD, the following is one of the
errors:
```
---- tests::test_simple_overflow_page stdout ----
thread 'tests::test_simple_overflow_page' panicked at test/src/lib.rs:32:84:
called `Result::unwrap()` on an `Err` value: IOError(Os { code: 2, kind: NotFound, message: "No such file or directory" })
```
After some digging, I found that the `open_file` function in
`core/io/generic.rs` does not respect the `OpenFlags::Create` flag. This
commit adds support for file creation in the `open_file` function.
`cargo test` now passes on FreeBSD.
2024-12-22 11:04:15 +08:00
Ziyak Jehangir
99d1b0e5a3
cleanup: replace &(*x) with x.as_ref() for smart pointer derefs
2024-12-19 19:36:04 +05:30
PThorpe92
7fc9835899
Optimize replace byte vec with boxed array in memory page
2024-12-14 23:39:51 -05:00
PThorpe92
ce2851ac8d
Fix properly opening new connection in shell
2024-12-14 21:20:10 -05:00
PThorpe92
89819eebf6
Expose memoryIO from limbo_core
2024-12-14 20:52:45 -05:00
PThorpe92
a323db6f46
Add in-memory IO implementation
2024-12-14 20:52:44 -05:00
Lauri Virtanen
a7100d8e9b
Autofix clippy issues with cargo fix --clippy
2024-11-24 20:24:47 +02:00
Pere Diaz Bou
e2276c2e9d
O_DIRECT disable on WAL
2024-11-13 13:45:42 +00:00
Pere Diaz Bou
cbfb45e55b
more trace logs
2024-11-13 11:31:22 +00:00
Pere Diaz Bou
78118bae81
fmt
2024-11-13 09:34:36 +00:00
Pere Diaz Bou
8d1d2d36cc
core/linux: aligned wal header read
2024-11-12 17:53:59 +00:00
Pere Diaz Bou
74974d07e7
clippy fix
2024-11-08 11:14:29 +01:00
Pere Diaz Bou
7d8fc80f4b
use len instead of size
2024-11-07 14:01:35 +01:00
Pere Diaz Bou
ce1367b76a
move wal creation
2024-11-07 13:51:02 +01:00
Pere Diaz Bou
218c32e0e6
remove unix import in windoews
2024-11-07 13:34:48 +01:00
Pere Diaz Bou
0b46648c0e
write wal header on init
2024-11-07 13:29:57 +01:00
Pere Diaz Bou
0d857661f2
windows complete completion
2024-11-07 09:57:24 +01:00
Pere Diaz Bou
2514287263
windows fix
2024-11-06 18:11:15 +01:00
Pere Diaz Bou
cef78d54de
fix generic
2024-11-06 17:53:14 +01:00
Pere Diaz Bou
eb8c462c5f
fix io submission on cacheflush
2024-11-06 16:25:42 +00:00
Pere Diaz Bou
da7717edfb
fix generic io match
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
5207e49399
remove extra borrow mut
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
0f4270b48f
rebase submit entry
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
70a4ccd8bb
fix linux completion match
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
fc65c5096d
cacheflush state machine
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
129cc1cd6d
fix open_file generic
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
f009eb35c6
suspendable checkpoint
2024-11-05 15:29:54 +01:00
Pere Diaz Bou
c0e51c4ca6
wip wal
2024-11-05 15:29:53 +01:00
Arpit Saxena
b7debabd81
Wrap IoUring to ensure pending_ops is always correctly updated
...
Adds a struct WrappedIOUring which contains a IoUring and a pending_ops
field. Entry submission and popping from the queue is done through
functions operating on it, which also maintains pending_ops count
NOTE: This is a bit weird/hacky since in get_completion we create a
CompletionQueue and just call its next(). If it were a normal iterator
it would always return the same first item. However it is a queue posing
as an iterator which makes this work.
2024-09-28 00:10:05 +05:30