]> git.proxmox.com Git - qemu-server.git/commitdiff
api: replica: safer config update
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 28 Apr 2017 08:40:22 +0000 (10:40 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 28 Apr 2017 08:40:22 +0000 (10:40 +0200)
Configuration updates should only happen if and after their
change has successfully taken effect.

PVE/API2/Qemu.pm

index 3fb1ab245d44f0c193ce06703836ae289f27b8f8..80bc141b5817bcc0339bb9f60dfc5633231559a5 100644 (file)
@@ -1033,12 +1033,12 @@ my $update_vm_api  = sub {
                    delete $conf->{$opt};
                    delete $conf->{replica} if $opt eq "replica_target";
 
-                   PVE::QemuConfig->write_config($vmid, $conf);
                    PVE::ReplicationTools::job_remove($vmid);
+                   PVE::QemuConfig->write_config($vmid, $conf);
                } elsif ($opt eq "replica_interval" || $opt eq "replica_rate_limit") {
                    delete $conf->{$opt};
-                   PVE::QemuConfig->write_config($vmid, $conf);
                    PVE::ReplicationTools::update_conf($vmid, $opt, $param->{$opt});
+                   PVE::QemuConfig->write_config($vmid, $conf);
                } else {
                    PVE::QemuServer::vmconfig_delete_pending_option($conf, $opt, $force);
                    PVE::QemuConfig->write_config($vmid, $conf);
@@ -1066,6 +1066,12 @@ my $update_vm_api  = sub {
                        if !PVE::ReplicationTools::check_guest_volumes_syncable($conf, 'qemu');
                    die "replica_target is required\n"
                        if !$conf->{replica_target} && !$param->{replica_target};
+                   my $value = $param->{$opt};
+                   if ($value) {
+                       PVE::ReplicationTools::job_enable($vmid);
+                   } else {
+                       PVE::ReplicationTools::job_disable($vmid);
+                   }
                    $conf->{$opt} = $param->{$opt};
                } elsif ($opt eq "replica_interval" || $opt eq "replica_rate_limit") {
                    $conf->{$opt} = $param->{$opt};
@@ -1083,14 +1089,6 @@ my $update_vm_api  = sub {
                PVE::QemuConfig->write_config($vmid, $conf);
            }
 
-           if (defined($param->{replica})) {
-               if ($param->{replica}) {
-                   PVE::ReplicationTools::job_enable($vmid);
-               } else {
-                   PVE::ReplicationTools::job_disable($vmid);
-               }
-           }
-
            # remove pending changes when nothing changed
            $conf = PVE::QemuConfig->load_config($vmid); # update/reload
            my $changes = PVE::QemuServer::vmconfig_cleanup_pending($conf);