Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Watch Progress Request #212

Merged
merged 17 commits into from
Jan 13, 2025
Merged

Conversation

louiseschmidtgen
Copy link
Contributor

@louiseschmidtgen louiseschmidtgen commented Dec 10, 2024

Watch Progress Request

This PR adds support for watch progress notifications. Progress notifications ensure api-server's watch cache is consistent with Dqlite while reducing the need for resource-intensive quorum reads from Dqlite.

The api-server builds a watch history on its side based on an initial list and then a watch stream of events (update/create/delete). Reading from this cache can lead to issues from stale reads. This is where the progress notifications come into play: Upon a progress request to k8s-dqlite's watch-server we return the current revision (in other words the revision of the last event received). If the api-server's cache is not out of date then it can serve reads from the cache instead of from Dqlite.

Support for Upstream Features:

Through progress notifications support, upstream k8s WatchList and ConsistentListFromCache features are enabled.

  • ConsistentListFromCache: Enhance Kubernetes API server performance by serving consistent list requests directly from its watch cache, improving scalability and response times.
  • WatchList: Enable support for streaming initial state of objects in watch requests.

For more details read feature-gates

Kine reference

The PR takes inspiration from kine’s watcher PRs:

Note to reviewer: I would recommend taking a look at each one of these PRs before diving into this PR.

Implementation Details

Emulated Etcd version

Support for etcd version check that evaluates whether RequestWatchProgress is supported by the current version of etcd endpoint from status request: https://github.com/kubernetes/kubernetes/blob/beb696c2c9467dbc44cbaf35c5a4a3daf0321db3/staging/src/k8s.io/apiserver/pkg/storage/feature/feature_support_checker.go#L157

Backport of k3s-io/kine#316.

The PR bumps the emulated etcd version to signal support of the api-server's RequestWatchProgress (v3.4.31+ or v3.5.13+).

Watch Channels

For this implementation we need two channels for the watchers:

  • watchEventsChannel: receives notifications on revisions created, updated and deleted
  • progressChannel: progress notifications are sent every 5s unless configured otherwise in the watch-progress-notify-interval flag

When a watch is requested on a revision that has been compacted we return a cancel response, along with the message that the key has been compacted and provide the current revision as well as the compact revision.

Testing

1.32 rc & test_config_propagation passed https://github.com/canonical/k8s-dqlite/actions/runs/12257281237/workflow
1.32 rc & full integration suite https://github.com/canonical/k8s-dqlite/actions/runs/12293052446/job/34304958695
Unit test: requesting and receiving ProgressNotify message

Copy link

github-actions bot commented Dec 10, 2024

Benchmark

Results
goos: linux
goarch: amd64
pkg: github.com/canonical/k8s-dqlite/test
cpu: AMD EPYC 7763 64-Core Processor                
                                        │     Before     │                 After                 │
                                        │     sec/op     │     sec/op      vs base               │
Compaction/sqlite-4                        18.63µ ±  64%    19.37µ ±  45%        ~ (p=0.902 n=7)
Compaction/dqlite-4                        58.82µ ±  11%    59.44µ ±  31%        ~ (p=0.710 n=7)
Create/sqlite/1-workers-4                  582.8µ ±  18%    529.3µ ±   7%        ~ (p=0.073 n=7)
Create/sqlite/4-workers-4                  488.4µ ±  37%    555.2µ ±   6%        ~ (p=0.620 n=7)
Create/sqlite/16-workers-4                 481.6µ ±  11%    534.1µ ±  21%        ~ (p=0.165 n=7)
Create/sqlite/64-workers-4                 605.8µ ± 994%   2039.2µ ± 143%        ~ (p=0.165 n=7)
Create/sqlite/128-workers-4                3.440m ±  76%    4.955m ±  64%        ~ (p=0.209 n=7)
Create/dqlite/1-workers-4                  1.272m ±   7%    1.328m ±  11%        ~ (p=0.128 n=7)
Create/dqlite/4-workers-4                 1151.5µ ±  17%    922.6µ ±  23%  -19.88% (p=0.011 n=7)
Create/dqlite/16-workers-4                 1.032m ±  17%    1.025m ±  10%        ~ (p=1.000 n=7)
Create/dqlite/64-workers-4                 963.5µ ±  12%   1107.2µ ±   8%  +14.92% (p=0.004 n=7)
Create/dqlite/128-workers-4                899.3µ ±  34%   1090.1µ ±   7%        ~ (p=0.209 n=7)
Delete/sqlite/1-workers-4                  556.9µ ±  11%    548.4µ ±  16%        ~ (p=0.620 n=7)
Delete/sqlite/4-workers-4                  508.5µ ±  28%    531.4µ ±  11%        ~ (p=1.000 n=7)
Delete/sqlite/16-workers-4                 493.9µ ±  11%    530.0µ ±  13%        ~ (p=0.053 n=7)
Delete/sqlite/64-workers-4                 1.440m ± 179%    2.684m ± 368%        ~ (p=0.535 n=7)
Delete/sqlite/128-workers-4                3.228m ± 108%    3.472m ± 112%        ~ (p=1.000 n=7)
Delete/dqlite/1-workers-4                  1.122m ±  10%    1.292m ±  13%        ~ (p=0.053 n=7)
Delete/dqlite/4-workers-4                  1.051m ±  17%    1.118m ±  11%        ~ (p=0.383 n=7)
Delete/dqlite/16-workers-4                 1.089m ±  23%    1.176m ±   8%        ~ (p=0.165 n=7)
Delete/dqlite/64-workers-4                 904.3µ ±  14%   1072.5µ ±  17%  +18.59% (p=0.017 n=7)
Delete/dqlite/128-workers-4               1050.9µ ±  11%    937.9µ ±  13%  -10.75% (p=0.007 n=7)
Get/sqlite-4                               219.2µ ±   1%    223.1µ ±   1%   +1.77% (p=0.001 n=7)
Get/dqlite-4                               337.1µ ±   2%    341.4µ ±   2%        ~ (p=0.209 n=7)
List/sqlite-tiny/all-4                     3.069µ ±   6%    3.211µ ±   4%   +4.63% (p=0.012 n=7)
List/sqlite-tiny/pagination-4              4.646µ ±  13%    4.621µ ±  19%        ~ (p=0.805 n=7)
List/sqlite-fits-in-page/all-4             6.364µ ±   5%    6.527µ ±   5%        ~ (p=0.805 n=7)
List/sqlite-fits-in-page/pagination-4      15.74µ ±  11%    15.23µ ±  14%        ~ (p=0.535 n=7)
List/sqlite-overflows-page/all-4           15.15µ ±   3%    15.23µ ±   6%        ~ (p=0.128 n=7)
List/sqlite-overflows-page/pagination-4    18.74µ ±   2%    19.43µ ±   4%   +3.65% (p=0.002 n=7)
List/dqlite-tiny/all-4                     2.059µ ±   3%    2.016µ ±   2%        ~ (p=0.209 n=7)
List/dqlite-tiny/pagination-4              3.116µ ±   6%    3.137µ ±   4%        ~ (p=0.902 n=7)
List/dqlite-fits-in-page/all-4             5.475µ ±   4%    5.449µ ±   3%        ~ (p=0.644 n=7)
List/dqlite-fits-in-page/pagination-4      11.89µ ±   4%    11.76µ ±   3%        ~ (p=0.805 n=7)
List/dqlite-overflows-page/all-4           18.27µ ±   2%    18.84µ ±   5%   +3.10% (p=0.026 n=7)
List/dqlite-overflows-page/pagination-4    22.91µ ±   3%    23.27µ ±   2%   +1.55% (p=0.038 n=7)
Update/sqlite/1-workers-4                  608.0µ ±  11%    527.7µ ±  19%  -13.22% (p=0.038 n=7)
Update/sqlite/4-workers-4                  505.3µ ±  26%    577.7µ ±   8%        ~ (p=0.128 n=7)
Update/sqlite/16-workers-4                 555.5µ ±  28%    496.4µ ±  28%        ~ (p=0.128 n=7)
Update/sqlite/64-workers-4                 1.335m ± 915%    2.484m ±  94%        ~ (p=0.259 n=7)
Update/sqlite/128-workers-4                3.952m ± 218%    1.962m ± 239%        ~ (p=0.073 n=7)
Update/dqlite/1-workers-4                  1.264m ±   6%    1.297m ±   8%        ~ (p=0.259 n=7)
Update/dqlite/4-workers-4                  1.102m ±   6%    1.108m ±   7%        ~ (p=1.000 n=7)
Update/dqlite/16-workers-4                 1.125m ±  23%    1.060m ±  18%        ~ (p=0.128 n=7)
Update/dqlite/64-workers-4                 944.1µ ±  12%    922.5µ ±   6%        ~ (p=0.710 n=7)
Update/dqlite/128-workers-4                1.162m ±  10%    1.020m ±  11%  -12.21% (p=0.001 n=7)
geomean                                    227.5µ           241.7µ          +6.23%

                                        │        Before        │                    After                     │
                                        │ page-cache-misses/op │ page-cache-misses/op  vs base                │
Compaction/sqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Compaction/dqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/sqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/dqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                      ²                         +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │        Before        │                    After                     │
                                        │ page-cache-spills/op │ page-cache-spills/op  vs base                │
Compaction/sqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Compaction/dqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/sqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/dqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                      ²                         +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                │
                                        │ page-reads/op │ page-reads/op  vs base              │
Compaction/sqlite-4                         12.21 ±  1%     12.22 ±  1%       ~ (p=0.875 n=7)
Compaction/dqlite-4                         12.20 ±  1%     12.22 ±  1%       ~ (p=0.735 n=7)
Create/sqlite/1-workers-4                   13.78 ±  1%     13.84 ±  0%       ~ (p=0.245 n=7)
Create/sqlite/4-workers-4                   12.73 ±  4%     12.77 ±  3%       ~ (p=0.902 n=7)
Create/sqlite/16-workers-4                  10.97 ±  6%     11.40 ±  9%       ~ (p=0.259 n=7)
Create/sqlite/64-workers-4                  9.248 ± 42%     9.152 ± 31%       ~ (p=0.902 n=7)
Create/sqlite/128-workers-4                 6.015 ± 37%     5.044 ± 61%       ~ (p=0.128 n=7)
Create/dqlite/1-workers-4                   13.20 ±  3%     12.99 ±  2%  -1.59% (p=0.024 n=7)
Create/dqlite/4-workers-4                   10.58 ±  2%     10.80 ±  2%  +2.08% (p=0.004 n=7)
Create/dqlite/16-workers-4                  10.71 ±  3%     10.86 ±  3%       ~ (p=0.197 n=7)
Create/dqlite/64-workers-4                  10.90 ±  2%     10.65 ±  3%       ~ (p=0.073 n=7)
Create/dqlite/128-workers-4                 10.86 ±  2%     10.77 ±  1%       ~ (p=0.331 n=7)
Delete/sqlite/1-workers-4                   16.24 ±  0%     16.24 ±  0%       ~ (p=0.531 n=7)
Delete/sqlite/4-workers-4                   15.04 ±  3%     14.72 ±  6%       ~ (p=0.456 n=7)
Delete/sqlite/16-workers-4                  12.78 ±  9%     13.06 ±  7%       ~ (p=0.648 n=7)
Delete/sqlite/64-workers-4                  10.93 ± 10%     10.10 ± 18%       ~ (p=0.318 n=7)
Delete/sqlite/128-workers-4                 8.426 ± 14%     8.533 ± 17%       ~ (p=0.902 n=7)
Delete/dqlite/1-workers-4                   15.54 ±  1%     15.58 ±  1%       ~ (p=0.329 n=7)
Delete/dqlite/4-workers-4                   13.35 ±  1%     13.30 ±  2%       ~ (p=0.685 n=7)
Delete/dqlite/16-workers-4                  13.24 ±  1%     13.48 ±  1%  +1.81% (p=0.001 n=7)
Delete/dqlite/64-workers-4                  13.14 ±  1%     13.32 ±  3%       ~ (p=0.053 n=7)
Delete/dqlite/128-workers-4                 13.01 ±  3%     13.25 ±  1%       ~ (p=0.053 n=7)
Get/sqlite-4                                14.95 ±  0%     14.96 ±  0%       ~ (p=0.157 n=7)
Get/dqlite-4                                11.97 ±  0%     11.97 ±  0%       ~ (p=0.700 n=7)
List/sqlite-tiny/all-4                     189.9m ±  1%    190.9m ±  0%  +0.53% (p=0.016 n=7)
List/sqlite-tiny/pagination-4               1.125 ±  0%     1.125 ±  3%       ~ (p=0.294 n=7)
List/sqlite-fits-in-page/all-4             164.0m ± 59%    163.6m ± 59%       ~ (p=0.388 n=7)
List/sqlite-fits-in-page/pagination-4      958.1m ±  3%    955.7m ±  3%       ~ (p=0.199 n=7)
List/sqlite-overflows-page/all-4           177.5m ±  5%    177.5m ±  4%       ~ (p=1.000 n=7)
List/sqlite-overflows-page/pagination-4     1.065 ±  0%     1.065 ±  1%       ~ (p=0.462 n=7)
List/dqlite-tiny/all-4                     190.5m ±  0%    190.4m ±  0%       ~ (p=0.111 n=7)
List/dqlite-tiny/pagination-4               1.124 ±  3%     1.123 ±  3%       ~ (p=0.364 n=7)
List/dqlite-fits-in-page/all-4             260.5m ± 37%    164.2m ± 59%       ~ (p=0.108 n=7)
List/dqlite-fits-in-page/pagination-4      955.2m ±  3%    954.3m ±  3%       ~ (p=0.259 n=7)
List/dqlite-overflows-page/all-4           184.7m ±  0%    184.7m ±  0%       ~ (p=0.978 n=7)
List/dqlite-overflows-page/pagination-4     1.073 ±  0%     1.073 ±  3%       ~ (p=0.690 n=7)
Update/sqlite/1-workers-4                   15.70 ±  0%     15.77 ±  1%  +0.45% (p=0.015 n=7)
Update/sqlite/4-workers-4                   14.61 ±  4%     14.87 ±  6%       ~ (p=0.259 n=7)
Update/sqlite/16-workers-4                  13.83 ±  6%     13.08 ±  6%       ~ (p=0.318 n=7)
Update/sqlite/64-workers-4                  11.55 ± 41%     10.24 ± 24%       ~ (p=0.363 n=7)
Update/sqlite/128-workers-4                 6.408 ± 54%     8.956 ± 45%       ~ (p=0.128 n=7)
Update/dqlite/1-workers-4                   15.12 ±  2%     15.14 ±  2%       ~ (p=0.929 n=7)
Update/dqlite/4-workers-4                   12.63 ±  1%     12.56 ±  1%       ~ (p=0.406 n=7)
Update/dqlite/16-workers-4                  12.78 ±  1%     12.67 ±  1%  -0.86% (p=0.003 n=7)
Update/dqlite/64-workers-4                  12.73 ±  1%     12.70 ±  1%       ~ (p=0.400 n=7)
Update/dqlite/128-workers-4                 12.49 ±  1%     12.50 ±  1%       ~ (p=1.000 n=7)
geomean                                     5.118           5.067        -1.01%

                                        │     Before     │                 After                  │
                                        │ page-writes/op │ page-writes/op  vs base                │
Compaction/sqlite-4                        190.6m ± 0%        190.5m ± 0%       ~ (p=0.307 n=7)
Compaction/dqlite-4                        187.3m ± 0%        187.7m ± 1%  +0.21% (p=0.037 n=7)
Create/sqlite/1-workers-4                   4.347 ± 1%         4.353 ± 0%       ~ (p=0.553 n=7)
Create/sqlite/4-workers-4                   4.317 ± 1%         4.319 ± 0%       ~ (p=0.805 n=7)
Create/sqlite/16-workers-4                  4.287 ± 0%         4.302 ± 1%       ~ (p=0.334 n=7)
Create/sqlite/64-workers-4                  4.192 ± 4%         4.045 ± 3%       ~ (p=0.122 n=7)
Create/sqlite/128-workers-4                 4.039 ± 4%         4.016 ± 1%       ~ (p=0.050 n=7)
Create/dqlite/1-workers-4                   4.170 ± 2%         4.133 ± 0%  -0.89% (p=0.023 n=7)
Create/dqlite/4-workers-4                   4.146 ± 1%         4.302 ± 4%  +3.76% (p=0.004 n=7)
Create/dqlite/16-workers-4                  4.203 ± 3%         4.250 ± 1%       ~ (p=0.685 n=7)
Create/dqlite/64-workers-4                  4.278 ± 1%         4.194 ± 2%  -1.96% (p=0.002 n=7)
Create/dqlite/128-workers-4                 4.281 ± 2%         4.236 ± 2%       ~ (p=0.165 n=7)
Delete/sqlite/1-workers-4                   4.389 ± 0%         4.387 ± 0%       ~ (p=0.598 n=7)
Delete/sqlite/4-workers-4                   4.390 ± 1%         4.393 ± 1%       ~ (p=0.620 n=7)
Delete/sqlite/16-workers-4                  4.357 ± 1%         4.369 ± 1%       ~ (p=0.596 n=7)
Delete/sqlite/64-workers-4                  4.344 ± 2%         4.326 ± 5%       ~ (p=0.535 n=7)
Delete/sqlite/128-workers-4                 4.335 ± 5%         4.268 ± 4%       ~ (p=0.259 n=7)
Delete/dqlite/1-workers-4                   4.346 ± 1%         4.346 ± 1%       ~ (p=0.967 n=7)
Delete/dqlite/4-workers-4                   4.374 ± 1%         4.364 ± 1%       ~ (p=0.272 n=7)
Delete/dqlite/16-workers-4                  4.351 ± 1%         4.360 ± 1%       ~ (p=0.535 n=7)
Delete/dqlite/64-workers-4                  4.363 ± 0%         4.346 ± 1%  -0.39% (p=0.041 n=7)
Delete/dqlite/128-workers-4                 4.351 ± 1%         4.361 ± 1%  +0.23% (p=0.049 n=7)
Get/sqlite-4                                0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/dqlite-4                                0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                      0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4               0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4              0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4       0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4            0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4     0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                      0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4               0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4              0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4       0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4            0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4     0.000 ± 0%         0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                   4.226 ± 0%         4.228 ± 0%       ~ (p=0.471 n=7)
Update/sqlite/4-workers-4                   4.323 ± 1%         4.294 ± 1%       ~ (p=0.056 n=7)
Update/sqlite/16-workers-4                  4.303 ± 1%         4.311 ± 1%       ~ (p=0.456 n=7)
Update/sqlite/64-workers-4                  4.200 ± 5%         4.087 ± 5%       ~ (p=0.318 n=7)
Update/sqlite/128-workers-4                 4.042 ± 3%         4.146 ± 3%  +2.57% (p=0.048 n=7)
Update/dqlite/1-workers-4                   4.185 ± 1%         4.185 ± 0%       ~ (p=0.524 n=7)
Update/dqlite/4-workers-4                   4.173 ± 0%         4.174 ± 0%       ~ (p=0.600 n=7)
Update/dqlite/16-workers-4                  4.214 ± 1%         4.203 ± 0%       ~ (p=0.274 n=7)
Update/dqlite/64-workers-4                  4.238 ± 0%         4.243 ± 1%       ~ (p=0.831 n=7)
Update/dqlite/128-workers-4                 4.206 ± 1%         4.228 ± 1%       ~ (p=0.364 n=7)
geomean                                                ²                   -0.10%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │     Before     │                 After                 │
                                        │ sec-reading/op │ sec-reading/op  vs base               │
Compaction/sqlite-4                        24.80µ ±  92%    26.00µ ±  66%        ~ (p=0.646 n=7)
Compaction/dqlite-4                        32.20µ ±  28%    34.40µ ±  72%        ~ (p=0.383 n=7)
Create/sqlite/1-workers-4                  19.10µ ±  28%    17.10µ ±  19%        ~ (p=0.272 n=7)
Create/sqlite/4-workers-4                  17.20µ ±  28%    19.90µ ±  20%        ~ (p=0.301 n=7)
Create/sqlite/16-workers-4                 18.50µ ±  31%    19.00µ ±  20%        ~ (p=0.402 n=7)
Create/sqlite/64-workers-4                 23.80µ ±  33%    28.00µ ±  76%        ~ (p=0.301 n=7)
Create/sqlite/128-workers-4                19.50µ ± 116%    24.50µ ±  53%        ~ (p=0.318 n=7)
Create/dqlite/1-workers-4                  6.500µ ±  74%   10.600µ ±  72%        ~ (p=0.097 n=7)
Create/dqlite/4-workers-4                  9.400µ ±  52%   10.400µ ±  37%        ~ (p=0.245 n=7)
Create/dqlite/16-workers-4                 13.10µ ±  51%    11.20µ ±  29%        ~ (p=0.596 n=7)
Create/dqlite/64-workers-4                 8.600µ ±  60%   11.200µ ±  40%        ~ (p=0.156 n=7)
Create/dqlite/128-workers-4                10.70µ ±  21%    11.30µ ±  24%        ~ (p=0.681 n=7)
Delete/sqlite/1-workers-4                  29.40µ ±  22%    31.20µ ±  11%        ~ (p=0.165 n=7)
Delete/sqlite/4-workers-4                  30.40µ ±  20%    33.20µ ±  14%        ~ (p=0.244 n=7)
Delete/sqlite/16-workers-4                 33.00µ ±  24%    32.80µ ±  18%        ~ (p=0.902 n=7)
Delete/sqlite/64-workers-4                 32.10µ ±  11%    33.50µ ± 109%        ~ (p=0.301 n=7)
Delete/sqlite/128-workers-4                30.90µ ±  31%    38.50µ ±  66%        ~ (p=0.053 n=7)
Delete/dqlite/1-workers-4                  11.60µ ±  49%    10.90µ ±  50%        ~ (p=0.902 n=7)
Delete/dqlite/4-workers-4                  14.80µ ±  30%    12.40µ ± 102%        ~ (p=0.971 n=7)
Delete/dqlite/16-workers-4                 18.50µ ±  29%    15.60µ ±  35%        ~ (p=0.259 n=7)
Delete/dqlite/64-workers-4                 13.00µ ±  73%    14.10µ ±  50%        ~ (p=0.535 n=7)
Delete/dqlite/128-workers-4                16.10µ ±  19%    14.40µ ±  34%        ~ (p=0.272 n=7)
Get/sqlite-4                               54.80µ ±   3%    57.20µ ±   6%   +4.38% (p=0.038 n=7)
Get/dqlite-4                               39.50µ ±  25%    40.70µ ±  23%        ~ (p=0.805 n=7)
List/sqlite-tiny/all-4                     4.700µ ±  23%    5.500µ ±  13%  +17.02% (p=0.013 n=7)
List/sqlite-tiny/pagination-4              6.400µ ±  55%    6.100µ ±  69%        ~ (p=0.874 n=7)
List/sqlite-fits-in-page/all-4             11.50µ ±   8%    11.60µ ±   9%        ~ (p=0.938 n=7)
List/sqlite-fits-in-page/pagination-4      24.40µ ±  34%    23.20µ ±  40%        ~ (p=0.535 n=7)
List/sqlite-overflows-page/all-4           11.30µ ±  27%    11.50µ ±  30%   +1.77% (p=0.038 n=7)
List/sqlite-overflows-page/pagination-4    14.50µ ±   3%    15.10µ ±  48%   +4.14% (p=0.002 n=7)
List/dqlite-tiny/all-4                     2.500µ ±  28%    2.500µ ±  24%        ~ (p=0.290 n=7)
List/dqlite-tiny/pagination-4              3.300µ ±  30%    3.100µ ±  16%        ~ (p=0.181 n=7)
List/dqlite-fits-in-page/all-4             8.400µ ±  14%    8.500µ ±  16%        ~ (p=0.532 n=7)
List/dqlite-fits-in-page/pagination-4      18.20µ ±  26%    15.90µ ±  16%        ~ (p=0.223 n=7)
List/dqlite-overflows-page/all-4           29.90µ ±   2%    30.50µ ±   7%   +2.01% (p=0.002 n=7)
List/dqlite-overflows-page/pagination-4    36.40µ ±   3%    37.50µ ±   4%        ~ (p=0.363 n=7)
Update/sqlite/1-workers-4                  20.40µ ±  30%    18.40µ ±  18%        ~ (p=0.301 n=7)
Update/sqlite/4-workers-4                  16.90µ ±  27%    19.50µ ±  21%        ~ (p=0.119 n=7)
Update/sqlite/16-workers-4                 21.20µ ±  28%    20.60µ ±  22%        ~ (p=0.902 n=7)
Update/sqlite/64-workers-4                 23.10µ ±  13%    27.30µ ±  52%        ~ (p=0.091 n=7)
Update/sqlite/128-workers-4                30.00µ ±  72%    24.00µ ±  34%        ~ (p=0.805 n=7)
Update/dqlite/1-workers-4                 11.300µ ±  42%    9.000µ ±  59%        ~ (p=0.259 n=7)
Update/dqlite/4-workers-4                  12.50µ ±  50%    10.80µ ±  45%        ~ (p=0.902 n=7)
Update/dqlite/16-workers-4                 10.20µ ± 100%    10.00µ ±  35%        ~ (p=0.737 n=7)
Update/dqlite/64-workers-4                 11.30µ ±  53%    10.40µ ±  25%        ~ (p=0.644 n=7)
Update/dqlite/128-workers-4                10.60µ ±  68%    12.60µ ±  41%        ~ (p=0.902 n=7)
geomean                                    15.74µ           16.09µ          +2.19%

                                        │      Before      │                  After                  │
                                        │  sec-writing/op  │ sec-writing/op  vs base                 │
Compaction/sqlite-4                        9.400µ ±   6%      9.600µ ±  10%        ~ (p=0.068 n=7)
Compaction/dqlite-4                        7.700µ ±  23%      7.600µ ±   9%        ~ (p=0.402 n=7)
Create/sqlite/1-workers-4                  354.1µ ±  27%      294.7µ ±  11%        ~ (p=0.053 n=7)
Create/sqlite/4-workers-4                  1.535m ±  20%      1.747m ±  17%        ~ (p=0.259 n=7)
Create/sqlite/16-workers-4                 5.469m ±  14%      6.182m ±   9%  +13.04% (p=0.038 n=7)
Create/sqlite/64-workers-4                 20.15m ± 223%      39.55m ±  73%        ~ (p=0.073 n=7)
Create/sqlite/128-workers-4                79.85m ±  83%     114.20m ±  35%        ~ (p=0.165 n=7)
Create/dqlite/1-workers-4                  28.10µ ±  42%      31.10µ ±  30%        ~ (p=1.000 n=7)
Create/dqlite/4-workers-4                  32.70µ ±  36%      36.00µ ±  11%        ~ (p=0.097 n=7)
Create/dqlite/16-workers-4                 30.30µ ±  43%      34.80µ ±  23%        ~ (p=0.456 n=7)
Create/dqlite/64-workers-4                 32.20µ ±  14%      33.60µ ±  34%        ~ (p=0.710 n=7)
Create/dqlite/128-workers-4                29.80µ ±  44%      37.10µ ±  28%        ~ (p=0.128 n=7)
Delete/sqlite/1-workers-4                  326.5µ ±  18%      323.2µ ±  30%        ~ (p=0.805 n=7)
Delete/sqlite/4-workers-4                  1.473m ±  40%      1.608m ±  15%        ~ (p=0.805 n=7)
Delete/sqlite/16-workers-4                 5.815m ±  14%      6.275m ±   8%   +7.91% (p=0.038 n=7)
Delete/sqlite/64-workers-4                 31.11m ± 119%      54.32m ± 117%        ~ (p=0.383 n=7)
Delete/sqlite/128-workers-4                88.37m ±  58%     100.10m ±  33%        ~ (p=1.000 n=7)
Delete/dqlite/1-workers-4                  47.60µ ±  44%      36.20µ ±  21%        ~ (p=0.104 n=7)
Delete/dqlite/4-workers-4                  33.80µ ±  28%      44.70µ ±  14%  +32.25% (p=0.003 n=7)
Delete/dqlite/16-workers-4                 43.00µ ±  26%      50.60µ ±  17%        ~ (p=0.259 n=7)
Delete/dqlite/64-workers-4                 40.30µ ±  23%      38.60µ ±  58%        ~ (p=0.902 n=7)
Delete/dqlite/128-workers-4                50.70µ ±  35%      39.00µ ±  17%        ~ (p=0.097 n=7)
Get/sqlite-4                                0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                                0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                      0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4               0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4              0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4       0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4            0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4     0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                      0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4               0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4              0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4       0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4            0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4     0.000 ±   0%       0.000 ±   0%        ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                  384.1µ ±  18%      305.8µ ±  26%  -20.39% (p=0.026 n=7)
Update/sqlite/4-workers-4                  1.578m ±  16%      1.755m ±  16%        ~ (p=0.097 n=7)
Update/sqlite/16-workers-4                 6.447m ±   9%      5.954m ±  19%        ~ (p=0.259 n=7)
Update/sqlite/64-workers-4                 31.29m ± 306%      48.69m ±  53%        ~ (p=0.259 n=7)
Update/sqlite/128-workers-4               114.50m ±  27%      68.46m ±  90%        ~ (p=0.053 n=7)
Update/dqlite/1-workers-4                  34.70µ ±  37%      35.90µ ±  30%        ~ (p=1.000 n=7)
Update/dqlite/4-workers-4                  43.10µ ±  22%      33.70µ ±  21%        ~ (p=0.073 n=7)
Update/dqlite/16-workers-4                 43.00µ ±  42%      34.20µ ±  18%  -20.47% (p=0.038 n=7)
Update/dqlite/64-workers-4                 31.40µ ±  85%      35.90µ ±  18%        ~ (p=0.301 n=7)
Update/dqlite/128-workers-4                37.60µ ±  27%      33.30µ ±  34%        ~ (p=0.165 n=7)
geomean                                                  ²                    +3.77%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                │
                                        │     B/op      │     B/op       vs base              │
Compaction/sqlite-4                       2.259Ki ± 58%   2.271Ki ± 44%       ~ (p=0.620 n=7)
Compaction/dqlite-4                       11.39Ki ± 36%   11.23Ki ± 76%       ~ (p=0.591 n=7)
Create/sqlite/1-workers-4                 20.42Ki ±  0%   20.42Ki ±  0%       ~ (p=0.365 n=7)
Create/sqlite/4-workers-4                 20.40Ki ±  0%   20.43Ki ±  0%  +0.13% (p=0.007 n=7)
Create/sqlite/16-workers-4                20.38Ki ±  0%   20.41Ki ±  0%  +0.13% (p=0.026 n=7)
Create/sqlite/64-workers-4                20.46Ki ±  7%   20.79Ki ±  4%       ~ (p=0.209 n=7)
Create/sqlite/128-workers-4               21.49Ki ±  4%   22.09Ki ±  5%       ~ (p=0.073 n=7)
Create/dqlite/1-workers-4                 19.69Ki ±  0%   19.73Ki ±  0%  +0.20% (p=0.006 n=7)
Create/dqlite/4-workers-4                 19.69Ki ±  0%   19.66Ki ±  0%       ~ (p=0.197 n=7)
Create/dqlite/16-workers-4                19.67Ki ±  0%   19.67Ki ±  0%       ~ (p=0.832 n=7)
Create/dqlite/64-workers-4                19.66Ki ± 10%   19.72Ki ±  0%  +0.29% (p=0.001 n=7)
Create/dqlite/128-workers-4               19.69Ki ±  0%   19.73Ki ±  0%  +0.22% (p=0.011 n=7)
Delete/sqlite/1-workers-4                 22.85Ki ±  0%   22.86Ki ±  0%       ~ (p=0.243 n=7)
Delete/sqlite/4-workers-4                 22.84Ki ±  0%   22.87Ki ±  0%       ~ (p=0.053 n=7)
Delete/sqlite/16-workers-4                22.82Ki ±  0%   22.86Ki ±  0%  +0.18% (p=0.012 n=7)
Delete/sqlite/64-workers-4                23.05Ki ±  3%   23.38Ki ±  8%       ~ (p=0.220 n=7)
Delete/sqlite/128-workers-4               23.78Ki ±  4%   24.05Ki ±  3%       ~ (p=0.805 n=7)
Delete/dqlite/1-workers-4                 21.95Ki ±  0%   21.97Ki ±  0%       ~ (p=0.122 n=7)
Delete/dqlite/4-workers-4                 21.90Ki ±  0%   21.95Ki ±  0%  +0.24% (p=0.001 n=7)
Delete/dqlite/16-workers-4                21.91Ki ±  0%   21.97Ki ±  0%  +0.25% (p=0.029 n=7)
Delete/dqlite/64-workers-4                21.90Ki ±  0%   21.95Ki ±  9%       ~ (p=0.053 n=7)
Delete/dqlite/128-workers-4               21.97Ki ±  0%   21.96Ki ±  0%       ~ (p=0.620 n=7)
Get/sqlite-4                              23.03Ki ±  0%   23.03Ki ±  0%       ~ (p=0.730 n=7)
Get/dqlite-4                              21.96Ki ±  0%   21.96Ki ±  0%       ~ (p=0.469 n=7)
List/sqlite-tiny/all-4                     1021.0 ± 13%    1123.0 ±  6%  +9.99% (p=0.017 n=7)
List/sqlite-tiny/pagination-4              1033.0 ± 35%    1012.0 ± 40%       ~ (p=0.737 n=7)
List/sqlite-fits-in-page/all-4            7.289Ki ±  4%   7.312Ki ±  9%       ~ (p=0.833 n=7)
List/sqlite-fits-in-page/pagination-4     8.555Ki ± 26%   8.299Ki ± 22%       ~ (p=0.259 n=7)
List/sqlite-overflows-page/all-4          20.48Ki ± 12%   20.49Ki ± 11%       ~ (p=0.710 n=7)
List/sqlite-overflows-page/pagination-4   18.02Ki ± 11%   19.01Ki ± 25%       ~ (p=0.073 n=7)
List/dqlite-tiny/all-4                      960.0 ±  7%     934.0 ±  4%       ~ (p=0.105 n=7)
List/dqlite-tiny/pagination-4               814.0 ± 12%     793.0 ± 10%       ~ (p=0.318 n=7)
List/dqlite-fits-in-page/all-4            5.982Ki ±  1%   5.972Ki ±  9%       ~ (p=0.223 n=7)
List/dqlite-fits-in-page/pagination-4     5.940Ki ± 13%   5.675Ki ± 11%       ~ (p=0.209 n=7)
List/dqlite-overflows-page/all-4          30.65Ki ±  8%   30.69Ki ±  2%       ~ (p=0.535 n=7)
List/dqlite-overflows-page/pagination-4   31.77Ki ±  3%   32.33Ki ±  2%       ~ (p=0.456 n=7)
Update/sqlite/1-workers-4                 21.58Ki ±  0%   21.57Ki ±  0%       ~ (p=0.058 n=7)
Update/sqlite/4-workers-4                 21.54Ki ±  0%   21.59Ki ±  0%  +0.24% (p=0.017 n=7)
Update/sqlite/16-workers-4                21.57Ki ±  0%   21.57Ki ±  0%       ~ (p=0.684 n=7)
Update/sqlite/64-workers-4                21.77Ki ±  7%   22.05Ki ±  2%       ~ (p=0.259 n=7)
Update/sqlite/128-workers-4               22.26Ki ±  2%   21.94Ki ±  4%       ~ (p=0.128 n=7)
Update/dqlite/1-workers-4                 20.82Ki ±  0%   20.83Ki ±  0%       ~ (p=0.240 n=7)
Update/dqlite/4-workers-4                 20.79Ki ±  0%   20.80Ki ±  0%       ~ (p=0.058 n=7)
Update/dqlite/16-workers-4                20.78Ki ±  0%   20.79Ki ±  0%       ~ (p=0.274 n=7)
Update/dqlite/64-workers-4                20.73Ki ±  0%   20.75Ki ±  0%  +0.12% (p=0.049 n=7)
Update/dqlite/128-workers-4               20.73Ki ±  0%   20.74Ki ±  0%       ~ (p=0.516 n=7)
geomean                                   14.00Ki         14.03Ki        +0.22%

                                        │   Before    │                After                 │
                                        │  allocs/op  │  allocs/op   vs base                 │
Compaction/sqlite-4                       48.00 ± 60%   49.00 ± 43%        ~ (p=0.645 n=7)
Compaction/dqlite-4                       273.0 ± 36%   269.0 ± 76%        ~ (p=0.462 n=7)
Create/sqlite/1-workers-4                 396.0 ±  0%   397.0 ±  0%   +0.25% (p=0.001 n=7)
Create/sqlite/4-workers-4                 396.0 ±  0%   397.0 ±  0%   +0.25% (p=0.001 n=7)
Create/sqlite/16-workers-4                396.0 ±  0%   397.0 ±  0%   +0.25% (p=0.001 n=7)
Create/sqlite/64-workers-4                397.0 ±  3%   400.0 ±  1%        ~ (p=0.155 n=7)
Create/sqlite/128-workers-4               408.0 ±  2%   414.0 ±  3%   +1.47% (p=0.032 n=7)
Create/dqlite/1-workers-4                 366.0 ±  0%   367.0 ±  0%   +0.27% (p=0.001 n=7)
Create/dqlite/4-workers-4                 366.0 ±  0%   367.0 ±  0%   +0.27% (p=0.001 n=7)
Create/dqlite/16-workers-4                366.0 ±  0%   367.0 ±  0%   +0.27% (p=0.001 n=7)
Create/dqlite/64-workers-4                365.0 ± 13%   366.0 ±  0%   +0.27% (p=0.016 n=7)
Create/dqlite/128-workers-4               365.0 ±  0%   366.0 ±  0%   +0.27% (p=0.001 n=7)
Delete/sqlite/1-workers-4                 427.0 ±  0%   428.0 ±  0%   +0.23% (p=0.005 n=7)
Delete/sqlite/4-workers-4                 427.0 ±  0%   428.0 ±  0%   +0.23% (p=0.001 n=7)
Delete/sqlite/16-workers-4                427.0 ±  0%   428.0 ±  0%   +0.23% (p=0.005 n=7)
Delete/sqlite/64-workers-4                428.0 ±  0%   430.0 ±  3%   +0.47% (p=0.027 n=7)
Delete/sqlite/128-workers-4               434.0 ±  1%   435.0 ±  1%        ~ (p=0.935 n=7)
Delete/dqlite/1-workers-4                 395.0 ±  0%   396.0 ±  0%   +0.25% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 395.0 ±  0%   396.0 ±  0%   +0.25% (p=0.005 n=7)
Delete/dqlite/16-workers-4                395.0 ±  0%   396.0 ±  0%   +0.25% (p=0.001 n=7)
Delete/dqlite/64-workers-4                395.0 ±  0%   396.0 ± 12%   +0.25% (p=0.005 n=7)
Delete/dqlite/128-workers-4               395.0 ±  0%   396.0 ±  0%   +0.25% (p=0.001 n=7)
Get/sqlite-4                              414.0 ±  0%   414.0 ±  0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                              392.0 ±  0%   392.0 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                    12.00 ± 25%   14.00 ±  7%  +16.67% (p=0.028 n=7)
List/sqlite-tiny/pagination-4             12.00 ± 67%   12.00 ± 67%        ~ (p=0.922 n=7)
List/sqlite-fits-in-page/all-4            20.00 ± 10%   19.00 ± 11%        ~ (p=0.837 n=7)
List/sqlite-fits-in-page/pagination-4     26.00 ± 46%   24.00 ± 50%        ~ (p=0.287 n=7)
List/sqlite-overflows-page/all-4          8.000 ± 12%   8.000 ± 25%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/pagination-4   8.000 ± 12%   8.000 ± 50%        ~ (p=0.147 n=7)
List/dqlite-tiny/all-4                    12.00 ±  0%   12.00 ±  8%        ~ (p=1.000 n=7)
List/dqlite-tiny/pagination-4             9.000 ± 33%   9.000 ± 11%        ~ (p=0.306 n=7)
List/dqlite-fits-in-page/all-4            18.00 ±  0%   18.00 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4     18.00 ± 22%   16.00 ± 19%        ~ (p=0.266 n=7)
List/dqlite-overflows-page/all-4          32.00 ±  3%   32.00 ±  3%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/pagination-4   34.00 ±  3%   35.00 ±  3%        ~ (p=0.409 n=7)
Update/sqlite/1-workers-4                 403.0 ±  0%   404.0 ±  0%   +0.25% (p=0.001 n=7)
Update/sqlite/4-workers-4                 403.0 ±  0%   404.0 ±  0%   +0.25% (p=0.001 n=7)
Update/sqlite/16-workers-4                403.0 ±  0%   404.0 ±  0%   +0.25% (p=0.001 n=7)
Update/sqlite/64-workers-4                404.0 ±  2%   407.0 ±  0%   +0.74% (p=0.033 n=7)
Update/sqlite/128-workers-4               409.0 ±  3%   408.0 ±  1%        ~ (p=0.970 n=7)
Update/dqlite/1-workers-4                 373.0 ±  0%   373.0 ±  0%        ~ (p=0.073 n=7)
Update/dqlite/4-workers-4                 372.0 ±  0%   373.0 ±  0%   +0.27% (p=0.001 n=7)
Update/dqlite/16-workers-4                372.0 ±  0%   373.0 ±  0%   +0.27% (p=0.001 n=7)
Update/dqlite/64-workers-4                372.0 ±  0%   373.0 ±  0%   +0.27% (p=0.001 n=7)
Update/dqlite/128-workers-4               370.0 ±  0%   372.0 ±  0%   +0.54% (p=0.002 n=7)
geomean                                   160.4         160.5         +0.08%
¹ all samples are equal

                                        │        Before         │                    After                    │
                                        │ network-bytes-read/op │ network-bytes-read/op  vs base              │
Compaction/dqlite-4                               4.181Ki ± 37%           4.128Ki ± 76%       ~ (p=1.000 n=7)
Create/dqlite/1-workers-4                           240.2 ±  0%             239.5 ±  0%  -0.29% (p=0.005 n=7)
Create/dqlite/4-workers-4                           239.9 ±  0%             242.2 ±  1%  +0.96% (p=0.004 n=7)
Create/dqlite/16-workers-4                          240.7 ±  1%             241.3 ±  0%       ~ (p=0.512 n=7)
Create/dqlite/64-workers-4                          241.4 ± 34%             240.4 ±  0%       ~ (p=0.089 n=7)
Create/dqlite/128-workers-4                         241.6 ±  1%             240.8 ±  0%       ~ (p=0.173 n=7)
Delete/dqlite/1-workers-4                           716.0 ±  0%             715.1 ±  0%       ~ (p=0.559 n=7)
Delete/dqlite/4-workers-4                           718.2 ±  0%             716.5 ±  0%       ~ (p=0.051 n=7)
Delete/dqlite/16-workers-4                          718.2 ±  1%             715.4 ±  0%       ~ (p=0.138 n=7)
Delete/dqlite/64-workers-4                          720.0 ±  0%             716.9 ± 11%  -0.43% (p=0.010 n=7)
Delete/dqlite/128-workers-4                         716.8 ±  0%             718.1 ±  0%       ~ (p=0.073 n=7)
Get/dqlite-4                                        996.2 ±  0%             996.2 ±  0%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                              169.3 ±  2%             167.8 ±  6%       ~ (p=0.068 n=7)
List/dqlite-tiny/pagination-4                       121.5 ± 36%             120.8 ± 14%       ~ (p=0.259 n=7)
List/dqlite-fits-in-page/all-4                    1.323Ki ±  1%           1.320Ki ±  2%       ~ (p=0.174 n=7)
List/dqlite-fits-in-page/pagination-4             1.352Ki ± 22%           1.209Ki ± 16%       ~ (p=0.259 n=7)
List/dqlite-overflows-page/all-4                  7.201Ki ±  1%           7.212Ki ±  3%       ~ (p=0.874 n=7)
List/dqlite-overflows-page/pagination-4           7.869Ki ±  5%           8.026Ki ±  2%       ~ (p=0.128 n=7)
Update/dqlite/1-workers-4                           262.7 ±  0%             262.6 ±  0%       ~ (p=0.704 n=7)
Update/dqlite/4-workers-4                           262.8 ±  0%             262.8 ±  0%       ~ (p=0.628 n=7)
Update/dqlite/16-workers-4                          262.6 ±  0%             262.8 ±  0%       ~ (p=0.643 n=7)
Update/dqlite/64-workers-4                          262.4 ±  0%             262.4 ±  0%       ~ (p=0.962 n=7)
Update/dqlite/128-workers-4                         260.9 ±  0%             261.5 ±  0%       ~ (p=0.103 n=7)
geomean                                             563.6                   560.5        -0.54%

                                        │          Before          │                     After                      │
                                        │ network-bytes-written/op │ network-bytes-written/op  vs base              │
Compaction/dqlite-4                                    5.450 ± 11%                5.453 ± 24%       ~ (p=0.686 n=7)
Create/dqlite/1-workers-4                              113.8 ±  1%                112.7 ±  1%  -0.97% (p=0.003 n=7)
Create/dqlite/4-workers-4                              113.1 ±  1%                117.3 ±  3%  +3.71% (p=0.003 n=7)
Create/dqlite/16-workers-4                             114.5 ±  3%                115.8 ±  1%       ~ (p=0.435 n=7)
Create/dqlite/64-workers-4                             116.1 ± 24%                114.2 ±  1%  -1.64% (p=0.041 n=7)
Create/dqlite/128-workers-4                            116.4 ±  2%                115.0 ±  2%       ~ (p=0.175 n=7)
Delete/dqlite/1-workers-4                              81.65 ±  1%                81.29 ±  1%       ~ (p=0.333 n=7)
Delete/dqlite/4-workers-4                              82.57 ±  1%                81.86 ±  1%  -0.86% (p=0.041 n=7)
Delete/dqlite/16-workers-4                             82.57 ±  2%                81.37 ±  0%  -1.45% (p=0.033 n=7)
Delete/dqlite/64-workers-4                             83.31 ±  1%                82.00 ± 32%  -1.57% (p=0.011 n=7)
Delete/dqlite/128-workers-4                            81.97 ±  2%                82.53 ±  1%       ~ (p=0.073 n=7)
Get/dqlite-4                                           88.54 ±  0%                88.54 ±  0%       ~ (p=0.633 n=7)
List/dqlite-tiny/all-4                               0.03625 ±  5%              0.03564 ± 12%       ~ (p=0.073 n=7)
List/dqlite-tiny/pagination-4                        0.02255 ± 83%              0.02042 ± 45%       ~ (p=0.209 n=7)
List/dqlite-fits-in-page/all-4                       0.06114 ±  2%              0.06026 ±  4%       ~ (p=0.053 n=7)
List/dqlite-fits-in-page/pagination-4                0.07637 ± 29%              0.06523 ± 20%       ~ (p=0.209 n=7)
List/dqlite-overflows-page/all-4                     0.07984 ±  4%              0.08167 ±  7%       ~ (p=0.620 n=7)
List/dqlite-overflows-page/pagination-4               0.1083 ±  8%               0.1091 ±  9%       ~ (p=1.000 n=7)
Update/dqlite/1-workers-4                              137.0 ±  0%                137.1 ±  0%       ~ (p=0.691 n=7)
Update/dqlite/4-workers-4                              136.9 ±  0%                137.0 ±  0%       ~ (p=0.429 n=7)
Update/dqlite/16-workers-4                             136.9 ±  0%                137.0 ±  0%       ~ (p=0.601 n=7)
Update/dqlite/64-workers-4                             136.7 ±  0%                136.8 ±  0%       ~ (p=0.796 n=7)
Update/dqlite/128-workers-4                            136.4 ±  0%                136.4 ±  0%       ~ (p=0.991 n=7)
geomean                                                13.18                      13.02        -1.22%
Current status
goos: linux
goarch: amd64
pkg: github.com/canonical/k8s-dqlite/test
cpu: AMD EPYC 7763 64-Core Processor                
                                        │     After     │
                                        │    sec/op     │
Compaction/sqlite-4                       19.37µ ±  45%
Compaction/dqlite-4                       59.44µ ±  31%
Create/sqlite/1-workers-4                 529.3µ ±   7%
Create/sqlite/4-workers-4                 555.2µ ±   6%
Create/sqlite/16-workers-4                534.1µ ±  21%
Create/sqlite/64-workers-4                2.039m ± 143%
Create/sqlite/128-workers-4               4.955m ±  64%
Create/dqlite/1-workers-4                 1.328m ±  11%
Create/dqlite/4-workers-4                 922.6µ ±  23%
Create/dqlite/16-workers-4                1.025m ±  10%
Create/dqlite/64-workers-4                1.107m ±   8%
Create/dqlite/128-workers-4               1.090m ±   7%
Delete/sqlite/1-workers-4                 548.4µ ±  16%
Delete/sqlite/4-workers-4                 531.4µ ±  11%
Delete/sqlite/16-workers-4                530.0µ ±  13%
Delete/sqlite/64-workers-4                2.684m ± 368%
Delete/sqlite/128-workers-4               3.472m ± 112%
Delete/dqlite/1-workers-4                 1.292m ±  13%
Delete/dqlite/4-workers-4                 1.118m ±  11%
Delete/dqlite/16-workers-4                1.176m ±   8%
Delete/dqlite/64-workers-4                1.072m ±  17%
Delete/dqlite/128-workers-4               937.9µ ±  13%
Get/sqlite-4                              223.1µ ±   1%
Get/dqlite-4                              341.4µ ±   2%
List/sqlite-tiny/all-4                    3.211µ ±   4%
List/sqlite-tiny/pagination-4             4.621µ ±  19%
List/sqlite-fits-in-page/all-4            6.527µ ±   5%
List/sqlite-fits-in-page/pagination-4     15.23µ ±  14%
List/sqlite-overflows-page/all-4          15.23µ ±   6%
List/sqlite-overflows-page/pagination-4   19.43µ ±   4%
List/dqlite-tiny/all-4                    2.016µ ±   2%
List/dqlite-tiny/pagination-4             3.137µ ±   4%
List/dqlite-fits-in-page/all-4            5.449µ ±   3%
List/dqlite-fits-in-page/pagination-4     11.76µ ±   3%
List/dqlite-overflows-page/all-4          18.84µ ±   5%
List/dqlite-overflows-page/pagination-4   23.27µ ±   2%
Update/sqlite/1-workers-4                 527.7µ ±  19%
Update/sqlite/4-workers-4                 577.7µ ±   8%
Update/sqlite/16-workers-4                496.4µ ±  28%
Update/sqlite/64-workers-4                2.484m ±  94%
Update/sqlite/128-workers-4               1.962m ± 239%
Update/dqlite/1-workers-4                 1.297m ±   8%
Update/dqlite/4-workers-4                 1.108m ±   7%
Update/dqlite/16-workers-4                1.060m ±  18%
Update/dqlite/64-workers-4                922.5µ ±   6%
Update/dqlite/128-workers-4               1.020m ±  11%
geomean                                   241.7µ

                                        │        After         │
                                        │ page-cache-misses/op │
Compaction/sqlite-4                               0.000 ± 0%
Compaction/dqlite-4                               0.000 ± 0%
Create/sqlite/1-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/sqlite/64-workers-4                        0.000 ± 0%
Create/sqlite/128-workers-4                       0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/64-workers-4                        0.000 ± 0%
Create/dqlite/128-workers-4                       0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/64-workers-4                        0.000 ± 0%
Delete/sqlite/128-workers-4                       0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/64-workers-4                        0.000 ± 0%
Delete/dqlite/128-workers-4                       0.000 ± 0%
Get/sqlite-4                                      0.000 ± 0%
Get/dqlite-4                                      0.000 ± 0%
List/sqlite-tiny/all-4                            0.000 ± 0%
List/sqlite-tiny/pagination-4                     0.000 ± 0%
List/sqlite-fits-in-page/all-4                    0.000 ± 0%
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%
List/sqlite-overflows-page/all-4                  0.000 ± 0%
List/sqlite-overflows-page/pagination-4           0.000 ± 0%
List/dqlite-tiny/all-4                            0.000 ± 0%
List/dqlite-tiny/pagination-4                     0.000 ± 0%
List/dqlite-fits-in-page/all-4                    0.000 ± 0%
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%
List/dqlite-overflows-page/all-4                  0.000 ± 0%
List/dqlite-overflows-page/pagination-4           0.000 ± 0%
Update/sqlite/1-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/sqlite/64-workers-4                        0.000 ± 0%
Update/sqlite/128-workers-4                       0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/64-workers-4                        0.000 ± 0%
Update/dqlite/128-workers-4                       0.000 ± 0%
geomean                                                      ¹
¹ summaries must be >0 to compute geomean

                                        │        After         │
                                        │ page-cache-spills/op │
Compaction/sqlite-4                               0.000 ± 0%
Compaction/dqlite-4                               0.000 ± 0%
Create/sqlite/1-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/sqlite/64-workers-4                        0.000 ± 0%
Create/sqlite/128-workers-4                       0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/64-workers-4                        0.000 ± 0%
Create/dqlite/128-workers-4                       0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/64-workers-4                        0.000 ± 0%
Delete/sqlite/128-workers-4                       0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/64-workers-4                        0.000 ± 0%
Delete/dqlite/128-workers-4                       0.000 ± 0%
Get/sqlite-4                                      0.000 ± 0%
Get/dqlite-4                                      0.000 ± 0%
List/sqlite-tiny/all-4                            0.000 ± 0%
List/sqlite-tiny/pagination-4                     0.000 ± 0%
List/sqlite-fits-in-page/all-4                    0.000 ± 0%
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%
List/sqlite-overflows-page/all-4                  0.000 ± 0%
List/sqlite-overflows-page/pagination-4           0.000 ± 0%
List/dqlite-tiny/all-4                            0.000 ± 0%
List/dqlite-tiny/pagination-4                     0.000 ± 0%
List/dqlite-fits-in-page/all-4                    0.000 ± 0%
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%
List/dqlite-overflows-page/all-4                  0.000 ± 0%
List/dqlite-overflows-page/pagination-4           0.000 ± 0%
Update/sqlite/1-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/sqlite/64-workers-4                        0.000 ± 0%
Update/sqlite/128-workers-4                       0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/64-workers-4                        0.000 ± 0%
Update/dqlite/128-workers-4                       0.000 ± 0%
geomean                                                      ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │ page-reads/op │
Compaction/sqlite-4                         12.22 ±  1%
Compaction/dqlite-4                         12.22 ±  1%
Create/sqlite/1-workers-4                   13.84 ±  0%
Create/sqlite/4-workers-4                   12.77 ±  3%
Create/sqlite/16-workers-4                  11.40 ±  9%
Create/sqlite/64-workers-4                  9.152 ± 31%
Create/sqlite/128-workers-4                 5.044 ± 61%
Create/dqlite/1-workers-4                   12.99 ±  2%
Create/dqlite/4-workers-4                   10.80 ±  2%
Create/dqlite/16-workers-4                  10.86 ±  3%
Create/dqlite/64-workers-4                  10.65 ±  3%
Create/dqlite/128-workers-4                 10.77 ±  1%
Delete/sqlite/1-workers-4                   16.24 ±  0%
Delete/sqlite/4-workers-4                   14.72 ±  6%
Delete/sqlite/16-workers-4                  13.06 ±  7%
Delete/sqlite/64-workers-4                  10.10 ± 18%
Delete/sqlite/128-workers-4                 8.533 ± 17%
Delete/dqlite/1-workers-4                   15.58 ±  1%
Delete/dqlite/4-workers-4                   13.30 ±  2%
Delete/dqlite/16-workers-4                  13.48 ±  1%
Delete/dqlite/64-workers-4                  13.32 ±  3%
Delete/dqlite/128-workers-4                 13.25 ±  1%
Get/sqlite-4                                14.96 ±  0%
Get/dqlite-4                                11.97 ±  0%
List/sqlite-tiny/all-4                     190.9m ±  0%
List/sqlite-tiny/pagination-4               1.125 ±  3%
List/sqlite-fits-in-page/all-4             163.6m ± 59%
List/sqlite-fits-in-page/pagination-4      955.7m ±  3%
List/sqlite-overflows-page/all-4           177.5m ±  4%
List/sqlite-overflows-page/pagination-4     1.065 ±  1%
List/dqlite-tiny/all-4                     190.4m ±  0%
List/dqlite-tiny/pagination-4               1.123 ±  3%
List/dqlite-fits-in-page/all-4             164.2m ± 59%
List/dqlite-fits-in-page/pagination-4      954.3m ±  3%
List/dqlite-overflows-page/all-4           184.7m ±  0%
List/dqlite-overflows-page/pagination-4     1.073 ±  3%
Update/sqlite/1-workers-4                   15.77 ±  1%
Update/sqlite/4-workers-4                   14.87 ±  6%
Update/sqlite/16-workers-4                  13.08 ±  6%
Update/sqlite/64-workers-4                  10.24 ± 24%
Update/sqlite/128-workers-4                 8.956 ± 45%
Update/dqlite/1-workers-4                   15.14 ±  2%
Update/dqlite/4-workers-4                   12.56 ±  1%
Update/dqlite/16-workers-4                  12.67 ±  1%
Update/dqlite/64-workers-4                  12.70 ±  1%
Update/dqlite/128-workers-4                 12.50 ±  1%
geomean                                     5.067

                                        │     After      │
                                        │ page-writes/op │
Compaction/sqlite-4                        190.5m ± 0%
Compaction/dqlite-4                        187.7m ± 1%
Create/sqlite/1-workers-4                   4.353 ± 0%
Create/sqlite/4-workers-4                   4.319 ± 0%
Create/sqlite/16-workers-4                  4.302 ± 1%
Create/sqlite/64-workers-4                  4.045 ± 3%
Create/sqlite/128-workers-4                 4.016 ± 1%
Create/dqlite/1-workers-4                   4.133 ± 0%
Create/dqlite/4-workers-4                   4.302 ± 4%
Create/dqlite/16-workers-4                  4.250 ± 1%
Create/dqlite/64-workers-4                  4.194 ± 2%
Create/dqlite/128-workers-4                 4.236 ± 2%
Delete/sqlite/1-workers-4                   4.387 ± 0%
Delete/sqlite/4-workers-4                   4.393 ± 1%
Delete/sqlite/16-workers-4                  4.369 ± 1%
Delete/sqlite/64-workers-4                  4.326 ± 5%
Delete/sqlite/128-workers-4                 4.268 ± 4%
Delete/dqlite/1-workers-4                   4.346 ± 1%
Delete/dqlite/4-workers-4                   4.364 ± 1%
Delete/dqlite/16-workers-4                  4.360 ± 1%
Delete/dqlite/64-workers-4                  4.346 ± 1%
Delete/dqlite/128-workers-4                 4.361 ± 1%
Get/sqlite-4                                0.000 ± 0%
Get/dqlite-4                                0.000 ± 0%
List/sqlite-tiny/all-4                      0.000 ± 0%
List/sqlite-tiny/pagination-4               0.000 ± 0%
List/sqlite-fits-in-page/all-4              0.000 ± 0%
List/sqlite-fits-in-page/pagination-4       0.000 ± 0%
List/sqlite-overflows-page/all-4            0.000 ± 0%
List/sqlite-overflows-page/pagination-4     0.000 ± 0%
List/dqlite-tiny/all-4                      0.000 ± 0%
List/dqlite-tiny/pagination-4               0.000 ± 0%
List/dqlite-fits-in-page/all-4              0.000 ± 0%
List/dqlite-fits-in-page/pagination-4       0.000 ± 0%
List/dqlite-overflows-page/all-4            0.000 ± 0%
List/dqlite-overflows-page/pagination-4     0.000 ± 0%
Update/sqlite/1-workers-4                   4.228 ± 0%
Update/sqlite/4-workers-4                   4.294 ± 1%
Update/sqlite/16-workers-4                  4.311 ± 1%
Update/sqlite/64-workers-4                  4.087 ± 5%
Update/sqlite/128-workers-4                 4.146 ± 3%
Update/dqlite/1-workers-4                   4.185 ± 0%
Update/dqlite/4-workers-4                   4.174 ± 0%
Update/dqlite/16-workers-4                  4.203 ± 0%
Update/dqlite/64-workers-4                  4.243 ± 1%
Update/dqlite/128-workers-4                 4.228 ± 1%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │ sec-reading/op │
Compaction/sqlite-4                        26.00µ ±  66%
Compaction/dqlite-4                        34.40µ ±  72%
Create/sqlite/1-workers-4                  17.10µ ±  19%
Create/sqlite/4-workers-4                  19.90µ ±  20%
Create/sqlite/16-workers-4                 19.00µ ±  20%
Create/sqlite/64-workers-4                 28.00µ ±  76%
Create/sqlite/128-workers-4                24.50µ ±  53%
Create/dqlite/1-workers-4                  10.60µ ±  72%
Create/dqlite/4-workers-4                  10.40µ ±  37%
Create/dqlite/16-workers-4                 11.20µ ±  29%
Create/dqlite/64-workers-4                 11.20µ ±  40%
Create/dqlite/128-workers-4                11.30µ ±  24%
Delete/sqlite/1-workers-4                  31.20µ ±  11%
Delete/sqlite/4-workers-4                  33.20µ ±  14%
Delete/sqlite/16-workers-4                 32.80µ ±  18%
Delete/sqlite/64-workers-4                 33.50µ ± 109%
Delete/sqlite/128-workers-4                38.50µ ±  66%
Delete/dqlite/1-workers-4                  10.90µ ±  50%
Delete/dqlite/4-workers-4                  12.40µ ± 102%
Delete/dqlite/16-workers-4                 15.60µ ±  35%
Delete/dqlite/64-workers-4                 14.10µ ±  50%
Delete/dqlite/128-workers-4                14.40µ ±  34%
Get/sqlite-4                               57.20µ ±   6%
Get/dqlite-4                               40.70µ ±  23%
List/sqlite-tiny/all-4                     5.500µ ±  13%
List/sqlite-tiny/pagination-4              6.100µ ±  69%
List/sqlite-fits-in-page/all-4             11.60µ ±   9%
List/sqlite-fits-in-page/pagination-4      23.20µ ±  40%
List/sqlite-overflows-page/all-4           11.50µ ±  30%
List/sqlite-overflows-page/pagination-4    15.10µ ±  48%
List/dqlite-tiny/all-4                     2.500µ ±  24%
List/dqlite-tiny/pagination-4              3.100µ ±  16%
List/dqlite-fits-in-page/all-4             8.500µ ±  16%
List/dqlite-fits-in-page/pagination-4      15.90µ ±  16%
List/dqlite-overflows-page/all-4           30.50µ ±   7%
List/dqlite-overflows-page/pagination-4    37.50µ ±   4%
Update/sqlite/1-workers-4                  18.40µ ±  18%
Update/sqlite/4-workers-4                  19.50µ ±  21%
Update/sqlite/16-workers-4                 20.60µ ±  22%
Update/sqlite/64-workers-4                 27.30µ ±  52%
Update/sqlite/128-workers-4                24.00µ ±  34%
Update/dqlite/1-workers-4                  9.000µ ±  59%
Update/dqlite/4-workers-4                  10.80µ ±  45%
Update/dqlite/16-workers-4                 10.00µ ±  35%
Update/dqlite/64-workers-4                 10.40µ ±  25%
Update/dqlite/128-workers-4                12.60µ ±  41%
geomean                                    16.09µ

                                        │      After      │
                                        │ sec-writing/op  │
Compaction/sqlite-4                       9.600µ ±  10%
Compaction/dqlite-4                       7.600µ ±   9%
Create/sqlite/1-workers-4                 294.7µ ±  11%
Create/sqlite/4-workers-4                 1.747m ±  17%
Create/sqlite/16-workers-4                6.182m ±   9%
Create/sqlite/64-workers-4                39.55m ±  73%
Create/sqlite/128-workers-4               114.2m ±  35%
Create/dqlite/1-workers-4                 31.10µ ±  30%
Create/dqlite/4-workers-4                 36.00µ ±  11%
Create/dqlite/16-workers-4                34.80µ ±  23%
Create/dqlite/64-workers-4                33.60µ ±  34%
Create/dqlite/128-workers-4               37.10µ ±  28%
Delete/sqlite/1-workers-4                 323.2µ ±  30%
Delete/sqlite/4-workers-4                 1.608m ±  15%
Delete/sqlite/16-workers-4                6.275m ±   8%
Delete/sqlite/64-workers-4                54.32m ± 117%
Delete/sqlite/128-workers-4               100.1m ±  33%
Delete/dqlite/1-workers-4                 36.20µ ±  21%
Delete/dqlite/4-workers-4                 44.70µ ±  14%
Delete/dqlite/16-workers-4                50.60µ ±  17%
Delete/dqlite/64-workers-4                38.60µ ±  58%
Delete/dqlite/128-workers-4               39.00µ ±  17%
Get/sqlite-4                               0.000 ±   0%
Get/dqlite-4                               0.000 ±   0%
List/sqlite-tiny/all-4                     0.000 ±   0%
List/sqlite-tiny/pagination-4              0.000 ±   0%
List/sqlite-fits-in-page/all-4             0.000 ±   0%
List/sqlite-fits-in-page/pagination-4      0.000 ±   0%
List/sqlite-overflows-page/all-4           0.000 ±   0%
List/sqlite-overflows-page/pagination-4    0.000 ±   0%
List/dqlite-tiny/all-4                     0.000 ±   0%
List/dqlite-tiny/pagination-4              0.000 ±   0%
List/dqlite-fits-in-page/all-4             0.000 ±   0%
List/dqlite-fits-in-page/pagination-4      0.000 ±   0%
List/dqlite-overflows-page/all-4           0.000 ±   0%
List/dqlite-overflows-page/pagination-4    0.000 ±   0%
Update/sqlite/1-workers-4                 305.8µ ±  26%
Update/sqlite/4-workers-4                 1.755m ±  16%
Update/sqlite/16-workers-4                5.954m ±  19%
Update/sqlite/64-workers-4                48.69m ±  53%
Update/sqlite/128-workers-4               68.46m ±  90%
Update/dqlite/1-workers-4                 35.90µ ±  30%
Update/dqlite/4-workers-4                 33.70µ ±  21%
Update/dqlite/16-workers-4                34.20µ ±  18%
Update/dqlite/64-workers-4                35.90µ ±  18%
Update/dqlite/128-workers-4               33.30µ ±  34%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │     B/op      │
Compaction/sqlite-4                       2.271Ki ± 44%
Compaction/dqlite-4                       11.23Ki ± 76%
Create/sqlite/1-workers-4                 20.42Ki ±  0%
Create/sqlite/4-workers-4                 20.43Ki ±  0%
Create/sqlite/16-workers-4                20.41Ki ±  0%
Create/sqlite/64-workers-4                20.79Ki ±  4%
Create/sqlite/128-workers-4               22.09Ki ±  5%
Create/dqlite/1-workers-4                 19.73Ki ±  0%
Create/dqlite/4-workers-4                 19.66Ki ±  0%
Create/dqlite/16-workers-4                19.67Ki ±  0%
Create/dqlite/64-workers-4                19.72Ki ±  0%
Create/dqlite/128-workers-4               19.73Ki ±  0%
Delete/sqlite/1-workers-4                 22.86Ki ±  0%
Delete/sqlite/4-workers-4                 22.87Ki ±  0%
Delete/sqlite/16-workers-4                22.86Ki ±  0%
Delete/sqlite/64-workers-4                23.38Ki ±  8%
Delete/sqlite/128-workers-4               24.05Ki ±  3%
Delete/dqlite/1-workers-4                 21.97Ki ±  0%
Delete/dqlite/4-workers-4                 21.95Ki ±  0%
Delete/dqlite/16-workers-4                21.97Ki ±  0%
Delete/dqlite/64-workers-4                21.95Ki ±  9%
Delete/dqlite/128-workers-4               21.96Ki ±  0%
Get/sqlite-4                              23.03Ki ±  0%
Get/dqlite-4                              21.96Ki ±  0%
List/sqlite-tiny/all-4                    1.097Ki ±  6%
List/sqlite-tiny/pagination-4              1012.0 ± 40%
List/sqlite-fits-in-page/all-4            7.312Ki ±  9%
List/sqlite-fits-in-page/pagination-4     8.299Ki ± 22%
List/sqlite-overflows-page/all-4          20.49Ki ± 11%
List/sqlite-overflows-page/pagination-4   19.01Ki ± 25%
List/dqlite-tiny/all-4                      934.0 ±  4%
List/dqlite-tiny/pagination-4               793.0 ± 10%
List/dqlite-fits-in-page/all-4            5.972Ki ±  9%
List/dqlite-fits-in-page/pagination-4     5.675Ki ± 11%
List/dqlite-overflows-page/all-4          30.69Ki ±  2%
List/dqlite-overflows-page/pagination-4   32.33Ki ±  2%
Update/sqlite/1-workers-4                 21.57Ki ±  0%
Update/sqlite/4-workers-4                 21.59Ki ±  0%
Update/sqlite/16-workers-4                21.57Ki ±  0%
Update/sqlite/64-workers-4                22.05Ki ±  2%
Update/sqlite/128-workers-4               21.94Ki ±  4%
Update/dqlite/1-workers-4                 20.83Ki ±  0%
Update/dqlite/4-workers-4                 20.80Ki ±  0%
Update/dqlite/16-workers-4                20.79Ki ±  0%
Update/dqlite/64-workers-4                20.75Ki ±  0%
Update/dqlite/128-workers-4               20.74Ki ±  0%
geomean                                   14.03Ki

                                        │    After    │
                                        │  allocs/op  │
Compaction/sqlite-4                       49.00 ± 43%
Compaction/dqlite-4                       269.0 ± 76%
Create/sqlite/1-workers-4                 397.0 ±  0%
Create/sqlite/4-workers-4                 397.0 ±  0%
Create/sqlite/16-workers-4                397.0 ±  0%
Create/sqlite/64-workers-4                400.0 ±  1%
Create/sqlite/128-workers-4               414.0 ±  3%
Create/dqlite/1-workers-4                 367.0 ±  0%
Create/dqlite/4-workers-4                 367.0 ±  0%
Create/dqlite/16-workers-4                367.0 ±  0%
Create/dqlite/64-workers-4                366.0 ±  0%
Create/dqlite/128-workers-4               366.0 ±  0%
Delete/sqlite/1-workers-4                 428.0 ±  0%
Delete/sqlite/4-workers-4                 428.0 ±  0%
Delete/sqlite/16-workers-4                428.0 ±  0%
Delete/sqlite/64-workers-4                430.0 ±  3%
Delete/sqlite/128-workers-4               435.0 ±  1%
Delete/dqlite/1-workers-4                 396.0 ±  0%
Delete/dqlite/4-workers-4                 396.0 ±  0%
Delete/dqlite/16-workers-4                396.0 ±  0%
Delete/dqlite/64-workers-4                396.0 ± 12%
Delete/dqlite/128-workers-4               396.0 ±  0%
Get/sqlite-4                              414.0 ±  0%
Get/dqlite-4                              392.0 ±  0%
List/sqlite-tiny/all-4                    14.00 ±  7%
List/sqlite-tiny/pagination-4             12.00 ± 67%
List/sqlite-fits-in-page/all-4            19.00 ± 11%
List/sqlite-fits-in-page/pagination-4     24.00 ± 50%
List/sqlite-overflows-page/all-4          8.000 ± 25%
List/sqlite-overflows-page/pagination-4   8.000 ± 50%
List/dqlite-tiny/all-4                    12.00 ±  8%
List/dqlite-tiny/pagination-4             9.000 ± 11%
List/dqlite-fits-in-page/all-4            18.00 ±  0%
List/dqlite-fits-in-page/pagination-4     16.00 ± 19%
List/dqlite-overflows-page/all-4          32.00 ±  3%
List/dqlite-overflows-page/pagination-4   35.00 ±  3%
Update/sqlite/1-workers-4                 404.0 ±  0%
Update/sqlite/4-workers-4                 404.0 ±  0%
Update/sqlite/16-workers-4                404.0 ±  0%
Update/sqlite/64-workers-4                407.0 ±  0%
Update/sqlite/128-workers-4               408.0 ±  1%
Update/dqlite/1-workers-4                 373.0 ±  0%
Update/dqlite/4-workers-4                 373.0 ±  0%
Update/dqlite/16-workers-4                373.0 ±  0%
Update/dqlite/64-workers-4                373.0 ±  0%
Update/dqlite/128-workers-4               372.0 ±  0%
geomean                                   160.5

                                        │         After         │
                                        │ network-bytes-read/op │
Compaction/dqlite-4                               4.128Ki ± 76%
Create/dqlite/1-workers-4                           239.5 ±  0%
Create/dqlite/4-workers-4                           242.2 ±  1%
Create/dqlite/16-workers-4                          241.3 ±  0%
Create/dqlite/64-workers-4                          240.4 ±  0%
Create/dqlite/128-workers-4                         240.8 ±  0%
Delete/dqlite/1-workers-4                           715.1 ±  0%
Delete/dqlite/4-workers-4                           716.5 ±  0%
Delete/dqlite/16-workers-4                          715.4 ±  0%
Delete/dqlite/64-workers-4                          716.9 ± 11%
Delete/dqlite/128-workers-4                         718.1 ±  0%
Get/dqlite-4                                        996.2 ±  0%
List/dqlite-tiny/all-4                              167.8 ±  6%
List/dqlite-tiny/pagination-4                       120.8 ± 14%
List/dqlite-fits-in-page/all-4                    1.320Ki ±  2%
List/dqlite-fits-in-page/pagination-4             1.209Ki ± 16%
List/dqlite-overflows-page/all-4                  7.212Ki ±  3%
List/dqlite-overflows-page/pagination-4           8.026Ki ±  2%
Update/dqlite/1-workers-4                           262.6 ±  0%
Update/dqlite/4-workers-4                           262.8 ±  0%
Update/dqlite/16-workers-4                          262.8 ±  0%
Update/dqlite/64-workers-4                          262.4 ±  0%
Update/dqlite/128-workers-4                         261.5 ±  0%
geomean                                             560.5

                                        │          After           │
                                        │ network-bytes-written/op │
Compaction/dqlite-4                                    5.453 ± 24%
Create/dqlite/1-workers-4                              112.7 ±  1%
Create/dqlite/4-workers-4                              117.3 ±  3%
Create/dqlite/16-workers-4                             115.8 ±  1%
Create/dqlite/64-workers-4                             114.2 ±  1%
Create/dqlite/128-workers-4                            115.0 ±  2%
Delete/dqlite/1-workers-4                              81.29 ±  1%
Delete/dqlite/4-workers-4                              81.86 ±  1%
Delete/dqlite/16-workers-4                             81.37 ±  0%
Delete/dqlite/64-workers-4                             82.00 ± 32%
Delete/dqlite/128-workers-4                            82.53 ±  1%
Get/dqlite-4                                           88.54 ±  0%
List/dqlite-tiny/all-4                               0.03564 ± 12%
List/dqlite-tiny/pagination-4                        0.02042 ± 45%
List/dqlite-fits-in-page/all-4                       0.06026 ±  4%
List/dqlite-fits-in-page/pagination-4                0.06523 ± 20%
List/dqlite-overflows-page/all-4                     0.08167 ±  7%
List/dqlite-overflows-page/pagination-4               0.1091 ±  9%
Update/dqlite/1-workers-4                              137.1 ±  0%
Update/dqlite/4-workers-4                              137.0 ±  0%
Update/dqlite/16-workers-4                             137.0 ±  0%
Update/dqlite/64-workers-4                             136.8 ±  0%
Update/dqlite/128-workers-4                            136.4 ±  0%
geomean                                                13.02

@louiseschmidtgen
Copy link
Contributor Author

louiseschmidtgen commented Dec 11, 2024

The preliminary performance test with 1.31 suggests that the ConsistentListOnCache upstream feature is helping to reduce the resource pressure on k8s-dqlite:

cpu_usage_plot
io_read_usage_plot
io_write_usage_plot
mem_usage_plot

Copy link
Member

@berkayoz berkayoz left a comment

Choose a reason for hiding this comment

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

LGTM overall, I'll do another pass once finalized. We should split these into multiple PRs(one per upstream PR) as it is really hard to read and follow which change correlates to which PR. If we have to do this in a single PR then commenting through the PR on the changed lines to provide context would be appreciated.

// If the watch result has a non-zero CompactRevision, then the watch request failed due to
// the requested start revision having been compacted. Pass the current and and compact
// revision to the client via the cancel response, along with the correct error message.
if err == ErrCompacted {
Copy link
Member

Choose a reason for hiding this comment

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

I assume we check if compaction happened in the backend.Watch function right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Correct, this happens in the After query which checks for any revisions that happen after the start key.
If that start key is compacted we return the compaction error and cancel the watch and send a response with the current revision and the compact revision and canceled=true.


trace := logrus.IsLevelEnabled(logrus.TraceLevel)
outer := true
for outer {
Copy link
Member

@berkayoz berkayoz Dec 11, 2024

Choose a reason for hiding this comment

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

Can we add a comment for this block, AFAIK we are merging all the events to send it in a single watch message?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've added some comments to this block- does that help clarify?
Basically we are waiting on events but if a progress notify request comes we send a progress report whether there have been events or not.

watchQueryTimeout time.Duration
etcdMode bool
watchQueryTimeout time.Duration
watchProgressNotifyInterval time.Duration
Copy link
Contributor Author

@louiseschmidtgen louiseschmidtgen Dec 11, 2024

Choose a reason for hiding this comment

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

We make the watchProgressNotifyInterval configurable.

The watchProgressNotifyInterval is the interval in which we send progress reports on our watchers to the api-server. This interval gets used in watch.go

Copy link
Contributor

@bschimke95 bschimke95 left a comment

Choose a reason for hiding this comment

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

did a first pass - great work @louiseschmidtgen

cmd/root.go Outdated Show resolved Hide resolved
docs/configuration.md Outdated Show resolved Hide resolved
go 1.22
go 1.22.0

toolchain go1.22.10
Copy link
Contributor

Choose a reason for hiding this comment

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

why is this needed? Are we really relying on this specific patch version to build this?

Copy link
Member

Choose a reason for hiding this comment

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

I believe go mod tidy started adding this, see golang/go#65847

if r.Limit != 0 {
return nil, fmt.Errorf("unexpected limit: want 0, got %d", r.Limit)
if r.Limit != 0 && len(r.RangeEnd) != 0 {
err := fmt.Errorf("invalid combination of rangeEnd and limit, limit should be 0 got %d", r.Limit)
Copy link
Contributor

Choose a reason for hiding this comment

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

just curious here: This basically enforces no limit on a range request, right?
Why can't we have a range request with a limit which would just return the first X entries?

cmd/root.go Outdated Show resolved Hide resolved
@louiseschmidtgen louiseschmidtgen marked this pull request as ready for review December 12, 2024 14:58
@louiseschmidtgen louiseschmidtgen requested a review from a team as a code owner December 12, 2024 14:58
Copy link
Contributor

@bschimke95 bschimke95 left a comment

Choose a reason for hiding this comment

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

LGTM

Copy link
Collaborator

@marco6 marco6 left a comment

Choose a reason for hiding this comment

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

Hi Louise! Thanks for the effort on this new requirement. First pass below:

go.mod Outdated Show resolved Hide resolved
pkg/kine/server/maintenance.go Outdated Show resolved Hide resolved
pkg/kine/server/server.go Outdated Show resolved Hide resolved
pkg/kine/server/types.go Outdated Show resolved Hide resolved
pkg/kine/server/watch.go Outdated Show resolved Hide resolved
pkg/kine/sqllog/sqllog.go Outdated Show resolved Hide resolved
pkg/kine/server/watch.go Outdated Show resolved Hide resolved
pkg/kine/server/watch.go Outdated Show resolved Hide resolved
pkg/kine/server/watch.go Outdated Show resolved Hide resolved
pkg/kine/server/watch.go Show resolved Hide resolved
@louiseschmidtgen louiseschmidtgen changed the title Watch progress request Watch Progress Request Dec 19, 2024
Copy link
Collaborator

@marco6 marco6 left a comment

Choose a reason for hiding this comment

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

Looking way better, thanks Louise!

@petrutlucian94 petrutlucian94 mentioned this pull request Jan 9, 2025
2 tasks
petrutlucian94 added a commit that referenced this pull request Jan 10, 2025
The e2e tests are currently failing because of this k8s-dqlite error:

  k8s.k8s-dqlite[1947]: time="2025-01-09T15:00:22Z" level=error
  msg="error while range on /registry/clusterroles/system:aggregate-to-view :
  unexpected limit: want 0, got 1"

A separate PR is removing this check: #212

That being considered, we'll apply this change here to unblock
the CI.
petrutlucian94 added a commit that referenced this pull request Jan 10, 2025
* Bump CI os and Python versions

The integration tests use Python 3.8 / ubuntu 20.04. The problem is
that k8s-snap tests use type specifiers that require Python 3.10.

For this reason, we'll switch to Python 3.10 / ubuntu 22.04.

* Install lxd using k8s-snap composite action

This simplifies the gh workflows and also applies the Docker
iptables workaround.

* Use self-hosted runners

k8s-snap switched to self-hosted CI runners as the default Github
ones didn't have enough resources.

We'll update the k8s-dqlite CI job to use self-hosted runners as
well when running k8s-snap integration tests.

* Fix r install

* Remove "get" checks

The e2e tests are currently failing because of this k8s-dqlite error:

  k8s.k8s-dqlite[1947]: time="2025-01-09T15:00:22Z" level=error
  msg="error while range on /registry/clusterroles/system:aggregate-to-view :
  unexpected limit: want 0, got 1"

A separate PR is removing this check: #212

That being considered, we'll apply this change here to unblock
the CI.

* fix self-hosted runner tag
@louiseschmidtgen louiseschmidtgen force-pushed the KU-2290/watch-progress-request branch from 79047d6 to 8b0d967 Compare January 13, 2025 10:31
@louiseschmidtgen louiseschmidtgen merged commit ce52a30 into master Jan 13, 2025
8 checks passed
@louiseschmidtgen louiseschmidtgen deleted the KU-2290/watch-progress-request branch January 13, 2025 16:25
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.

4 participants