Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
e5f25c2
disk: book initial commit
matthew-levan Dec 31, 2025
8ae7a7e
disk: replaces lmdb with book
matthew-levan Dec 31, 2025
8c69f6b
Merge branch 'develop' into ml/book
matthew-levan Jan 1, 2026
5e7f368
book: formalizes in-memory and on-disk event structures as `reed` and…
matthew-levan Jan 1, 2026
6bed267
book: uses `PRIu64` instead of `llu` format specifier for portability
matthew-levan Jan 2, 2026
4beab90
book: adds failure mode tests
matthew-levan Jan 2, 2026
9dc21ae
book: simplifies metadata api
matthew-levan Jan 2, 2026
c4443f9
book: fixes contiguity validation printf
matthew-levan Jan 2, 2026
9e1cb8d
book: runs `book-test` in ci
matthew-levan Jan 2, 2026
59ae845
disk: renames `mdb_u` to `txt_u`
matthew-levan Jan 2, 2026
f3210b3
book: uses `PRIu64` format specifier instead of `llu` in tests
matthew-levan Jan 2, 2026
e9ad7a3
Merge branch 'develop' into ml/book
matthew-levan Jan 13, 2026
20b05a7
book: removes unused `_book_crc32` function
matthew-levan Jan 13, 2026
ed807d5
book: removes `BOOK_META_SIZE` macro and replaces usage with `sizeof(…
matthew-levan Jan 13, 2026
861fbda
book: simplifies header, makes it immutable, and refactors accordingly
matthew-levan Jan 14, 2026
e988500
book: sync first event number of header before writing events to log
matthew-levan Jan 19, 2026
6f621f7
book: improves tests
matthew-levan Jan 19, 2026
89704e1
wip: uses lmdb for top-level metadata
matthew-levan Jan 19, 2026
063ebad
Merge branch 'develop' into ml/book
matthew-levan Jan 21, 2026
2d62e24
disk: remove unused function and use lmdb for top-level metadata
matthew-levan Jan 21, 2026
3d994bd
disk: implements book migration
matthew-levan Jan 23, 2026
d158692
Merge branch 'develop' into ml/book
matthew-levan Jan 23, 2026
4950a2b
book: ensures consistency of scans
matthew-levan Jan 23, 2026
720a296
book: cleans, clarifies, and adds metadata to stat
matthew-levan Jan 23, 2026
ef589da
book: fixes leak, improves test safety, removes arbitrary event size …
matthew-levan Jan 23, 2026
67d1378
book: adds `eve_d` to `u3_book_deed_head` and improves `_book_scan_ba…
matthew-levan Jan 23, 2026
b7a6964
book: ensure `las_d` is initialized correctly in new, non-zero epochs
matthew-levan Jan 26, 2026
7c54c40
book: cleans up and enforces `u3_book_init` is passed an epoch directory
matthew-levan Jan 26, 2026
d001c00
book: improve scanning semantics
matthew-levan Jan 26, 2026
8c30faf
book: fixes tests for updated api
matthew-levan Jan 26, 2026
cd4d389
book: improves code quality
matthew-levan Jan 26, 2026
89cfe42
book: adds benchmarks
matthew-levan Jan 30, 2026
5eb10c4
book: replaces deed event numbers with a tracking last event number i…
matthew-levan Feb 2, 2026
b636f7e
book: removes per-event checksums
matthew-levan Feb 2, 2026
02bcb3b
book: implements lmdb-style double-buffering
matthew-levan Feb 2, 2026
b37552b
book: cleans double-buffer code
matthew-levan Feb 3, 2026
70ff357
book: cleans entire api
matthew-levan Feb 4, 2026
cdbcb1f
book: adds `_bench_write_speed_mixed` according to event histogram fr…
matthew-levan Feb 5, 2026
c9242c2
Merge branch 'develop' into ml/book
matthew-levan Feb 5, 2026
58b7efd
book: simplify batched writes
dozreg-toplud Feb 5, 2026
65e4f15
book: windows compatibility
dozreg-toplud Feb 5, 2026
23d7e9e
book: uses `c3_d` by default
matthew-levan Feb 6, 2026
71c086b
book: adds last batch checksum with validation
matthew-levan Feb 13, 2026
e90f0d3
Merge branch 'develop' into ml/book
matthew-levan Mar 9, 2026
48131d3
Merge branch 'develop' into ml/book
matthew-levan Mar 11, 2026
e859ac0
Merge branch 'ml/book' into ml/shm
matthew-levan Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/shared.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ jobs:
pact-test equality-test \
boot-test newt-test \
vere-noun-test unix-test \
palloc-test benchmarks \
palloc-test book-test \
benchmarks \
-Doptimize=ReleaseFast \
-Dpace=${{inputs.pace}} \
--summary all
Expand Down
10 changes: 10 additions & 0 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,16 @@ fn buildBinary(
.file = "pkg/vere/ames_tests.c",
.deps = vere_test_deps,
},
.{
.name = "book-test",
.file = "pkg/vere/book_tests.c",
.deps = vere_test_deps,
},
.{
.name = "lmdb-test",
.file = "pkg/vere/lmdb_tests.c",
.deps = vere_test_deps,
},
.{
.name = "boot-test",
.file = "pkg/vere/boot_tests.c",
Expand Down
51 changes: 43 additions & 8 deletions pkg/c3/platform/windows/compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@
#include <tlhelp32.h>
#include "errno.h"

static void
ov_from_off_t(OVERLAPPED* ov, off_t offset)
{
ov->OffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)0 : (DWORD)((offset >> 32) & 0xFFFFFFFFL);

ov->Offset = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)offset : (DWORD)(offset & 0xFFFFFFFFL);
}

// set default CRT file mode to binary
// note that mingw binmode.o does nothing
#undef _fmode
Expand Down Expand Up @@ -563,10 +573,7 @@ ssize_t pread(int fd, void *buf, size_t count, off_t offset)

OVERLAPPED overlapped = {0};

overlapped.OffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)0 : (DWORD)((offset >> 32) & 0xFFFFFFFFL);
overlapped.Offset = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)offset : (DWORD)(offset & 0xFFFFFFFFL);
ov_from_off_t(&overlapped, offset);

HANDLE h = (HANDLE)_get_osfhandle(fd);

Expand All @@ -593,10 +600,7 @@ ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)

OVERLAPPED overlapped = {0};

overlapped.OffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)0 : (DWORD)((offset >> 32) & 0xFFFFFFFFL);
overlapped.Offset = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)offset : (DWORD)(offset & 0xFFFFFFFFL);
ov_from_off_t(&overlapped, offset);

HANDLE h = (HANDLE)_get_osfhandle(fd);

Expand All @@ -612,3 +616,34 @@ ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)

return (ssize_t)len;
}

ssize_t pwritev(int fd, const struct iovec* iov, size_t iovcnt, off_t offset)
{
HANDLE h = (HANDLE)_get_osfhandle(fd);

if ( INVALID_HANDLE_VALUE == h ) {
errno = EBADF;
return -1;
}

DWORD written;
ssize_t len = 0;
OVERLAPPED ov = {0};

for (size_t i = 0; i < iovcnt; i++) {
ov_from_off_t(&ov, offset);
DWORD len_write = (DWORD)iov[i].iov_len; // XX chunk on large writes?
void* buf = iov[i].iov_base;
if ( !WriteFile(h, buf, len_write, &written, &ov) ) {
errno = err_win_to_posix(GetLastError());
return -1;
}

len += written;
offset += written;

if ( written < iov[i].iov_len ) break;
}

return len;
}
3 changes: 3 additions & 0 deletions pkg/c3/platform/windows/compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ void *memmem(const void *h0, size_t k, const void *n0, size_t l);

uint32_t getppid();

struct iovec { void *iov_base; size_t iov_len; };

ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
ssize_t pwritev(int fd, const struct iovec* iov, size_t iovcnt, off_t offset);

#define SIGUSR1 10
#define SIGALRM 14
Expand Down
3 changes: 2 additions & 1 deletion pkg/noun/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ typedef c3_h u3e_version;
*/
#define U3E_VER1 1 // north+south.bin
#define U3E_VER2 2 // image.bin
#define U3E_VERLAT U3E_VER2
#define U3E_VER3 3 // book.log
#define U3E_VERLAT U3E_VER3

#endif /* ifndef U3_VERSION_H */
Loading
Loading