public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox Backup Server development discussion
	<pbs-devel@lists.proxmox.com>,
	Dominik Csapak <d.csapak@proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup 2/3] server/email_notifications: do not panic on template registration
Date: Wed, 17 Mar 2021 20:38:01 +0100	[thread overview]
Message-ID: <611140b4-dd43-2ecd-e03a-d7d93db979de@proxmox.com> (raw)
In-Reply-To: <20210316115623.9368-2-d.csapak@proxmox.com>

On 16.03.21 12:56, Dominik Csapak wrote:
> instead print an error and continue, the rendering functions will error
> out if one of the templates could not be registered
> 
> if we `.unwrap()` here, it can lead to problems if the templates are
> not correct, i.e. we could panic while holding a lock, if something holds
> a mutex while this is called for the first time

how can they error?
And any error (with or without this patch) would lead to emails notification not
working anymore, some may seem this as quite fatal error if they do not get notified
on erroneous jobs anymore? We may not be able to do much here, that's why above
question about what the error source can be.

> 
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
>  src/server/email_notifications.rs | 35 +++++++++++++++++++------------
>  1 file changed, 22 insertions(+), 13 deletions(-)
> 
> diff --git a/src/server/email_notifications.rs b/src/server/email_notifications.rs
> index 229443f6..59cd016a 100644
> --- a/src/server/email_notifications.rs
> +++ b/src/server/email_notifications.rs
> @@ -1,10 +1,11 @@
>  use anyhow::Error;
>  use serde_json::json;
>  
> -use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output, HelperResult};
> +use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output, HelperResult, TemplateError};
>  
>  use proxmox::tools::email::sendmail;
>  use proxmox::api::schema::parse_property_string;
> +use proxmox::try_block;
>  
>  use crate::{
>      config::datastore::DataStoreConfig,
> @@ -181,25 +182,33 @@ lazy_static::lazy_static!{
>  
>      static ref HANDLEBARS: Handlebars<'static> = {
>          let mut hb = Handlebars::new();
> +        let result: Result<(), TemplateError> = try_block!({
>  
> -        hb.set_strict_mode(true);
> +            hb.set_strict_mode(true);
>  
> -        hb.register_helper("human-bytes", Box::new(handlebars_humam_bytes_helper));
> -        hb.register_helper("relative-percentage", Box::new(handlebars_relative_percentage_helper));
> +            hb.register_helper("human-bytes", Box::new(handlebars_humam_bytes_helper));
> +            hb.register_helper("relative-percentage", Box::new(handlebars_relative_percentage_helper));
>  
> -        hb.register_template_string("gc_ok_template", GC_OK_TEMPLATE).unwrap();
> -        hb.register_template_string("gc_err_template", GC_ERR_TEMPLATE).unwrap();
> +            hb.register_template_string("gc_ok_template", GC_OK_TEMPLATE)?;
> +            hb.register_template_string("gc_err_template", GC_ERR_TEMPLATE)?;
>  
> -        hb.register_template_string("verify_ok_template", VERIFY_OK_TEMPLATE).unwrap();
> -        hb.register_template_string("verify_err_template", VERIFY_ERR_TEMPLATE).unwrap();
> +            hb.register_template_string("verify_ok_template", VERIFY_OK_TEMPLATE)?;
> +            hb.register_template_string("verify_err_template", VERIFY_ERR_TEMPLATE)?;
>  
> -        hb.register_template_string("sync_ok_template", SYNC_OK_TEMPLATE).unwrap();
> -        hb.register_template_string("sync_err_template", SYNC_ERR_TEMPLATE).unwrap();
> +            hb.register_template_string("sync_ok_template", SYNC_OK_TEMPLATE)?;
> +            hb.register_template_string("sync_err_template", SYNC_ERR_TEMPLATE)?;
>  
> -        hb.register_template_string("tape_backup_ok_template", TAPE_BACKUP_OK_TEMPLATE).unwrap();
> -        hb.register_template_string("tape_backup_err_template", TAPE_BACKUP_ERR_TEMPLATE).unwrap();
> +            hb.register_template_string("tape_backup_ok_template", TAPE_BACKUP_OK_TEMPLATE)?;
> +            hb.register_template_string("tape_backup_err_template", TAPE_BACKUP_ERR_TEMPLATE)?;
>  
> -        hb.register_template_string("package_update_template", PACKAGE_UPDATES_TEMPLATE).unwrap();
> +            hb.register_template_string("package_update_template", PACKAGE_UPDATES_TEMPLATE)?;
> +
> +            Ok(())
> +        });
> +
> +        if let Err(err) = result {
> +            eprintln!("error during template registration: {}", err);
> +        }
>  
>          hb
>      };
> 





  reply	other threads:[~2021-03-17 19:38 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-16 11:56 [pbs-devel] [PATCH proxmox-backup 1/3] tools/systemd/time: implement some Traits for TimeSpan Dominik Csapak
2021-03-16 11:56 ` [pbs-devel] [PATCH proxmox-backup 2/3] server/email_notifications: do not panic on template registration Dominik Csapak
2021-03-17 19:38   ` Thomas Lamprecht [this message]
2021-03-18  9:57     ` Dominik Csapak
2021-03-18 10:21       ` Thomas Lamprecht
2021-03-18 10:31         ` Dominik Csapak
2021-03-18 11:13           ` Thomas Lamprecht
2021-03-16 11:56 ` [pbs-devel] [PATCH proxmox-backup 3/3] api2/tape/backup: include a summary on notification e-mails Dominik Csapak
2021-03-17 19:35 ` [pbs-devel] [PATCH proxmox-backup 1/3] tools/systemd/time: implement some Traits for TimeSpan Thomas Lamprecht
2021-03-18  9:49   ` Dominik Csapak

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=611140b4-dd43-2ecd-e03a-d7d93db979de@proxmox.com \
    --to=t.lamprecht@proxmox.com \
    --cc=d.csapak@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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal