i_RecallJob_i Class Reference
[Partition Manager]

#include <i_recalljob_impl.h>

Inheritance diagram for i_RecallJob_i:

Inheritance graph
[legend]
Collaboration diagram for i_RecallJob_i:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 58 of file i_recalljob_impl.h.


Public Member Functions

 i_RecallJob_i (i_PartitionManager_i &a_iPM, pm_JobMgr &a_jobMgr, i_Recall_t a_iRecall)
virtual void GetNewResources (i_Index_t a_resNum)
virtual void MediumOperationComplete (i_Index_t a_beaNum, i_CompletionStatus_e a_status)
virtual void CompleteJob (i_CompletionStatus_e a_status)
i_FileLocationDataList_tGetNextRecallSet ()
i_FSC_ptr GetFSC ()
virtual i_JobRequestList_tGetFiles ()

Public Attributes

ivd_FileSize_t m_fileSize

Protected Attributes

i_PartitionManager_im_iPM

Private Member Functions

virtual ~i_RecallJob_i ()
void Process ()
 Non-interface function.
void Execute ()
void PrepareResource ()
void CleanUp ()
void RecallRetry ()
void ReleaseResources ()

Private Attributes

i_MediumPos_v_t m_iCopiesPos
i_CopiesPos_v_t_var m_allCopiesPos
i_Recall_t m_iRecall
UInt32_t m_currentSplit
UInt32_t m_numOfSplits
bool m_beaGotSplit
pm_RecallClientThreadm_recallClientThread
cmn_ThreadCounter m_recallCounter
bool m_hsmRecallCalled
 log_CLASSID_m

Friends

class pm_RecallClientThread

Constructor & Destructor Documentation

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Member Function Documentation

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class pm_RecallClientThread [friend]

Definition at line 64 of file i_recalljob_impl.h.

Referenced by MediumOperationComplete().


Member Data Documentation

Definition at line 83 of file i_recalljob_impl.h.

Referenced by PrepareResource().

i_CopiesPos_v_t_var i_RecallJob_i::m_allCopiesPos [private]

Definition at line 97 of file i_recalljob_impl.h.

Referenced by Execute(), and PrepareResource().

Definition at line 100 of file i_recalljob_impl.h.

Referenced by PrepareResource().

Definition at line 101 of file i_recalljob_impl.h.

Referenced by GetNextRecallSet(), and MediumOperationComplete().

Definition at line 103 of file i_recalljob_impl.h.

Referenced by MediumOperationComplete().

Definition at line 106 of file i_recalljob_impl.h.

Referenced by CompleteJob(), and pm_RecallClientThread::Run().

Reimplemented from i_Job_i.

Definition at line 108 of file i_recalljob_impl.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:37:41 2012 for OPENARCHIVE by  doxygen 1.5.6