[pve-devel] [PATCH v3 proxmox-perl-rs 24/66] add PVE::RS::Notify module

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Jul 19 12:23:56 CEST 2023


On Wed, Jul 19, 2023 at 12:10:02PM +0200, Wolfgang Bumiller wrote:
> On Mon, Jul 17, 2023 at 05:00:09PM +0200, Lukas Wagner wrote:
> > Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
> > ---
> >  pve-rs/Cargo.toml    |  1 +
> >  pve-rs/Makefile      |  1 +
> >  pve-rs/src/lib.rs    |  1 +
> >  pve-rs/src/notify.rs | 71 ++++++++++++++++++++++++++++++++++++++++++++
> >  4 files changed, 74 insertions(+)
> >  create mode 100644 pve-rs/src/notify.rs
> > 
> > diff --git a/pve-rs/Cargo.toml b/pve-rs/Cargo.toml
> > index 3076a13..b28c118 100644
> > --- a/pve-rs/Cargo.toml
> > +++ b/pve-rs/Cargo.toml
> > @@ -34,6 +34,7 @@ perlmod = { version = "0.13", features = [ "exporter" ] }
> >  
> >  proxmox-apt = "0.10"
> >  proxmox-http = { version = "0.9", features = ["client-sync", "client-trait"] }
> > +proxmox-notify = "0.1"
> >  proxmox-openid = "0.10"
> >  proxmox-resource-scheduling = "0.3.0"
> >  proxmox-subscription = "0.4"
> > diff --git a/pve-rs/Makefile b/pve-rs/Makefile
> > index de35c69..9d737c0 100644
> > --- a/pve-rs/Makefile
> > +++ b/pve-rs/Makefile
> > @@ -27,6 +27,7 @@ PERLMOD_GENPACKAGE := /usr/lib/perlmod/genpackage.pl \
> >  
> >  PERLMOD_PACKAGES := \
> >  	  PVE::RS::APT::Repositories \
> > +	  PVE::RS::Notify \
> >  	  PVE::RS::OpenId \
> >  	  PVE::RS::ResourceScheduling::Static \
> >  	  PVE::RS::TFA
> > diff --git a/pve-rs/src/lib.rs b/pve-rs/src/lib.rs
> > index eb6ae02..0d63c28 100644
> > --- a/pve-rs/src/lib.rs
> > +++ b/pve-rs/src/lib.rs
> > @@ -4,6 +4,7 @@
> >  pub mod common;
> >  
> >  pub mod apt;
> > +pub mod notify;
> >  pub mod openid;
> >  pub mod resource_scheduling;
> >  pub mod tfa;
> > diff --git a/pve-rs/src/notify.rs b/pve-rs/src/notify.rs
> > new file mode 100644
> > index 0000000..9677d8b
> > --- /dev/null
> > +++ b/pve-rs/src/notify.rs
> > @@ -0,0 +1,71 @@
> > +#[perlmod::package(name = "PVE::RS::Notify")]
> > +mod export {
> > +    use anyhow::{bail, Error};
> > +    use perlmod::Value;
> > +
> > +    use std::sync::Mutex;
> > +
> > +    use proxmox_notify::Config;
> > +
> > +    pub struct NotificationConfig {
> > +        config: Mutex<Config>,
> > +    }
> > +
> > +    perlmod::declare_magic!(Box<NotificationConfig> : &NotificationConfig as "PVE::RS::Notify");
> > +
> > +    /// Support `dclone` so this can be put into the `ccache` of `PVE::Cluster`.
> > +    #[export(name = "STORABLE_freeze", raw_return)]
> > +    fn storable_freeze(
> > +        #[try_from_ref] this: &NotificationConfig,
> > +        cloning: bool,
> > +    ) -> Result<Value, Error> {
> > +        if !cloning {
> > +            bail!("freezing Notification config not supported!");
> > +        }
> > +
> > +        let mut cloned = Box::new(NotificationConfig {
> > +            config: Mutex::new(this.config.lock().unwrap().clone()),
> > +        });
> > +        let value = Value::new_pointer::<NotificationConfig>(&mut *cloned);
> > +        let _perl = Box::leak(cloned);
> > +        Ok(value)
> > +    }
> > +
> > +    /// Instead of `thaw` we implement `attach` for `dclone`.
> > +    #[export(name = "STORABLE_attach", raw_return)]
> > +    fn storable_attach(
> > +        #[raw] class: Value,
> > +        cloning: bool,
> > +        #[raw] serialized: Value,
> > +    ) -> Result<Value, Error> {
> > +        if !cloning {
> > +            bail!("STORABLE_attach called with cloning=false");
> > +        }
> > +        let data = unsafe { Box::from_raw(serialized.pv_raw::<NotificationConfig>()?) };
> > +        Ok(perlmod::instantiate_magic!(&class, MAGIC => data))
> > +    }
> > +
> > +    #[export(raw_return)]
> > +    fn parse_config(
> > +        #[raw] class: Value,
> > +        raw_config: &str,
> > +        raw_private_config: &str,
> 
> I half-suspect that using &[u8] here - since that's what perl *actually*
> gives us if we just read the data out of files without setting the mode
> to 'utf8' or anything - might just fix the emoji issues.
> 
> Alternatively, perl would have to actually declare an encoding ;-)

Though ultimately the alter patches will probably need to do the same
for things where utf-8 matters (at least the comments).





More information about the pve-devel mailing list