From 95b9d44a3c1fff302d59f8889a24cfcc268d1031 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 18 Apr 2012 16:48:56 +0200 Subject: [PATCH] feature #1222: Simplfy TM functions, fix wrong ds ids. Remove size from clone/ln --- src/tm/TransferManager.cc | 440 +++++++++++++++----------------------- 1 file changed, 173 insertions(+), 267 deletions(-) diff --git a/src/tm/TransferManager.cc b/src/tm/TransferManager.cc index 67a46e8c67..17f08649ec 100644 --- a/src/tm/TransferManager.cc +++ b/src/tm/TransferManager.cc @@ -227,11 +227,19 @@ void TransferManager::prolog_action(int vid) int context_result; - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------- // Setup & Transfer script - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "prolog, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -245,13 +253,6 @@ void TransferManager::prolog_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".prolog"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -260,13 +261,12 @@ void TransferManager::prolog_action(int vid) goto error_file; } - // ------------------------------------------------------------------------ - // Swap and image Commands - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- + // Image Transfer Commands + // ------------------------------------------------------------------------- num = vm->get_template_attribute("DISK",attrs); - for (int i=0; i < num ;i++, source="", type="", clon="",tm_mad="",ds_id="-") + for (int i=0; i < num; i++) { disk = dynamic_cast(attrs[i]); @@ -277,19 +277,8 @@ void TransferManager::prolog_action(int vid) type = disk->vector_value("TYPE"); - if ( type.empty() == false) - { - transform(type.begin(),type.end(),type.begin(), - (int(*)(int))toupper); - } - - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - + transform(type.begin(),type.end(),type.begin(),(int(*)(int))toupper); + if ( type == "SWAP" ) { // ----------------------------------------------------------------- @@ -297,20 +286,20 @@ void TransferManager::prolog_action(int vid) // ----------------------------------------------------------------- size = disk->vector_value("SIZE"); - if (size.empty()==true) + if ( size.empty() ) { vm->log("TM",Log::WARNING,"No size in swap image, skipping"); continue; } - //MKSWAP tm_mad size host:remote_system_dir/disk.i + //MKSWAP tm_mad size host:remote_system_dir/disk.i vmid dsid(=0) xfr << "MKSWAP " << system_tm_mad << " " << size << " " << vm->get_hostname() << ":" << vm->get_remote_system_dir() << "/disk." << i << " " << vm->get_oid() << " " - << ds_id << endl; + << "0" << endl; } else if ( type == "FS" ) { @@ -320,13 +309,13 @@ void TransferManager::prolog_action(int vid) size = disk->vector_value("SIZE"); format = disk->vector_value("FORMAT"); - if ( size.empty() || format.empty()) + if ( size.empty() || format.empty() ) { - vm->log("TM",Log::WARNING,"No size or format in plain FS image," - " skipping"); + vm->log("TM",Log::WARNING, "No size or format in FS, skipping"); continue; } - //MKIMAGE tm_mad size format host:remote_system_dir/disk.i + + //MKIMAGE tm_mad size format host:remote_system_dir/disk.i vmid dsid(=0) xfr << "MKIMAGE " << system_tm_mad << " " << size << " " @@ -334,34 +323,33 @@ void TransferManager::prolog_action(int vid) << vm->get_hostname() << ":" << vm->get_remote_system_dir() << "/disk." << i << " " << vm->get_oid() << " " - << ds_id << endl; + << "0" << endl; } else { + // ----------------------------------------------------------------- + // Get transfer attributes & check errors + // ----------------------------------------------------------------- tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); + source = disk->vector_value("SOURCE"); + clon = disk->vector_value("CLONE"); - if ( tm_mad.empty() ) + if ( source.empty() || + tm_mad.empty() || + ds_id.empty() || + clon.empty() ) { - goto error_tm_mad; + goto error_attributes; } + transform(clon.begin(),clon.end(),clon.begin(),(int(*)(int))toupper); + // ----------------------------------------------------------------- // CLONE or LINK disk images // ----------------------------------------------------------------- - clon = disk->vector_value("CLONE"); - size = disk->vector_value("SIZE"); - if ( clon.empty() == true ) - { - clon = "YES"; //Clone by default - } - else - { - transform(clon.begin(),clon.end(),clon.begin(), - (int(*)(int))toupper); - } - - // tm_mad fe:SOURCE host:remote_system_ds/disk.i size + // tm_mad fe:SOURCE host:remote_system_ds/disk.i vmid dsid if (clon == "YES") { xfr << "CLONE "; @@ -373,16 +361,6 @@ void TransferManager::prolog_action(int vid) xfr << tm_mad << " "; - // ----------------------------------------------------------------- - // Get the disk image, and set source URL - // ----------------------------------------------------------------- - source = disk->vector_value("SOURCE"); - - if ( source.empty() ) - { - goto error_empty_disk; - } - if ( source.find(":") == string::npos ) //Regular file { xfr << nd.get_nebula_hostname() << ":" << source << " "; @@ -393,21 +371,15 @@ void TransferManager::prolog_action(int vid) } xfr << vm->get_hostname() << ":" - << vm->get_remote_system_dir() << "/disk." << i; - - if (!size.empty()) //Add size for dev based disks - { - xfr << " " << size; - } - - xfr << " " << vm->get_oid() << " " << ds_id << endl; + << vm->get_remote_system_dir() << "/disk." << i << " " + << vm->get_oid() << " " + << ds_id << endl; } } - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------- // Generate context file (There are 0...num-1 disks, constext is disk.num) - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- context_result = vm->generate_context(files); if ( context_result == -1 ) @@ -417,7 +389,7 @@ void TransferManager::prolog_action(int vid) if ( context_result ) { - //CONTEXT tm_mad files hostname:remote_system_dir/disk.i + //CONTEXT tm_mad files hostname:remote_system_dir/disk.i vmid dsid(=0) xfr << "CONTEXT " << system_tm_mad << " " << vm->get_context_file() << " "; @@ -428,8 +400,9 @@ void TransferManager::prolog_action(int vid) } xfr << vm->get_hostname() << ":" - << vm->get_remote_system_dir() << "/disk." << num - << " " << vm->get_oid() << " -" << endl; + << vm->get_remote_system_dir() << "/disk." << num << " " + << vm->get_oid() << " " + << "0" << endl; } xfr.close(); @@ -440,11 +413,6 @@ void TransferManager::prolog_action(int vid) return; -error_context: - os.str(""); - os << "prolog, could not write context file for VM " << vid; - goto error_common; - error_history: os.str(""); os << "prolog, VM " << vid << " has no history"; @@ -455,20 +423,20 @@ error_file: os << "prolog, could not open file: " << xfr_name; goto error_common; -error_driver: +error_attributes: os.str(""); - os << "prolog, error getting Transfer Manager driver."; + os << "prolog, missing DISK mandatory attributes " + << "(SOURCE, TM_MAD, CLONE, DATASTORE_ID) for VM " << vid; + + xfr.close(); goto error_common; -error_tm_mad: +error_context: os.str(""); - os << "prolog, undefined TM_MAD for disk image in VM template"; - xfr.close(); + os << "prolog, could not write context file for VM " << vid; -error_empty_disk: - os.str(""); - os << "prolog, undefined source disk image in VM template"; xfr.close(); + goto error_common; error_common: (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); @@ -500,11 +468,19 @@ void TransferManager::prolog_migr_action(int vid) const TransferManagerDriver * tm_md; - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------- // Setup & Transfer script - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "prolog_migr, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -518,13 +494,6 @@ void TransferManager::prolog_migr_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".migrate"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -539,7 +508,7 @@ void TransferManager::prolog_migr_action(int vid) num = vm->get_template_attribute("DISK",attrs); - for (int i=0 ; i < num ; i++, tm_mad="", ds_id="-") + for (int i=0 ; i < num ; i++) { disk = dynamic_cast(attrs[i]); @@ -549,20 +518,14 @@ void TransferManager::prolog_migr_action(int vid) } tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); - if ( tm_mad.empty() ) + if ( tm_mad.empty() || ds_id.empty() ) { continue; } - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - - //MV tm_mad prev_host:remote_system_dir/disk.i host:remote_system_dir/disk.i + //MV tm_mad prev_host:remote_system_dir/disk.i host:remote_system_dir/disk.i vmid dsid xfr << "MV " << tm_mad << " " << vm->get_previous_hostname() << ":" @@ -573,14 +536,15 @@ void TransferManager::prolog_migr_action(int vid) << ds_id << endl; } - //MV tm_mad prev_host:remote_system_dir host:remote_system_dir + //MV tm_mad prev_host:remote_system_dir host:remote_system_dir VMID 0 xfr << "MV " << system_tm_mad << " " << vm->get_previous_hostname() << ":" << vm->get_remote_system_dir() << " " << vm->get_hostname() << ":" << vm->get_remote_system_dir() << " " - << vm->get_oid() << " -" << endl; + << vm->get_oid() << " " + << "0" << endl; xfr.close(); @@ -600,10 +564,6 @@ error_file: os << "prolog_migr, could not open file: " << xfr_name; goto error_common; -error_driver: - os.str(""); - os << "prolog_migr, error getting Transfer Manager driver."; - error_common: (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); vm->log("TM", Log::ERROR, os); @@ -634,11 +594,19 @@ void TransferManager::prolog_resume_action(int vid) const TransferManagerDriver * tm_md; - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------- // Setup & Transfer script - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "prolog_resume, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -652,13 +620,6 @@ void TransferManager::prolog_resume_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".resume"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -672,7 +633,7 @@ void TransferManager::prolog_resume_action(int vid) // ------------------------------------------------------------------------ num = vm->get_template_attribute("DISK",attrs); - for (int i=0 ; i < num ; i++, tm_mad="", ds_id="-") + for (int i=0 ; i < num ; i++) { disk = dynamic_cast(attrs[i]); @@ -682,20 +643,14 @@ void TransferManager::prolog_resume_action(int vid) } tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); - if ( tm_mad.empty() ) + if ( tm_mad.empty() || ds_id.empty() ) { continue; } - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - - //MV tm_mad fe:system_dir/disk.i host:remote_system_dir/disk.i + //MV tm_mad fe:system_dir/disk.i host:remote_system_dir/disk.i vmid dsid xfr << "MV " << tm_mad << " " << nd.get_nebula_hostname() << ":" @@ -706,12 +661,13 @@ void TransferManager::prolog_resume_action(int vid) << ds_id << endl; } - //MV tm_mad fe:system_dir host:remote_system_dir + //MV tm_mad fe:system_dir host:remote_system_dir vmid 0 xfr << "MV " << system_tm_mad << " " << nd.get_nebula_hostname() << ":"<< vm->get_system_dir() << " " << vm->get_hostname() << ":" << vm->get_remote_system_dir()<< " " - << vm->get_oid() << " -" << endl; + << vm->get_oid() << " " + << "0" << endl; xfr.close(); @@ -731,10 +687,6 @@ error_file: os << "prolog_resume, could not open file: " << xfr_name; goto error_common; -error_driver: - os.str(""); - os << "prolog_resume, error getting Transfer Manager driver."; - error_common: (nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid); vm->log("TM", Log::ERROR, os); @@ -769,8 +721,16 @@ void TransferManager::epilog_action(int vid) // ------------------------------------------------------------------------ // Setup & Transfer script // ------------------------------------------------------------------------ - system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "epilog, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -784,13 +744,6 @@ void TransferManager::epilog_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".epilog"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -799,13 +752,12 @@ void TransferManager::epilog_action(int vid) goto error_file; } - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------- // copy back VM image (DISK with SAVE="yes") - // ------------------------------------------------------------------------ - + // ------------------------------------------------------------------------- num = vm->get_template_attribute("DISK",attrs); - for (int i=0; i < num; i++, save="", ds_id="-") + for (int i=0; i < num; i++) { disk = dynamic_cast(attrs[i]); @@ -814,44 +766,37 @@ void TransferManager::epilog_action(int vid) continue; } - save = disk->vector_value("SAVE"); + save = disk->vector_value("SAVE"); + ds_id = disk->vector_value("DATASTORE_ID"); + tm_mad = disk->vector_value("TM_MAD"); - if ( save.empty() == true) + if ( save.empty() || ds_id.empty() || tm_mad.empty() ) { continue; } - - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - + transform(save.begin(),save.end(),save.begin(),(int(*)(int))toupper); - tm_mad = disk->vector_value("TM_MAD"); - - if ( save == "YES" ) //TODO SAVE_SOURCE + if ( save == "YES" ) { - string source; - string save_source; + string source; + string save_source; source = disk->vector_value("SOURCE"); save_source = disk->vector_value("SAVE_AS_SOURCE"); - if ( source.empty() && save_source.empty() ) + if (source.empty() && save_source.empty()) { vm->log("TM", Log::ERROR, "No SOURCE to save disk image"); continue; } - if (!save_source.empty()) //Use the save as source instead + if (!save_source.empty())//Use the save_as_source instead { source = save_source; } - //MVDS tm_mad hostname:remote_system_dir/disk.0 + //MVDS tm_mad hostname:remote_system_dir/disk.0 vmid dsid xfr << "MVDS " << tm_mad << " " << vm->get_hostname() << ":" @@ -860,9 +805,9 @@ void TransferManager::epilog_action(int vid) << vm->get_oid() << " " << ds_id << endl; } - else if ( !tm_mad.empty() ) //No saving disk and no system_ds disk + else //No saving disk { - //DELETE tm_mad hostname:remote_system_dir/disk.i + //DELETE tm_mad hostname:remote_system_dir/disk.i vmid ds_id xfr << "DELETE " << tm_mad << " " << vm->get_hostname() << ":" @@ -872,11 +817,12 @@ void TransferManager::epilog_action(int vid) } } - //DELETE system_tm_mad hostname:remote_system_dir + //DELETE system_tm_mad hostname:remote_system_dir vmid ds_id xfr << "DELETE " << system_tm_mad << " " << vm->get_hostname() << ":" << vm->get_remote_system_dir() << " " - << vm->get_oid() << " -" << endl; + << vm->get_oid() << " " + << "0" << endl; xfr.close(); @@ -896,10 +842,6 @@ error_file: os << "epilog, could not open file: " << xfr_name; goto error_common; -error_driver: - os.str(""); - os << "epilog, error getting Transfer Manager driver."; - error_common: (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); vm->log("TM", Log::ERROR, os); @@ -933,6 +875,15 @@ void TransferManager::epilog_stop_action(int vid) // Setup & Transfer script // ------------------------------------------------------------------------ system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "epilog_stop, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -946,13 +897,6 @@ void TransferManager::epilog_stop_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".stop"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -966,7 +910,7 @@ void TransferManager::epilog_stop_action(int vid) // ------------------------------------------------------------------------ num = vm->get_template_attribute("DISK",attrs); - for (int i=0 ; i < num ; i++, tm_mad="", ds_id="-") + for (int i=0 ; i < num ; i++) { disk = dynamic_cast(attrs[i]); @@ -976,20 +920,14 @@ void TransferManager::epilog_stop_action(int vid) } tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); - if ( tm_mad.empty() ) + if (tm_mad.empty() || ds_id.empty()) { continue; } - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - - //MV tm_mad host:remote_system_dir/disk.i fe:system_dir/disk.i + //MV tm_mad host:remote_system_dir/disk.i fe:system_dir/disk.i vmid dsid xfr << "MV " << tm_mad << " " << vm->get_hostname() << ":" @@ -1005,7 +943,8 @@ void TransferManager::epilog_stop_action(int vid) << system_tm_mad << " " << vm->get_hostname() << ":" << vm->get_remote_system_dir() << " " << nd.get_nebula_hostname() << ":" << vm->get_system_dir() << " " - << vm->get_oid() << " -" << endl; + << vm->get_oid() << " " + << "0" << endl; xfr.close(); @@ -1025,10 +964,6 @@ error_file: os << "epilog_stop, could not open file: " << xfr_name; goto error_common; -error_driver: - os.str(""); - os << "epilog_stop, error getting Transfer Manager driver."; - error_common: (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); vm->log("TM", Log::ERROR, os); @@ -1063,6 +998,15 @@ void TransferManager::epilog_delete_action(int vid) // Setup & Transfer script // ------------------------------------------------------------------------ system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "epilog_delete, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -1075,13 +1019,6 @@ void TransferManager::epilog_delete_action(int vid) { goto error_history; } - - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } xfr_name = vm->get_transfer_file() + ".delete"; xfr.open(xfr_name.c_str(), ios::out | ios::trunc); @@ -1096,7 +1033,7 @@ void TransferManager::epilog_delete_action(int vid) // ------------------------------------------------------------------------- num = vm->get_template_attribute("DISK",attrs); - for (int i=0 ; i < num ; i++, tm_mad="", ds_id="-") + for (int i=0 ; i < num ; i++) { disk = dynamic_cast(attrs[i]); @@ -1106,20 +1043,14 @@ void TransferManager::epilog_delete_action(int vid) } tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); - if ( tm_mad.empty() ) + if ( tm_mad.empty() || ds_id.empty() ) { continue; } - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - - //DELETE tm_mad host:remote_system_dir/disk.i + //DELETE tm_mad host:remote_system_dir/disk.i vmid dsid xfr << "DELETE " << tm_mad << " " << vm->get_hostname() << ":" @@ -1128,11 +1059,12 @@ void TransferManager::epilog_delete_action(int vid) << ds_id << endl; } - //DELETE system_tm_mad hostname:remote_system_dir + //DELETE system_tm_mad hostname:remote_system_dir vmid dsid(=0) xfr << "DELETE " << system_tm_mad << " " << vm->get_hostname() <<":"<< vm->get_remote_system_dir() << " " - << vm->get_oid() << " -"; + << vm->get_oid() << " " + << "0"; xfr.close(); @@ -1154,12 +1086,6 @@ error_file: << ":" << vm->get_remote_system_dir(); goto error_common; -error_driver: - os.str(""); - os << "epilog_delete, error getting driver Transfer Manager driver."; - os << ". You may need to manually clean " << vm->get_hostname() - << ":" << vm->get_remote_system_dir(); - error_common: vm->log("TM", Log::ERROR, os); vm->unlock(); @@ -1191,8 +1117,16 @@ void TransferManager::epilog_delete_previous_action(int vid) // ------------------------------------------------------------------------ // Setup & Transfer script // ------------------------------------------------------------------------ - system_tm_mad = nd.get_system_ds_tm_mad(); + tm_md = get(); + + if ( tm_md == 0 || system_tm_mad.empty() ) + { + NebulaLog::log("TM", Log::ERROR, "epilog_delete, error getting drivers."); + (nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid); + + return; + } vm = vmpool->get(vid,true); @@ -1206,13 +1140,6 @@ void TransferManager::epilog_delete_previous_action(int vid) goto error_history; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - xfr_name = vm->get_transfer_file() + ".delete_prev"; xfr.open(xfr_name.c_str(),ios::out | ios::trunc); @@ -1226,7 +1153,7 @@ void TransferManager::epilog_delete_previous_action(int vid) // ------------------------------------------------------------------------ num = vm->get_template_attribute("DISK",attrs); - for (int i=0 ; i < num ; i++, tm_mad="", ds_id="-") + for (int i=0 ; i < num ; i++) { disk = dynamic_cast(attrs[i]); @@ -1236,20 +1163,14 @@ void TransferManager::epilog_delete_previous_action(int vid) } tm_mad = disk->vector_value("TM_MAD"); + ds_id = disk->vector_value("DATASTORE_ID"); - if ( tm_mad.empty() ) + if (tm_mad.empty() || ds_id.empty()) { continue; } - ds_id = disk->vector_value("DATASTORE_ID"); - - if ( ds_id.empty() ) - { - ds_id = "-"; - } - - //DELETE tm_mad prev_host:remote_system_dir/disk.i + //DELETE tm_mad prev_host:remote_system_dir/disk.i vmid ds_id xfr << "DELETE " << tm_mad << " " << vm->get_previous_hostname() << ":" @@ -1258,11 +1179,12 @@ void TransferManager::epilog_delete_previous_action(int vid) << ds_id << endl; } - //DELTE system_tm_mad prev_host:remote_system_dir + //DELTE system_tm_mad prev_host:remote_system_dir vmid ds_id(=0) xfr << "DELETE " << system_tm_mad << " " << vm->get_previous_hostname() <<":"<< vm->get_remote_system_dir() - << " " << vm->get_oid() << " -" << endl; + << " " << vm->get_oid() << " " + << "0" << endl; xfr.close(); @@ -1284,12 +1206,6 @@ error_file: << ":" << vm->get_remote_system_dir(); goto error_common; -error_driver: - os.str(""); - os << "epilog_delete, error getting driver Transfer Manager driver."; - os << ". You may need to manually clean " << vm->get_previous_hostname() - << ":" << vm->get_remote_system_dir(); - error_common: vm->log("TM", Log::ERROR, os); vm->unlock(); @@ -1313,6 +1229,12 @@ void TransferManager::driver_cancel_action(int vid) // ------------------------------------------------------------------------ // Get the Driver for this host // ------------------------------------------------------------------------ + tm_md = get(); + + if ( tm_md == 0 ) + { + return; + } vm = vmpool->get(vid,true); @@ -1321,13 +1243,6 @@ void TransferManager::driver_cancel_action(int vid) return; } - tm_md = get(); - - if ( tm_md == 0 ) - { - goto error_driver; - } - // ------------------------------------------------------------------------ // Cancel the current operation // ------------------------------------------------------------------------ @@ -1336,15 +1251,6 @@ void TransferManager::driver_cancel_action(int vid) vm->unlock(); - return; - -error_driver: - os.str(""); - os << "driver_cancel, error getting driver Transfer Manager driver."; - - vm->log("TM", Log::ERROR, os); - vm->unlock(); - return; }