[pmg-devel] [PATCH pmg-api 03/12] add reload method to PMG::Config
Dominik Csapak
d.csapak at proxmox.com
Wed Oct 9 16:22:44 CEST 2019
mhmm.. this looks kinda complicated for what i does
maybe it would be better to put the checks into sync_config_from_master?
this way we only have to do it in one place and wont miss it if we
ever introduce a new way to sync from master...
also one comment inline
On 10/7/19 9:28 PM, Stoiko Ivanov wrote:
> Synchronization of the configuration (including pmg.conf) inside a cluster
> happens via rsync to /etc/pmg/master and a rename of the files if changed.
> This bypasses the reading of the current configuraitons and thus does not
> schedule a reload for pmg-smtp-filter if one of the config-option affecting it
> changes on the master.
>
> By adding a 'reload' sub to PMG::Config, which keeps the old 'current' hash
> of a config-object changes can be tracked and pmg-smtp-filter reloaded.
>
> Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
> ---
> src/PMG/API2/Cluster.pm | 3 ++-
> src/PMG/CLI/pmgcm.pm | 4 ++--
> src/PMG/Config.pm | 13 +++++++++++++
> src/PMG/Service/pmgmirror.pm | 4 +++-
> 4 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/src/PMG/API2/Cluster.pm b/src/PMG/API2/Cluster.pm
> index ceda100..101d780 100644
> --- a/src/PMG/API2/Cluster.pm
> +++ b/src/PMG/API2/Cluster.pm
> @@ -61,11 +61,12 @@ sub cluster_join {
>
> PMG::MailQueue::create_spooldirs($cid);
>
> + my $cfg = PMG::Config->new();
> PMG::Cluster::sync_config_from_master($cinfo->{master}->{name}, $cinfo->{master}->{ip});
>
> PMG::DBTools::init_nodedb($cinfo);
>
> - my $cfg = PMG::Config->new();
> + $cfg->reload();
> my $ruledb = PMG::RuleDB->new();
> my $rulecache = PMG::RuleCache->new($ruledb);
>
> diff --git a/src/PMG/CLI/pmgcm.pm b/src/PMG/CLI/pmgcm.pm
> index c41c24d..f2b202b 100644
> --- a/src/PMG/CLI/pmgcm.pm
> +++ b/src/PMG/CLI/pmgcm.pm
> @@ -249,10 +249,10 @@ __PACKAGE__->register_method({
>
> print STDERR "syncing master configuration from '${master_ip}'\n";
>
> - PMG::Cluster::sync_config_from_master($master_name, $master_ip);
> -
> my $cfg = PMG::Config->new();
> + PMG::Cluster::sync_config_from_master($master_name, $master_ip);
>
> + $cfg->reload();
> $cfg->rewrite_config(undef, 1);
>
> return undef;
> diff --git a/src/PMG/Config.pm b/src/PMG/Config.pm
> index f94688c..a9a2822 100755
> --- a/src/PMG/Config.pm
> +++ b/src/PMG/Config.pm
> @@ -755,6 +755,19 @@ sub new {
> return bless $cfg, $class;
> }
>
> +# keeps the current property of self, but reads the config anew
> +sub reload {
> + my ($self) = @_;
> +
> + my $class = ref($self);
this is not used
> + my $cfg = PVE::INotify::read_file("pmg.conf");
> + foreach my $key (keys %$cfg) {
> + $self->{$key} = $cfg->{$key};
> + }
> +
> + return undef;
> +}
> +
> sub write {
> my ($self) = @_;
>
> diff --git a/src/PMG/Service/pmgmirror.pm b/src/PMG/Service/pmgmirror.pm
> index 339bf7b..7a9eb5a 100644
> --- a/src/PMG/Service/pmgmirror.pm
> +++ b/src/PMG/Service/pmgmirror.pm
> @@ -96,6 +96,8 @@ sub cluster_sync {
> my $master_ip = $cinfo->{master}->{ip};
> my $master_name = $cinfo->{master}->{name};
>
> + # read the config before the sync to notice changes
> + my $cfg = PMG::Config->new();
> if ($role ne 'master') {
> PMG::Cluster::sync_config_from_master($master_name, $master_ip);
> }
> @@ -142,7 +144,7 @@ sub cluster_sync {
> $sync_node->($cinfo->{master});
>
> # rewrite config after sync from master
> - my $cfg = PMG::Config->new();
> + $cfg->reload();
> my $ruledb = PMG::RuleDB->new($dbh);
> my $rulecache = PMG::RuleCache->new($ruledb);
> $cfg->rewrite_config($rulecache, 1);
>
More information about the pmg-devel
mailing list