public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
To: Shannon Sterz <s.sterz@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:54:52 +0200	[thread overview]
Message-ID: <azar5al7f5cyd5ic2l37g7nb3dez4n3zcoxaf2on2l5xythm4e@7brpsf35ubwy> (raw)
In-Reply-To: <DI189OEFGKWF.2XT787HHDWT7M@proxmox.com>

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?
> -->8 snip 8<--




  reply	other threads:[~2026-04-24  8:54 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 [this message]
2026-04-24  8:59           ` Shannon Sterz
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=azar5al7f5cyd5ic2l37g7nb3dez4n3zcoxaf2on2l5xythm4e@7brpsf35ubwy \
    --to=a.bied-charreton@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.sterz@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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal