From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 410851FF140 for ; Fri, 13 Mar 2026 15:57:18 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 498686953; Fri, 13 Mar 2026 15:57:23 +0100 (CET) Message-ID: <1e802b7c-e65c-482b-af4a-6088e6e70053@proxmox.com> Date: Fri, 13 Mar 2026 15:56:48 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH proxmox v5 13/13] s3-client: implement request counter threshold and exceeding callback To: Hannes Laimer , pbs-devel@lists.proxmox.com References: <20260311130823.724888-1-c.ebner@proxmox.com> <20260311130823.724888-14-c.ebner@proxmox.com> <7b3eab40-c2b5-4163-8d79-19d4e0a3a4d2@proxmox.com> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <7b3eab40-c2b5-4163-8d79-19d4e0a3a4d2@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773413770780 X-SPAM-LEVEL: Spam detection results: 0 AWL -1.007 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_MSPIKE_H2 0.001 Average reputation (+2) RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.408 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.819 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.903 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: GUKEM324BQ74SHLBRJ36RXP6RWQCLTHR X-Message-ID-Hash: GUKEM324BQ74SHLBRJ36RXP6RWQCLTHR X-MailFrom: c.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On 3/13/26 3:26 PM, Hannes Laimer wrote: > On 2026-03-11 14:09, Christian Ebner wrote: >> Allows to set the threshold values to trigger exceeding callbacks >> for the s3 request counters. >> The globally settable callback function is executed whenever one of >> the request counters is exceeding it's set threshold value, but >> only once when passing over the threshold. >> >> Signed-off-by: Christian Ebner >> --- > > [..] > >> + >> + /// Update the callback executed when one of the set thresholds is exceeded >> + pub fn update_thresholds_exceeded_callback(callback: ThresholdExceededCallback) { >> + SHARED_COUNTER_THRESHOLD_EXCEEDED_CALLBACK >> + .write() >> + .unwrap() >> + .replace(callback); >> + } > > this is called on every datastore load, so > `SHARED_COUNTER_THRESHOLD_EXCEEDED_CALLBACK` only holds the callback > associated with the latest datastore that was looked-up. Every call > would replace whatever callback was there before, at least if we don't > hit the cache... Yes that is true, might be better to only set it once. The callback is however shared behind an Arc for all datastores and already should use the correct counters and threshold for the given datastore, so the notifications are send for that, independent of which was the last store to be instantiated since not cached. But it makes sense to avoid updating the function pointer each time. >> + >> + /// Update the request counter thresholds to given values. >> + pub fn update_thresholds(&self, thresholds: &RequestCounterThresholds) { >> + self.shared_memory >> + .data() >> + .counters >> + .update_thresholds(thresholds); >> + } >> } >> >> const FLUSH_THRESHOLD: Duration = Duration::from_secs(5); >