[pve-devel] [PATCH v2 storage 15/28] storage_migrate: return volume ID of migrated volume

Fabian Ebner f.ebner at proxmox.com
Mon Feb 24 13:44:05 CET 2020


In preparation to introduce an allow_rename parameter.

Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
 PVE/CLI/pvesm.pm |  2 +-
 PVE/Storage.pm   | 41 ++++++++++++++++++++++++++++++++---------
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/PVE/CLI/pvesm.pm b/PVE/CLI/pvesm.pm
index 7b83ec8..c55cdd0 100755
--- a/PVE/CLI/pvesm.pm
+++ b/PVE/CLI/pvesm.pm
@@ -779,7 +779,7 @@ our $cmddef = {
     export => [ __PACKAGE__, 'export', ['volume', 'format', 'filename']],
     import => [ __PACKAGE__, 'import', ['volume', 'format', 'filename'], {}, sub  {
 	my $volid = shift;
-	print "successfully imported '$volid'\n";
+	print PVE::Storage::volume_imported_message($volid);
     }],
 };
 
diff --git a/PVE/Storage.pm b/PVE/Storage.pm
index 38341f6..cb07066 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -571,7 +571,7 @@ sub storage_migrate {
     my $scfg = storage_config($cfg, $storeid);
 
     # no need to migrate shared content
-    return if $storeid eq $target_storeid && $scfg->{shared};
+    return $volid if $storeid eq $target_storeid && $scfg->{shared};
 
     my $tcfg = storage_config($cfg, $target_storeid);
 
@@ -620,6 +620,19 @@ sub storage_migrate {
 	push @$recv, '-base', $base_snapshot;
     }
 
+    my $new_volid;
+    my $pattern = volume_imported_message(undef, 1);
+    my $match_volid_and_log = sub {
+	my $line = shift;
+
+	$new_volid = $1 if ($line =~ m!$pattern!);
+
+	if ($logfunc) {
+	    chomp($line);
+	    $logfunc->($line);
+	}
+    };
+
     volume_snapshot($cfg, $volid, $snapshot) if $migration_snapshot;
     eval {
 	if ($insecure) {
@@ -637,13 +650,8 @@ sub storage_migrate {
 	    shutdown($socket, 1);
 
 	    # wait for the remote process to finish
-	    if ($logfunc) {
-		while (my $line = <$info>) {
-		    chomp($line);
-		    $logfunc->("[$target_sshinfo->{name}] $line");
-		}
-	    } else {
-		1 while <$info>;
+	    while (my $line = <$info>) {
+		$match_volid_and_log->("[$target_sshinfo->{name}] $line");
 	    }
 
 	    # now close the socket
@@ -653,8 +661,11 @@ sub storage_migrate {
 		die "import failed: exit code ".($?>>8)."\n";
 	    }
 	} else {
-	    run_command([$send, @cstream, $recv], logfunc => $logfunc);
+	    run_command([$send, @cstream, $recv], logfunc => $match_volid_and_log);
 	}
+
+	die "unable to get ID of the migrated volume\n"
+	    if !defined($new_volid);
     };
     my $err = $@;
     warn "send/receive failed, cleaning up snapshot(s)..\n" if $err;
@@ -663,6 +674,8 @@ sub storage_migrate {
 	warn "could not remove source snapshot: $@\n" if $@;
     }
     die $err if $err;
+
+    return $new_volid;
 }
 
 sub vdisk_clone {
@@ -1461,6 +1474,16 @@ sub volume_transfer_formats {
     return @common;
 }
 
+sub volume_imported_message {
+    my ($volid, $want_pattern) = @_;
+
+    if ($want_pattern) {
+	return "successfully imported '([^']*)'\$";
+    } else {
+	return "successfully imported '$volid'\n";
+    }
+}
+
 # bash completion helper
 
 sub complete_storage {
-- 
2.20.1




More information about the pve-devel mailing list