Skip to content

Reject negative chunk puts and keep pending HT consistent on NOMEM - #2533

Merged
timsehn merged 1 commit into
masterfrom
fix/chunk-store-put-bounds
Sep 1, 2026
Merged

Reject negative chunk puts and keep pending HT consistent on NOMEM#2533
timsehn merged 1 commit into
masterfrom
fix/chunk-store-put-bounds

Conversation

@timsehn

@timsehn timsehn commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Beta review item 4: two storage-engine footguns.

Negative chunkStorePut size. nData was hashed and copied before any sign check. A negative length wraps CS_WAL_CHUNK_HDR_SIZE + nData as a signed int and is undefined in memcpy. Reject with SQLITE_TOOBIG, matching chunkStorePutSparse.

Pending hash-table grow on NOMEM. csPendHTEnsure set nPendingHTSize to the new mask before reallocating aPendingHTNext. If that realloc failed, later lookups used the larger mask over uninitialized buckets and treated garbage as next-indexes. Assign the new size only after both reallocs succeed, then rebuild.

test/chunk_store_put_bounds_test.c (coverage C suite):

  • Negative / empty / valid puts
  • 16385 pending chunks (crosses the load-4 grow), fail the larger realloc, assert the first chunk is still findable and a later put works

Co-Authored-By: Grok 4.6 noreply@x.ai

chunkStorePut hashed and copied nData before checking sign, so a
negative size wrapped the write-buf grow and memcpy. Return SQLITE_TOOBIG
like PutSparse.

Pending hash-table grow assigned nPendingHTSize before the next-index
realloc. A NOMEM there left a larger mask over uninitialized buckets.
Commit the new size only after both reallocs succeed, then rebuild.

Cover both with chunk_store_put_bounds_test: negative puts stay out of
the store, and a failed HT grow still finds previously inserted pending
chunks.

Co-Authored-By: Grok 4.6 <noreply@x.ai>
@itoqa

itoqa Bot commented Sep 1, 2026

Copy link
Copy Markdown

Ito QA test results
Commit: 5181670: 13 test cases ran, 13 passed ✅.

Summary

Coverage spans normal storage and retrieval, duplicate handling, empty and invalid input, persistence across close and reopen, and behavior at large pending-table boundaries. It also exercises adversarial memory-allocation failures and recovery, plus test-selection and feature-toggle behavior, with healthy results across these areas.

Safe to merge — the run found no regressions, new failures, or previously reported failures attributable to this PR, and the exercised storage behaviors remain healthy. No merge blocker is indicated; overall risk is low.

Tests run by Ito

View full run

Result Severity Type Description
General Negative sizes were rejected safely, while empty and one-byte data were accepted and stored correctly.
General The native bounds check passed all 16 checks. The separate before, at, and after threshold case was not available, but source review confirmed that table growth rebuilds every pending entry and duplicate chunks are checked before insertion.
General The coverage, all-tests, and specialized selections counted and passed every test they were meant to run. With the feature disabled, the new test used its documented no-op fallback instead of being silently treated as an enabled test.
General Existing chunks stay findable after a table-growth memory allocation fails, and later inserts can recover successfully.
General The native recovery test passed all 16 checks. A failed table-growth allocation did not make the old chunk disappear, and later inserts and presence checks still worked.
General Stored data could be read right after saving, after duplicate saves, and after the store was closed and reopened.
Build The native bounds test built successfully, ran all 16 checks, and passed. The coverage run included the test and reported 21 of 21 tests passed.
Chunk Negative chunk lengths are rejected with the expected error, and no chunk is saved. Valid positive and empty chunks still work.
Chunk A positive payload was stored, found again by its hash, and accepted a second time without creating a duplicate. Empty input also completed successfully, and all 16 native checks passed.
Pending After the pending data set grew, a forced memory allocation failure did not lose existing data, and a later insert still worked.
Pending A small pending set uses the intended simple lookup path, and source review found no product defect. The requested separate four-byte check was not available in the test coverage, so this case was reclassified as passed based on the available checks and code.
Rev A zero-length chunk with no data pointer was accepted in memory and file-backed stores. Both stores returned the canonical empty-chunk hash, reported it as present, deduplicated a repeated write, and preserved it after reopening.
Rev All 16,386 stored chunks stayed available after the store was committed, closed, and reopened. A new chunk was also saved and remained available after a second commit and reopen.

Tip

Reply with @itoqa to send us feedback on this test run.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

DoltLite performance vs PR base

  • Baseline: c5ce1c80850d6995fdc2b4d854452f5a17982b89
  • Candidate: ea0aa4f74d5e390aeab2ae998b619e79fcdaf582
  • Overall ratio: 1.001x
  • Gate result: PASS
  • Gates: individual > 1.50x with more than 10.00ms regression; section, suite, or overall > 1.25x with the same minimum delta
  • vc individual gate: > 2.00x with more than 50.00ms regression
  • Confirmed failed gates: none
  • Automatic retries: none
Suite Workloads Baseline total Candidate total Ratio Result
blobpk 69 11.05s 11.06s 1.001x PASS
compositepk 69 11.84s 11.80s 0.997x PASS
int 69 10.31s 10.32s 1.001x PASS
textpk 69 11.39s 11.43s 1.004x PASS
vc 13 755.32ms 753.73ms 0.998x PASS
blobpk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 37.17ms 37.02ms -150us 0.996x PASS
mem_reads oltp_range_select 13.37ms 13.56ms +192us 1.014x PASS
mem_reads oltp_sum_range 13.32ms 13.33ms +16us 1.001x PASS
mem_reads oltp_order_range 3.20ms 3.20ms +3us 1.001x PASS
mem_reads oltp_distinct_range 4.31ms 4.37ms +56us 1.013x PASS
mem_reads oltp_index_scan 6.08ms 6.16ms +74us 1.012x PASS
mem_reads select_random_points 20.61ms 20.97ms +352us 1.017x PASS
mem_reads select_random_ranges 5.27ms 5.29ms +12us 1.002x PASS
mem_reads covering_index_scan 4.49ms 4.53ms +45us 1.010x PASS
mem_reads groupby_scan 35.55ms 34.28ms -1.27ms 0.964x PASS
mem_reads index_join 8.89ms 8.88ms -2us 1.000x PASS
mem_reads index_join_scan 5.23ms 5.14ms -83us 0.984x PASS
mem_reads types_table_scan 1.16s 1.16s +345us 1.000x PASS
mem_reads table_scan 1.27s 1.27s +1.40ms 1.001x PASS
mem_reads oltp_read_only 135.87ms 135.89ms +15us 1.000x PASS
mem_writes oltp_bulk_insert 362.97ms 360.92ms -2.06ms 0.994x PASS
mem_writes oltp_insert 37.94ms 38.03ms +92us 1.002x PASS
mem_writes oltp_update_index 130.28ms 129.96ms -317us 0.998x PASS
mem_writes oltp_update_non_index 76.69ms 77.08ms +393us 1.005x PASS
mem_writes oltp_delete_insert 101.52ms 101.67ms +152us 1.001x PASS
mem_writes oltp_write_only 58.93ms 59.60ms +672us 1.011x PASS
mem_writes types_delete_insert 52.40ms 54.01ms +1.61ms 1.031x PASS
mem_writes oltp_read_write 141.44ms 142.17ms +734us 1.005x PASS
file_reads oltp_point_select 56.33ms 56.71ms +381us 1.007x PASS
file_reads oltp_range_select 15.33ms 15.60ms +276us 1.018x PASS
file_reads oltp_sum_range 15.46ms 15.59ms +129us 1.008x PASS
file_reads oltp_order_range 3.46ms 3.55ms +94us 1.027x PASS
file_reads oltp_distinct_range 4.65ms 4.69ms +41us 1.009x PASS
file_reads oltp_index_scan 8.24ms 8.28ms +37us 1.004x PASS
file_reads select_random_points 23.62ms 23.48ms -139us 0.994x PASS
file_reads select_random_ranges 7.22ms 7.19ms -27us 0.996x PASS
file_reads covering_index_scan 6.65ms 6.73ms +83us 1.012x PASS
file_reads groupby_scan 36.56ms 36.51ms -42us 0.999x PASS
file_reads index_join 10.76ms 11.04ms +281us 1.026x PASS
file_reads index_join_scan 5.62ms 5.69ms +78us 1.014x PASS
file_reads types_table_scan 1.16s 1.16s +2.74ms 1.002x PASS
file_reads table_scan 1.27s 1.27s +45us 1.000x PASS
file_reads oltp_read_only 167.79ms 162.39ms -5.40ms 0.968x PASS
file_writes oltp_bulk_insert 375.10ms 372.87ms -2.23ms 0.994x PASS
file_writes oltp_insert 44.83ms 44.54ms -294us 0.993x PASS
file_writes oltp_update_index 146.41ms 146.61ms +203us 1.001x PASS
file_writes oltp_update_non_index 89.55ms 91.36ms +1.81ms 1.020x PASS
file_writes oltp_delete_insert 115.59ms 116.16ms +562us 1.005x PASS
file_writes oltp_write_only 70.41ms 70.72ms +317us 1.005x PASS
file_writes types_delete_insert 61.33ms 62.07ms +736us 1.012x PASS
file_writes oltp_read_write 152.03ms 153.82ms +1.80ms 1.012x PASS
ac_reads oltp_point_select 56.95ms 56.65ms -308us 0.995x PASS
ac_reads oltp_range_select 15.33ms 15.57ms +248us 1.016x PASS
ac_reads oltp_sum_range 15.44ms 15.45ms +7us 1.000x PASS
ac_reads oltp_order_range 3.49ms 3.52ms +22us 1.006x PASS
ac_reads oltp_distinct_range 4.61ms 4.59ms -26us 0.994x PASS
ac_reads oltp_index_scan 8.25ms 8.30ms +48us 1.006x PASS
ac_reads select_random_points 23.65ms 23.93ms +277us 1.012x PASS
ac_reads select_random_ranges 7.27ms 7.13ms -142us 0.980x PASS
ac_reads covering_index_scan 6.70ms 6.67ms -31us 0.995x PASS
ac_reads groupby_scan 34.59ms 36.42ms +1.84ms 1.053x PASS
ac_reads index_join 10.84ms 10.91ms +76us 1.007x PASS
ac_reads index_join_scan 5.64ms 5.64ms +4us 1.001x PASS
ac_reads types_table_scan 1.17s 1.16s -2.88ms 0.998x PASS
ac_reads table_scan 1.27s 1.27s +160us 1.000x PASS
ac_reads oltp_read_only 164.94ms 163.55ms -1.39ms 0.992x PASS
ac_writes oltp_bulk_insert_ac 76.22ms 76.66ms +436us 1.006x PASS
ac_writes oltp_insert_ac 91.02ms 91.68ms +664us 1.007x PASS
ac_writes oltp_update_index_ac 99.07ms 102.44ms +3.36ms 1.034x PASS
ac_writes oltp_update_non_index_ac 82.37ms 84.00ms +1.63ms 1.020x PASS
ac_writes oltp_delete_insert_ac 94.11ms 95.45ms +1.34ms 1.014x PASS
ac_writes oltp_write_only_ac 94.41ms 91.93ms -2.48ms 0.974x PASS
ac_writes types_delete_insert_ac 83.41ms 85.38ms +1.98ms 1.024x PASS
ac_writes oltp_read_write_ac 97.83ms 98.95ms +1.12ms 1.011x PASS
compositepk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 38.64ms 38.97ms +333us 1.009x PASS
mem_reads oltp_range_select 20.88ms 20.80ms -78us 0.996x PASS
mem_reads oltp_sum_range 19.93ms 19.75ms -185us 0.991x PASS
mem_reads oltp_order_range 3.91ms 3.88ms -26us 0.993x PASS
mem_reads oltp_distinct_range 4.99ms 5.00ms +10us 1.002x PASS
mem_reads oltp_index_scan 6.12ms 6.08ms -31us 0.995x PASS
mem_reads select_random_points 31.36ms 32.78ms +1.42ms 1.045x PASS
mem_reads select_random_ranges 8.22ms 8.37ms +151us 1.018x PASS
mem_reads covering_index_scan 4.71ms 4.75ms +34us 1.007x PASS
mem_reads groupby_scan 41.40ms 41.38ms -23us 0.999x PASS
mem_reads index_join 11.20ms 10.75ms -447us 0.960x PASS
mem_reads index_join_scan 5.67ms 5.62ms -41us 0.993x PASS
mem_reads types_table_scan 1.27s 1.26s -15.38ms 0.988x PASS
mem_reads table_scan 1.40s 1.40s -517us 1.000x PASS
mem_reads oltp_read_only 165.37ms 164.59ms -780us 0.995x PASS
mem_writes oltp_bulk_insert 339.13ms 338.76ms -366us 0.999x PASS
mem_writes oltp_insert 35.78ms 35.55ms -229us 0.994x PASS
mem_writes oltp_update_index 130.47ms 129.42ms -1.05ms 0.992x PASS
mem_writes oltp_update_non_index 79.78ms 77.52ms -2.26ms 0.972x PASS
mem_writes oltp_delete_insert 99.12ms 100.40ms +1.28ms 1.013x PASS
mem_writes oltp_write_only 60.64ms 60.07ms -575us 0.991x PASS
mem_writes types_delete_insert 53.26ms 53.67ms +410us 1.008x PASS
mem_writes oltp_read_write 161.11ms 160.17ms -937us 0.994x PASS
file_reads oltp_point_select 60.45ms 60.80ms +350us 1.006x PASS
file_reads oltp_range_select 23.11ms 22.69ms -417us 0.982x PASS
file_reads oltp_sum_range 22.04ms 21.99ms -51us 0.998x PASS
file_reads oltp_order_range 4.12ms 4.14ms +26us 1.006x PASS
file_reads oltp_distinct_range 5.29ms 5.21ms -87us 0.984x PASS
file_reads oltp_index_scan 8.39ms 8.38ms -9us 0.999x PASS
file_reads select_random_points 33.94ms 34.51ms +570us 1.017x PASS
file_reads select_random_ranges 10.62ms 10.60ms -18us 0.998x PASS
file_reads covering_index_scan 6.82ms 6.92ms +99us 1.015x PASS
file_reads groupby_scan 41.47ms 41.39ms -76us 0.998x PASS
file_reads index_join 12.45ms 12.15ms -301us 0.976x PASS
file_reads index_join_scan 6.05ms 6.00ms -51us 0.992x PASS
file_reads types_table_scan 1.26s 1.26s +444us 1.000x PASS
file_reads table_scan 1.41s 1.42s +7.14ms 1.005x PASS
file_reads oltp_read_only 197.85ms 196.55ms -1.30ms 0.993x PASS
file_writes oltp_bulk_insert 347.37ms 348.82ms +1.45ms 1.004x PASS
file_writes oltp_insert 41.20ms 41.38ms +185us 1.004x PASS
file_writes oltp_update_index 140.42ms 139.16ms -1.27ms 0.991x PASS
file_writes oltp_update_non_index 93.75ms 94.25ms +498us 1.005x PASS
file_writes oltp_delete_insert 111.78ms 112.27ms +485us 1.004x PASS
file_writes oltp_write_only 70.91ms 71.41ms +499us 1.007x PASS
file_writes types_delete_insert 59.87ms 59.74ms -129us 0.998x PASS
file_writes oltp_read_write 170.18ms 166.98ms -3.20ms 0.981x PASS
ac_reads oltp_point_select 60.74ms 61.02ms +282us 1.005x PASS
ac_reads oltp_range_select 23.25ms 22.59ms -657us 0.972x PASS
ac_reads oltp_sum_range 21.95ms 21.94ms -8us 1.000x PASS
ac_reads oltp_order_range 4.16ms 4.11ms -51us 0.988x PASS
ac_reads oltp_distinct_range 5.28ms 5.25ms -27us 0.995x PASS
ac_reads oltp_index_scan 8.40ms 8.35ms -56us 0.993x PASS
ac_reads select_random_points 33.50ms 34.34ms +834us 1.025x PASS
ac_reads select_random_ranges 10.56ms 10.74ms +177us 1.017x PASS
ac_reads covering_index_scan 6.86ms 6.89ms +27us 1.004x PASS
ac_reads groupby_scan 41.35ms 41.35ms -1us 1.000x PASS
ac_reads index_join 12.36ms 12.04ms -314us 0.975x PASS
ac_reads index_join_scan 5.97ms 5.93ms -41us 0.993x PASS
ac_reads types_table_scan 1.27s 1.24s -25.84ms 0.980x PASS
ac_reads table_scan 1.41s 1.40s -8.43ms 0.994x PASS
ac_reads oltp_read_only 195.59ms 195.90ms +301us 1.002x PASS
ac_writes oltp_bulk_insert_ac 60.60ms 61.37ms +766us 1.013x PASS
ac_writes oltp_insert_ac 75.84ms 84.19ms +8.35ms 1.110x PASS
ac_writes oltp_update_index_ac 90.46ms 85.14ms -5.32ms 0.941x PASS
ac_writes oltp_update_non_index_ac 67.88ms 68.88ms +991us 1.015x PASS
ac_writes oltp_delete_insert_ac 76.92ms 79.01ms +2.09ms 1.027x PASS
ac_writes oltp_write_only_ac 78.34ms 84.05ms +5.70ms 1.073x PASS
ac_writes types_delete_insert_ac 67.99ms 65.67ms -2.32ms 0.966x PASS
ac_writes oltp_read_write_ac 84.89ms 88.05ms +3.15ms 1.037x PASS
int details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 27.80ms 27.37ms -437us 0.984x PASS
mem_reads oltp_range_select 11.10ms 11.11ms +10us 1.001x PASS
mem_reads oltp_sum_range 10.66ms 10.70ms +42us 1.004x PASS
mem_reads oltp_order_range 2.78ms 2.81ms +29us 1.010x PASS
mem_reads oltp_distinct_range 3.90ms 3.92ms +16us 1.004x PASS
mem_reads oltp_index_scan 4.78ms 4.80ms +18us 1.004x PASS
mem_reads select_random_points 11.05ms 11.14ms +88us 1.008x PASS
mem_reads select_random_ranges 3.93ms 3.97ms +38us 1.010x PASS
mem_reads covering_index_scan 4.11ms 4.10ms -3us 0.999x PASS
mem_reads groupby_scan 34.46ms 34.62ms +165us 1.005x PASS
mem_reads index_join 7.55ms 7.63ms +84us 1.011x PASS
mem_reads index_join_scan 4.67ms 4.74ms +70us 1.015x PASS
mem_reads types_table_scan 1.18s 1.19s +4.67ms 1.004x PASS
mem_reads table_scan 1.31s 1.32s +2.09ms 1.002x PASS
mem_reads oltp_read_only 111.76ms 111.86ms +108us 1.001x PASS
mem_writes oltp_bulk_insert 242.03ms 242.37ms +343us 1.001x PASS
mem_writes oltp_insert 27.60ms 27.29ms -309us 0.989x PASS
mem_writes oltp_update_index 89.79ms 91.43ms +1.64ms 1.018x PASS
mem_writes oltp_update_non_index 53.76ms 54.16ms +401us 1.007x PASS
mem_writes oltp_delete_insert 72.93ms 73.14ms +215us 1.003x PASS
mem_writes oltp_write_only 47.38ms 46.69ms -686us 0.986x PASS
mem_writes types_delete_insert 36.24ms 36.36ms +127us 1.004x PASS
mem_writes oltp_read_write 105.65ms 106.66ms +1.01ms 1.010x PASS
file_reads oltp_point_select 49.12ms 49.56ms +437us 1.009x PASS
file_reads oltp_range_select 13.13ms 13.27ms +137us 1.010x PASS
file_reads oltp_sum_range 12.81ms 12.87ms +66us 1.005x PASS
file_reads oltp_order_range 3.06ms 3.08ms +21us 1.007x PASS
file_reads oltp_distinct_range 4.13ms 4.20ms +62us 1.015x PASS
file_reads oltp_index_scan 7.16ms 7.08ms -75us 0.990x PASS
file_reads select_random_points 13.53ms 13.54ms +14us 1.001x PASS
file_reads select_random_ranges 6.07ms 6.11ms +34us 1.006x PASS
file_reads covering_index_scan 6.55ms 6.36ms -185us 0.972x PASS
file_reads groupby_scan 34.77ms 34.83ms +62us 1.002x PASS
file_reads index_join 9.12ms 9.07ms -49us 0.995x PASS
file_reads index_join_scan 5.11ms 4.96ms -148us 0.971x PASS
file_reads types_table_scan 1.18s 1.18s +1.25ms 1.001x PASS
file_reads table_scan 1.31s 1.31s -3.44ms 0.997x PASS
file_reads oltp_read_only 144.30ms 143.69ms -607us 0.996x PASS
file_writes oltp_bulk_insert 251.61ms 254.23ms +2.63ms 1.010x PASS
file_writes oltp_insert 31.61ms 31.64ms +32us 1.001x PASS
file_writes oltp_update_index 100.80ms 101.14ms +346us 1.003x PASS
file_writes oltp_update_non_index 66.43ms 66.77ms +343us 1.005x PASS
file_writes oltp_delete_insert 80.25ms 81.33ms +1.08ms 1.013x PASS
file_writes oltp_write_only 54.00ms 54.22ms +219us 1.004x PASS
file_writes types_delete_insert 41.95ms 42.10ms +151us 1.004x PASS
file_writes oltp_read_write 113.92ms 113.22ms -690us 0.994x PASS
ac_reads oltp_point_select 48.79ms 49.01ms +216us 1.004x PASS
ac_reads oltp_range_select 13.21ms 13.14ms -60us 0.995x PASS
ac_reads oltp_sum_range 12.86ms 12.82ms -40us 0.997x PASS
ac_reads oltp_order_range 3.08ms 3.09ms +8us 1.003x PASS
ac_reads oltp_distinct_range 4.16ms 4.15ms -11us 0.997x PASS
ac_reads oltp_index_scan 7.04ms 7.05ms +16us 1.002x PASS
ac_reads select_random_points 13.31ms 13.44ms +125us 1.009x PASS
ac_reads select_random_ranges 6.08ms 6.16ms +83us 1.014x PASS
ac_reads covering_index_scan 6.50ms 6.40ms -94us 0.986x PASS
ac_reads groupby_scan 34.71ms 34.65ms -58us 0.998x PASS
ac_reads index_join 8.97ms 9.11ms +139us 1.015x PASS
ac_reads index_join_scan 4.94ms 4.93ms -7us 0.999x PASS
ac_reads types_table_scan 1.18s 1.18s -2.26ms 0.998x PASS
ac_reads table_scan 1.32s 1.32s -568us 1.000x PASS
ac_reads oltp_read_only 143.31ms 143.19ms -122us 0.999x PASS
ac_writes oltp_bulk_insert_ac 56.38ms 58.70ms +2.32ms 1.041x PASS
ac_writes oltp_insert_ac 68.74ms 69.94ms +1.19ms 1.017x PASS
ac_writes oltp_update_index_ac 81.29ms 79.70ms -1.58ms 0.981x PASS
ac_writes oltp_update_non_index_ac 63.51ms 64.59ms +1.08ms 1.017x PASS
ac_writes oltp_delete_insert_ac 71.14ms 71.14ms +4us 1.000x PASS
ac_writes oltp_write_only_ac 70.86ms 71.16ms +302us 1.004x PASS
ac_writes types_delete_insert_ac 62.26ms 62.49ms +226us 1.004x PASS
ac_writes oltp_read_write_ac 75.89ms 75.96ms +79us 1.001x PASS
textpk details
Section Test Baseline Candidate Delta Ratio Result
mem_reads oltp_point_select 37.48ms 37.67ms +188us 1.005x PASS
mem_reads oltp_range_select 13.70ms 13.60ms -99us 0.993x PASS
mem_reads oltp_sum_range 13.69ms 13.97ms +277us 1.020x PASS
mem_reads oltp_order_range 3.22ms 3.13ms -86us 0.973x PASS
mem_reads oltp_distinct_range 4.30ms 4.41ms +104us 1.024x PASS
mem_reads oltp_index_scan 6.07ms 6.01ms -62us 0.990x PASS
mem_reads select_random_points 21.24ms 20.86ms -384us 0.982x PASS
mem_reads select_random_ranges 5.28ms 5.30ms +22us 1.004x PASS
mem_reads covering_index_scan 4.54ms 4.74ms +203us 1.045x PASS
mem_reads groupby_scan 34.71ms 34.23ms -476us 0.986x PASS
mem_reads index_join 9.11ms 9.00ms -108us 0.988x PASS
mem_reads index_join_scan 5.43ms 5.38ms -59us 0.989x PASS
mem_reads types_table_scan 1.17s 1.19s +26.71ms 1.023x PASS
mem_reads table_scan 1.29s 1.27s -15.40ms 0.988x PASS
mem_reads oltp_read_only 135.82ms 138.17ms +2.35ms 1.017x PASS
mem_writes oltp_bulk_insert 360.77ms 364.89ms +4.12ms 1.011x PASS
mem_writes oltp_insert 38.41ms 38.52ms +115us 1.003x PASS
mem_writes oltp_update_index 133.53ms 133.83ms +303us 1.002x PASS
mem_writes oltp_update_non_index 79.29ms 80.30ms +1.01ms 1.013x PASS
mem_writes oltp_delete_insert 103.22ms 103.12ms -100us 0.999x PASS
mem_writes oltp_write_only 60.34ms 60.13ms -213us 0.996x PASS
mem_writes types_delete_insert 53.16ms 53.38ms +228us 1.004x PASS
mem_writes oltp_read_write 141.77ms 142.55ms +780us 1.006x PASS
file_reads oltp_point_select 57.94ms 57.08ms -866us 0.985x PASS
file_reads oltp_range_select 15.95ms 15.72ms -227us 0.986x PASS
file_reads oltp_sum_range 15.96ms 15.89ms -66us 0.996x PASS
file_reads oltp_order_range 3.48ms 3.45ms -37us 0.989x PASS
file_reads oltp_distinct_range 4.72ms 4.54ms -179us 0.962x PASS
file_reads oltp_index_scan 8.31ms 8.40ms +89us 1.011x PASS
file_reads select_random_points 24.70ms 23.74ms -962us 0.961x PASS
file_reads select_random_ranges 7.34ms 7.22ms -115us 0.984x PASS
file_reads covering_index_scan 6.86ms 6.74ms -118us 0.983x PASS
file_reads groupby_scan 34.82ms 34.86ms +48us 1.001x PASS
file_reads index_join 11.00ms 10.71ms -289us 0.974x PASS
file_reads index_join_scan 5.87ms 5.87ms -5us 0.999x PASS
file_reads types_table_scan 1.16s 1.17s +6.12ms 1.005x PASS
file_reads table_scan 1.27s 1.27s -684us 0.999x PASS
file_reads oltp_read_only 166.73ms 166.76ms +39us 1.000x PASS
file_writes oltp_bulk_insert 375.03ms 375.97ms +940us 1.003x PASS
file_writes oltp_insert 45.39ms 44.72ms -668us 0.985x PASS
file_writes oltp_update_index 153.24ms 153.32ms +84us 1.001x PASS
file_writes oltp_update_non_index 93.54ms 92.72ms -814us 0.991x PASS
file_writes oltp_delete_insert 118.89ms 118.56ms -330us 0.997x PASS
file_writes oltp_write_only 72.17ms 73.45ms +1.27ms 1.018x PASS
file_writes types_delete_insert 61.84ms 62.16ms +323us 1.005x PASS
file_writes oltp_read_write 154.51ms 153.45ms -1.06ms 0.993x PASS
ac_reads oltp_point_select 57.83ms 57.49ms -335us 0.994x PASS
ac_reads oltp_range_select 16.17ms 15.79ms -382us 0.976x PASS
ac_reads oltp_sum_range 16.16ms 16.05ms -112us 0.993x PASS
ac_reads oltp_order_range 3.51ms 3.46ms -49us 0.986x PASS
ac_reads oltp_distinct_range 4.62ms 4.58ms -42us 0.991x PASS
ac_reads oltp_index_scan 8.25ms 8.15ms -93us 0.989x PASS
ac_reads select_random_points 24.80ms 24.13ms -665us 0.973x PASS
ac_reads select_random_ranges 7.40ms 7.25ms -151us 0.980x PASS
ac_reads covering_index_scan 6.74ms 6.65ms -83us 0.988x PASS
ac_reads groupby_scan 34.78ms 34.97ms +183us 1.005x PASS
ac_reads index_join 10.84ms 10.79ms -47us 0.996x PASS
ac_reads index_join_scan 5.77ms 5.73ms -34us 0.994x PASS
ac_reads types_table_scan 1.16s 1.16s -893us 0.999x PASS
ac_reads table_scan 1.28s 1.28s +3.42ms 1.003x PASS
ac_reads oltp_read_only 168.03ms 166.37ms -1.65ms 0.990x PASS
ac_writes oltp_bulk_insert_ac 115.15ms 126.21ms +11.06ms 1.096x PASS
ac_writes oltp_insert_ac 121.52ms 127.29ms +5.76ms 1.047x PASS
ac_writes oltp_update_index_ac 133.53ms 131.35ms -2.18ms 0.984x PASS
ac_writes oltp_update_non_index_ac 109.60ms 111.28ms +1.67ms 1.015x PASS
ac_writes oltp_delete_insert_ac 124.98ms 124.06ms -929us 0.993x PASS
ac_writes oltp_write_only_ac 124.66ms 128.07ms +3.42ms 1.027x PASS
ac_writes types_delete_insert_ac 120.81ms 126.45ms +5.64ms 1.047x PASS
ac_writes oltp_read_write_ac 137.39ms 140.38ms +2.98ms 1.022x PASS
vc details
Section Test Baseline Candidate Delta Ratio Result
vc status_clean_many_tables 84.01ms 84.27ms +256us 1.003x PASS
vc status_dirty_many_tables 87.17ms 87.25ms +77us 1.001x PASS
vc diff_regular_working_one_table 79.50ms 79.42ms -81us 0.999x PASS
vc diff_regular_working_many_tables 92.92ms 92.30ms -620us 0.993x PASS
vc diff_stat_working_many_tables 92.83ms 92.25ms -582us 0.994x PASS
vc diff_schema_working_many_tables 92.76ms 92.34ms -418us 0.995x PASS
vc branch_list_many_branches 23.35ms 22.82ms -526us 0.977x PASS
vc branch_create_delete 26.20ms 26.04ms -155us 0.994x PASS
vc checkout_branch_clean 56.89ms 57.31ms +423us 1.007x PASS
vc merge_data_no_conflicts 29.98ms 30.12ms +138us 1.005x PASS
vc merge_schema_no_conflicts 22.68ms 22.84ms +163us 1.007x PASS
vc merge_data_conflicts 33.43ms 33.32ms -112us 0.997x PASS
vc merge_data_conflicts_with_resolve 33.60ms 33.44ms -152us 0.995x PASS

All relative performance gates passed.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

DoltLite source coverage

Metric Covered Total Coverage
Lines 53590 62990 85.08%
Branches 24794 36572 67.80%
Functions 2508 2720 92.21%

Merged 202 pooled raw profiles from the distributed Linux correctness jobs.

Per-file coverage (98 files)
File Lines Branches Functions
src/btree_orig_api.c 87.91% 77.27% 89.53%
src/chunk_file.c 100.00% 100.00% 100.00%
src/chunk_index.c 84.27% 66.78% 100.00%
src/chunk_refs.c 84.99% 69.17% 79.37%
src/chunk_staging.c 93.75% 81.15% 100.00%
src/chunk_store.c 91.11% 75.34% 100.00%
src/chunk_store_commit.c 86.75% 67.23% 100.00%
src/chunk_store_lock.c 88.69% 71.00% 100.00%
src/chunk_store_refs_api.c 91.17% 76.75% 100.00%
src/chunk_wal.c 82.30% 58.24% 87.50%
src/doltlite.c 100.00% 100.00% 100.00%
src/doltlite_add.c 85.95% 69.53% 100.00%
src/doltlite_ancestor.c 89.19% 68.92% 100.00%
src/doltlite_at.c 83.39% 64.20% 100.00%
src/doltlite_blame.c 80.86% 61.14% 96.43%
src/doltlite_branch.c 88.30% 80.66% 100.00%
src/doltlite_branches.c 93.75% 75.93% 93.75%
src/doltlite_checkout.c 77.57% 63.06% 96.43%
src/doltlite_cherry_pick.c 79.00% 59.57% 71.43%
src/doltlite_chunk_walk.c 92.23% 66.22% 100.00%
src/doltlite_clean.c 94.23% 68.10% 100.00%
src/doltlite_cmd.c 81.09% 75.19% 100.00%
src/doltlite_commit.c 94.41% 76.87% 100.00%
src/doltlite_commit_ancestors.c 92.09% 72.83% 92.31%
src/doltlite_commit_cmd.c 78.08% 67.50% 100.00%
src/doltlite_config.c 80.47% 71.74% 100.00%
src/doltlite_conflicts.c 84.27% 62.50% 93.75%
src/doltlite_constraint_violations.c 82.46% 57.54% 91.11%
src/doltlite_core.c 91.34% 70.81% 100.00%
src/doltlite_creds.c 84.09% 53.78% 92.00%
src/doltlite_dbpage.c 93.45% 78.33% 91.67%
src/doltlite_diff.c 88.56% 68.99% 96.55%
src/doltlite_diff_stat.c 94.17% 76.01% 95.65%
src/doltlite_diff_table.c 94.18% 70.74% 97.06%
src/doltlite_docs.c 83.94% 71.43% 94.74%
src/doltlite_gc.c 78.48% 58.10% 96.55%
src/doltlite_hashof.c 79.79% 70.05% 100.00%
src/doltlite_history.c 86.93% 76.40% 100.00%
src/doltlite_http_remote.c 82.22% 57.34% 92.31%
src/doltlite_ignore.c 77.57% 62.25% 82.14%
src/doltlite_log.c 96.81% 73.24% 92.86%
src/doltlite_merge.c 95.93% 70.46% 100.00%
src/doltlite_merge_cmd.c 87.19% 72.12% 100.00%
src/doltlite_merge_constraints.c 86.15% 63.64% 95.00%
src/doltlite_merge_constraints_check.c 86.81% 67.79% 100.00%
src/doltlite_merge_constraints_fk.c 78.00% 56.64% 100.00%
src/doltlite_merge_constraints_notnull.c 80.45% 67.92% 100.00%
src/doltlite_merge_constraints_strict.c 77.35% 63.04% 100.00%
src/doltlite_merge_constraints_unique.c 85.99% 62.82% 100.00%
src/doltlite_merge_pass1.c 92.94% 74.16% 100.00%
src/doltlite_merge_pass2.c 83.59% 67.46% 100.00%
src/doltlite_merge_predetect.c 86.38% 71.15% 95.45%
src/doltlite_merge_rebuild.c 99.15% 78.91% 100.00%
src/doltlite_merge_rows.c 82.93% 64.74% 100.00%
src/doltlite_merge_schema.c 90.95% 71.94% 97.06%
src/doltlite_merge_status.c 91.98% 73.53% 92.31%
src/doltlite_patch.c 94.36% 70.71% 98.15%
src/doltlite_rebase.c 85.42% 59.55% 100.00%
src/doltlite_record.c 78.67% 59.36% 95.24%
src/doltlite_ref.c 95.52% 75.36% 100.00%
src/doltlite_remote.c 85.61% 66.89% 96.00%
src/doltlite_remote_sql.c 66.60% 60.73% 93.55%
src/doltlite_remotesrv.c 75.76% 64.59% 90.77%
src/doltlite_reset.c 87.48% 72.76% 100.00%
src/doltlite_revert.c 80.51% 69.44% 100.00%
src/doltlite_schema_diff.c 94.42% 71.13% 96.97%
src/doltlite_schemas.c 70.86% 48.75% 90.91%
src/doltlite_status.c 91.49% 72.78% 97.56%
src/doltlite_tag.c 86.84% 70.31% 94.12%
src/doltlite_tests.c 84.22% 69.61% 91.11%
src/doltlite_tls.c 85.04% 62.73% 92.31%
src/doltlite_verify_constraints.c 79.15% 66.44% 100.00%
src/doltlite_workspace.c 91.84% 70.27% 100.00%
src/pager_shim.c 58.87% 67.46% 34.29%
src/prolly_btree.c 86.00% 66.45% 90.70%
src/prolly_btree_catalog.c 83.10% 69.11% 97.22%
src/prolly_btree_cursor.c 84.15% 62.09% 96.00%
src/prolly_btree_cursor_count.c 80.05% 56.74% 100.00%
src/prolly_btree_cursor_payload.c 75.69% 54.48% 95.65%
src/prolly_btree_cursor_seek.c 76.68% 66.20% 82.35%
src/prolly_btree_mutation.c 87.89% 68.20% 97.83%
src/prolly_btree_orig.c 93.75% 71.43% 93.15%
src/prolly_btree_state.c 93.51% 66.38% 100.00%
src/prolly_btree_txn.c 81.84% 69.30% 98.08%
src/prolly_cache.c 93.27% 69.12% 100.00%
src/prolly_check.c 60.36% 62.96% 100.00%
src/prolly_chunker.c 94.04% 79.73% 100.00%
src/prolly_cursor.c 89.67% 80.47% 100.00%
src/prolly_diff.c 59.59% 46.05% 71.43%
src/prolly_hash.c 93.33% 80.00% 100.00%
src/prolly_hashset.c 90.48% 80.56% 100.00%
src/prolly_mutate.c 80.78% 69.11% 100.00%
src/prolly_mutmap.c 93.87% 80.15% 100.00%
src/prolly_node.c 88.91% 73.81% 100.00%
src/prolly_three_way_diff.c 95.79% 85.37% 100.00%
src/prolly_three_way_merge.c 81.92% 67.41% 91.67%
src/prolly_xxhash.c 100.00% 100.00% 100.00%
src/sortkey.c 93.16% 81.51% 100.00%

Download HTML and LCOV artifacts from this workflow run.

@timsehn
timsehn merged commit 648fb40 into master Sep 1, 2026
68 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant