[pve-devel] applied: [PATCH ha-manager] wrap possible problematic cfs_read_file calls in eval

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Nov 9 12:13:26 CET 2017


applied

On Wed, Nov 08, 2017 at 02:41:40PM +0100, Thomas Lamprecht wrote:
> Wrap those calls to the cfs_read_file method, which may now also die
> if there was a grave problem reading the file, into eval in all
> methods which are used by the ha services.
> 
> The ones only used by API calls or CLI helpers are not wrapped, as
> there it can be handled more gracefull (i.e., no watchdog is
> running) and further, this is more intended to temporarily workaround
> until we handle such an exception explicitly in the services - which
> is a bit bigger change, so let's just go back to the old behavior for
> now.
> 
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
> 
> This replaces the "catch problems when updating cluster FS" series
> for now.
> 
>  src/PVE/HA/Config.pm  | 13 +++++++------
>  src/PVE/HA/Manager.pm |  3 ++-
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/src/PVE/HA/Config.pm b/src/PVE/HA/Config.pm
> index bf37b04..e7e8b88 100644
> --- a/src/PVE/HA/Config.pm
> +++ b/src/PVE/HA/Config.pm
> @@ -81,13 +81,13 @@ sub parse_resources_config {
>  
>  sub read_resources_config {
>  
> -    return cfs_read_file($ha_resources_config);
> +    return eval { cfs_read_file($ha_resources_config) };
>  }
>  
>  # checks if resource exists and sets defaults for unset values
>  sub read_and_check_resources_config {
>  
> -    my $res = cfs_read_file($ha_resources_config);
> +    my $res = eval { cfs_read_file($ha_resources_config) };
>  
>      my $vmlist = PVE::Cluster::get_vmlist();
>      my $conf = {};
> @@ -122,7 +122,7 @@ sub read_and_check_resources_config {
>  
>  sub read_group_config {
>  
> -    return cfs_read_file($ha_groups_config);
> +    return eval { cfs_read_file($ha_groups_config) };
>  }
>  
>  sub write_group_config {
> @@ -140,7 +140,7 @@ sub write_resources_config {
>  sub read_manager_status {
>      my () = @_;
>  
> -    return cfs_read_file($manager_status_filename);
> +    return eval { cfs_read_file($manager_status_filename) };
>  }
>  
>  sub write_manager_status {
> @@ -152,7 +152,7 @@ sub write_manager_status {
>  sub read_fence_config {
>      my () = @_;
>  
> -    cfs_read_file($ha_fence_config);
> +    return eval { cfs_read_file($ha_fence_config) };
>  }
>  
>  sub write_fence_config {
> @@ -189,7 +189,8 @@ sub queue_crm_commands {
>  sub read_crm_commands {
>  
>      my $code = sub {
> -	my $data = cfs_read_file($crm_commands_filename);
> +	my $data = eval { cfs_read_file($crm_commands_filename) };
> +	return undef if !$data;
>  	cfs_write_file($crm_commands_filename, '');
>  	return $data;
>      };
> diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm
> index 25a7398..2933926 100644
> --- a/src/PVE/HA/Manager.pm
> +++ b/src/PVE/HA/Manager.pm
> @@ -328,7 +328,8 @@ sub update_crm_commands {
>      my ($haenv, $ms, $ns, $ss) = ($self->{haenv}, $self->{ms}, $self->{ns}, $self->{ss});
>  
>      my $cmdlist = $haenv->read_crm_commands();
> -    
> +    return if !defined($cmdlist);
> +
>      foreach my $cmd (split(/\n/, $cmdlist)) {
>  	chomp $cmd;
>  
> -- 
> 2.11.0




More information about the pve-devel mailing list