From: Hannes Laimer <h.laimer@proxmox.com>
To: Christian Ebner <c.ebner@proxmox.com>, pbs-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox{,-backup} v6 00/34] partially fix #6563: add s3 counter for statistics and notifications
Date: Tue, 31 Mar 2026 12:16:43 +0200 [thread overview]
Message-ID: <fa57d58e-29d4-4f82-8ea5-e53f7c6f748c@proxmox.com> (raw)
In-Reply-To: <20260319094100.240765-1-c.ebner@proxmox.com>
Aside from the few small things I've mentioned and that can easily be
addressed in a follow-up, this looks very good to me! The things form v5
are fixed, and I also did some more extensive testing and everything
worked as expected.
Consider this
Reviewed-by: Hannes Laimer <h.laimer@proxmox.com>
Tested-by: Hannes Laimer <h.laimer@proxmox.com>
(side-note: proxmox-backup patches don't seem to apply with the proxy
series underneath, proxmox is fine)
On 2026-03-19 10:41, Christian Ebner wrote:
> This patch series implements request and traffic counters for the s3
> client, being shared as atomic counters via shared memory and mmapping
> across all s3-client instances.
>
> The shared counters are instantiated on demand for individual
> datastores with s3 backend on s3 client instantiation and stored as
> part of the datastore implementation by loading the mmapped file on
> datastore creation, being cached for further access. Counter threshold
> values can be defined in the datastore options, allowing to send
> notifications via the notification system if counters exceeded the set
> threshold values. Further, a per-datastore schedule can be configured
> to reset the counters with given interval.
>
> Further, counters are being loaded during rrd metrics collection and
> exposed as charts in the datastore summary, including the total
> request counts per method, the total upload and download traffic as
> well as the averaged upload and download rate.
>
> Usage statistics, are not included in this series an will be tackled
> as followup series.
>
> Link to the bugtracker issue:
> https://bugzilla.proxmox.com/show_bug.cgi?id=6563
>
> Changes since version 5 (thanks a lot @Hannes for review and testing):
> - Implemented the scheduled reset logic on top of the previous series
> - Also upload/download traffic counters are now reset, not just request counters
> - Fixed the possible swallowing of errors in `Content`s `Body` implementation
> - request_flush() is no longer called by spawning a blocking tokio task
> - Fixed the notification callback to not capture the datastore name, but provide
> a `label` as callback parameter instead
> - Fix the api definition for the reset_counters endpoint
> - Fixed incorrect graph labels and typos discovered during review
> - Reordered patches in a more logical way rather than development flow
>
> Changes since version 4:
> - Rebase on top of patch series https://lore.proxmox.com/pbs-devel/20260311095906.202410-1-c.ebner@proxmox.com/T/
> as requested by Fabian in order to facilitate review flow.
>
> Changes since version 3:
> - Extend previous implementation by threshold values for counters and
> mechanism to send notifications once thresholds are exceeded
>
> Changes since version 2:
> - Introduce msync flushing mechanism to periodically persist counters
> state to mmap backing file.
>
> Changes since version 1 (thanks @Robert for feedback):
> - Keep tmpfs check in shmem mapping for pre-existing code, add
> dedicated methods to create mmapped files in persistent locations.
> - Reorder and align atomic counters to 32-byte (half default cache
> line size) to reduce false sharing.
> - Rework request counter init logic, avoid unsafe code and undefined
> behaviour.
> - Rework page size calculation based on new counter alignment.
> - Avoid the need to open and mmap counter file for each rrd data
> collection, keep the per-datastores filehandle cached instead.
>
>
> proxmox:
>
> Christian Ebner (12):
> tree-wide: fix formatting issue via cargo fmt
> s3-client: add persistent shared request counters for client
> s3-client: add counters for upload/download traffic
> s3-client: account for upload traffic on successful request sending
> s3-client: account for downloaded bytes in incoming response body
> s3-client: request counters: periodically persist counters to file
> s3-client: sync flush request counters on client instance drop
> s3-client: api-types: define request counter thresholds
> s3-client: implement request counter threshold and exceeding callback
> pbs-api-types: define api type for s3 request statistics
> pbs-api-types: add notification thresholds to datastore config
> pbs-api-types: add reset schedule for notification threshold counters
>
> pbs-api-types/src/datastore.rs | 56 ++
> pbs-api-types/src/remote.rs | 9 +-
> proxmox-s3-client/Cargo.toml | 6 +
> proxmox-s3-client/debian/control | 3 +
> proxmox-s3-client/examples/s3_client.rs | 1 +
> proxmox-s3-client/src/api_types.rs | 59 ++
> proxmox-s3-client/src/client.rs | 101 +++-
> proxmox-s3-client/src/lib.rs | 7 +-
> proxmox-s3-client/src/response_reader.rs | 67 ++-
> .../src/shared_request_counters.rs | 537 ++++++++++++++++++
> 10 files changed, 824 insertions(+), 22 deletions(-)
> create mode 100644 proxmox-s3-client/src/shared_request_counters.rs
>
>
> proxmox-backup:
>
> Christian Ebner (22):
> metrics: split common module imports into individual use statements
> ui: improve variable name indirectly fixing typo
> notifications: template data: fix typos in docstrings
> datastore: collect request statistics for s3 backed datastores
> datastore: expose request counters for s3 backed datastores
> api: s3: add endpoint to reset s3 request counters
> bin: s3: expose request counter reset method as cli command
> ui: datastore summary: move store to be part of summary panel
> ui: expose s3 request counter statistics in the datastore summary
> metrics: collect s3 datastore statistics as rrd metrics
> api: admin: expose s3 statistics in datastore rrd data
> partially fix #6563: ui: expose s3 rrd charts in datastore summary
> datastore: refactor datastore lookup parameters into dedicated type
> api: config: update notification thresholds for config and counters
> ui: utils: add helper to render notification threshold property string
> ui: add notification thresholds edit window
> notification: define templates and template data for thresholds
> datastore: add thresholds notification callback on datastore lookup
> api/ui: notifications: add 'thresholds' as notification type value
> api: config: allow counter reset schedule editing
> ui: expose counter reset schedule edit window
> bin: proxy: periodically schedule counter reset task
>
> debian/proxmox-backup-server.install | 2 +
> pbs-datastore/src/datastore.rs | 194 ++++++++--
> pbs-datastore/src/lib.rs | 3 +-
> pbs-datastore/src/snapshot_reader.rs | 7 +-
> src/api2/admin/datastore.rs | 48 ++-
> src/api2/admin/namespace.rs | 9 +-
> src/api2/admin/s3.rs | 86 ++++-
> src/api2/backup/mod.rs | 3 +-
> src/api2/config/datastore.rs | 42 ++-
> src/api2/config/notifications/mod.rs | 1 +
> src/api2/config/s3.rs | 9 +-
> src/api2/reader/mod.rs | 3 +-
> src/api2/status/mod.rs | 6 +-
> src/api2/tape/backup.rs | 6 +-
> src/api2/tape/restore.rs | 6 +-
> src/bin/proxmox-backup-proxy.rs | 77 +++-
> src/bin/proxmox_backup_manager/s3.rs | 33 ++
> src/server/metric_collection/metric_server.rs | 8 +-
> src/server/metric_collection/mod.rs | 108 +++++-
> src/server/metric_collection/pull_metrics.rs | 18 +-
> src/server/metric_collection/rrd.rs | 34 +-
> src/server/notifications/mod.rs | 39 +-
> src/server/notifications/template_data.rs | 38 +-
> src/server/prune_job.rs | 3 +-
> src/server/pull.rs | 7 +-
> src/server/push.rs | 3 +-
> src/server/verify_job.rs | 3 +-
> src/tools/mod.rs | 17 +-
> templates/Makefile | 2 +
> .../default/thresholds-exceeded-body.txt.hbs | 9 +
> .../thresholds-exceeded-subject.txt.hbs | 1 +
> www/Makefile | 2 +
> www/Utils.js | 10 +
> www/datastore/OptionView.js | 16 +
> www/datastore/Summary.js | 345 ++++++++++++------
> www/window/CounterResetScheduleEdit.js | 27 ++
> www/window/NotificationThresholds.js | 113 ++++++
> 37 files changed, 1106 insertions(+), 232 deletions(-)
> create mode 100644 templates/default/thresholds-exceeded-body.txt.hbs
> create mode 100644 templates/default/thresholds-exceeded-subject.txt.hbs
> create mode 100644 www/window/CounterResetScheduleEdit.js
> create mode 100644 www/window/NotificationThresholds.js
>
>
> Summary over all repositories:
> 47 files changed, 1930 insertions(+), 254 deletions(-)
>
next prev parent reply other threads:[~2026-03-31 10:16 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-19 9:40 Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 01/12] tree-wide: fix formatting issue via cargo fmt Christian Ebner
2026-03-31 8:01 ` Hannes Laimer
2026-03-31 8:12 ` Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 02/12] s3-client: add persistent shared request counters for client Christian Ebner
2026-03-31 9:26 ` Hannes Laimer
2026-03-19 9:40 ` [PATCH proxmox v6 03/12] s3-client: add counters for upload/download traffic Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 04/12] s3-client: account for upload traffic on successful request sending Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 05/12] s3-client: account for downloaded bytes in incoming response body Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 06/12] s3-client: request counters: periodically persist counters to file Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 07/12] s3-client: sync flush request counters on client instance drop Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 08/12] s3-client: api-types: define request counter thresholds Christian Ebner
2026-03-31 9:10 ` Hannes Laimer
2026-03-19 9:40 ` [PATCH proxmox v6 09/12] s3-client: implement request counter threshold and exceeding callback Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 10/12] pbs-api-types: define api type for s3 request statistics Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 11/12] pbs-api-types: add notification thresholds to datastore config Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox v6 12/12] pbs-api-types: add reset schedule for notification threshold counters Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 01/22] metrics: split common module imports into individual use statements Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 02/22] ui: improve variable name indirectly fixing typo Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 03/22] notifications: template data: fix typos in docstrings Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 04/22] datastore: collect request statistics for s3 backed datastores Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 05/22] datastore: expose request counters " Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 06/22] api: s3: add endpoint to reset s3 request counters Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 07/22] bin: s3: expose request counter reset method as cli command Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 08/22] ui: datastore summary: move store to be part of summary panel Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 09/22] ui: expose s3 request counter statistics in the datastore summary Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 10/22] metrics: collect s3 datastore statistics as rrd metrics Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 11/22] api: admin: expose s3 statistics in datastore rrd data Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 12/22] partially fix #6563: ui: expose s3 rrd charts in datastore summary Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 13/22] datastore: refactor datastore lookup parameters into dedicated type Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 14/22] api: config: update notification thresholds for config and counters Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 15/22] ui: utils: add helper to render notification threshold property string Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 16/22] ui: add notification thresholds edit window Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 17/22] notification: define templates and template data for thresholds Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 18/22] datastore: add thresholds notification callback on datastore lookup Christian Ebner
2026-03-30 20:19 ` Thomas Lamprecht
2026-03-31 8:22 ` Christian Ebner
2026-04-01 11:13 ` Christian Ebner
2026-03-31 9:36 ` Hannes Laimer
2026-03-19 9:40 ` [PATCH proxmox-backup v6 19/22] api/ui: notifications: add 'thresholds' as notification type value Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 20/22] api: config: allow counter reset schedule editing Christian Ebner
2026-03-19 9:40 ` [PATCH proxmox-backup v6 21/22] ui: expose counter reset schedule edit window Christian Ebner
2026-03-19 9:41 ` [PATCH proxmox-backup v6 22/22] bin: proxy: periodically schedule counter reset task Christian Ebner
2026-03-31 10:16 ` Hannes Laimer [this message]
2026-04-01 13:51 ` superseded: [PATCH proxmox{,-backup} v6 00/34] partially fix #6563: add s3 counter for statistics and notifications Christian Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fa57d58e-29d4-4f82-8ea5-e53f7c6f748c@proxmox.com \
--to=h.laimer@proxmox.com \
--cc=c.ebner@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox