Skip to content

state: enforce 10 MiB log caps for thread and threadless process logs#12038

Merged
charley-oai merged 13 commits intomainfrom
cc/log-prune-10mib
Feb 19, 2026
Merged

state: enforce 10 MiB log caps for thread and threadless process logs#12038
charley-oai merged 13 commits intomainfrom
cc/log-prune-10mib

Conversation

@charley-oai
Copy link
Collaborator

@charley-oai charley-oai commented Feb 17, 2026

Summary

  • enforce a 10 MiB cap per thread_id in state log storage
  • enforce a 10 MiB cap per process_uuid for threadless (thread_id IS NULL) logs
  • scope pruning to only keys affected by the current insert batch
  • add a cheap per-key SUM(...) precheck so windowed prune queries only run for keys that are currently over the cap
  • add SQLite indexes used by the pruning queries
  • add focused runtime tests covering both pruning behaviors

Why

This keeps log growth bounded by the intended partition semantics while preserving a small, readable implementation localized to the existing insert path.

Local Latency Snapshot (No Truncation-Pressure Run)

Collected from session 019c734f-1d16-7002-9e00-c966c9fbbcae using local-only (uncommitted) instrumentation, while not specifically benchmarking the truncation-heavy regime.

Percentiles By Query (ms)

query count p50 p90 p95 p99 max
insert_logs.insert_batch 110 0.332 0.999 1.811 2.978 3.493
insert_logs.precheck.process 106 0.074 0.152 0.206 0.258 0.426
insert_logs.precheck.thread 73 0.118 0.206 0.253 1.025 1.025
insert_logs.prune.process 58 0.291 0.576 0.607 1.088 1.088
insert_logs.prune.thread 44 0.318 0.467 0.728 0.797 0.797
insert_logs.prune_total 110 0.488 0.976 1.237 1.593 1.684
insert_logs.total 110 1.315 2.889 3.623 5.739 5.961
insert_logs.tx_begin 110 0.133 0.235 0.282 0.412 0.546
insert_logs.tx_commit 110 0.259 0.689 0.772 1.065 1.080

insert_logs.total Histogram (ms)

bucket count
<= 0.100 0
<= 0.250 0
<= 0.500 7
<= 1.000 33
<= 2.000 40
<= 5.000 28
<= 10.000 2
<= 20.000 0
<= 50.000 0
<= 100.000 0
> 100.000 0

Local Latency Snapshot (Truncation-Heavy / Cap-Hit Regime)

Collected from a run where cap-hit behavior was frequent (135/180 insert calls), using local-only (uncommitted) instrumentation and a temporary local cap of 10_000 bytes for stress testing (not the merged 10 MiB cap).

Percentiles By Query (ms)

query count p50 p90 p95 p99 max
insert_logs.insert_batch 180 0.524 1.645 2.163 3.424 3.777
insert_logs.precheck.process 171 0.086 0.235 0.373 0.758 1.147
insert_logs.precheck.thread 100 0.105 0.251 0.291 1.176 1.622
insert_logs.prune.process 109 0.386 0.839 1.146 1.548 2.588
insert_logs.prune.thread 56 0.253 0.550 1.148 2.484 2.484
insert_logs.prune_total 180 0.511 1.221 1.695 4.548 5.512
insert_logs.total 180 1.631 3.902 5.103 8.901 9.095
insert_logs.total_cap_hit 135 1.876 4.501 5.547 8.902 9.096
insert_logs.total_no_cap_hit 45 0.520 1.700 2.079 3.294 3.294
insert_logs.tx_begin 180 0.109 0.253 0.287 1.088 1.406
insert_logs.tx_commit 180 0.267 0.813 1.170 2.497 2.574

insert_logs.total Histogram (ms)

bucket count
<= 0.100 0
<= 0.250 0
<= 0.500 16
<= 1.000 39
<= 2.000 60
<= 5.000 54
<= 10.000 11
<= 20.000 0
<= 50.000 0
<= 100.000 0
> 100.000 0

insert_logs.total Histogram When Cap Was Hit (ms)

bucket count
<= 0.100 0
<= 0.250 0
<= 0.500 0
<= 1.000 22
<= 2.000 51
<= 5.000 51
<= 10.000 11
<= 20.000 0
<= 50.000 0
<= 100.000 0
> 100.000 0

Performance Takeaways

  • Even in a cap-hit-heavy run (75% cap-hit calls), insert_logs.total stays sub-10ms at p99 (8.901ms) and max (9.095ms).
  • Calls that did not hit the cap are materially cheaper (insert_logs.total_no_cap_hit p95 2.079ms) than cap-hit calls (insert_logs.total_cap_hit p95 5.547ms).
  • Compared to the earlier non-truncation-pressure run, overall insert_logs.total rose from p95 3.623ms to p95 5.103ms (+1.48ms), indicating bounded overhead when pruning is active.
  • This truncation-heavy run used an intentionally low local cap for stress testing; with the real 10 MiB cap, cap-hit frequency should be much lower in normal sessions.

Codex author

codex resume 019c6792-fed7-76f3-b94c-c7f3df43bf66

@charley-oai
Copy link
Collaborator Author

@codex review this

Copy link
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6a55b4f043

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@charley-oai
Copy link
Collaborator Author

@codex review this

Copy link
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6274c296fd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@charley-oai
Copy link
Collaborator Author

@codex review this

@chatgpt-codex-connector
Copy link
Contributor

Codex Review: Didn't find any major issues. More of your lovely PRs please.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@charley-oai
Copy link
Collaborator Author

@codex review this

Copy link
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f63a77f11a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@charley-oai
Copy link
Collaborator Author

@codex review this

Copy link
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8c87e90ac4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@charley-oai
Copy link
Collaborator Author

@codex review this

@chatgpt-codex-connector
Copy link
Contributor

Codex Review: Didn't find any major issues. Breezy!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Collaborator

@jif-oai jif-oai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good for me. If the write load is too high we could run it only x% of the time as I don't think an overshoot is a big deal

const LOG_PARTITION_SIZE_LIMIT_BYTES: i64 = 10 * 1024 * 1024;
// Estimated payload bytes used for partition caps. This intentionally ignores
// SQLite storage overhead and focuses on user-visible log content size.
const LOG_ROW_ESTIMATED_BYTES_SQL: &str = r#"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could compute it up-front at insertion time to make the rest faster (read >> write)

@charley-oai charley-oai merged commit 7f3dbae into main Feb 19, 2026
41 of 45 checks passed
@charley-oai charley-oai deleted the cc/log-prune-10mib branch February 19, 2026 01:08
@github-actions github-actions bot locked and limited conversation to collaborators Feb 19, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants