|
|
@@ -1,47 +1,48 @@
|
|
|
-5936a5937,5976
|
|
|
-> #BEGIN addition
|
|
|
-> my $src_storage_plugin = PVE::Storage::Plugin->lookup($src_scfg->{type});
|
|
|
-> my $dst_storage_plugin = PVE::Storage::Plugin->lookup($dst_scfg->{type});
|
|
|
->
|
|
|
-> # in many cases the storage may have a better idea how to convert:
|
|
|
-> # if src and dst format is the same
|
|
|
-> # and src_storeid is dst_storeid
|
|
|
-> # and the storage has the feature
|
|
|
-> # and the feature is implemented as volume_copy / volume_snapshot_copy
|
|
|
-> # let the storage do the work as it quite sure is faster
|
|
|
-> if ( $src_format eq $dst_format ) {
|
|
|
-> if( $src_storeid eq $dst_storeid ) {
|
|
|
-> # this is the same storage
|
|
|
-> # and storage is capable of materializing snaps
|
|
|
-> if( $snapname ) {
|
|
|
-> my $canCopySnap = PVE::Storage::volume_has_feature($storecfg, 'copy', $src_volid, $snapname, undef) && $src_storage_plugin->can('volume_snapshot_copy');
|
|
|
-> if( $canCopySnap ) {
|
|
|
-> print "delegate to storage plugin volume_snapshot_copy (snap $snapname)\n";
|
|
|
-> $src_storage_plugin->volume_snapshot_copy($src_scfg, $src_volname, $snapname, $dst_volname);
|
|
|
->
|
|
|
-> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
->
|
|
|
-> return 1;
|
|
|
-> }
|
|
|
-> }
|
|
|
->
|
|
|
-> my $canCopyVolume = PVE::Storage::volume_has_feature($storecfg, 'copy', $src_volid, undef, undef) && $src_storage_plugin->can('volume_copy');
|
|
|
-> if ( $canCopyVolume ) {
|
|
|
-> print "delegate to storage plugin: volume_copy (base)\n";
|
|
|
-> $src_storage_plugin->volume_copy($src_scfg, $src_volname, $dst_volname);
|
|
|
->
|
|
|
-> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
->
|
|
|
-> return 1;
|
|
|
-> }
|
|
|
-> }
|
|
|
-> # @todo: two zfs-storages might be able to receive stream from each other
|
|
|
-> }
|
|
|
-> #END addition
|
|
|
->
|
|
|
-5960a6001,6005
|
|
|
->
|
|
|
-> # added: deactivate the src-volume, even on failure
|
|
|
-> # this can be safely called as qemu_img_convert is never called on a running volume (that is not a snap)
|
|
|
-> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
+6147a6148,6188
|
|
|
+> #BEGIN addition
|
|
|
+> my $src_storage_plugin = PVE::Storage::Plugin->lookup($src_scfg->{type});
|
|
|
+> my $dst_storage_plugin = PVE::Storage::Plugin->lookup($dst_scfg->{type});
|
|
|
+>
|
|
|
+> # in many cases the storage may have a better idea how to convert:
|
|
|
+> # if src and dst format is the same
|
|
|
+> # and src_storeid is dst_storeid
|
|
|
+> # and the storage has the feature
|
|
|
+> # and the feature is implemented as volume_copy / volume_snapshot_copy
|
|
|
+> # let the storage do the work as it quite sure is faster
|
|
|
+> if ( $src_format eq $dst_format ) {
|
|
|
+> if( $src_storeid eq $dst_storeid ) {
|
|
|
+> # this is the same storage
|
|
|
+> # and storage is capable of materializing snaps
|
|
|
+> if( $snapname ) {
|
|
|
+> my $canCopySnap = PVE::Storage::volume_has_feature($storecfg, 'copy', $src_volid, $snapname, undef) && $src_storage_plugin->can('volume_snapshot_copy');
|
|
|
+> if( $canCopySnap ) {
|
|
|
+> print "delegate to storage plugin volume_snapshot_copy (snap $snapname)\n";
|
|
|
+> $src_storage_plugin->volume_snapshot_copy($src_scfg, $src_volname, $snapname, $dst_volname);
|
|
|
+>
|
|
|
+> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
+>
|
|
|
+> return 1;
|
|
|
+> }
|
|
|
+> }
|
|
|
+>
|
|
|
+> my $canCopyVolume = PVE::Storage::volume_has_feature($storecfg, 'copy', $src_volid, undef, undef) && $src_storage_plugin->can('volume_copy');
|
|
|
+> if ( $canCopyVolume ) {
|
|
|
+> print "delegate to storage plugin: volume_copy (base)\n";
|
|
|
+> $src_storage_plugin->volume_copy($src_scfg, $src_volname, $dst_volname);
|
|
|
+>
|
|
|
+> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
+>
|
|
|
+> return 1;
|
|
|
+> }
|
|
|
+> }
|
|
|
+> # @todo: two zfs-storages might be able to receive stream from each other
|
|
|
+> }
|
|
|
+> #END addition
|
|
|
+>
|
|
|
+>
|
|
|
+6173a6215,6219
|
|
|
+>
|
|
|
+> # added: deactivate the src-volume, even on failure
|
|
|
+> # this can be safely called as qemu_img_convert is never called on a running volume (that is not a snap)
|
|
|
+> $src_storage_plugin->deactivate_volume($src_storeid, $src_scfg, $src_volname, $snapname);
|
|
|
>
|