From: "Shannon Sterz" <s.sterz@proxmox.com>
To: "Arthur Bied-Charreton" <a.bied-charreton@proxmox.com>
Cc: pbs-devel@lists.proxmox.com, pve-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox v4 03/24] notify: smtp: Introduce state management
Date: Fri, 24 Apr 2026 10:59:14 +0200 [thread overview]
Message-ID: <DI19FCC1VDH2.1RNBWX6MTW504@proxmox.com> (raw)
In-Reply-To: <azar5al7f5cyd5ic2l37g7nb3dez4n3zcoxaf2on2l5xythm4e@7brpsf35ubwy>
On Fri Apr 24, 2026 at 10:54 AM CEST, Arthur Bied-Charreton wrote:
> On Fri, Apr 24, 2026 at 10:04:49AM +0200, Shannon Sterz wrote:
>> On Fri Apr 24, 2026 at 9:47 AM CEST, Arthur Bied-Charreton wrote:
>> > On Thu, Apr 23, 2026 at 02:24:37PM +0200, Shannon Sterz wrote:
>> >> On Tue Apr 21, 2026 at 1:59 PM CEST, Arthur Bied-Charreton wrote:
>>
>> -->8 snip 8<--
>>
>> >> > + /// The state file does not need to be locked, it is okay to just let the faster node "win"
>> >> > + /// as long as the invariants documented by [`smtp::xoauth2::get_microsoft_token`] and
>> >> > + /// [`smtp::xoauth2::get_google_token`] hold, see those functions' doc comments for details.
>> >> > + #[cfg(feature = "smtp")]
>> >> > + fn save_oauth_state(&self, endpoint_name: &str, state: Option<State>) -> Result<(), Error>;
>> >>
>> >> i'm not sure the no-locking approach here works. if i understand
>> >> correctly, the following example is possible:
>> >>
>> >> A: calls `trigger_state_refresh`, does not lock the notification config
>> >> B: calls `delete_smtp_endpoint`, locks the notification config
>> >> A: reads the refresh token
>> >> B: removes the endpoint and state file
>> >> A: finishes refreshing the token and safes it out
>> >>
>> >> if we extend that example with a C that adds an endpoint with the same
>> >> name after B finishes, then it would suddenly be left with a state file
>> >> from the previous endpoint. similar examples can also happen when
>> >> calling `build_transport` since that also includes a read & write cycle
>> >> of the state file.
>> >>
>> > Yes you are right, I may have been too focused on refresh token validity
>> > and overlooked this - thanks a lot for catching it!
>> >
>> >> if the state file were locked properly, B would fail to acquire the lock
>> >> when trying to delete it (or have to wait until A finishes).
>> >>
>> >> if this behaviour is fine, maybe this would benefit from some
>> >> documentation.
>> >>
>> > I will add locks in v5, I don't think we are gaining that much from a
>> > lock-free approach here, per-endpoint locking will be pretty cheap
>> > anyway.
>> >
>>
>> just to be sure, since i realized this is misleadingly phrased in my
>> initial message: make sure not to lock the state files themselves.
>> rather keep around a lock file that won't be removed if the state file
>> is removed. otherwise, you can run into a different kind of race between
>> deleting and writing threads.
>>
> That was clear, but thanks for the clarification still :)
>> we do this already for almost all other config files. if you are worried
>> about "polluting" the state directory here, you can consider putting
>> these lock files in a sub-directory on `/run`. though, this would
>> require extra care to integrate it with all products. hope that makes
>> sense and thanks for tackling this!
>>
> Yes, we already have the Context trait in proxmox-notify, will add a
> lock_oauth_state method that allows to handle this on a per-product
> basis. I was thinking of putting them into /run for PBS and PDM, but for
> PVE they should be in /etc/pve right?
yes, there you need them on `/etc/pve` so locks work across the cluster.
>> -->8 snip 8<--
next prev parent reply other threads:[~2026-04-24 8:59 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-21 11:59 [PATCH docs/manager/proxmox{,-perl-rs,-widget-toolkit,-backup} v4 00/24] fix #7238: Add XOAUTH2 authentication support for SMTP notification targets Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 01/24] Add oauth2 and ureq to workspace dependencies Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 02/24] notify: smtp: Introduce xoauth2 module Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 03/24] notify: smtp: Introduce state management Arthur Bied-Charreton
2026-04-23 12:24 ` Shannon Sterz
2026-04-24 7:47 ` Arthur Bied-Charreton
2026-04-24 8:04 ` Shannon Sterz
2026-04-24 8:54 ` Arthur Bied-Charreton
2026-04-24 8:59 ` Shannon Sterz [this message]
2026-04-21 11:59 ` [PATCH proxmox v4 04/24] notify: smtp: Factor out transport building logic Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 05/24] notify: smtp: Update API with OAuth2 parameters Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 06/24] notify: smtp: Infer auth method for backwards compatibility Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 07/24] notify: smtp: Add state handling logic Arthur Bied-Charreton
2026-04-23 12:24 ` Shannon Sterz
2026-04-24 7:50 ` Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox v4 08/24] notify: smtp: Add XOAUTH2 authentication support Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-perl-rs v4 09/24] pve-rs: notify: smtp: add OAuth2 parameters to bindings Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-perl-rs v4 10/24] pve-rs: notify: Add binding for triggering state refresh Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-widget-toolkit v4 11/24] utils: Add OAuth2 flow handlers Arthur Bied-Charreton
2026-04-23 12:24 ` Shannon Sterz
2026-04-24 8:44 ` Arthur Bied-Charreton
2026-04-24 8:53 ` Shannon Sterz
2026-04-21 11:59 ` [PATCH proxmox-widget-toolkit v4 12/24] utils: oauth2: Add callback handler Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-widget-toolkit v4 13/24] notifications: Add opt-in OAuth2 support for SMTP targets Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-manager v4 14/24] notifications: smtp: api: Add XOAUTH2 parameters Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-manager v4 15/24] notifications: Add trigger-state-refresh endpoint Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-manager v4 16/24] notifications: Trigger notification target refresh in pveupdate Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-manager v4 17/24] login: Handle OAuth2 callback Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-manager v4 18/24] fix #7238: notifications: smtp: Add XOAUTH2 support Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-backup v4 19/24] notifications: Add XOAUTH2 parameters to endpoints Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-backup v4 20/24] login: Handle OAuth2 callback Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-backup v4 21/24] fix #7238: notifications: smtp: Add XOAUTH2 support Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-backup v4 22/24] daily-update: Refresh OAuth2 state for SMTP notification endpoints Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH proxmox-backup v4 23/24] notifications: Add OAuth2 section to SMTP target docs Arthur Bied-Charreton
2026-04-23 12:24 ` Shannon Sterz
2026-04-24 7:59 ` Arthur Bied-Charreton
2026-04-24 8:18 ` Shannon Sterz
2026-04-24 8:46 ` Arthur Bied-Charreton
2026-04-21 11:59 ` [PATCH pve-docs v4 24/24] notifications: Add OAuth2 section to SMTP targets docs Arthur Bied-Charreton
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=DI19FCC1VDH2.1RNBWX6MTW504@proxmox.com \
--to=s.sterz@proxmox.com \
--cc=a.bied-charreton@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
--cc=pve-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