#include <i_recalljob_impl.h>


Definition at line 58 of file i_recalljob_impl.h.
| i_RecallJob_i::~i_RecallJob_i | ( | ) | [private, virtual] |
Definition at line 88 of file i_recalljob_impl.cpp.
References log_FUNC_m, and i_Job_i::ReleaseDiskBuffer().
00088 { 00089 log_FUNC_m(~i_RecallJob_i); 00090 ReleaseDiskBuffer(); 00091 }

| i_RecallJob_i::i_RecallJob_i | ( | i_PartitionManager_i & | a_iPM, | |
| pm_JobMgr & | a_jobMgr, | |||
| i_Recall_t | a_iRecall | |||
| ) |
Definition at line 38 of file i_recalljob_impl.cpp.
References i_JobParams::bufId, i_JobParams::bufType, i_JobParams::copies, rm_String::cvalue_p, i_Recall_t::fileID, i_Job_i::GetJobTypeText(), i_DISK_BUF, i_REMOTE_BUF, i_Job_i::InitBeaStatus(), ipc_EXEC_m, i_JobParams::jobID, i_JobParams::jobPriority, i_JobParams::jobType, jt_RECALL, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activeBeas, i_PartitionManager_i::m_config, i_PartitionManager_i::m_externalClient, i_Job_i::m_iJobParams, m_iPM, m_iRecall, i_PartitionManager_i::m_rmPart, cfg_PMCfg::name, rm_Partition::partitionUUIDString, i_JobParams::partName, i_JobParams::partUUID, cfg_PMCfg::recallPriority, ipc_Init::ResourceInit(), and i_Job_i::SetResources().
00043 : i_Job_i(a_jobMgr), 00044 m_fileSize(0), 00045 m_iPM(a_iPM), 00046 m_iRecall(a_iRecall), 00047 m_currentSplit(0), 00048 m_numOfSplits(0), 00049 m_beaGotSplit(false), 00050 m_hsmRecallCalled(false){ 00051 log_FUNC_m(i_RecallJob_i); 00052 00053 ostringstream os; 00054 os << "Started. "; 00055 00056 m_iJobParams.jobType = jt_RECALL; 00057 log_WriteEvent(os.str(), GetJobTypeText(), m_iJobParams.jobID); 00058 00059 ipc_EXEC_m( 00060 m_iJobParams.jobPriority = m_iPM.m_config.recallPriority; 00061 m_iJobParams.partName = 00062 CORBA::string_dup(m_iPM.m_config.name.c_str()); 00063 m_iJobParams.partUUID = 00064 CORBA::string_dup(m_iPM.m_rmPart.partitionUUIDString.cvalue_p); 00065 ); 00066 00067 if (m_iPM.m_externalClient) { 00068 m_iJobParams.bufType = i_REMOTE_BUF; 00069 } 00070 else { 00071 m_iJobParams.bufType = i_DISK_BUF; 00072 } 00073 m_iJobParams.bufId = m_iJobParams.jobID; 00074 m_iJobParams.copies = 0; 00075 00076 i_ResourceList_t resources; 00077 resources.length(1); 00078 00079 ipc_Init::ResourceInit(resources[0]); //sets all memebers to 0 or to ipc_nilStr 00080 resources[0].fileId = m_iRecall.fileID; 00081 SetResources(resources); 00082 00083 m_activeBeas.resize(1); //recall has always one Bea 00084 InitBeaStatus(1); 00085 }

| void i_RecallJob_i::GetNewResources | ( | i_Index_t | a_resNum | ) | [virtual] |
Implements i_Job_i.
Definition at line 618 of file i_recalljob_impl.cpp.
References ie_IMPOSSIBLE, ipc_CATCH_IVD_THROW_CORBA_m, and log_FUNC_m.
00618 { 00619 log_FUNC_m(GetNewResources); 00620 try { 00621 throw ivd_InternalError(ie_IMPOSSIBLE); 00622 } ipc_CATCH_IVD_THROW_CORBA_m; 00623 }
| void i_RecallJob_i::MediumOperationComplete | ( | i_Index_t | a_beaNum, | |
| i_CompletionStatus_e | a_status | |||
| ) | [virtual] |
Implements i_Job_i.
Definition at line 167 of file i_recalljob_impl.cpp.
References i_Resource_t::blockOffset, cmn_Condition::Broadcast(), bs_RUNNING, CompleteJob(), dbg_DETAIL, dbg_NORM, i_Job_i::GetResources(), i_FAILED, i_HW_ERROR, i_MEDIUM_ERROR, i_RESOURCE_ERROR, i_SUCCEDED, ie_FATAL_ERROR, ipc_CATCH_IVD_THROW_CORBA_m, ipc_EXEC_m, i_Job_i::IsAborted(), job_POST_MED_PROC, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, ipc_Log::LogStatus(), i_Job_i::m_activate_c, i_Job_i::m_activate_x, m_beaGotSplit, i_Job_i::m_beasStatus_x, m_currentSplit, m_iCopiesPos, i_Job_i::m_iJob, i_Job_i::m_iJobParams, m_recallClientThread, i_Job_i::m_rm, i_Resource_t::mediumKey, i_Resource_t::medVolNr, pm_RecallClientThread, RecallRetry(), ReleaseResources(), i_Resource_t::resAllocated, i_Resource_t::resAssigned, i_Resource_t::resProcessed, i_Job_i::SetBeaStatus(), i_Job_i::SetDiskBufferWritten(), i_Job_i::SetResMedOpComplete(), i_Job_i::SetResources(), i_Job_i::SetStatus(), i_Resource_t::splitOffset, and cmn_Thread::Start().
00169 { 00170 00171 log_FUNC_m(MediumOperationComplete); 00172 00173 { 00174 cmn_MutexLock l(m_beasStatus_x); 00175 SetBeaStatus(a_beaNum, bs_RUNNING); 00176 } 00177 00178 log_DBG_m(dbg_NORM, 00179 "[" << m_iJobParams.jobID << "] " << 00180 "Recall CompleteJob called by Bea: " << 00181 a_beaNum << " status: " << 00182 ipc_Log::LogStatus(a_status) ); 00183 00184 m_beaGotSplit = false; 00185 SetDiskBufferWritten(); 00186 00187 try { 00188 if ( (a_status == i_MEDIUM_ERROR) || (a_status == i_HW_ERROR) ){ 00189 i_ResourceList_t tmpRes = GetResources(); 00190 RecallRetry(); 00191 cmn_MutexLock l(m_activate_x); 00192 m_activate_c.Broadcast(); 00193 try { 00194 ipc_EXEC_m(m_rm->ReleaseResource(m_iJobParams, tmpRes)); 00195 } 00196 catch (ivd_Error &e) { 00197 log_ERR_m("Releasing FAILED for jobID: " << 00198 m_iJobParams.jobID << endl << e) 00199 } 00200 return; 00201 } 00202 else { 00203 if (IsAborted()) return; 00204 if ( a_status != i_SUCCEDED ) { 00205 CompleteJob(i_FAILED); 00206 return; 00207 }; 00208 }; 00209 00210 SetResMedOpComplete(a_beaNum); 00211 if (m_currentSplit == m_iCopiesPos.length() - 1){ 00212 SetStatus(job_POST_MED_PROC); 00213 ReleaseResources(); 00214 m_recallClientThread = new pm_RecallClientThread(*this); 00215 m_recallClientThread->Start(); 00216 } 00217 else { 00218 //process next split 00219 m_currentSplit++; 00220 00221 log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 00222 "] " << "Set m_currentSplit to " << m_currentSplit); 00223 00224 if (m_currentSplit >= m_iCopiesPos.length()){ 00225 throw ivd_InternalError(ie_FATAL_ERROR, "Recall for unexisting split invoked"); 00226 } 00227 try { 00228 i_Resource_t relRes; 00229 relRes = GetResources()[0]; 00230 00231 if (m_currentSplit >= m_iCopiesPos.length()){ 00232 throw ivd_InternalError(ie_FATAL_ERROR, "Recall for unexisting split invoked"); 00233 } 00234 00235 i_Resource_t tmpRes; 00236 tmpRes = GetResources()[0]; 00237 log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 00238 "] " << "Got Resources[0]"); 00239 00240 tmpRes.mediumKey = m_iCopiesPos[m_currentSplit].mediumKey; 00241 tmpRes.medVolNr = m_iCopiesPos[m_currentSplit].medVolNum; 00242 tmpRes.blockOffset = m_iCopiesPos[m_currentSplit].blockOffset; 00243 tmpRes.splitOffset = m_iCopiesPos[m_currentSplit].splitOffset; 00244 00245 tmpRes.resAllocated = false; 00246 tmpRes.resAssigned = false; 00247 tmpRes.resProcessed = false; 00248 00249 SetResources(tmpRes); 00250 00251 ipc_EXEC_m(m_rm->ExchangeRecallResources(m_iJob, 00252 m_iJobParams, 00253 relRes, 00254 GetResources()[0]);); 00255 } catch (ivd_Exception& e){ 00256 log_ERR_m("[" << m_iJobParams.jobID << 00257 "] " << "Catched Exception when calling RM: " << e); 00258 CompleteJob(i_RESOURCE_ERROR); 00259 } 00260 } 00261 } ipc_CATCH_IVD_THROW_CORBA_m; 00262 }

| void i_RecallJob_i::CompleteJob | ( | i_CompletionStatus_e | a_status | ) | [virtual] |
Implements i_Job_i.
Definition at line 319 of file i_recalljob_impl.cpp.
References i_JobParams::bufType, dbg_LOW, i_JobParams::diskBufferFS, i_Recall_t::fileID, i_Recall_t::fileSize, i_PartitionManager_i::GetHSM(), i_Job_i::GetResources(), i_SUCCEDED, ipc_EXEC_m, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, ipc_Log::LogStatus(), m_hsmRecallCalled, i_Job_i::m_iJobParams, m_iPM, m_iRecall, m_recallCounter, i_Recall_t::migrationID, i_Job_i::Remove(), and cmn_ThreadCounter::WaitAllEnd().
Referenced by MediumOperationComplete(), RecallRetry(), and pm_RecallClientThread::~pm_RecallClientThread().
00319 { 00320 log_FUNC_m(CompleteJob); 00321 00322 try { 00323 log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID << "] " << 00324 "Waiting for Recall thread." ) 00325 m_recallCounter.WaitAllEnd(); 00326 log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID << "] " << 00327 "~i_RecallJob_i finished" ); 00328 00329 if ( a_status == i_SUCCEDED ){ 00330 ipc_EXEC_m(Remove();); 00331 } else { 00332 //job failed!! 00333 //todo inform client about fail 00334 log_ERR_m( 00335 "[" << m_iJobParams.jobID << "] " << 00336 "Could not recall fileID: " << m_iRecall.fileID << 00337 ", migID: " << m_iRecall.migrationID << 00338 ", size: " << m_iRecall.fileSize << 00339 ", status: " << ipc_Log::LogStatus(a_status)); 00340 00341 try { 00342 ipc_EXEC_m( 00343 if (!m_hsmRecallCalled){ 00344 m_hsmRecallCalled = true; 00345 m_iPM.GetHSM()->Recall( 00346 m_iRecall, 00347 m_iJobParams.jobID, 00348 GetResources()[0].blockSize, 00349 m_iJobParams.bufType, 00350 m_iJobParams.diskBufferFS, 00351 false, 00352 i_DownloadAgent::_duplicate(i_DownloadAgent::_nil()) ); 00353 }; 00354 ); 00355 } 00356 catch (ivd_Exception &ie) { 00357 log_DBG_m(dbg_LOW, ie); 00358 } 00359 catch (...){ 00360 log_DBG_m(dbg_LOW, "unknown exception caught"); 00361 //ignore 00362 } 00363 //remove job 00364 ipc_EXEC_m(Remove();); 00365 } 00366 00367 } catch (ivd_Exception& e) { 00368 log_ERR_m("[" << m_iJobParams.jobID <<"] " << e); 00369 } catch (ivd_InternalError& ie) { 00370 log_ERR_m("[" << m_iJobParams.jobID << "] " << ie); 00371 } catch (...) { 00372 log_ERR_m("[" << m_iJobParams.jobID << "] " << "Caught unknown" ); 00373 } 00374 }


| i_FileLocationDataList_t * i_RecallJob_i::GetNextRecallSet | ( | ) | [virtual] |
Reimplemented from i_Job_i.
Definition at line 93 of file i_recalljob_impl.cpp.
References i_Recall_t::fileID, ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, m_beaGotSplit, m_currentSplit, m_iCopiesPos, i_Job_i::m_iJobParams, m_iRecall, i_Recall_t::migrationID, and i_JobParams::phase.
00093 { 00094 log_FUNC_m(GetNextRecallSet); 00095 try { 00096 00097 m_iJobParams.phase++; 00098 i_FileLocationDataList_t* splitLocation = new i_FileLocationDataList_t; 00099 00100 if (m_beaGotSplit){ 00101 return splitLocation; 00102 } 00103 00104 splitLocation->length(1); 00105 //fill split info 00106 00107 (*splitLocation)[0].fileID = m_iRecall.fileID; 00108 (*splitLocation)[0].blockOffset = m_iCopiesPos[m_currentSplit].blockOffset; 00109 (*splitLocation)[0].migrationID = m_iRecall.migrationID; 00110 (*splitLocation)[0].splitSize = m_iCopiesPos[m_currentSplit].splitSize; 00111 00112 m_beaGotSplit = true; 00113 return splitLocation; 00114 } ipc_CATCH_IVD_THROW_CORBA_m 00115 }
| i_FSC_ptr i_RecallJob_i::GetFSC | ( | ) | [virtual] |
Implements i_Job_i.
Definition at line 449 of file i_recalljob_impl.cpp.
References i_PartitionManager_i::GetFSC(), ipc_CATCH_IVD_THROW_CORBA_m, ipc_EXEC_m, log_FUNC_m, and m_iPM.
00449 { 00450 log_FUNC_m(GetFSC); 00451 try { 00452 ipc_EXEC_m( 00453 i_FSC_ptr tmpFSC = i_FSC::_duplicate(m_iPM.GetFSC()); 00454 return tmpFSC; 00455 ); 00456 } ipc_CATCH_IVD_THROW_CORBA_m; 00457 00458 }

| i_JobRequestList_t * i_RecallJob_i::GetFiles | ( | ) | [virtual] |
Implements i_Job_i.
Definition at line 625 of file i_recalljob_impl.cpp.
References ie_IMPOSSIBLE, ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, and NULL.
00625 { 00626 log_FUNC_m(GetFiles); 00627 00628 try { 00629 throw ivd_InternalError(ie_IMPOSSIBLE); 00630 } ipc_CATCH_IVD_THROW_CORBA_m; 00631 return NULL; 00632 } // i_RecallJob_i::GetFiles()
| void i_RecallJob_i::Process | ( | ) | [private] |
Non-interface function.
Definition at line 120 of file i_recalljob_impl.cpp.
References i_Job_i::ActivateBea(), i_Resource_t::blockOffset, bs_PROCESSING, bs_RUNNING, ivd_BaseException::GetError(), i_Job_i::GetResources(), ie_MEDIUM_HWERR, ie_MEDIUM_MEDERR, ie_MEDIUM_PROTECTED, ie_SCSI_HOST, ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, i_Job_i::LoadUnload(), log_ERR_m, log_FUNC_m, i_Job_i::m_activeBeas, i_Job_i::m_beasStatus_x, m_currentSplit, m_iCopiesPos, i_Job_i::m_iJobParams, i_Job_i::m_rm, i_Resource_t::medVolId, i_Resource_t::medVolNr, RecallRetry(), ReleaseResources(), i_Job_i::SetBeaStatus(), i_Job_i::SetResources(), and i_Job_i::SetResProcessed().
Referenced by Execute().
00120 { 00121 log_FUNC_m(Process); 00122 00123 i_Resource_t tmpRes = GetResources()[0]; 00124 tmpRes.medVolNr = m_iCopiesPos[m_currentSplit].medVolNum; 00125 00126 i_MediumVol_t_var iMV; 00127 ipc_EXEC_m( iMV = m_rm->SelectMediumVolByKey(GetResources()[0].mediumKey, 00128 GetResources()[0].medVolNr);); 00129 00130 tmpRes.blockOffset = m_iCopiesPos[m_currentSplit].blockOffset; 00131 tmpRes.medVolId = iMV->medVolId; 00132 SetResources(tmpRes); 00133 00134 LoadUnload(0); 00135 00136 try { 00137 cmn_MutexLock l(m_beasStatus_x); 00138 ipc_EXEC_m(ActivateBea(0);); 00139 SetBeaStatus(0, bs_RUNNING); 00140 00141 if (IsAborted()){ 00142 return; 00143 } 00144 SetResProcessed(0); 00145 ipc_EXEC_m(m_activeBeas[0]->Recall();); 00146 SetBeaStatus(0, bs_PROCESSING); 00147 } catch (ivd_Exception& e){ 00148 log_ERR_m("[" << m_iJobParams.jobID << 00149 "] Catched Exception when calling Bea->Recall " << e); 00150 switch (e.GetError()){ 00151 case(ie_MEDIUM_MEDERR): 00152 case(ie_MEDIUM_PROTECTED): 00153 case(ie_MEDIUM_HWERR): 00154 case(ie_SCSI_HOST): 00155 { 00156 ReleaseResources(); 00157 RecallRetry(); 00158 break; 00159 } 00160 default: 00161 throw; 00162 } 00163 } 00164 }


| void i_RecallJob_i::Execute | ( | ) | [private, virtual] |
Implements i_Job_i.
Definition at line 548 of file i_recalljob_impl.cpp.
References cmn_Num2Str(), dbg_DETAIL, dbg_LOW, evt_ERROR, i_Recall_t::fileID, i_Recall_t::fileSize, ivd_BaseException::GetFriendly(), i_PartitionManager_i::GetFSC(), i_Job_i::GetJobTypeText(), i_FAILED, i_FSC_ERROR, ie_NO_COPIES, ipc_EXEC_m, i_Job_i::IsAborted(), i_Job_i::IsFinished(), ivd_Error, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activate_x, m_allCopiesPos, i_Job_i::m_iJobParams, m_iPM, m_iRecall, i_Job_i::m_status, i_Recall_t::migrationID, i_Job_i::NeedsProcess(), PrepareResource(), Process(), and i_Job_i::WaitBeasToFinish().
00548 { 00549 log_FUNC_m(Execute); 00550 00551 log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 00552 "] " << "Running Recall job for FileID: " << 00553 m_iRecall.fileID); 00554 try { 00555 00556 try { 00557 ipc_EXEC_m( 00558 i_FSC_var fsc = m_iPM.GetFSC(); 00559 m_allCopiesPos = fsc->GetCopiesPos( 00560 m_iRecall.fileID, 00561 m_iRecall.migrationID, 00562 m_iRecall.fileSize ); 00563 ); 00564 00565 UInt64_t fileID = m_iRecall.fileID; 00566 if (m_allCopiesPos->length() == 0) { 00567 throw ivd_Error(ie_NO_COPIES, 00568 "No copies for fileId:"+ 00569 cmn_Num2Str(fileID)); 00570 } 00571 00572 for (UInt32_t i = 0; i < m_allCopiesPos->length(); i++) { 00573 if (m_allCopiesPos[i].length() == 0){ 00574 throw ivd_Error(ie_NO_COPIES, 00575 "Copies Are empty for fileId:"+ 00576 cmn_Num2Str(fileID)); 00577 } 00578 } 00579 } catch (ivd_Exception& e){ 00580 00581 log_ERR_m("[" << m_iJobParams.jobID << "] " << 00582 "GetFileCopies from FSC failed:" << e); 00583 00584 ostringstream os; 00585 os << "Failed (" << e.GetFriendly() << ")."; 00586 log_WriteEvent(evt_ERROR, os.str(), 00587 GetJobTypeText(), m_iJobParams.jobID); 00588 m_status = i_FSC_ERROR; 00589 throw; 00590 } 00591 00592 cmn_MutexLock l(m_activate_x); 00593 PrepareResource(); 00594 00595 if (IsAborted()) { 00596 return; 00597 } 00598 00599 while ( !IsFinished() ) { 00600 WaitBeasToFinish(5); 00601 00602 if (IsAborted()) { 00603 return; 00604 } 00605 00606 if (NeedsProcess(0)) { 00607 Process(); 00608 } 00609 } 00610 } catch (ivd_Exception& e){ 00611 log_DBG_m(dbg_LOW, e); 00612 m_status = i_FAILED; 00613 throw; 00614 } 00615 }

| void i_RecallJob_i::PrepareResource | ( | ) | [private] |
Second step RM-> ask for resources
Definition at line 460 of file i_recalljob_impl.cpp.
References i_Resource_t::barcode, i_Resource_t::blockOffset, i_MediumPos_t::blockOffset, i_MediumPos_t::dataType, dbg_DETAIL, dbg_LOW, dbg_NORM, i_Job_i::GetResources(), i_RMCOPYPOS_ERROR, ie_FATAL_ERROR, ipc_EXEC_m, job_MED_PROC, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, m_allCopiesPos, m_currentSplit, m_fileSize, m_iCopiesPos, i_Job_i::m_iJob, i_Job_i::m_iJobParams, m_iPM, i_PartitionManager_i::m_maxDiskBuff, m_numOfSplits, i_Job_i::m_rm, i_Job_i::m_status, i_Resource_t::mediumKey, i_MediumPos_t::mediumKey, i_Resource_t::medVolNr, i_MediumPos_t::medVolNum, i_Job_i::RequestDiskBuffer(), i_Resource_t::resRequested, i_Job_i::SetResources(), i_Job_i::SetStatus(), i_Resource_t::splitOffset, i_MediumPos_t::splitOffset, and i_MediumPos_t::splitSize.
Referenced by Execute(), and RecallRetry().
00460 { 00461 log_FUNC_m(PrepareResource); 00462 00464 try { 00465 log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID << 00466 "] " << "Getting best copy from RM"); 00467 UInt32_t bestCopyIdx = 0; 00468 ipc_EXEC_m( 00469 bestCopyIdx = m_rm->GetBestCopy(m_allCopiesPos); 00470 ); 00471 log_DBG_m(dbg_DETAIL, "[" << m_iJobParams.jobID << 00472 "] " << "Got best copy from RM index:" << 00473 bestCopyIdx); 00474 00475 m_iCopiesPos = m_allCopiesPos[bestCopyIdx]; 00476 00477 00478 log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 00479 "] [DataType:MedVolNum:MediumKey:BlockOffset:SplitOffset:SplitSize]"); 00480 00481 if (m_iCopiesPos.length() == 0) { 00482 throw ivd_InternalError(ie_FATAL_ERROR, "Copying of copyPosition failed"); 00483 } 00484 for (UInt32_t i = 0; i < m_iCopiesPos.length(); i++){ 00485 i_MediumPos_t &mp = m_iCopiesPos[i]; 00486 log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 00487 "] " << "m_iCopiesPos[" << i << "], " << 00488 mp.dataType << "," << 00489 mp.medVolNum << "," << 00490 mp.mediumKey << "," << 00491 mp.blockOffset << "," << 00492 mp.splitOffset << "," << 00493 mp.splitSize); 00494 m_fileSize += m_iCopiesPos[i].splitSize; 00495 } 00496 //reserver diskbuffer space 00497 UInt64_t allocated(0); 00498 RequestDiskBuffer(m_fileSize, m_fileSize, allocated, m_iPM.m_maxDiskBuff); 00499 00500 m_numOfSplits = m_iCopiesPos.length(); 00501 00502 log_DBG_m(dbg_NORM,"[" << m_iJobParams.jobID << 00503 "] " << "currentSplit:" << m_currentSplit << 00504 " mediumKey:" << 00505 m_iCopiesPos[m_currentSplit].mediumKey << 00506 " medVolNr:" << 00507 m_iCopiesPos[m_currentSplit].medVolNum); 00508 00509 SetStatus(job_MED_PROC); 00510 00511 i_Resource_t tmpRes; 00512 tmpRes = GetResources()[0]; 00513 try { 00514 ipc_EXEC_m ( 00515 i_MediumVol_t_var medVol = 00516 m_rm->SelectMediumVolByKey( 00517 m_iCopiesPos[m_currentSplit].mediumKey, 00518 m_iCopiesPos[m_currentSplit].medVolNum 00519 ); 00520 tmpRes.barcode= medVol->mediumBarcode; 00521 ); 00522 } catch (ivd_Error &e){ 00523 log_ERR_m(e); 00524 } 00525 tmpRes.mediumKey = m_iCopiesPos[m_currentSplit].mediumKey; 00526 tmpRes.medVolNr = m_iCopiesPos[m_currentSplit].medVolNum; 00527 tmpRes.blockOffset = m_iCopiesPos[m_currentSplit].blockOffset; 00528 tmpRes.splitOffset = m_iCopiesPos[m_currentSplit].splitOffset; 00529 tmpRes.resRequested = true; 00530 SetResources(tmpRes); 00531 00532 log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID << 00533 "] " << "Getting Recall Resources from RM"); 00534 ipc_EXEC_m( 00535 m_rm->GetRecallResources( m_iJob, 00536 m_iJobParams, 00537 GetResources()[0]); 00538 ); 00539 00540 } catch (ivd_Exception& e){ 00541 log_DBG_m(dbg_LOW, e); 00542 m_status = i_RMCOPYPOS_ERROR; 00543 throw; 00544 } 00545 }


| void i_RecallJob_i::CleanUp | ( | ) | [private] |
| void i_RecallJob_i::RecallRetry | ( | ) | [private] |
Definition at line 293 of file i_recalljob_impl.cpp.
References bs_NOT_RUNNING, CompleteJob(), i_Resource_t::fileId, i_Recall_t::fileID, ivd_BaseException::GetFriendly(), i_FAILED, ipc_EXEC_m, i_JobParams::jobID, log_ERR_m, log_FUNC_m, log_WRN_m, i_Job_i::m_activeBeas, i_Job_i::m_beasStatus_x, i_Job_i::m_iJobParams, m_iRecall, NULL, PrepareResource(), i_Job_i::ReleaseDiskBuffer(), i_Job_i::Remove(), ipc_Init::ResourceInit(), i_Job_i::SetBeaStatus(), and i_Job_i::SetResources().
Referenced by MediumOperationComplete(), and Process().
00293 { 00294 log_FUNC_m(RecallRetry); 00295 //retry recall 00296 log_WRN_m("[" << m_iJobParams.jobID << 00297 "] " << "Starting recall retry for fileID:" << m_iRecall.fileID); 00298 00299 ReleaseDiskBuffer(); 00300 { 00301 cmn_MutexLock l(m_beasStatus_x); 00302 SetBeaStatus(0, bs_NOT_RUNNING); 00303 ipc_EXEC_m(m_activeBeas[0]->Remove()); 00304 m_activeBeas[0] = NULL; 00305 } 00306 // 00307 i_Resource_t tmpRes; 00308 ipc_Init::ResourceInit(tmpRes); //sets all memebers to 0 or to ipc_nilStr 00309 tmpRes.fileId = m_iRecall.fileID; 00310 SetResources(tmpRes); 00311 try { 00312 PrepareResource(); 00313 } catch (ivd_Error &e) { 00314 log_ERR_m("Retry failed." << e.GetFriendly()); 00315 CompleteJob(i_FAILED); 00316 } 00317 }


| void i_RecallJob_i::ReleaseResources | ( | ) | [private] |
Definition at line 264 of file i_recalljob_impl.cpp.
References dbg_LOW, dbg_NORM, i_Job_i::GetResources(), ipc_EXEC_m, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, i_Job_i::m_iJobParams, i_Job_i::m_rm, and i_Job_i::SetResReleased().
Referenced by MediumOperationComplete(), and Process().
00264 { 00265 log_FUNC_m(ReleaseResources); 00266 try { 00267 ipc_EXEC_m( 00268 //resource are released because hsm->recall can last long time 00269 log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID << 00270 "] " << "ReleaseResource for jobId"); 00271 i_ResourceList_t res = GetResources(); 00272 try { 00273 ipc_EXEC_m(m_rm->ReleaseResource(m_iJobParams, res)); 00274 } catch (ivd_Error &e){ 00275 log_ERR_m("Releasing FAILED for jobID: " << 00276 m_iJobParams.jobID << endl << e) 00277 } 00278 00279 for (UInt32_t i = 0 ; i < res.length(); ++i) { 00280 SetResReleased(i); 00281 } 00282 log_DBG_m(dbg_NORM,"[" << m_iJobParams.jobID << 00283 "] " << "Resources Released for job"); 00284 00285 ); 00286 } catch (ivd_Exception& e){ 00287 log_ERR_m( 00288 "[" << m_iJobParams.jobID << "] " << 00289 "Catched Exception when calling rm->ReleaseResource" << e); 00290 } 00291 }


friend class pm_RecallClientThread [friend] |
i_PartitionManager_i& i_RecallJob_i::m_iPM [protected] |
Definition at line 86 of file i_recalljob_impl.h.
Referenced by CompleteJob(), Execute(), GetFSC(), i_RecallJob_i(), PrepareResource(), and pm_RecallClientThread::Run().
i_MediumPos_v_t i_RecallJob_i::m_iCopiesPos [private] |
Definition at line 96 of file i_recalljob_impl.h.
Referenced by GetNextRecallSet(), MediumOperationComplete(), PrepareResource(), and Process().
i_CopiesPos_v_t_var i_RecallJob_i::m_allCopiesPos [private] |
i_Recall_t i_RecallJob_i::m_iRecall [private] |
Definition at line 98 of file i_recalljob_impl.h.
Referenced by CompleteJob(), Execute(), GetNextRecallSet(), i_RecallJob_i(), RecallRetry(), and pm_RecallClientThread::Run().
UInt32_t i_RecallJob_i::m_currentSplit [private] |
Definition at line 99 of file i_recalljob_impl.h.
Referenced by GetNextRecallSet(), MediumOperationComplete(), PrepareResource(), and Process().
UInt32_t i_RecallJob_i::m_numOfSplits [private] |
bool i_RecallJob_i::m_beaGotSplit [private] |
Definition at line 101 of file i_recalljob_impl.h.
Referenced by GetNextRecallSet(), and MediumOperationComplete().
Definition at line 104 of file i_recalljob_impl.h.
Referenced by CompleteJob(), pm_RecallClientThread::pm_RecallClientThread(), and pm_RecallClientThread::~pm_RecallClientThread().
bool i_RecallJob_i::m_hsmRecallCalled [private] |
Definition at line 106 of file i_recalljob_impl.h.
Referenced by CompleteJob(), and pm_RecallClientThread::Run().
i_RecallJob_i::log_CLASSID_m [private] |
1.5.6