From 5e37e52e397673ffdbe23bc7fbcf5ac410264758 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 30 Aug 2023 19:22:45 +0200 Subject: [PATCH] F #6063: Pass backup_job_id to drivers This enables to use the same repo for all VMs in the same backup job, for example to deduplicate all VMs in the backup job. This commit changes the driver interface for the backup operation as now the backup job id is passed: BACKUP host:remote_dir DISK_ID:..:DISK_ID vm_uuid bj_id vm_id ds_id When the backup job is not defined it will be '-' --- src/datastore_mad/remotes/rsync/backup | 7 ++++--- src/image/ImageManagerActions.cc | 11 ++++++++++- src/tm/TransferManager.cc | 21 +++++++++++++++++---- src/tm_mad/lib/backup.rb | 8 +++++++- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/datastore_mad/remotes/rsync/backup b/src/datastore_mad/remotes/rsync/backup index 8fb62c6626..f9f37f8507 100755 --- a/src/datastore_mad/remotes/rsync/backup +++ b/src/datastore_mad/remotes/rsync/backup @@ -58,15 +58,16 @@ require 'securerandom' require_relative '../../tm/lib/datastore' require_relative '../../tm/lib/tm_action' -# BACKUP host:remote_dir DISK_ID:..:DISK_ID vm_uuid vm_id ds_id +# BACKUP host:remote_dir DISK_ID:..:DISK_ID vm_uuid bj_id vm_id ds_id ds_xml = STDIN.read dir = ARGV[0].split(':') _disks = ARGV[1].split(':') _vm_uuid = ARGV[2] -vm_id = ARGV[3] -_ds_id = ARGV[4] +_bj_id = ARGV[3] +vm_id = ARGV[4] +_ds_id = ARGV[5] vm_host = dir[0] diff --git a/src/image/ImageManagerActions.cc b/src/image/ImageManagerActions.cc index 1dede04fd2..50b1032f78 100644 --- a/src/image/ImageManagerActions.cc +++ b/src/image/ImageManagerActions.cc @@ -994,7 +994,16 @@ int ImageManager::stat_image(Template* img_tmpl, { img_data << "" << one_util::xml_escape(res) - << ""; + << ""; + + img_tmpl->get("BACKUP_JOB_ID", res); + + if (!res.empty()) + { + img_data << "" << res << ""; + } + + img_data << ""; } break; } diff --git a/src/tm/TransferManager.cc b/src/tm/TransferManager.cc index 7664ec9ec7..0b68ac03b1 100644 --- a/src/tm/TransferManager.cc +++ b/src/tm/TransferManager.cc @@ -2262,7 +2262,10 @@ int TransferManager::backup_transfer_commands( tm_mad_system = "." + tsys; }*/ - bool do_volatile = vm->backups().do_volatile(); + Backups& backups = vm->backups(); + + bool do_volatile = backups.do_volatile(); + int job_id = backups.backup_job_id(); // ------------------------------------------------------------------------- // Image Transfer Commands @@ -2283,13 +2286,23 @@ int TransferManager::backup_transfer_commands( disk_str << disk->get_disk_id() << ":"; } - //BACKUP(.tm_mad_system) tm_mad host:remote_dir DISK_ID:...:DISK_ID deploy_id vmid dsid + //BACKUP(.tm_mad_system) tm_mad host:remote_dir DISK_ID:...:DISK_ID deploy_id bj_id vmid dsid xfr << "BACKUP" << tm_mad_system << " " << vm_tm_mad << " " << vm->get_hostname() << ":" << vm->get_system_dir() << " " << disk_str.str() << " " - << vm->get_deploy_id() << " " - << vm->get_oid() << " " + << vm->get_deploy_id() << " "; + + if ( job_id == -1 ) + { + xfr << "- "; + } + else + { + xfr << job_id << " "; + } + + xfr << vm->get_oid() << " " << vm->get_ds_id() << endl; diff --git a/src/tm_mad/lib/backup.rb b/src/tm_mad/lib/backup.rb index 00417332f2..51342725e1 100644 --- a/src/tm_mad/lib/backup.rb +++ b/src/tm_mad/lib/backup.rb @@ -23,7 +23,7 @@ module TransferManager # This class includes methods manage backup images class BackupImage - attr_reader :vm_id, :keep_last + attr_reader :vm_id, :keep_last, :bj_id # Given a sorted list of qcow2 files, # return a shell recipe that reconstructs the backing chain in-place. @@ -111,6 +111,8 @@ module TransferManager # be just a single ID in the VMS array. @vm_id = @action.elements["#{prefix}/VMS/ID"].text.to_i + @bj_id = @action.elements["#{prefix}/TEMPLATE/BACKUP_JOB_ID"]&.text + @keep_last = @action.elements['/DS_DRIVER_ACTION_DATA/EXTRA_DATA/KEEP_LAST']&.text.to_i @incr_id = @action.elements['/DS_DRIVER_ACTION_DATA/TEMPLATE/INCREMENT_ID']&.text.to_i @@ -238,6 +240,8 @@ module TransferManager @base_url = "#{opts[:proto]}://#{opts[:ds_id]}/#{chain}" + @bj_id = opts[:bimage].bj_id + return unless no_ip NIC_LIST << ['IP', 'IP6', 'IP6_ULA', 'IP6_GLOBAL', 'MAC'] @@ -284,6 +288,8 @@ module TransferManager FROM_BACKUP_DS = "#{@ds_id}" EOS + tmpl << "BACKUP_JOB_ID = \"#{@bj_id}\"" if @bj_id + bck_disks[disk_id] = { :template => tmpl, :name => name } end