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

Open
wants to merge 20 commits into
base: master
Choose a base branch
from

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                        20.84µ ±   8%   20.78µ ±   10%       ~ (p=0.902 n=7)
Compaction/dqlite-4                        43.54µ ±   6%   44.18µ ±    7%       ~ (p=1.000 n=7)
Create/sqlite/1-workers-4                  578.6µ ±  16%   595.9µ ±    5%       ~ (p=0.209 n=7)
Create/sqlite/4-workers-4                  558.2µ ±   8%   583.0µ ±    5%       ~ (p=0.318 n=7)
Create/sqlite/16-workers-4                 492.1µ ±  19%   496.8µ ±   22%       ~ (p=1.000 n=7)
Create/sqlite/64-workers-4                 687.2µ ±  93%   919.7µ ±  441%       ~ (p=0.165 n=7)
Create/sqlite/128-workers-4                1.007m ± 158%   1.225m ±   81%       ~ (p=1.000 n=7)
Create/dqlite/1-workers-4                  1.281m ±   7%   1.223m ±   10%       ~ (p=0.097 n=7)
Create/dqlite/4-workers-4                  1.149m ±  18%   1.213m ±    7%       ~ (p=0.259 n=7)
Create/dqlite/16-workers-4                 1.081m ±  11%   1.134m ±    9%       ~ (p=0.535 n=7)
Create/dqlite/64-workers-4                 1.154m ±   6%   1.103m ±    8%       ~ (p=0.535 n=7)
Create/dqlite/128-workers-4                1.194m ±  10%   1.039m ±   21%       ~ (p=0.128 n=7)
Delete/sqlite/1-workers-4                  513.2µ ±   9%   552.8µ ±    6%  +7.72% (p=0.001 n=7)
Delete/sqlite/4-workers-4                  559.5µ ±  10%   551.0µ ±    7%       ~ (p=0.902 n=7)
Delete/sqlite/16-workers-4                 554.5µ ±  15%   508.0µ ±    7%  -8.39% (p=0.002 n=7)
Delete/sqlite/64-workers-4                1261.0µ ± 331%   916.3µ ±  203%       ~ (p=0.209 n=7)
Delete/sqlite/128-workers-4                961.2µ ± 256%   985.7µ ±  211%       ~ (p=0.710 n=7)
Delete/dqlite/1-workers-4                  1.297m ±  16%   1.298m ±    6%       ~ (p=0.805 n=7)
Delete/dqlite/4-workers-4                  1.152m ±  17%   1.067m ±   14%       ~ (p=0.318 n=7)
Delete/dqlite/16-workers-4                 1.214m ±   5%   1.102m ±    9%  -9.24% (p=0.001 n=7)
Delete/dqlite/64-workers-4                 1.205m ±   7%   1.103m ±   15%  -8.45% (p=0.007 n=7)
Delete/dqlite/128-workers-4                1.140m ±   9%   1.066m ±    7%       ~ (p=0.053 n=7)
Get/sqlite-4                               227.4µ ±   1%   227.9µ ±    2%       ~ (p=0.209 n=7)
Get/dqlite-4                               336.7µ ±   1%   341.1µ ±    1%  +1.30% (p=0.011 n=7)
List/sqlite-tiny/all-4                     3.649µ ±   9%   3.690µ ±    2%       ~ (p=0.137 n=7)
List/sqlite-tiny/pagination-4              5.982µ ±   4%   5.958µ ±    2%       ~ (p=0.710 n=7)
List/sqlite-fits-in-page/all-4             7.212µ ±   6%   6.930µ ±    5%       ~ (p=0.050 n=7)
List/sqlite-fits-in-page/pagination-4      17.32µ ±   7%   17.54µ ±    3%       ~ (p=0.902 n=7)
List/sqlite-overflows-page/all-4           16.35µ ±   3%   15.95µ ±    3%       ~ (p=0.053 n=7)
List/sqlite-overflows-page/pagination-4    20.61µ ±   2%   20.72µ ±    2%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                     2.446µ ±   6%   2.480µ ±   14%       ~ (p=0.477 n=7)
List/dqlite-tiny/pagination-4              4.726µ ±   1%   4.764µ ±    1%       ~ (p=0.076 n=7)
List/dqlite-fits-in-page/all-4             6.346µ ±   3%   6.508µ ±    5%       ~ (p=0.073 n=7)
List/dqlite-fits-in-page/pagination-4      13.53µ ±   3%   13.30µ ±    2%       ~ (p=0.053 n=7)
List/dqlite-overflows-page/all-4           21.37µ ±   4%   21.43µ ±   83%       ~ (p=0.456 n=7)
List/dqlite-overflows-page/pagination-4    25.40µ ±   1%   24.99µ ±    2%  -1.61% (p=0.011 n=7)
Update/sqlite/1-workers-4                  557.1µ ±  18%   569.8µ ±   40%       ~ (p=1.000 n=7)
Update/sqlite/4-workers-4                  547.1µ ±  14%   560.1µ ±  602%       ~ (p=0.535 n=7)
Update/sqlite/16-workers-4                 530.3µ ±  41%   545.8µ ±    8%       ~ (p=0.710 n=7)
Update/sqlite/64-workers-4                 652.8µ ± 230%   752.6µ ± 1443%       ~ (p=0.902 n=7)
Update/sqlite/128-workers-4                1.732m ±  88%   1.075m ±   89%       ~ (p=0.620 n=7)
Update/dqlite/1-workers-4                  1.295m ±   6%   1.227m ±    4%  -5.30% (p=0.017 n=7)
Update/dqlite/4-workers-4                  1.004m ±  20%   1.084m ±   16%       ~ (p=0.456 n=7)
Update/dqlite/16-workers-4                 1.049m ±  17%   1.181m ±    8%       ~ (p=0.097 n=7)
Update/dqlite/64-workers-4                 1.211m ±   6%   1.188m ±    6%       ~ (p=0.209 n=7)
Update/dqlite/128-workers-4                1.167m ±   5%   1.137m ±   15%       ~ (p=0.620 n=7)
geomean                                    224.4µ          222.6µ          -0.80%

                                        │        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.25 ±  1%     12.24 ±  1%       ~ (p=0.774 n=7)
Compaction/dqlite-4                         12.23 ±  2%     12.22 ±  1%       ~ (p=0.639 n=7)
Create/sqlite/1-workers-4                   13.79 ±  1%     13.77 ±  0%       ~ (p=0.100 n=7)
Create/sqlite/4-workers-4                   12.87 ±  5%     12.89 ±  3%       ~ (p=0.776 n=7)
Create/sqlite/16-workers-4                  11.21 ±  9%     11.01 ± 10%       ~ (p=0.805 n=7)
Create/sqlite/64-workers-4                  9.338 ±  5%     9.474 ± 32%       ~ (p=0.620 n=7)
Create/sqlite/128-workers-4                 8.454 ± 12%     8.333 ± 11%       ~ (p=0.456 n=7)
Create/dqlite/1-workers-4                   13.02 ±  2%     13.03 ±  1%       ~ (p=0.367 n=7)
Create/dqlite/4-workers-4                   10.77 ±  2%     10.70 ±  1%       ~ (p=0.268 n=7)
Create/dqlite/16-workers-4                  10.80 ±  2%     10.81 ±  2%       ~ (p=0.333 n=7)
Create/dqlite/64-workers-4                  10.81 ±  1%     10.84 ±  2%       ~ (p=0.302 n=7)
Create/dqlite/128-workers-4                 10.71 ±  4%     10.79 ±  3%       ~ (p=0.258 n=7)
Delete/sqlite/1-workers-4                   16.24 ±  0%     16.23 ±  0%       ~ (p=0.462 n=7)
Delete/sqlite/4-workers-4                   15.27 ±  2%     14.91 ±  6%       ~ (p=0.195 n=7)
Delete/sqlite/16-workers-4                  13.30 ±  4%     12.84 ±  4%       ~ (p=0.195 n=7)
Delete/sqlite/64-workers-4                  10.77 ± 16%     10.68 ±  8%       ~ (p=0.710 n=7)
Delete/sqlite/128-workers-4                 9.660 ± 13%     9.694 ± 11%       ~ (p=0.805 n=7)
Delete/dqlite/1-workers-4                   15.47 ±  1%     15.71 ±  3%  +1.55% (p=0.007 n=7)
Delete/dqlite/4-workers-4                   13.44 ±  1%     13.43 ±  1%       ~ (p=0.883 n=7)
Delete/dqlite/16-workers-4                  13.40 ±  2%     13.36 ±  3%       ~ (p=0.686 n=7)
Delete/dqlite/64-workers-4                  13.29 ±  3%     13.30 ±  2%       ~ (p=0.986 n=7)
Delete/dqlite/128-workers-4                 13.25 ±  2%     13.29 ±  5%       ~ (p=0.553 n=7)
Get/sqlite-4                                14.96 ±  0%     14.97 ±  0%       ~ (p=0.075 n=7)
Get/dqlite-4                                11.96 ±  0%     11.97 ±  0%       ~ (p=0.389 n=7)
List/sqlite-tiny/all-4                     192.0m ±  1%    192.0m ±  0%       ~ (p=0.343 n=7)
List/sqlite-tiny/pagination-4               1.126 ±  3%     1.126 ±  0%       ~ (p=0.755 n=7)
List/sqlite-fits-in-page/all-4             164.2m ± 57%    163.1m ± 58%       ~ (p=0.242 n=7)
List/sqlite-fits-in-page/pagination-4      960.9m ±  0%    960.3m ±  3%       ~ (p=0.174 n=7)
List/sqlite-overflows-page/all-4           177.2m ±  0%    177.2m ±  0%       ~ (p=1.000 n=7)
List/sqlite-overflows-page/pagination-4     1.065 ±  3%     1.065 ±  3%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                     190.7m ±  0%    190.8m ±  1%       ~ (p=0.213 n=7)
List/dqlite-tiny/pagination-4               1.126 ±  3%     1.126 ±  0%       ~ (p=1.000 n=7)
List/dqlite-fits-in-page/all-4             164.2m ±  0%    164.6m ± 58%  +0.24% (p=0.001 n=7)
List/dqlite-fits-in-page/pagination-4      955.6m ±  3%    953.8m ±  3%       ~ (p=0.100 n=7)
List/dqlite-overflows-page/all-4           184.6m ±  0%    184.7m ±  0%       ~ (p=0.432 n=7)
List/dqlite-overflows-page/pagination-4     1.089 ±  4%     1.077 ±  4%       ~ (p=0.558 n=7)
Update/sqlite/1-workers-4                   15.76 ±  0%     15.73 ±  1%       ~ (p=0.513 n=7)
Update/sqlite/4-workers-4                   14.77 ±  3%     14.69 ±  5%       ~ (p=0.973 n=7)
Update/sqlite/16-workers-4                  13.11 ±  7%     13.37 ±  7%       ~ (p=0.259 n=7)
Update/sqlite/64-workers-4                  11.33 ±  5%     11.25 ± 54%       ~ (p=0.535 n=7)
Update/sqlite/128-workers-4                 10.12 ± 27%     10.33 ± 17%       ~ (p=0.805 n=7)
Update/dqlite/1-workers-4                   15.05 ±  1%     15.14 ±  1%       ~ (p=0.257 n=7)
Update/dqlite/4-workers-4                   12.79 ±  1%     12.75 ±  2%       ~ (p=0.687 n=7)
Update/dqlite/16-workers-4                  12.73 ±  1%     12.74 ±  1%       ~ (p=0.873 n=7)
Update/dqlite/64-workers-4                  12.56 ±  2%     12.70 ±  1%       ~ (p=0.456 n=7)
Update/dqlite/128-workers-4                 12.47 ±  0%     12.67 ±  1%  +1.60% (p=0.001 n=7)
geomean                                     5.181           5.178        -0.05%

                                        │     Before     │                 After                  │
                                        │ page-writes/op │ page-writes/op  vs base                │
Compaction/sqlite-4                        190.2m ± 0%        190.5m ± 0%       ~ (p=0.638 n=7)
Compaction/dqlite-4                        188.0m ± 0%        187.6m ± 0%       ~ (p=0.170 n=7)
Create/sqlite/1-workers-4                   4.344 ± 0%         4.343 ± 0%       ~ (p=0.215 n=7)
Create/sqlite/4-workers-4                   4.303 ± 1%         4.311 ± 0%       ~ (p=0.273 n=7)
Create/sqlite/16-workers-4                  4.280 ± 1%         4.289 ± 0%       ~ (p=0.558 n=7)
Create/sqlite/64-workers-4                  4.231 ± 3%         4.205 ± 5%       ~ (p=0.383 n=7)
Create/sqlite/128-workers-4                 4.184 ± 3%         4.157 ± 2%       ~ (p=0.710 n=7)
Create/dqlite/1-workers-4                   4.133 ± 1%         4.155 ± 2%       ~ (p=0.131 n=7)
Create/dqlite/4-workers-4                   4.181 ± 2%         4.191 ± 1%       ~ (p=0.984 n=7)
Create/dqlite/16-workers-4                  4.198 ± 2%         4.241 ± 2%       ~ (p=0.831 n=7)
Create/dqlite/64-workers-4                  4.189 ± 2%         4.214 ± 2%       ~ (p=0.902 n=7)
Create/dqlite/128-workers-4                 4.188 ± 2%         4.242 ± 3%       ~ (p=0.259 n=7)
Delete/sqlite/1-workers-4                   4.387 ± 0%         4.388 ± 0%       ~ (p=0.804 n=7)
Delete/sqlite/4-workers-4                   4.389 ± 1%         4.396 ± 1%       ~ (p=0.831 n=7)
Delete/sqlite/16-workers-4                  4.369 ± 1%         4.369 ± 1%       ~ (p=0.970 n=7)
Delete/sqlite/64-workers-4                  4.338 ± 3%         4.351 ± 1%       ~ (p=0.275 n=7)
Delete/sqlite/128-workers-4                 4.306 ± 1%         4.325 ± 1%       ~ (p=0.165 n=7)
Delete/dqlite/1-workers-4                   4.324 ± 1%         4.355 ± 1%       ~ (p=0.332 n=7)
Delete/dqlite/4-workers-4                   4.380 ± 1%         4.376 ± 1%       ~ (p=0.779 n=7)
Delete/dqlite/16-workers-4                  4.357 ± 1%         4.361 ± 1%       ~ (p=0.318 n=7)
Delete/dqlite/64-workers-4                  4.359 ± 1%         4.350 ± 1%       ~ (p=0.805 n=7)
Delete/dqlite/128-workers-4                 4.337 ± 1%         4.350 ± 1%       ~ (p=0.557 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.227 ± 0%         4.225 ± 0%       ~ (p=1.000 n=7)
Update/sqlite/4-workers-4                   4.318 ± 1%         4.292 ± 1%       ~ (p=0.104 n=7)
Update/sqlite/16-workers-4                  4.311 ± 1%         4.309 ± 1%       ~ (p=0.559 n=7)
Update/sqlite/64-workers-4                  4.262 ± 4%         4.280 ± 7%       ~ (p=1.000 n=7)
Update/sqlite/128-workers-4                 4.214 ± 4%         4.236 ± 4%       ~ (p=0.535 n=7)
Update/dqlite/1-workers-4                   4.183 ± 0%         4.194 ± 1%       ~ (p=0.059 n=7)
Update/dqlite/4-workers-4                   4.199 ± 1%         4.182 ± 1%       ~ (p=0.383 n=7)
Update/dqlite/16-workers-4                  4.218 ± 1%         4.205 ± 1%  -0.31% (p=0.028 n=7)
Update/dqlite/64-workers-4                  4.224 ± 1%         4.228 ± 1%       ~ (p=0.193 n=7)
Update/dqlite/128-workers-4                 4.221 ± 1%         4.230 ± 1%       ~ (p=0.431 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                        29.10µ ±  13%    28.60µ ±  37%        ~ (p=0.336 n=7)
Compaction/dqlite-4                        25.00µ ±  49%    28.70µ ±  40%        ~ (p=0.435 n=7)
Create/sqlite/1-workers-4                  23.40µ ±  65%    17.00µ ±  25%  -27.35% (p=0.008 n=7)
Create/sqlite/4-workers-4                  25.50µ ±  36%    18.60µ ±  50%        ~ (p=0.259 n=7)
Create/sqlite/16-workers-4                 22.80µ ±  29%    20.40µ ±  27%        ~ (p=0.105 n=7)
Create/sqlite/64-workers-4                 24.70µ ±  33%    25.10µ ±  63%        ~ (p=0.902 n=7)
Create/sqlite/128-workers-4                22.50µ ±  56%    26.20µ ±  50%        ~ (p=1.000 n=7)
Create/dqlite/1-workers-4                  8.100µ ±  48%   10.900µ ±  39%        ~ (p=0.383 n=7)
Create/dqlite/4-workers-4                  8.300µ ±  93%   11.400µ ±  64%        ~ (p=0.620 n=7)
Create/dqlite/16-workers-4                 10.40µ ±  60%    13.40µ ±  40%        ~ (p=0.620 n=7)
Create/dqlite/64-workers-4                 11.50µ ±  58%    12.10µ ±  54%        ~ (p=0.929 n=7)
Create/dqlite/128-workers-4                10.30µ ±  45%    12.00µ ±  31%        ~ (p=0.773 n=7)
Delete/sqlite/1-workers-4                  30.20µ ±  30%    32.50µ ±  17%        ~ (p=0.558 n=7)
Delete/sqlite/4-workers-4                  31.50µ ±  17%    35.40µ ±  26%        ~ (p=0.383 n=7)
Delete/sqlite/16-workers-4                 34.60µ ±  17%    33.90µ ±  17%        ~ (p=0.644 n=7)
Delete/sqlite/64-workers-4                 35.50µ ±  60%    39.40µ ±  36%        ~ (p=0.737 n=7)
Delete/sqlite/128-workers-4                40.90µ ±  34%    40.10µ ±  31%        ~ (p=0.902 n=7)
Delete/dqlite/1-workers-4                  14.80µ ±  48%    12.80µ ±  50%        ~ (p=0.646 n=7)
Delete/dqlite/4-workers-4                  16.00µ ±  32%    17.40µ ±  31%        ~ (p=0.318 n=7)
Delete/dqlite/16-workers-4                 16.50µ ±  50%    13.80µ ±  52%        ~ (p=0.686 n=7)
Delete/dqlite/64-workers-4                 12.70µ ±  46%    13.30µ ±  55%        ~ (p=0.555 n=7)
Delete/dqlite/128-workers-4                13.90µ ±  50%    17.60µ ±  53%        ~ (p=0.735 n=7)
Get/sqlite-4                               62.40µ ±   5%    62.40µ ±   7%        ~ (p=0.929 n=7)
Get/dqlite-4                               36.50µ ±  18%    33.80µ ±  17%        ~ (p=0.119 n=7)
List/sqlite-tiny/all-4                     6.800µ ±  24%    6.900µ ±   3%        ~ (p=0.216 n=7)
List/sqlite-tiny/pagination-4              8.500µ ±  12%    8.300µ ±  11%        ~ (p=0.555 n=7)
List/sqlite-fits-in-page/all-4             12.80µ ±  16%    11.50µ ±  11%        ~ (p=0.155 n=7)
List/sqlite-fits-in-page/pagination-4      28.90µ ±  14%    29.50µ ±   6%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/all-4           12.70µ ±   2%    12.50µ ±   2%        ~ (p=0.068 n=7)
List/sqlite-overflows-page/pagination-4    16.20µ ±   2%    16.30µ ±   3%        ~ (p=0.472 n=7)
List/dqlite-tiny/all-4                     3.200µ ±  16%    3.200µ ±  28%        ~ (p=0.228 n=7)
List/dqlite-tiny/pagination-4              7.500µ ±  13%    7.300µ ±  15%        ~ (p=0.727 n=7)
List/dqlite-fits-in-page/all-4             10.10µ ±  20%    10.10µ ±  16%        ~ (p=0.939 n=7)
List/dqlite-fits-in-page/pagination-4      19.70µ ±  13%    16.60µ ±  20%  -15.74% (p=0.036 n=7)
List/dqlite-overflows-page/all-4           34.00µ ±   3%    34.00µ ±  13%        ~ (p=0.729 n=7)
List/dqlite-overflows-page/pagination-4    39.20µ ±  10%    40.10µ ±   6%        ~ (p=0.126 n=7)
Update/sqlite/1-workers-4                  17.00µ ±  46%    17.90µ ± 157%        ~ (p=0.620 n=7)
Update/sqlite/4-workers-4                  21.10µ ± 118%    19.30µ ±  73%        ~ (p=0.318 n=7)
Update/sqlite/16-workers-4                 21.60µ ±  21%    22.00µ ±  28%        ~ (p=0.902 n=7)
Update/sqlite/64-workers-4                 22.00µ ±  23%    23.80µ ± 154%        ~ (p=0.805 n=7)
Update/sqlite/128-workers-4                23.70µ ±  85%    27.10µ ±  62%        ~ (p=0.648 n=7)
Update/dqlite/1-workers-4                  13.00µ ±  55%    10.90µ ±  45%        ~ (p=0.805 n=7)
Update/dqlite/4-workers-4                  13.00µ ±  35%    12.20µ ±  52%        ~ (p=0.710 n=7)
Update/dqlite/16-workers-4                 10.70µ ±  79%    12.40µ ±  41%        ~ (p=1.000 n=7)
Update/dqlite/64-workers-4                 11.20µ ±  50%    13.60µ ±  49%        ~ (p=0.805 n=7)
Update/dqlite/128-workers-4               10.600µ ±  45%    9.900µ ±  37%        ~ (p=0.776 n=7)
geomean                                    17.27µ           17.57µ          +1.71%

                                        │     Before      │                  After                  │
                                        │ sec-writing/op  │ sec-writing/op  vs base                 │
Compaction/sqlite-4                       8.800µ ±   9%      9.200µ ±   9%        ~ (p=0.200 n=7)
Compaction/dqlite-4                       6.600µ ±   9%      6.700µ ±  16%        ~ (p=0.834 n=7)
Create/sqlite/1-workers-4                 331.5µ ±  26%      372.1µ ±   7%  +12.25% (p=0.017 n=7)
Create/sqlite/4-workers-4                 1.642m ±  14%      1.722m ±  10%        ~ (p=0.383 n=7)
Create/sqlite/16-workers-4                5.904m ±  15%      6.029m ±  23%        ~ (p=0.710 n=7)
Create/sqlite/64-workers-4                22.59m ±  23%      25.78m ± 125%        ~ (p=0.165 n=7)
Create/sqlite/128-workers-4               42.81m ±  92%      48.89m ±  48%        ~ (p=1.000 n=7)
Create/dqlite/1-workers-4                 44.60µ ±  38%      51.10µ ±  37%        ~ (p=0.383 n=7)
Create/dqlite/4-workers-4                 47.20µ ±  41%      45.50µ ±  41%        ~ (p=1.000 n=7)
Create/dqlite/16-workers-4                42.70µ ±  29%      45.30µ ±  27%        ~ (p=0.710 n=7)
Create/dqlite/64-workers-4                37.50µ ±  70%      38.00µ ±  67%        ~ (p=0.477 n=7)
Create/dqlite/128-workers-4               48.60µ ±  52%      49.00µ ±  31%        ~ (p=0.805 n=7)
Delete/sqlite/1-workers-4                 284.0µ ±  15%      304.8µ ±  13%   +7.32% (p=0.007 n=7)
Delete/sqlite/4-workers-4                 1.573m ±  23%      1.692m ±  15%        ~ (p=0.318 n=7)
Delete/sqlite/16-workers-4                6.267m ±   8%      6.005m ±  15%        ~ (p=0.383 n=7)
Delete/sqlite/64-workers-4                27.55m ± 139%      24.90m ±  91%        ~ (p=0.318 n=7)
Delete/sqlite/128-workers-4               45.47m ±  97%      45.62m ±  89%        ~ (p=0.805 n=7)
Delete/dqlite/1-workers-4                 43.80µ ±  36%      43.00µ ±  32%        ~ (p=0.535 n=7)
Delete/dqlite/4-workers-4                 56.60µ ±  24%      45.20µ ±  49%        ~ (p=0.209 n=7)
Delete/dqlite/16-workers-4                48.40µ ±  43%      44.60µ ±  22%        ~ (p=0.535 n=7)
Delete/dqlite/64-workers-4                44.30µ ±  23%      47.40µ ±  19%        ~ (p=0.902 n=7)
Delete/dqlite/128-workers-4               43.60µ ±  46%      47.10µ ±  45%        ~ (p=0.805 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                 341.1µ ±  29%      333.0µ ±  59%        ~ (p=0.805 n=7)
Update/sqlite/4-workers-4                 1.724m ±  17%      1.680m ± 787%        ~ (p=0.805 n=7)
Update/sqlite/16-workers-4                6.364m ±  36%      6.223m ±  11%        ~ (p=0.535 n=7)
Update/sqlite/64-workers-4                21.67m ±  97%      24.31m ± 280%        ~ (p=0.535 n=7)
Update/sqlite/128-workers-4               57.44m ±  58%      49.26m ±  42%        ~ (p=0.318 n=7)
Update/dqlite/1-workers-4                 42.20µ ±  36%      45.40µ ±  34%        ~ (p=0.805 n=7)
Update/dqlite/4-workers-4                 43.10µ ±  16%      46.10µ ±  28%        ~ (p=0.138 n=7)
Update/dqlite/16-workers-4                49.80µ ±  25%      50.50µ ±  43%        ~ (p=1.000 n=7)
Update/dqlite/64-workers-4                48.90µ ±  26%      41.80µ ±  36%        ~ (p=0.259 n=7)
Update/dqlite/128-workers-4               45.80µ ±  25%      39.60µ ±  36%        ~ (p=0.053 n=7)
geomean                                                 ²                    +0.55%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                │
                                        │     B/op      │     B/op       vs base              │
Compaction/sqlite-4                       2.391Ki ± 12%   2.346Ki ± 48%       ~ (p=0.620 n=7)
Compaction/dqlite-4                       4.342Ki ± 62%   4.877Ki ± 40%       ~ (p=0.535 n=7)
Create/sqlite/1-workers-4                 20.41Ki ±  0%   20.44Ki ±  0%  +0.14% (p=0.002 n=7)
Create/sqlite/4-workers-4                 20.43Ki ±  0%   20.44Ki ±  0%  +0.07% (p=0.037 n=7)
Create/sqlite/16-workers-4                20.40Ki ±  0%   20.41Ki ±  0%       ~ (p=0.196 n=7)
Create/sqlite/64-workers-4                20.48Ki ±  1%   20.54Ki ±  5%       ~ (p=0.053 n=7)
Create/sqlite/128-workers-4               20.67Ki ±  2%   20.68Ki ±  2%       ~ (p=0.710 n=7)
Create/dqlite/1-workers-4                 19.70Ki ±  0%   19.71Ki ±  1%       ~ (p=0.686 n=7)
Create/dqlite/4-workers-4                 19.68Ki ±  0%   19.70Ki ±  0%       ~ (p=0.073 n=7)
Create/dqlite/16-workers-4                19.68Ki ±  0%   19.70Ki ±  7%       ~ (p=0.222 n=7)
Create/dqlite/64-workers-4                19.70Ki ±  0%   19.72Ki ±  0%       ~ (p=0.207 n=7)
Create/dqlite/128-workers-4               19.76Ki ±  0%   19.73Ki ±  0%       ~ (p=0.535 n=7)
Delete/sqlite/1-workers-4                 22.83Ki ±  0%   22.87Ki ±  0%  +0.18% (p=0.004 n=7)
Delete/sqlite/4-workers-4                 22.85Ki ±  0%   22.87Ki ±  0%       ~ (p=0.091 n=7)
Delete/sqlite/16-workers-4                22.84Ki ±  0%   22.84Ki ±  0%       ~ (p=0.782 n=7)
Delete/sqlite/64-workers-4                23.01Ki ±  3%   22.92Ki ±  2%       ~ (p=0.318 n=7)
Delete/sqlite/128-workers-4               23.00Ki ±  2%   23.10Ki ±  2%       ~ (p=0.710 n=7)
Delete/dqlite/1-workers-4                 21.96Ki ±  0%   21.97Ki ±  0%       ~ (p=0.121 n=7)
Delete/dqlite/4-workers-4                 21.92Ki ±  0%   21.91Ki ±  0%       ~ (p=1.000 n=7)
Delete/dqlite/16-workers-4                21.94Ki ±  9%   21.92Ki ±  9%       ~ (p=0.302 n=7)
Delete/dqlite/64-workers-4                21.94Ki ±  9%   21.92Ki ±  0%       ~ (p=0.620 n=7)
Delete/dqlite/128-workers-4               21.97Ki ±  4%   21.97Ki ±  9%       ~ (p=0.533 n=7)
Get/sqlite-4                              23.03Ki ±  0%   23.03Ki ±  0%       ~ (p=0.425 n=7)
Get/dqlite-4                              21.96Ki ±  0%   21.96Ki ±  0%       ~ (p=0.949 n=7)
List/sqlite-tiny/all-4                    1.179Ki ± 12%   1.177Ki ±  4%       ~ (p=0.547 n=7)
List/sqlite-tiny/pagination-4             1.080Ki ±  6%   1.071Ki ±  7%       ~ (p=0.837 n=7)
List/sqlite-fits-in-page/all-4            7.167Ki ±  8%   7.002Ki ± 11%       ~ (p=0.165 n=7)
List/sqlite-fits-in-page/pagination-4     9.535Ki ±  9%   9.587Ki ±  5%       ~ (p=0.902 n=7)
List/sqlite-overflows-page/all-4          20.49Ki ± 12%   20.49Ki ± 12%       ~ (p=0.830 n=7)
List/sqlite-overflows-page/pagination-4   18.51Ki ±  8%   18.51Ki ±  8%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                      977.0 ±  7%     986.0 ± 12%       ~ (p=0.266 n=7)
List/dqlite-tiny/pagination-4               967.0 ±  4%     962.0 ±  2%       ~ (p=0.979 n=7)
List/dqlite-fits-in-page/all-4            6.010Ki ±  9%   6.137Ki ±  8%  +2.11% (p=0.011 n=7)
List/dqlite-fits-in-page/pagination-4     5.933Ki ± 10%   5.568Ki ±  8%       ~ (p=0.175 n=7)
List/dqlite-overflows-page/all-4          30.95Ki ±  9%   31.14Ki ±  9%       ~ (p=0.902 n=7)
List/dqlite-overflows-page/pagination-4   31.91Ki ±  4%   31.62Ki ±  3%       ~ (p=0.710 n=7)
Update/sqlite/1-workers-4                 21.57Ki ±  0%   21.59Ki ±  0%       ~ (p=0.300 n=7)
Update/sqlite/4-workers-4                 21.56Ki ±  0%   21.59Ki ±  0%       ~ (p=0.138 n=7)
Update/sqlite/16-workers-4                21.56Ki ±  0%   21.59Ki ±  0%       ~ (p=0.128 n=7)
Update/sqlite/64-workers-4                21.60Ki ±  1%   21.64Ki ±  7%       ~ (p=0.245 n=7)
Update/sqlite/128-workers-4               21.82Ki ±  1%   21.75Ki ±  1%       ~ (p=1.000 n=7)
Update/dqlite/1-workers-4                 20.80Ki ±  0%   20.80Ki ±  0%       ~ (p=0.734 n=7)
Update/dqlite/4-workers-4                 20.77Ki ±  0%   20.78Ki ±  0%       ~ (p=0.646 n=7)
Update/dqlite/16-workers-4                20.75Ki ±  0%   20.80Ki ±  0%  +0.21% (p=0.016 n=7)
Update/dqlite/64-workers-4                20.77Ki ±  0%   20.77Ki ±  0%       ~ (p=0.688 n=7)
Update/dqlite/128-workers-4               20.72Ki ±  0%   20.72Ki ±  0%       ~ (p=0.620 n=7)
geomean                                   13.87Ki         13.88Ki        +0.09%

                                        │   Before    │                After                │
                                        │  allocs/op  │  allocs/op   vs base                │
Compaction/sqlite-4                       51.00 ± 12%   50.00 ± 48%       ~ (p=0.597 n=7)
Compaction/dqlite-4                       104.0 ± 62%   117.0 ± 40%       ~ (p=0.511 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 ±  0%   399.0 ±  1%  +0.50% (p=0.006 n=7)
Create/sqlite/128-workers-4               399.0 ±  1%   400.0 ±  1%       ~ (p=0.346 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 ±  8%  +0.27% (p=0.005 n=7)
Create/dqlite/64-workers-4                365.0 ±  0%   366.0 ±  0%  +0.27% (p=0.001 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.001 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.001 n=7)
Delete/sqlite/64-workers-4                428.0 ±  0%   429.0 ±  0%       ~ (p=0.289 n=7)
Delete/sqlite/128-workers-4               428.0 ±  0%   430.0 ±  1%  +0.47% (p=0.017 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.001 n=7)
Delete/dqlite/16-workers-4                395.0 ± 11%   396.0 ± 12%  +0.25% (p=0.005 n=7)
Delete/dqlite/64-workers-4                395.0 ± 12%   396.0 ±  0%  +0.25% (p=0.001 n=7)
Delete/dqlite/128-workers-4               394.0 ±  5%   396.0 ± 12%  +0.51% (p=0.042 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                    16.00 ± 19%   16.00 ±  0%       ~ (p=1.000 n=7)
List/sqlite-tiny/pagination-4             14.00 ± 14%   14.00 ± 14%       ~ (p=0.995 n=7)
List/sqlite-fits-in-page/all-4            20.00 ± 20%   18.00 ± 17%       ~ (p=0.502 n=7)
List/sqlite-fits-in-page/pagination-4     30.00 ± 17%   30.00 ± 10%       ~ (p=0.862 n=7)
List/sqlite-overflows-page/all-4          8.000 ±  0%   8.000 ±  0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4   8.000 ±  0%   8.000 ± 12%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                    12.00 ±  8%   12.00 ± 17%       ~ (p=1.000 n=7)
List/dqlite-tiny/pagination-4             12.00 ±  8%   12.00 ±  8%       ~ (p=1.000 n=7)
List/dqlite-fits-in-page/all-4            18.00 ±  6%   19.00 ±  5%  +5.56% (p=0.029 n=7)
List/dqlite-fits-in-page/pagination-4     18.00 ± 17%   16.00 ± 12%       ~ (p=0.085 n=7)
List/dqlite-overflows-page/all-4          32.00 ±  3%   33.00 ±  3%       ~ (p=0.694 n=7)
List/dqlite-overflows-page/pagination-4   34.00 ±  3%   34.00 ±  3%       ~ (p=0.702 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                403.0 ±  0%   405.0 ±  1%  +0.50% (p=0.006 n=7)
Update/sqlite/128-workers-4               406.0 ±  0%   407.0 ±  0%       ~ (p=0.131 n=7)
Update/dqlite/1-workers-4                 372.0 ±  0%   374.0 ±  0%  +0.54% (p=0.002 n=7)
Update/dqlite/4-workers-4                 373.0 ±  0%   373.0 ±  0%       ~ (p=0.073 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                371.0 ±  0%   372.0 ±  0%  +0.27% (p=0.001 n=7)
Update/dqlite/128-workers-4               370.0 ±  0%   372.0 ±  0%  +0.54% (p=0.001 n=7)
geomean                                   160.1         160.2        +0.11%
¹ all samples are equal

                                        │        Before         │                    After                    │
                                        │ network-bytes-read/op │ network-bytes-read/op  vs base              │
Compaction/dqlite-4                               1.563Ki ± 63%           1.762Ki ± 41%       ~ (p=0.535 n=7)
Create/dqlite/1-workers-4                           239.6 ±  0%             240.2 ±  0%       ~ (p=0.132 n=7)
Create/dqlite/4-workers-4                           240.3 ±  1%             240.5 ±  0%       ~ (p=0.925 n=7)
Create/dqlite/16-workers-4                          240.6 ±  1%             240.9 ± 20%       ~ (p=0.827 n=7)
Create/dqlite/64-workers-4                          240.6 ±  0%             240.6 ±  1%       ~ (p=0.869 n=7)
Create/dqlite/128-workers-4                         240.5 ±  0%             241.0 ±  1%       ~ (p=0.273 n=7)
Delete/dqlite/1-workers-4                           714.4 ±  0%             714.6 ±  0%       ~ (p=0.439 n=7)
Delete/dqlite/4-workers-4                           716.5 ±  0%             718.5 ±  0%       ~ (p=0.136 n=7)
Delete/dqlite/16-workers-4                          716.0 ± 11%             717.4 ± 11%  +0.20% (p=0.024 n=7)
Delete/dqlite/64-workers-4                          716.3 ± 11%             718.4 ±  0%       ~ (p=0.066 n=7)
Delete/dqlite/128-workers-4                         716.3 ±  5%             716.6 ± 11%       ~ (p=0.686 n=7)
Get/dqlite-4                                        996.2 ±  0%             996.2 ±  0%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                              175.4 ± 14%             177.9 ± 24%       ~ (p=0.104 n=7)
List/dqlite-tiny/pagination-4                       179.5 ±  1%             180.3 ±  2%       ~ (p=0.875 n=7)
List/dqlite-fits-in-page/all-4                    1.349Ki ±  3%           1.397Ki ±  3%  +3.62% (p=0.001 n=7)
List/dqlite-fits-in-page/pagination-4             1.307Ki ± 13%           1.179Ki ± 12%       ~ (p=0.053 n=7)
List/dqlite-overflows-page/all-4                  7.334Ki ±  3%           7.422Ki ±  2%       ~ (p=0.805 n=7)
List/dqlite-overflows-page/pagination-4           7.849Ki ±  6%           7.874Ki ±  6%       ~ (p=1.000 n=7)
Update/dqlite/1-workers-4                           262.8 ±  0%             262.8 ±  0%       ~ (p=0.157 n=7)
Update/dqlite/4-workers-4                           263.0 ±  0%             262.9 ±  0%       ~ (p=0.410 n=7)
Update/dqlite/16-workers-4                          262.8 ±  0%             262.7 ±  0%       ~ (p=0.291 n=7)
Update/dqlite/64-workers-4                          262.0 ±  0%             262.0 ±  0%       ~ (p=0.974 n=7)
Update/dqlite/128-workers-4                         261.1 ±  0%             261.5 ±  0%  +0.15% (p=0.027 n=7)
geomean                                             549.6                   552.0        +0.44%

                                        │          Before          │                     After                      │
                                        │ network-bytes-written/op │ network-bytes-written/op  vs base              │
Compaction/dqlite-4                                    4.409 ± 10%                4.484 ±  7%       ~ (p=0.513 n=7)
Create/dqlite/1-workers-4                              112.7 ±  2%                113.6 ±  2%       ~ (p=0.091 n=7)
Create/dqlite/4-workers-4                              114.0 ±  2%                114.6 ±  2%       ~ (p=0.986 n=7)
Create/dqlite/16-workers-4                             114.6 ±  2%                114.6 ± 14%       ~ (p=0.781 n=7)
Create/dqlite/64-workers-4                             114.5 ±  2%                114.6 ±  2%       ~ (p=1.000 n=7)
Create/dqlite/128-workers-4                            114.3 ±  2%                115.2 ±  2%       ~ (p=0.273 n=7)
Delete/dqlite/1-workers-4                              81.18 ±  0%                81.22 ±  1%       ~ (p=0.646 n=7)
Delete/dqlite/4-workers-4                              81.88 ±  2%                82.74 ±  1%       ~ (p=0.165 n=7)
Delete/dqlite/16-workers-4                             81.66 ± 31%                82.26 ± 32%  +0.73% (p=0.026 n=7)
Delete/dqlite/64-workers-4                             81.70 ± 32%                82.67 ±  2%       ~ (p=0.053 n=7)
Delete/dqlite/128-workers-4                            81.74 ± 15%                81.91 ± 33%       ~ (p=0.686 n=7)
Get/dqlite-4                                           88.54 ±  0%                88.54 ±  0%       ~ (p=0.878 n=7)
List/dqlite-tiny/all-4                               0.03878 ± 24%              0.03989 ± 43%       ~ (p=0.069 n=7)
List/dqlite-tiny/pagination-4                        0.04538 ±  6%              0.04710 ±  3%  +3.79% (p=0.029 n=7)
List/dqlite-fits-in-page/all-4                       0.06301 ±  5%              0.06734 ±  5%  +6.87% (p=0.001 n=7)
List/dqlite-fits-in-page/pagination-4                0.07830 ± 18%              0.06679 ± 13%       ~ (p=0.073 n=7)
List/dqlite-overflows-page/all-4                     0.08638 ±  7%              0.08764 ±  5%       ~ (p=0.259 n=7)
List/dqlite-overflows-page/pagination-4               0.1130 ± 16%               0.1128 ±  7%       ~ (p=0.602 n=7)
Update/dqlite/1-workers-4                              137.0 ±  0%                137.0 ±  0%       ~ (p=0.204 n=7)
Update/dqlite/4-workers-4                              137.0 ±  0%                136.9 ±  0%       ~ (p=0.501 n=7)
Update/dqlite/16-workers-4                             136.8 ±  0%                136.9 ±  0%       ~ (p=0.161 n=7)
Update/dqlite/64-workers-4                             137.0 ±  0%                136.9 ±  0%       ~ (p=0.139 n=7)
Update/dqlite/128-workers-4                            136.5 ±  0%                136.4 ±  0%       ~ (p=0.494 n=7)
geomean                                                13.56                      13.60        +0.24%
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                       20.78µ ±   10%
Compaction/dqlite-4                       44.18µ ±    7%
Create/sqlite/1-workers-4                 595.9µ ±    5%
Create/sqlite/4-workers-4                 583.0µ ±    5%
Create/sqlite/16-workers-4                496.8µ ±   22%
Create/sqlite/64-workers-4                919.7µ ±  441%
Create/sqlite/128-workers-4               1.225m ±   81%
Create/dqlite/1-workers-4                 1.223m ±   10%
Create/dqlite/4-workers-4                 1.213m ±    7%
Create/dqlite/16-workers-4                1.134m ±    9%
Create/dqlite/64-workers-4                1.103m ±    8%
Create/dqlite/128-workers-4               1.039m ±   21%
Delete/sqlite/1-workers-4                 552.8µ ±    6%
Delete/sqlite/4-workers-4                 551.0µ ±    7%
Delete/sqlite/16-workers-4                508.0µ ±    7%
Delete/sqlite/64-workers-4                916.3µ ±  203%
Delete/sqlite/128-workers-4               985.7µ ±  211%
Delete/dqlite/1-workers-4                 1.298m ±    6%
Delete/dqlite/4-workers-4                 1.067m ±   14%
Delete/dqlite/16-workers-4                1.102m ±    9%
Delete/dqlite/64-workers-4                1.103m ±   15%
Delete/dqlite/128-workers-4               1.066m ±    7%
Get/sqlite-4                              227.9µ ±    2%
Get/dqlite-4                              341.1µ ±    1%
List/sqlite-tiny/all-4                    3.690µ ±    2%
List/sqlite-tiny/pagination-4             5.958µ ±    2%
List/sqlite-fits-in-page/all-4            6.930µ ±    5%
List/sqlite-fits-in-page/pagination-4     17.54µ ±    3%
List/sqlite-overflows-page/all-4          15.95µ ±    3%
List/sqlite-overflows-page/pagination-4   20.72µ ±    2%
List/dqlite-tiny/all-4                    2.480µ ±   14%
List/dqlite-tiny/pagination-4             4.764µ ±    1%
List/dqlite-fits-in-page/all-4            6.508µ ±    5%
List/dqlite-fits-in-page/pagination-4     13.30µ ±    2%
List/dqlite-overflows-page/all-4          21.43µ ±   83%
List/dqlite-overflows-page/pagination-4   24.99µ ±    2%
Update/sqlite/1-workers-4                 569.8µ ±   40%
Update/sqlite/4-workers-4                 560.1µ ±  602%
Update/sqlite/16-workers-4                545.8µ ±    8%
Update/sqlite/64-workers-4                752.6µ ± 1443%
Update/sqlite/128-workers-4               1.075m ±   89%
Update/dqlite/1-workers-4                 1.227m ±    4%
Update/dqlite/4-workers-4                 1.084m ±   16%
Update/dqlite/16-workers-4                1.181m ±    8%
Update/dqlite/64-workers-4                1.188m ±    6%
Update/dqlite/128-workers-4               1.137m ±   15%
geomean                                   222.6µ

                                        │        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.24 ±  1%
Compaction/dqlite-4                         12.22 ±  1%
Create/sqlite/1-workers-4                   13.77 ±  0%
Create/sqlite/4-workers-4                   12.89 ±  3%
Create/sqlite/16-workers-4                  11.01 ± 10%
Create/sqlite/64-workers-4                  9.474 ± 32%
Create/sqlite/128-workers-4                 8.333 ± 11%
Create/dqlite/1-workers-4                   13.03 ±  1%
Create/dqlite/4-workers-4                   10.70 ±  1%
Create/dqlite/16-workers-4                  10.81 ±  2%
Create/dqlite/64-workers-4                  10.84 ±  2%
Create/dqlite/128-workers-4                 10.79 ±  3%
Delete/sqlite/1-workers-4                   16.23 ±  0%
Delete/sqlite/4-workers-4                   14.91 ±  6%
Delete/sqlite/16-workers-4                  12.84 ±  4%
Delete/sqlite/64-workers-4                  10.68 ±  8%
Delete/sqlite/128-workers-4                 9.694 ± 11%
Delete/dqlite/1-workers-4                   15.71 ±  3%
Delete/dqlite/4-workers-4                   13.43 ±  1%
Delete/dqlite/16-workers-4                  13.36 ±  3%
Delete/dqlite/64-workers-4                  13.30 ±  2%
Delete/dqlite/128-workers-4                 13.29 ±  5%
Get/sqlite-4                                14.97 ±  0%
Get/dqlite-4                                11.97 ±  0%
List/sqlite-tiny/all-4                     192.0m ±  0%
List/sqlite-tiny/pagination-4               1.126 ±  0%
List/sqlite-fits-in-page/all-4             163.1m ± 58%
List/sqlite-fits-in-page/pagination-4      960.3m ±  3%
List/sqlite-overflows-page/all-4           177.2m ±  0%
List/sqlite-overflows-page/pagination-4     1.065 ±  3%
List/dqlite-tiny/all-4                     190.8m ±  1%
List/dqlite-tiny/pagination-4               1.126 ±  0%
List/dqlite-fits-in-page/all-4             164.6m ± 58%
List/dqlite-fits-in-page/pagination-4      953.8m ±  3%
List/dqlite-overflows-page/all-4           184.7m ±  0%
List/dqlite-overflows-page/pagination-4     1.077 ±  4%
Update/sqlite/1-workers-4                   15.73 ±  1%
Update/sqlite/4-workers-4                   14.69 ±  5%
Update/sqlite/16-workers-4                  13.37 ±  7%
Update/sqlite/64-workers-4                  11.25 ± 54%
Update/sqlite/128-workers-4                 10.33 ± 17%
Update/dqlite/1-workers-4                   15.14 ±  1%
Update/dqlite/4-workers-4                   12.75 ±  2%
Update/dqlite/16-workers-4                  12.74 ±  1%
Update/dqlite/64-workers-4                  12.70 ±  1%
Update/dqlite/128-workers-4                 12.67 ±  1%
geomean                                     5.178

                                        │     After      │
                                        │ page-writes/op │
Compaction/sqlite-4                        190.5m ± 0%
Compaction/dqlite-4                        187.6m ± 0%
Create/sqlite/1-workers-4                   4.343 ± 0%
Create/sqlite/4-workers-4                   4.311 ± 0%
Create/sqlite/16-workers-4                  4.289 ± 0%
Create/sqlite/64-workers-4                  4.205 ± 5%
Create/sqlite/128-workers-4                 4.157 ± 2%
Create/dqlite/1-workers-4                   4.155 ± 2%
Create/dqlite/4-workers-4                   4.191 ± 1%
Create/dqlite/16-workers-4                  4.241 ± 2%
Create/dqlite/64-workers-4                  4.214 ± 2%
Create/dqlite/128-workers-4                 4.242 ± 3%
Delete/sqlite/1-workers-4                   4.388 ± 0%
Delete/sqlite/4-workers-4                   4.396 ± 1%
Delete/sqlite/16-workers-4                  4.369 ± 1%
Delete/sqlite/64-workers-4                  4.351 ± 1%
Delete/sqlite/128-workers-4                 4.325 ± 1%
Delete/dqlite/1-workers-4                   4.355 ± 1%
Delete/dqlite/4-workers-4                   4.376 ± 1%
Delete/dqlite/16-workers-4                  4.361 ± 1%
Delete/dqlite/64-workers-4                  4.350 ± 1%
Delete/dqlite/128-workers-4                 4.350 ± 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.225 ± 0%
Update/sqlite/4-workers-4                   4.292 ± 1%
Update/sqlite/16-workers-4                  4.309 ± 1%
Update/sqlite/64-workers-4                  4.280 ± 7%
Update/sqlite/128-workers-4                 4.236 ± 4%
Update/dqlite/1-workers-4                   4.194 ± 1%
Update/dqlite/4-workers-4                   4.182 ± 1%
Update/dqlite/16-workers-4                  4.205 ± 1%
Update/dqlite/64-workers-4                  4.228 ± 1%
Update/dqlite/128-workers-4                 4.230 ± 1%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │ sec-reading/op │
Compaction/sqlite-4                        28.60µ ±  37%
Compaction/dqlite-4                        28.70µ ±  40%
Create/sqlite/1-workers-4                  17.00µ ±  25%
Create/sqlite/4-workers-4                  18.60µ ±  50%
Create/sqlite/16-workers-4                 20.40µ ±  27%
Create/sqlite/64-workers-4                 25.10µ ±  63%
Create/sqlite/128-workers-4                26.20µ ±  50%
Create/dqlite/1-workers-4                  10.90µ ±  39%
Create/dqlite/4-workers-4                  11.40µ ±  64%
Create/dqlite/16-workers-4                 13.40µ ±  40%
Create/dqlite/64-workers-4                 12.10µ ±  54%
Create/dqlite/128-workers-4                12.00µ ±  31%
Delete/sqlite/1-workers-4                  32.50µ ±  17%
Delete/sqlite/4-workers-4                  35.40µ ±  26%
Delete/sqlite/16-workers-4                 33.90µ ±  17%
Delete/sqlite/64-workers-4                 39.40µ ±  36%
Delete/sqlite/128-workers-4                40.10µ ±  31%
Delete/dqlite/1-workers-4                  12.80µ ±  50%
Delete/dqlite/4-workers-4                  17.40µ ±  31%
Delete/dqlite/16-workers-4                 13.80µ ±  52%
Delete/dqlite/64-workers-4                 13.30µ ±  55%
Delete/dqlite/128-workers-4                17.60µ ±  53%
Get/sqlite-4                               62.40µ ±   7%
Get/dqlite-4                               33.80µ ±  17%
List/sqlite-tiny/all-4                     6.900µ ±   3%
List/sqlite-tiny/pagination-4              8.300µ ±  11%
List/sqlite-fits-in-page/all-4             11.50µ ±  11%
List/sqlite-fits-in-page/pagination-4      29.50µ ±   6%
List/sqlite-overflows-page/all-4           12.50µ ±   2%
List/sqlite-overflows-page/pagination-4    16.30µ ±   3%
List/dqlite-tiny/all-4                     3.200µ ±  28%
List/dqlite-tiny/pagination-4              7.300µ ±  15%
List/dqlite-fits-in-page/all-4             10.10µ ±  16%
List/dqlite-fits-in-page/pagination-4      16.60µ ±  20%
List/dqlite-overflows-page/all-4           34.00µ ±  13%
List/dqlite-overflows-page/pagination-4    40.10µ ±   6%
Update/sqlite/1-workers-4                  17.90µ ± 157%
Update/sqlite/4-workers-4                  19.30µ ±  73%
Update/sqlite/16-workers-4                 22.00µ ±  28%
Update/sqlite/64-workers-4                 23.80µ ± 154%
Update/sqlite/128-workers-4                27.10µ ±  62%
Update/dqlite/1-workers-4                  10.90µ ±  45%
Update/dqlite/4-workers-4                  12.20µ ±  52%
Update/dqlite/16-workers-4                 12.40µ ±  41%
Update/dqlite/64-workers-4                 13.60µ ±  49%
Update/dqlite/128-workers-4                9.900µ ±  37%
geomean                                    17.57µ

                                        │      After      │
                                        │ sec-writing/op  │
Compaction/sqlite-4                       9.200µ ±   9%
Compaction/dqlite-4                       6.700µ ±  16%
Create/sqlite/1-workers-4                 372.1µ ±   7%
Create/sqlite/4-workers-4                 1.722m ±  10%
Create/sqlite/16-workers-4                6.029m ±  23%
Create/sqlite/64-workers-4                25.78m ± 125%
Create/sqlite/128-workers-4               48.89m ±  48%
Create/dqlite/1-workers-4                 51.10µ ±  37%
Create/dqlite/4-workers-4                 45.50µ ±  41%
Create/dqlite/16-workers-4                45.30µ ±  27%
Create/dqlite/64-workers-4                38.00µ ±  67%
Create/dqlite/128-workers-4               49.00µ ±  31%
Delete/sqlite/1-workers-4                 304.8µ ±  13%
Delete/sqlite/4-workers-4                 1.692m ±  15%
Delete/sqlite/16-workers-4                6.005m ±  15%
Delete/sqlite/64-workers-4                24.90m ±  91%
Delete/sqlite/128-workers-4               45.62m ±  89%
Delete/dqlite/1-workers-4                 43.00µ ±  32%
Delete/dqlite/4-workers-4                 45.20µ ±  49%
Delete/dqlite/16-workers-4                44.60µ ±  22%
Delete/dqlite/64-workers-4                47.40µ ±  19%
Delete/dqlite/128-workers-4               47.10µ ±  45%
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                 333.0µ ±  59%
Update/sqlite/4-workers-4                 1.680m ± 787%
Update/sqlite/16-workers-4                6.223m ±  11%
Update/sqlite/64-workers-4                24.31m ± 280%
Update/sqlite/128-workers-4               49.26m ±  42%
Update/dqlite/1-workers-4                 45.40µ ±  34%
Update/dqlite/4-workers-4                 46.10µ ±  28%
Update/dqlite/16-workers-4                50.50µ ±  43%
Update/dqlite/64-workers-4                41.80µ ±  36%
Update/dqlite/128-workers-4               39.60µ ±  36%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │     B/op      │
Compaction/sqlite-4                       2.346Ki ± 48%
Compaction/dqlite-4                       4.877Ki ± 40%
Create/sqlite/1-workers-4                 20.44Ki ±  0%
Create/sqlite/4-workers-4                 20.44Ki ±  0%
Create/sqlite/16-workers-4                20.41Ki ±  0%
Create/sqlite/64-workers-4                20.54Ki ±  5%
Create/sqlite/128-workers-4               20.68Ki ±  2%
Create/dqlite/1-workers-4                 19.71Ki ±  1%
Create/dqlite/4-workers-4                 19.70Ki ±  0%
Create/dqlite/16-workers-4                19.70Ki ±  7%
Create/dqlite/64-workers-4                19.72Ki ±  0%
Create/dqlite/128-workers-4               19.73Ki ±  0%
Delete/sqlite/1-workers-4                 22.87Ki ±  0%
Delete/sqlite/4-workers-4                 22.87Ki ±  0%
Delete/sqlite/16-workers-4                22.84Ki ±  0%
Delete/sqlite/64-workers-4                22.92Ki ±  2%
Delete/sqlite/128-workers-4               23.10Ki ±  2%
Delete/dqlite/1-workers-4                 21.97Ki ±  0%
Delete/dqlite/4-workers-4                 21.91Ki ±  0%
Delete/dqlite/16-workers-4                21.92Ki ±  9%
Delete/dqlite/64-workers-4                21.92Ki ±  0%
Delete/dqlite/128-workers-4               21.97Ki ±  9%
Get/sqlite-4                              23.03Ki ±  0%
Get/dqlite-4                              21.96Ki ±  0%
List/sqlite-tiny/all-4                    1.177Ki ±  4%
List/sqlite-tiny/pagination-4             1.071Ki ±  7%
List/sqlite-fits-in-page/all-4            7.002Ki ± 11%
List/sqlite-fits-in-page/pagination-4     9.587Ki ±  5%
List/sqlite-overflows-page/all-4          20.49Ki ± 12%
List/sqlite-overflows-page/pagination-4   18.51Ki ±  8%
List/dqlite-tiny/all-4                      986.0 ± 12%
List/dqlite-tiny/pagination-4               962.0 ±  2%
List/dqlite-fits-in-page/all-4            6.137Ki ±  8%
List/dqlite-fits-in-page/pagination-4     5.568Ki ±  8%
List/dqlite-overflows-page/all-4          31.14Ki ±  9%
List/dqlite-overflows-page/pagination-4   31.62Ki ±  3%
Update/sqlite/1-workers-4                 21.59Ki ±  0%
Update/sqlite/4-workers-4                 21.59Ki ±  0%
Update/sqlite/16-workers-4                21.59Ki ±  0%
Update/sqlite/64-workers-4                21.64Ki ±  7%
Update/sqlite/128-workers-4               21.75Ki ±  1%
Update/dqlite/1-workers-4                 20.80Ki ±  0%
Update/dqlite/4-workers-4                 20.78Ki ±  0%
Update/dqlite/16-workers-4                20.80Ki ±  0%
Update/dqlite/64-workers-4                20.77Ki ±  0%
Update/dqlite/128-workers-4               20.72Ki ±  0%
geomean                                   13.88Ki

                                        │    After    │
                                        │  allocs/op  │
Compaction/sqlite-4                       50.00 ± 48%
Compaction/dqlite-4                       117.0 ± 40%
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                399.0 ±  1%
Create/sqlite/128-workers-4               400.0 ±  1%
Create/dqlite/1-workers-4                 367.0 ±  0%
Create/dqlite/4-workers-4                 367.0 ±  0%
Create/dqlite/16-workers-4                367.0 ±  8%
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                429.0 ±  0%
Delete/sqlite/128-workers-4               430.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 ± 12%
Delete/dqlite/64-workers-4                396.0 ±  0%
Delete/dqlite/128-workers-4               396.0 ± 12%
Get/sqlite-4                              414.0 ±  0%
Get/dqlite-4                              392.0 ±  0%
List/sqlite-tiny/all-4                    16.00 ±  0%
List/sqlite-tiny/pagination-4             14.00 ± 14%
List/sqlite-fits-in-page/all-4            18.00 ± 17%
List/sqlite-fits-in-page/pagination-4     30.00 ± 10%
List/sqlite-overflows-page/all-4          8.000 ±  0%
List/sqlite-overflows-page/pagination-4   8.000 ± 12%
List/dqlite-tiny/all-4                    12.00 ± 17%
List/dqlite-tiny/pagination-4             12.00 ±  8%
List/dqlite-fits-in-page/all-4            19.00 ±  5%
List/dqlite-fits-in-page/pagination-4     16.00 ± 12%
List/dqlite-overflows-page/all-4          33.00 ±  3%
List/dqlite-overflows-page/pagination-4   34.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                405.0 ±  1%
Update/sqlite/128-workers-4               407.0 ±  0%
Update/dqlite/1-workers-4                 374.0 ±  0%
Update/dqlite/4-workers-4                 373.0 ±  0%
Update/dqlite/16-workers-4                373.0 ±  0%
Update/dqlite/64-workers-4                372.0 ±  0%
Update/dqlite/128-workers-4               372.0 ±  0%
geomean                                   160.2

                                        │         After         │
                                        │ network-bytes-read/op │
Compaction/dqlite-4                               1.762Ki ± 41%
Create/dqlite/1-workers-4                           240.2 ±  0%
Create/dqlite/4-workers-4                           240.5 ±  0%
Create/dqlite/16-workers-4                          240.9 ± 20%
Create/dqlite/64-workers-4                          240.6 ±  1%
Create/dqlite/128-workers-4                         241.0 ±  1%
Delete/dqlite/1-workers-4                           714.6 ±  0%
Delete/dqlite/4-workers-4                           718.5 ±  0%
Delete/dqlite/16-workers-4                          717.4 ± 11%
Delete/dqlite/64-workers-4                          718.4 ±  0%
Delete/dqlite/128-workers-4                         716.6 ± 11%
Get/dqlite-4                                        996.2 ±  0%
List/dqlite-tiny/all-4                              177.9 ± 24%
List/dqlite-tiny/pagination-4                       180.3 ±  2%
List/dqlite-fits-in-page/all-4                    1.397Ki ±  3%
List/dqlite-fits-in-page/pagination-4             1.179Ki ± 12%
List/dqlite-overflows-page/all-4                  7.422Ki ±  2%
List/dqlite-overflows-page/pagination-4           7.874Ki ±  6%
Update/dqlite/1-workers-4                           262.8 ±  0%
Update/dqlite/4-workers-4                           262.9 ±  0%
Update/dqlite/16-workers-4                          262.7 ±  0%
Update/dqlite/64-workers-4                          262.0 ±  0%
Update/dqlite/128-workers-4                         261.5 ±  0%
geomean                                             552.0

                                        │          After           │
                                        │ network-bytes-written/op │
Compaction/dqlite-4                                    4.484 ±  7%
Create/dqlite/1-workers-4                              113.6 ±  2%
Create/dqlite/4-workers-4                              114.6 ±  2%
Create/dqlite/16-workers-4                             114.6 ± 14%
Create/dqlite/64-workers-4                             114.6 ±  2%
Create/dqlite/128-workers-4                            115.2 ±  2%
Delete/dqlite/1-workers-4                              81.22 ±  1%
Delete/dqlite/4-workers-4                              82.74 ±  1%
Delete/dqlite/16-workers-4                             82.26 ± 32%
Delete/dqlite/64-workers-4                             82.67 ±  2%
Delete/dqlite/128-workers-4                            81.91 ± 33%
Get/dqlite-4                                           88.54 ±  0%
List/dqlite-tiny/all-4                               0.03989 ± 43%
List/dqlite-tiny/pagination-4                        0.04710 ±  3%
List/dqlite-fits-in-page/all-4                       0.06734 ±  5%
List/dqlite-fits-in-page/pagination-4                0.06679 ± 13%
List/dqlite-overflows-page/all-4                     0.08764 ±  5%
List/dqlite-overflows-page/pagination-4               0.1128 ±  7%
Update/dqlite/1-workers-4                              137.0 ±  0%
Update/dqlite/4-workers-4                              136.9 ±  0%
Update/dqlite/16-workers-4                             136.9 ±  0%
Update/dqlite/64-workers-4                             136.9 ±  0%
Update/dqlite/128-workers-4                            136.4 ±  0%
geomean                                                13.60

@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!

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