Commit Graph
36 Commits
Author SHA1 Message Date
Muki Kiboigo 0f2957cda2 add SqliteCache as default local impl 2026-08-03 18:17:40 -07:00
Karl Seguin dcb98853b9 chore: make our use of clock/timestamp more consistent
Zig 0.16 changed clocks/timestamps. Our migration to Zig 0.16 took the path of
least resistance. For example, we kept 'monotonic' and 'real' even though Zig
0.16 renamed them to 'boot' and 'clock'

This commit tries to standardize all timestamp usage to: lp.datetime.timestamp
and lp.datetime.milliTimestamp using the new zig 0.16 names ('boot' and 'clock')
2026-07-27 09:28:48 +08:00
Karl Seguin 8e42d63c1c zig: Zig 0.16
Built against https://github.com/lightpanda-io/zig-v8-fork/tree/zig-0.16 but
it doesn't require a new v8 build.

Built against https://github.com/lightpanda-io/boringssl-zig/tree/zig-0.16
since the current fork we point to isn't updated.

A global std.Io instance, lp.io. Way easier this way and requires 0 changes to
our libcurl integration / event loop.

Network code uses a new layer that does what Zig 0.15's posix package used to
do. Again, quicker migration that way. But, as long as we have the global IO,
and given the half-baked nature of networking in std.Io 0.16, this just makes
sense. Things can be migrated as needed.

The std.time.* -> std.Io.Timestamp/Clock/Duration resulted in _a lot_ of
changes. ArrayList = .{} -> ArrayList -> .empty also resulted in a lot of
changes, but that's obviously superficial. As is the trimLeft/trimRight ->
trimStart/trimEnd rename.

Locking adopt the `Uncancelable` variants, e.g. mutex.lockUncancelable() to
preserve the error-free signature (and, because cancellation would be something
we'd have to put more thought into).

std.json.ObjectMap is now unmanaged, so the allocator had to be passed along.
However, there's still a deprecated managed variant of MemoryPool, so I switched
to it (we can do a small follow up PR to move to the unmanaged after).

I tried use_llvm = false, but it locks my computer, consuming RAM until MacOS
gives me a popup I've never seen before, begging me to start killing processes.

Agent and the networking stuff saw the most significant changes.
2026-07-22 13:26:03 +08:00
Muki Kiboigo 65cf678822 heuristically cache only with Last-Modified header 2026-06-30 09:49:01 -07:00
Muki Kiboigo f75b6f966b add simple 1 day heuristic cache 2026-06-28 14:09:52 -07:00
Muki Kiboigo 6433ca7df2 rename RenewRequest to RenewResponse 2026-06-17 20:32:58 -07:00
Muki Kiboigo 3091571b91 add tests for cache entry renewal 2026-06-16 22:35:42 -07:00
Muki Kiboigo 47483fd992 update more fields on renew 2026-06-16 22:13:08 -07:00
Muki Kiboigo 83a690cdf9 fix max-age tracking on no-cache directive 2026-06-15 07:20:18 -07:00
Muki Kiboigo 65c8d6fe21 update CacheControl test 2026-06-14 09:17:26 -07:00
Muki Kiboigo dd6dbd27da etag and last_modified null by default 2026-06-14 09:17:26 -07:00
Muki Kiboigo 2728cfc65e Cache.revalidate -> Cache.renew 2026-06-14 09:17:25 -07:00
Muki Kiboigo feefcd4650 Cache Revalidation 2026-06-14 09:16:33 -07:00
Muki Kiboigo a6c8a28977 add Cache.revalidate + supporting logic 2026-06-14 09:16:31 -07:00
Muki Kiboigo f0bc85f117 add Cache Eviction 2026-05-25 11:23:25 -07:00
Muki Kiboigo 14e1f1bcf6 add clear fn to Cache and FsCache 2026-05-07 09:00:33 -07:00
Karl Seguin 2d20e57f80 Change all @import("...../log.zig") to const log = lp.log;
@import("lightpanda") where needed.

Would also like to do this for String, Page, Session and js which all stand out
as types that are use across the codebase.

I know that a few devs are doing this in new work and I haven't heard anyone
voice an objection.
2026-04-20 12:40:04 +08:00
Karl Seguin 3be913750e Cache-Control is public by default
- If private isn't specified, default to public.
- Add some tests
- Optimize parsing by lower-casing once and switch to std.mem
2026-04-11 07:23:56 +08:00
Pierre Tachoire a71ff521aa cache: add debug log with no store reason 2026-04-03 07:23:32 -07:00
Muki Kiboigo 13ea4d1ee3 more expressive cache logging 2026-04-03 07:23:32 -07:00
Muki Kiboigo 3d760e4577 add format to CachedMetadata 2026-04-03 07:23:31 -07:00
Muki Kiboigo a1a301666f dupe url in tryCache 2026-04-03 07:23:31 -07:00
Muki Kiboigo f098a991a8 remove cache revalidation stubs 2026-04-03 07:23:30 -07:00
Muki Kiboigo 7b5e4d6f52 add Vary support 2026-04-03 07:23:30 -07:00
Muki Kiboigo 6a57d69359 switch to single file cache 2026-04-03 07:23:30 -07:00
Muki Kiboigo 9c5e67fbf5 properly deinit cache 2026-04-03 07:23:30 -07:00
Muki Kiboigo a60932bbe0 require timestamp passed in with cache request 2026-04-03 07:23:29 -07:00
Muki Kiboigo 609983da87 only store stuff when we know we will cache 2026-04-03 07:23:29 -07:00
Muki Kiboigo 65f77af84d shortcircuit a lot of caching checks 2026-04-03 07:23:29 -07:00
Muki Kiboigo 557a4458a4 use CacheRequest instead of key 2026-04-03 07:23:28 -07:00
Muki Kiboigo 2de35a9db2 use arena_pool for cache get 2026-04-03 07:23:28 -07:00
Muki Kiboigo 5c2207ecc3 add more http caching rules 2026-04-03 07:23:27 -07:00
Muki Kiboigo 18d347e247 use CacheControl and Vary 2026-04-03 07:23:27 -07:00
Muki Kiboigo 29dfbbfdea cache headers along with response 2026-04-03 07:23:27 -07:00
Muki Kiboigo 647d989191 use enum approach instead of vtable 2026-04-03 07:23:27 -07:00
Muki Kiboigo 2962864f3d create Cache interface file 2026-04-03 07:22:20 -07:00