i_Job_i Class Reference
[PM and MIF jobs (infrastructure)]

#include <i_job_impl.h>

Inheritance diagram for i_Job_i:

Inheritance graph
[legend]
Collaboration diagram for i_Job_i:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 82 of file i_job_impl.h.


Public Member Functions

 i_Job_i (job_Manager &a_jobMgr, bool a_completeOnExecFinished=false)
virtual i_JobParamsGetJobParams ()
virtual void GetNewResources (i_Index_t a_resNum)=0
virtual void AllocateDiskBuffer (i_FileSize_t a_size)
virtual i_JobRequestList_tGetFiles ()=0
virtual i_JobID_t GetJobId ()
virtual i_JobStatus_e GetJobStatus ()
virtual i_FSC_ptr GetFSC ()=0
virtual void AssignResources (const i_ResourceList_t &a_resources)
virtual i_ResourceList_tGetAllResource ()
void SetResourceBusyStatus (i_Index_t a_resNum, i_ResourceBusy_e a_resStatus)
virtual void RegisterBEA (i_BackEndAgent_ptr a_bea, i_Index_t a_beaNum)
virtual void Remove ()
virtual void MediumOperationComplete (i_Index_t a_beaNum, i_CompletionStatus_e a_status)=0
virtual i_FileLocationDataList_tGetNextRecallSet ()
virtual void FRIReadSuccess (i_Index_t a_beaNum, i_Index_t a_volNum, i_BlkOffset_t a_lastDataPos)
CORBA::Boolean IsAborted ()
void Start ()
void ActivateJob ()
bool Started ()
void SetStatus (i_JobStatus_e)
i_JobStatus_e GetStatus ()
i_Job_ptr GetJob ()
ivd_JobType_e GetJobTypeEnum () const
virtual void AbortJob ()
void Finished ()
bool IsFinished ()
void StartBea (string a_hostName, UInt32_t a_copyNum)
void ActivateBea (UInt32_t a_beaNum)
void LoadUnload (UInt32_t a_copyNum)
void WaitBea (UInt32_t a_copyNum)
void SetResRequested (UInt32_t a_resNum)
void SetResAllocatedd (UInt32_t a_resNum)
void SetResAssigned (UInt32_t a_resNum)
void SetResReleased (UInt32_t a_resNum)
void SetResBeaStarted (UInt32_t a_resNum)
void SetResProcessed (UInt32_t a_resNum)
void SetResMedOpComplete (UInt32_t a_resNum)
bool IsResMedOpComplete (UInt32_t a_resNum)
void ResetResMedOpComplete (UInt32_t a_resNum)
void WaitBeasToFinish (UInt64_t a_waitTimeOut)
void SetBeaStatus (UInt32_t a_beaNum, ivd_BeaStatus_e a_status)
ivd_BeaStatus_e GetBeaStatus (UInt32_t a_beaNum)
void InitBeaStatus (UInt32_t a_numOfElements, ivd_BeaStatus_e a_status=bs_NOT_RUNNING)
void SetResLoaded (UInt32_t a_resNum)
void ClearResStatus (UInt32_t a_resNum)
bool NeedsProcess (UInt32_t a_resNum)
void SetResources (i_ResourceList_t a_resource)
void SetResources (i_Resource_t a_resource)
const i_ResourceList_t GetResources ()
void SetPriority (CORBA::Long a_modifier)
void SetDriveProperties (UInt32_t a_copyNum)
void ReleaseResource (UInt32_t a_beaNum)
string GetJobTypeText () const
void RequestDiskBuffer (UInt64_t a_minDBSize, UInt64_t a_maxDBSize, UInt64_t &a_allocDBSize, UInt64_t a_maxDBFileSytem, job_dbgDiskBuf_e a_deleteFiles=job_DISKBUFNONE)
void ReleaseDiskBuffer ()
void SetDiskBufferWritten ()
virtual void CompleteJob (i_CompletionStatus_e a_status)=0
virtual void Execute ()=0
virtual void InitJob ()
void CheckJobValid ()
void SetJobValid ()
void SetCompletionStatus (i_CompletionStatus_e a_completionStatus)
UInt64_t AllocateDiskBuffer (UInt64_t a_currentSplitSize, UInt64_t a_remainingSplitSize, UInt64_t a_maxDiskBuffSize, UInt32_t a_blockSize, UInt64_t a_maxDiskBuff)
UInt64_t RoundUp2BlockSize (UInt64_t a_size, UInt32_t a_blockSize)
cmn_Path GetDiskBufferFileName ()
bool operator== (UInt64_t a_jobID)

Public Attributes

vector< i_BackEndAgent_var > m_activeBeas
i_CompletionStatus_e m_status
cmn_Mutex m_resource_x

Protected Member Functions

virtual ~i_Job_i ()

Protected Attributes

bool m_jobValid
job_Managerm_jobMgr
i_JobParams m_iJobParams
i_ResourceManager_var m_rm
i_Job_var m_iJob
job_Executorm_executor
cmn_Mutex m_jobParams_x
cmn_Mutex m_activate_x
cmn_Condition m_activate_c
cmn_Mutex m_registerBea_x
cmn_Condition m_registerBea_c
cmn_Mutex m_abort_x
cmn_Mutex m_finished_x
bool m_finished
bool m_aborted
bool m_dbAllocated
bool m_dbExist
bool m_dbReleased
job_dbgDiskBuf_e m_dbDeleteFiles
UInt64_t m_dbSize
cmn_ThreadCounter m_threadCounter
bool m_completeOnExecFinished
bool m_execTheadStarted
cmn_Mutex m_beasStatus_x

Private Attributes

 log_CLASSID_m
i_ResourceList_t m_resources
vector< ivd_BeaStatus_em_beasStatus

Friends

class job_Executor

Constructor & Destructor Documentation

i_Job_i::i_Job_i ( job_Manager a_jobMgr,
bool  a_completeOnExecFinished = false 
)

Definition at line 42 of file i_job_impl.cpp.

References dbg_LOW, ipc_EXEC_m, job_Executor, job_NOT_STARTED, i_JobParams::jobID, ipc_Init::JobParamsInit(), log_DBG_m, log_FUNC_m, m_executor, m_iJobParams, m_jobParams_x, m_rm, i_JobParams::startTime, and i_JobParams::status.

00042                                                                     :
00043     m_status(i_UNKNOWN),
00044     m_jobValid(false),
00045     m_jobMgr(a_jobMgr),
00046     m_rm(m_jobMgr.GetRM()),
00047     m_executor(NULL),
00048     m_activate_c(&m_activate_x),
00049     m_registerBea_c(&m_registerBea_x),
00050     m_finished(false),
00051     m_aborted(false),
00052     m_dbAllocated(false),
00053     m_dbExist(false),
00054     m_dbReleased(false),
00055     m_completeOnExecFinished(a_completeOnExecFinished),
00056     m_execTheadStarted(false){
00057 
00058     log_FUNC_m(i_Job_i);
00059     cmn_MutexLock l(m_jobParams_x);
00060     ipc_Init::JobParamsInit(m_iJobParams);
00061     m_iJobParams.status = job_NOT_STARTED;
00062 
00063     ipc_EXEC_m (
00064         m_iJobParams.jobID  = m_rm->GetNewJobID();
00065     )
00066     cmn_Time nowTime;
00067 
00068     m_iJobParams.startTime  = nowTime.GetTime_t();
00069 
00070     log_DBG_m(dbg_LOW, "Started new job: " << m_iJobParams.jobID);
00071     m_executor = new job_Executor(*this);
00072 
00073 }

Here is the call graph for this function:

i_Job_i::~i_Job_i (  )  [protected, virtual]

Definition at line 75 of file i_job_impl.cpp.

References bs_NOT_RUNNING, dbg_LOW, dbg_NORM, GetResources(), ipc_EXEC_m, ipc_ObjectExists(), i_JobParams::jobID, log_DBG_m, log_FUNC_m, log_WriteEvent(), log_WRN_m, m_aborted, m_activeBeas, m_beasStatus, m_beasStatus_x, m_execTheadStarted, m_executor, m_iJobParams, m_rm, m_threadCounter, NULL, ReleaseDiskBuffer(), SetBeaStatus(), and cmn_ThreadCounter::WaitAllEnd().

00075                   {
00076     log_FUNC_m(~i_Job_i);
00077 
00078     // Remove all Bea's which are still active
00079     for (UInt32_t i = 0; i < m_activeBeas.size(); i++) {
00080 
00081         try {
00082             cmn_MutexLock l(m_beasStatus_x);
00083             /* Some jobs don't use WaitBeasToFinish method,
00084             therefore m_beasStatus is empty.*/
00085             if (!m_beasStatus.empty()) {
00086                 SetBeaStatus(i, bs_NOT_RUNNING);
00087             }
00088             if (ipc_ObjectExists(m_activeBeas[i])) {
00089                 m_activeBeas[i]->Remove();
00090             }
00091             else {
00092                 log_DBG_m(dbg_NORM, "Bea not running. Skip m_activeBeas["
00093                                     << i << "]->Remove()");
00094             }
00095 
00096         } catch (...) {
00097             //try to do as many cleanup as nesseccery
00098             log_DBG_m(dbg_LOW,"Error when trying to remove active Bea's " << endl);
00099         }
00100     }
00101 
00102     //release any unreleased resources
00103     try {
00104         ipc_EXEC_m (
00105 
00106             i_ResourceList_t resources = GetResources();
00107             //release just rows from beas that have not been release till then
00108             for (UInt32_t i = 0; i < resources.length(); i++){
00109                 if (resources[i].resAssigned && ! resources[i].resReleased){
00110 
00111                     i_ResourceList_t relResource;
00112                     relResource.length(1);
00113                     relResource[0] = resources[i];
00114                     m_rm->ReleaseResource(m_iJobParams, relResource);
00115                 }
00116             }
00117         );
00118     }
00119     catch (ivd_Exception &e){
00120         log_WRN_m("Releasing resources in Job Destructor " << endl << e);
00121     }
00122 
00123     //delete any unreleased diskbuffer
00124     ReleaseDiskBuffer();
00125 
00126     if (m_execTheadStarted){
00127         log_DBG_m(dbg_LOW,"Waiting for Exec thread to finish");
00128         m_threadCounter.WaitAllEnd();
00129         log_DBG_m(dbg_LOW,"Exec thread finished");
00130     } else {
00131         if (m_executor != NULL)
00132             delete m_executor;
00133     }
00134 
00135     if (m_aborted) {
00136         ostringstream msg;
00137         msg << "JOB "  << m_iJobParams.jobID << "  ABORTED.";
00138         log_DBG_m(dbg_LOW, msg.str());
00139         log_WriteEvent(msg.str(), "JOB ", m_iJobParams.jobID);
00140     }
00141 }

Here is the call graph for this function:


Member Function Documentation

i_JobParams * i_Job_i::GetJobParams (  )  [virtual]

Definition at line 145 of file i_job_impl.cpp.

References dbg_NORM, ivd_BaseException::GetError(), ie_JOBNOTFOUND, ipc_CATCH_IVD_THROW_CORBA_m, ipc_EXEC_m, i_JobParams::jobID, log_DBG_m, log_FUNC_m, m_iJobParams, m_resource_x, m_resources, and m_rm.

00145                                    {
00146     log_FUNC_m(GetJobParams);
00147 
00148     try {
00149         i_JobParams *params = new i_JobParams;
00150         *params = m_iJobParams;
00151         //log_DBG_m(dbg_DETAIL,"GetJobParams will return:" << endl <<
00152         //                  ipc_Log::LogJobParams(*params) );
00153 
00154 
00155         // refresh with newest params if some resources are waiting
00156 
00157 
00158         i_ResourceList_t_var resources;
00159         try {
00160             ipc_EXEC_m(
00161                 resources = m_rm->GetJobResources(m_iJobParams.jobID);
00162             );
00163             for (UInt32_t i(0); i < resources->length(); i++) {
00164                 {
00165                     cmn_MutexLock l(m_resource_x);
00166                     m_resources[resources[i].resNum] = resources[i];
00167                 }
00168             }
00169         } catch (ivd_Exception &e) {
00170             if (e.GetError() == ie_JOBNOTFOUND) {
00171                 //expected
00172                 log_DBG_m(dbg_NORM, "No such job in rm queue.");
00173             } else {
00174                 log_DBG_m(dbg_NORM, "Error: " << e.GetError() );
00175                 throw e;
00176             }
00177         }
00178 
00179         return params;
00180     } ipc_CATCH_IVD_THROW_CORBA_m;
00181 }

Here is the call graph for this function:

virtual void i_Job_i::GetNewResources ( i_Index_t  a_resNum  )  [pure virtual]

void i_Job_i::AllocateDiskBuffer ( i_FileSize_t  a_size  )  [virtual]

Reimplemented in i_AdminJob_i, and i_BackupJob_i.

Definition at line 1059 of file i_job_impl.cpp.

References ie_NYI, ivd_Error, and log_FUNC_m.

Referenced by AllocateDiskBuffer(), i_ReorgJob_i::Execute(), i_RedundantCopyJob_i::Execute(), and i_EfficientRecallJob_i::Execute().

01059                                                    {
01060     log_FUNC_m(AllocateDiskBuffer);
01061     throw ivd_Error(ie_NYI, "Method not implemented.");
01062 
01063 }

Here is the caller graph for this function:

virtual i_JobRequestList_t* i_Job_i::GetFiles (  )  [pure virtual]

i_JobID_t i_Job_i::GetJobId (  )  [virtual]

virtual i_JobStatus_e i_Job_i::GetJobStatus (  )  [inline, virtual]

Definition at line 100 of file i_job_impl.h.

References m_iJobParams, and i_JobParams::status.

00100 { return m_iJobParams.status; };

virtual i_FSC_ptr i_Job_i::GetFSC (  )  [pure virtual]

void i_Job_i::AssignResources ( const i_ResourceList_t a_resources  )  [virtual]

Reimplemented in i_MediumDupl_i, i_MigrationJob_i, and i_ThreadJob_i.

Definition at line 224 of file i_job_impl.cpp.

References cmn_Condition::Broadcast(), cmn_Num2Str(), dbg_LOW, ie_JOB_REMOVED, ie_NYI, ipc_CATCH_IVD_THROW_CORBA_m, IsAborted(), ivd_Error, i_JobParams::jobID, log_DBG_m, log_FUNC_m, ipc_Log::LogResources(), m_activate_c, m_activate_x, m_iJobParams, m_resource_x, and m_resources.

Referenced by i_MediumDupl_i::AssignResources().

00224                                                                 {
00225     log_FUNC_m(AssignResources);
00226 
00227     try {
00228         log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID <<
00229                           "] " << "Job got Resources:" << endl <<
00230             ipc_Log::LogResources(a_resources) );
00231 
00232         if (a_resources.length() != 1){
00233             throw ivd_InternalError(ie_NYI, "Multiple assignment not possible");
00234         }
00235 
00236         if (IsAborted()){
00237             cmn_MutexLock l(m_activate_x);
00238             m_activate_c.Broadcast();
00239             throw ivd_Error(ie_JOB_REMOVED,
00240                             cmn_Num2Str(m_iJobParams.jobID).c_str());
00241         };
00242 
00243         {
00244             cmn_MutexLock l(m_resource_x);
00245             m_resources[a_resources[0].resNum] = a_resources[0];
00246             m_resources[a_resources[0].resNum].resAssigned = true;
00247         }
00248 
00249 
00250         cmn_MutexLock l(m_activate_x);
00251         m_activate_c.Broadcast();
00252 
00253     } ipc_CATCH_IVD_THROW_CORBA_m;
00254 }

Here is the call graph for this function:

Here is the caller graph for this function:

i_ResourceList_t * i_Job_i::GetAllResource (  )  [virtual]

Definition at line 184 of file i_job_impl.cpp.

References ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, and m_resources.

00184                                           {
00185     log_FUNC_m(GetAllResource);
00186 
00187     try {
00188         //log_FUNC_m(GetAllResource);
00189         i_ResourceList_t *resources = new i_ResourceList_t;
00190         *resources = m_resources;
00191         /*log_DBG_m(dbg_NORM,"GetAllResources will return:" << endl <<
00192                         ipc_Log::LogResources(*resources) );*/
00193         return resources;
00194     } ipc_CATCH_IVD_THROW_CORBA_m;
00195 }

void i_Job_i::SetResourceBusyStatus ( i_Index_t  a_resNum,
i_ResourceBusy_e  a_resStatus 
)

Reimplemented in i_AdminJob_i, i_MediumDupl_i, i_RedundantCopyJob_i, and i_ReorgJob_i.

Definition at line 197 of file i_job_impl.cpp.

References ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, m_resource_x, and m_resources.

00198                                                                  {
00199     log_FUNC_m(SetResourceBusyStatus);
00200 
00201     try {
00202         cmn_MutexLock l(m_resource_x);
00203         m_resources[a_resNum].resourceBusyStatus = a_resStatus;
00204     } ipc_CATCH_IVD_THROW_CORBA_m;
00205 }

void i_Job_i::RegisterBEA ( i_BackEndAgent_ptr  a_bea,
i_Index_t  a_beaNum 
) [virtual]

Definition at line 279 of file i_job_impl.cpp.

References cmn_Condition::Broadcast(), dbg_DETAIL, ie_FATAL_ERROR, ipc_CATCH_IVD_THROW_CORBA_m, log_DBG_m, log_FUNC_m, m_activeBeas, m_registerBea_c, and m_registerBea_x.

00279                                                                       {
00280     log_FUNC_m(RegisterBEA);
00281 
00282     try {
00283 
00284         log_DBG_m(dbg_DETAIL,"Bea (" << a_beaNum << ") registering to Job");
00285 
00286         if (a_beaNum < static_cast<i_Index_t>(m_activeBeas.size()) ) {
00287             cmn_MutexLock l(m_registerBea_x);
00288             m_activeBeas[a_beaNum] = i_BackEndAgent::_duplicate(a_bea);
00289             m_registerBea_c.Broadcast();
00290         } else {
00291             throw ivd_InternalError(
00292                 ie_FATAL_ERROR, "Unexpected BEA wanted to be registered.");
00293         }
00294 
00295     } ipc_CATCH_IVD_THROW_CORBA_m;
00296 }

Here is the call graph for this function:

void i_Job_i::Remove (  )  [virtual]

virtual void i_Job_i::MediumOperationComplete ( i_Index_t  a_beaNum,
i_CompletionStatus_e  a_status 
) [pure virtual]

i_FileLocationDataList_t * i_Job_i::GetNextRecallSet (  )  [virtual]

Reimplemented in i_RecallJob_i, i_EfficientRecallJob_i, i_RedundantCopyJob_i, and i_ReorgJob_i.

Definition at line 298 of file i_job_impl.cpp.

References ie_FATAL_ERROR, log_FUNC_m, and NULL.

00298                                                    {
00299     log_FUNC_m(GetNextRecallSet);
00300     throw ivd_InternalError(ie_FATAL_ERROR, "method not implemented");
00301     return NULL;
00302 }

void i_Job_i::FRIReadSuccess ( i_Index_t  a_beaNum,
i_Index_t  a_volNum,
i_BlkOffset_t  a_lastDataPos 
) [virtual]

Reimplemented in i_MaintFriJob_i.

Definition at line 304 of file i_job_impl.cpp.

References ie_NYI, ivd_Error, and log_FUNC_m.

00306                                                             {
00307     log_FUNC_m(FRIReadSuccess);
00308     throw ivd_Error(ie_NYI, "Method not implemented.");
00309 }

CORBA::Boolean i_Job_i::IsAborted (  ) 

Definition at line 392 of file i_job_impl.cpp.

References dbg_DETAIL, i_JobParams::jobID, log_DBG_m, log_FUNC_m, m_abort_x, m_aborted, and m_iJobParams.

Referenced by ActivateBea(), AssignResources(), i_AdminJob_i::CloseVolume(), i_MediumCheckJob_i::CompleteJob(), i_MaintFriJob_i::CompleteJob(), i_EfficientRecallJob_i::CompleteJob(), i_BackupJob_i::CompleteJob(), i_AdminJob_i::DetectVolumeHeader(), i_ReorgJob_i::Execute(), i_RedundantCopyJob_i::Execute(), i_RecallJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MediumCheckJob_i::Execute(), i_MaintFriJob_i::Execute(), i_EfficientRecallJob_i::Execute(), i_BackupJob_i::Execute(), i_AdminJob_i::Execute(), i_AdminJob_i::Format(), i_MaintFriJob_i::FRIReadSuccess(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_AdminJob_i::Initialize(), i_ReorgJob_i::InitializeVolumes(), LoadUnload(), i_ReorgJob_i::MediumOperationComplete(), i_RedundantCopyJob_i::MediumOperationComplete(), i_RecallJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_MaintFriJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_AdminJob_i::OperateLA(), i_RecallJob_i::Process(), i_MigrationJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RedundantCopyJob_i::ReadSourceData(), i_ReorgJob_i::ReadSourceVolume(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), i_MaintFriJob_i::RecreateFRI(), i_AdminJob_i::RecreateFRIandMIC(), ReleaseDiskBuffer(), RequestDiskBuffer(), i_MaintFriJob_i::RequestResources(), job_Executor::Run(), i_AdminJob_i::StartBEA(), WaitBea(), i_AdminJob_i::~i_AdminJob_i(), i_MigrationJob_i::~i_MigrationJob_i(), i_RecoveryJob_i::~i_RecoveryJob_i(), and job_Executor::~job_Executor().

00392                                 {
00393     log_FUNC_m(IsAborted);
00394 
00395     cmn_MutexLock l(m_abort_x);
00396 
00397     if (m_aborted) {
00398         log_DBG_m(dbg_DETAIL,  m_iJobParams.jobID  << " aborted!");
00399     }
00400 
00401     return m_aborted;
00402 }

void i_Job_i::Start (  ) 

Definition at line 314 of file i_job_impl.cpp.

References cmn_Num2Str(), ie_IMPOSSIBLE, job_STARTED, i_JobParams::jobID, log_FUNC_m, m_execTheadStarted, m_executor, m_iJobParams, m_jobParams_x, cmn_Thread::Start(), and i_JobParams::status.

Referenced by job_Manager::AddJobToList().

00314                     {
00315     log_FUNC_m(Start);
00316 
00317     cmn_MutexLock l(m_jobParams_x);
00318 
00319     if (m_iJobParams.status == job_STARTED) {
00320         throw ivd_InternalError(ie_IMPOSSIBLE,
00321             "Job was already started: " + cmn_Num2Str(m_iJobParams.jobID) );
00322     };
00323 
00324     m_iJobParams.status = job_STARTED;
00325     //m_executor->StartUndetached();
00326     m_executor->Start();
00327     m_execTheadStarted = true;
00328 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::ActivateJob (  ) 

Definition at line 331 of file i_job_impl.cpp.

References ipc_EXEC_m, log_FUNC_m, and m_iJob.

Referenced by job_Manager::AddJobToList().

00331                           {
00332     log_FUNC_m(ActivateJob);
00333     // Activate servant and store its reference
00334     ipc_EXEC_m(
00335         m_iJob = this->_this();
00336         this->_remove_ref();
00337     );
00338 }

Here is the caller graph for this function:

bool i_Job_i::Started (  ) 

Definition at line 340 of file i_job_impl.cpp.

References GetStatus(), and job_NOT_STARTED.

00340                       {
00341     return ( GetStatus() != job_NOT_STARTED);
00342 }

Here is the call graph for this function:

void i_Job_i::SetStatus ( i_JobStatus_e  a_status  ) 

i_JobStatus_e i_Job_i::GetStatus (  ) 

Definition at line 348 of file i_job_impl.cpp.

References m_iJobParams, m_jobParams_x, and i_JobParams::status.

Referenced by Started().

00348                                 {
00349     cmn_MutexLock l(m_jobParams_x);
00350     return m_iJobParams.status;
00351 }

Here is the caller graph for this function:

i_Job_ptr i_Job_i::GetJob (  ) 

Definition at line 353 of file i_job_impl.cpp.

References ipc_EXEC_m, log_FUNC_m, and m_iJob.

Referenced by mif_JobManager::CreateBackupJob(), i_PartitionManager_i::GetJob(), and i_ManagementInterface_i::ListJob().

00353                           {
00354     log_FUNC_m(GetJob);
00355 
00356     ipc_EXEC_m(
00357         i_Job_ptr tmpJob = i_Job::_duplicate(m_iJob);
00358         return tmpJob;
00359     );
00360 }

Here is the caller graph for this function:

ivd_JobType_e i_Job_i::GetJobTypeEnum (  )  const [inline]

Definition at line 136 of file i_job_impl.h.

References i_JobParams::jobType, and m_iJobParams.

Referenced by job_Manager::AddJobToList(), and GetJobTypeText().

00136                                                    { 
00137                                 return static_cast<ivd_JobType_e>(m_iJobParams.jobType); 
00138                             }

Here is the caller graph for this function:

void i_Job_i::AbortJob (  )  [virtual]

Reimplemented in i_FSCCheckJob_i, i_RecreatedIVDFSJob_i, and i_ReorgScanJob_i.

Definition at line 362 of file i_job_impl.cpp.

References cmn_Condition::Broadcast(), dbg_NORM, ipc_EXEC_m, i_JobParams::jobID, log_DBG_m, log_FUNC_m, log_WRN_m, m_abort_x, m_aborted, m_activate_c, m_activate_x, m_iJobParams, and m_rm.

Referenced by i_ReorgScanJob_i::AbortJob(), i_RecreatedIVDFSJob_i::AbortJob(), and i_ManagementInterface_i::AbortJob().

00362                       {
00363     log_FUNC_m(AbortJob);
00364     {
00365         cmn_MutexLock l(m_abort_x);
00366         if (m_aborted) {
00367             log_WRN_m("Job " << m_iJobParams.jobID << " already aborted.");
00368             return;
00369         }
00370         m_aborted = true;
00371     }
00372 
00373     try {
00374         ipc_EXEC_m(
00375             if (!CORBA::is_nil(m_rm)){
00376                 log_DBG_m(dbg_NORM, "Cancelling active GetResource for Job:" << m_iJobParams.jobID);
00377                 m_rm->CancelGetResource(m_iJobParams.jobID);
00378             }
00379         );
00380     }
00381     catch (...) {
00382         //ignore any exceptions
00383     }
00384 
00385     {
00386         cmn_MutexLock l(m_activate_x);
00387         m_activate_c.Broadcast();
00388     }
00389 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::Finished (  ) 

Definition at line 404 of file i_job_impl.cpp.

References IsFinished(), log_FUNC_m, m_finished, and m_finished_x.

Referenced by i_AdminJob_i::Execute(), and i_MediumDupl_i::MediumOperationComplete().

00404                       {
00405     log_FUNC_m(IsFinished);
00406     cmn_MutexLock l(m_finished_x);
00407     m_finished = true;
00408 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool i_Job_i::IsFinished (  ) 

void i_Job_i::StartBea ( string  a_hostName,
UInt32_t  a_copyNum 
)

Definition at line 416 of file i_job_impl.cpp.

References cmn_Num2Str(), i_IVDBEA, ipc_EXEC_m, log_FUNC_m, m_resource_x, m_resources, ipc_Corba::ResolveSvc(), and ipc_Corba::Singleton().

Referenced by ActivateBea(), and i_AdminJob_i::StartBEA().

00416                                                            {
00417     log_FUNC_m(StartBea);
00418 
00419     ipc_EXEC_m (
00420 
00421         // We use _ptr here so that it does not get released by _var destructor
00422         // at the end of this block.
00423         // The reference is passed to BEA.
00424         CORBA::Object_ptr ref = i_Job::_duplicate(this->_this());
00425         CORBA::String_var ior(ipc_Corba::Singleton().m_orb->object_to_string(ref));
00426 
00427         //set arguments for calling BEA
00428 
00429         i_StringList_t args;
00430         args.length(2);
00431         args[0] = ior;
00432 
00433         i_Service_var iSvc;
00434         CORBA::Object_var objSVC = ipc_Corba::ResolveSvc(a_hostName);
00435 
00436         iSvc = i_Service::_narrow(objSVC);
00437 
00438         string copyNumStr = cmn_Num2Str( a_copyNum );
00439         args[1] = CORBA::string_dup( copyNumStr.c_str() );
00440 
00441         iSvc->Execute(i_IVDBEA, args);
00442 
00443         cmn_MutexLock l(m_resource_x);
00444         m_resources[a_copyNum].resBeaStarted = true;
00445     );
00446 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::ActivateBea ( UInt32_t  a_beaNum  ) 

Definition at line 448 of file i_job_impl.cpp.

References evt_ERROR, ivd_BaseException::GetFriendly(), GetJobTypeText(), GetResources(), ie_JOB_FAILED, ipc_EXEC_m, IsAborted(), ivd_Error, i_JobParams::jobID, log_ERR_m, log_FUNC_m, log_WriteEvent(), m_activeBeas, m_iJobParams, SetDriveProperties(), SetResBeaStarted(), StartBea(), and WaitBea().

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_ReorgJob_i::InitializeSingleVolume(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_RecallJob_i::Process(), i_MigrationJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RedundantCopyJob_i::ReadSourceData(), and i_ReorgJob_i::ReadSourceVolume().

00448                                           {
00449     log_FUNC_m(ActivateBea);
00450 
00451     if (IsAborted()){
00452         return;
00453     }
00454 
00455     SetDriveProperties(a_beaNum);
00456 
00457     if (CORBA::is_nil(m_activeBeas[a_beaNum])) { //is bea already active?
00458         try {
00459             StartBea( string(GetResources()[a_beaNum].driveHost),
00460                       a_beaNum);
00461 
00462             WaitBea(a_beaNum);
00463         }
00464         catch (ivd_Exception& e) {
00465             ostringstream os;
00466             os << "Error while starting BEA. (" << e.GetFriendly() << ").";
00467             log_WriteEvent( evt_ERROR, os.str(),
00468                             GetJobTypeText(), m_iJobParams.jobID);
00469 
00470             log_ERR_m(  "[" << m_iJobParams.jobID << "] " <<
00471                 "Caught exception while starting BEA " << e);
00472 
00473             throw ivd_Error(ie_JOB_FAILED, os.str());
00474         }
00475     }
00476     else {
00477         SetResBeaStarted(a_beaNum);
00478     }
00479 
00480     if (IsAborted()){
00481         return;
00482     }
00483 
00484     try {
00485         ipc_EXEC_m (
00486             m_activeBeas[a_beaNum]->UseResources((GetResources())[a_beaNum]);
00487         );
00488     }
00489     catch (ivd_Exception& e) {
00490         ostringstream os;
00491         os << "BEA error on invoking UseResources (" << e.GetFriendly() << ").";
00492         log_WriteEvent( evt_ERROR, os.str(),
00493                         GetJobTypeText(), m_iJobParams.jobID);
00494 
00495         log_ERR_m(  "[" << m_iJobParams.jobID << "] " <<
00496                     "Caught exception while invoking UseResources " <<
00497                     "on active BEA: " << e);
00498 
00499         throw;
00500 //        throw ivd_Error(ie_JOB_FAILED, os.str() ); // error code is not represent to callee.
00501     }
00502 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::LoadUnload ( UInt32_t  a_copyNum  ) 

Definition at line 504 of file i_job_impl.cpp.

References rm_Resource_t::barcode, rm_Resource_t::Convert2Corba(), dbg_DETAIL, dbg_NORM, rm_Resource_t::driveIndex, evt_ERROR, ivd_BaseException::GetError(), ivd_BaseException::GetFriendly(), GetJobTypeText(), GetResources(), ie_JOB_FAILED, ie_SCSI_HWERR, ipc_EXEC_m, IsAborted(), ivd_Error, i_JobParams::jobID, rm_Resource_t::libraryHost, rm_Resource_t::libraryName, rm_Resource_t::load, rm_Resource_t::loadSlotAddr, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), ipc_Log::LogResources(), m_iJobParams, ipc_Corba::ResolveLA(), SetResLoaded(), rm_Resource_t::unloadBarcode, and rm_Resource_t::unloadSlotAddr.

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_ReorgJob_i::InitializeVolumes(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_AdminJob_i::OperateLA(), i_BackupJob_i::PrepareResource(), i_RecallJob_i::Process(), i_MigrationJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RedundantCopyJob_i::ReadSourceData(), and i_ReorgJob_i::ReadSourceVolume().

00504                                           {
00505     log_FUNC_m(LoadUnload);
00506 
00507     rm_Resource_t resource;
00508     resource = (GetResources())[a_copyNum];
00509 
00510     if (resource.load) { //some tape moves have to be done
00511         i_LibraryAgent_var iLA;
00512 
00513         if (IsAborted()) return;
00514         try {
00515             ipc_EXEC_m (
00516                 CORBA::Object_var objLA = ipc_Corba::ResolveLA(
00517                     resource.libraryHost,
00518                     resource.libraryName);
00519 
00520                 iLA = i_LibraryAgent::_narrow(objLA)
00521              );
00522         } catch (ivd_Error &e) {
00523 
00524             log_ERR_m("[" << m_iJobParams.jobID << "] " <<
00525                 "Caught exception when resolving LA" << e);
00526 
00527             ostringstream os;
00528             os << "Failed, LA Resolve error (" << e.GetFriendly() << ").";
00529             log_WriteEvent(evt_ERROR, os.str(),
00530                 GetJobTypeText(), m_iJobParams.jobID);
00531 
00532             throw ivd_Error(ie_JOB_FAILED, os.str());
00533         }
00534 
00535         if (IsAborted()) return;
00536 
00537         if (resource.load) {  //unload has to be done
00538             if (!resource.unloadBarcode.empty()) { //call Library Agent for unload
00539                 log_DBG_m(dbg_DETAIL,"LA unload");
00540                 try {
00541 
00542                     ipc_EXEC_m (iLA->Unload(
00543                                         resource.driveIndex.c_str(),
00544                                         resource.unloadSlotAddr.c_str(),
00545                                         resource.unloadBarcode.c_str(),
00546                                         m_iJobParams.jobID
00547                                         );
00548                     );
00549                 } catch (ivd_Error &e) {
00550                     i_Resource_t resourceToBePrinted = resource.Convert2Corba();
00551 
00552                     log_ERR_m(ipc_Log::LogResources(resourceToBePrinted)  << endl <<
00553                         "[" << m_iJobParams.jobID << "] " <<
00554                         "Caught exception on LA unload " << e);
00555                     ostringstream os;
00556                     os << "Failed, LA unload error (" << e.GetFriendly() << ").";
00557                     log_WriteEvent(evt_ERROR, os.str(),
00558                         GetJobTypeText(), m_iJobParams.jobID);
00559 
00560                     if (e.GetError() == ie_SCSI_HWERR) {
00561                         throw;
00562                     }
00563                     else {
00564                         throw ivd_Error(ie_JOB_FAILED, os.str());
00565                     }
00566                 }
00567             }
00568         }
00569 
00570         if (IsAborted()) return;
00571 
00572         if (!resource.barcode.empty()) { //call Library Agent load
00573             log_DBG_m(dbg_DETAIL,"LA Load");
00574             try {
00575                 ipc_EXEC_m (iLA->Load(
00576                                     resource.loadSlotAddr.c_str(),
00577                                     resource.driveIndex.c_str(),
00578                                     resource.barcode.c_str(),
00579                                     m_iJobParams.jobID
00580                                     );
00581                 );
00582             } catch (ivd_Error &e) {
00583                 log_ERR_m(  "[" << m_iJobParams.jobID << "] " <<
00584                     "Caught exception on LA load " << e);
00585                 ostringstream os;
00586                 os << "Failed, LA load error (" << e.GetFriendly() << ").";
00587                 log_WriteEvent(evt_ERROR, os.str(),
00588                     GetJobTypeText(), m_iJobParams.jobID);
00589 
00590                 throw ivd_Error(ie_JOB_FAILED, os.str());
00591             }
00592 
00593         }
00594         SetResLoaded(a_copyNum);
00595     }
00596     else {
00597         log_DBG_m(dbg_NORM,"[" << m_iJobParams.jobID <<
00598             "] " << "Medium is already in drive, "
00599             "no need for load/unload");
00600     }
00601 
00602 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::WaitBea ( UInt32_t  a_copyNum  ) 

Definition at line 604 of file i_job_impl.cpp.

References dbg_DETAIL, dbg_NORM, cmn_Thread::GetTime(), ie_JOB_FAILED, ie_TIMEOUT, IsAborted(), ivd_Error, ivd_USleep, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, m_activeBeas, m_iJobParams, m_registerBea_c, m_registerBea_x, MAX_WAIT_FOR_BEA_TO_START, and cmn_Condition::TimedWait().

Referenced by ActivateBea(), and i_AdminJob_i::StartBEA().

00604                                        {
00605     log_FUNC_m(WaitBea);
00606 
00607     cmn_MutexLock l(m_registerBea_x);
00608 
00609     // Check first if BEA registered in mean-time.
00610     if ( CORBA::is_nil(m_activeBeas[a_copyNum]) ) {
00611         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << "] " <<
00612                             "Waiting for BEA to start beaNum " <<
00613                             a_copyNum);
00614         m_registerBea_c.TimedWait(cmn_Thread::GetTime(MAX_WAIT_FOR_BEA_TO_START));
00615 
00616         if (IsAborted()){
00617             return;
00618         }
00619 
00620         if ( CORBA::is_nil(m_activeBeas[a_copyNum]) ) {
00621             throw ivd_Error(ie_JOB_FAILED, "BEA error occured, job failed");
00622         }
00623     }
00624 
00625     UInt32_t sleep(1);
00626     while(true) {
00627         try {
00628             if(!m_activeBeas[a_copyNum]->_non_existent()) {
00629                 log_DBG_m(dbg_DETAIL, "BEA ready");
00630                 break;
00631             }
00632             if (sleep > 1000) {
00633                 // Timeout elapsed. Will not continue.
00634                 log_ERR_m("Timeout accessing BEA, most probably not available.");
00635                 throw ivd_Error(ie_TIMEOUT, "BEA not responding, job failed");
00636             }
00637         }
00638         catch (ivd_Error) {
00639             throw;
00640         }
00641         catch (...) { // corba exceptions
00642             // empty
00643         }
00644         ivd_USleep(sleep);
00645         sleep *= 10;
00646     }
00647 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::SetResRequested ( UInt32_t  a_resNum  ) 

void i_Job_i::SetResAllocatedd ( UInt32_t  a_resNum  ) 

Definition at line 669 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

00669                                                {
00670     log_FUNC_A_m(SetResAllocated, "[" << m_iJobParams.jobID << "] a_resNum:"
00671         << a_resNum);
00672     cmn_MutexLock l(m_resource_x);
00673     if ( a_resNum  >= m_resources.length() ) {
00674         throw ivd_InternalError(ie_FATAL_ERROR,
00675             "Accessing list member that does not exist");
00676     }
00677     m_resources[a_resNum].resAllocated = true;
00678 }

void i_Job_i::SetResAssigned ( UInt32_t  a_resNum  ) 

Definition at line 680 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

00680                                              {
00681     log_FUNC_A_m(SetResAssigned, "[" << m_iJobParams.jobID << "] a_resNum:"
00682         << a_resNum);
00683     cmn_MutexLock l(m_resource_x);
00684     if ( a_resNum  >= m_resources.length() ) {
00685         throw ivd_InternalError(ie_FATAL_ERROR,
00686             "Accessing list member that does not exist");
00687     }
00688     m_resources[a_resNum].resAssigned = true;
00689 }

void i_Job_i::SetResReleased ( UInt32_t  a_resNum  ) 

Definition at line 691 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

Referenced by ReleaseResource(), i_RecallJob_i::ReleaseResources(), i_MaintFriJob_i::ReleaseResources(), and i_EfficientRecallJob_i::ReleaseResources().

00691                                              {
00692     log_FUNC_A_m(SetResReleased, "[" << m_iJobParams.jobID << "] a_resNum:"
00693         << a_resNum);
00694     cmn_MutexLock l(m_resource_x);
00695     if ( a_resNum  >= m_resources.length() ) {
00696         throw ivd_InternalError(ie_FATAL_ERROR,
00697             "Accessing list member that does not exist");
00698     }
00699     m_resources[a_resNum].resReleased = true;
00700 }

Here is the caller graph for this function:

void i_Job_i::SetResBeaStarted ( UInt32_t  a_resNum  ) 

Definition at line 702 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

Referenced by ActivateBea(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_ReorgJob_i::InitializeSingleVolume(), and i_RedundantCopyJob_i::MigrateFiles().

00702                                                {
00703     log_FUNC_A_m(SetResBeaStarted, "[" << m_iJobParams.jobID << "] a_resNum:"
00704         << a_resNum);
00705     cmn_MutexLock l(m_resource_x);
00706     if ( a_resNum  >= m_resources.length() ) {
00707         throw ivd_InternalError(ie_FATAL_ERROR,
00708             "Accessing list member that does not exist");
00709     }
00710     m_resources[a_resNum].resBeaStarted = true;
00711 }

Here is the caller graph for this function:

void i_Job_i::SetResProcessed ( UInt32_t  a_resNum  ) 

void i_Job_i::SetResMedOpComplete ( UInt32_t  a_resNum  ) 

bool i_Job_i::IsResMedOpComplete ( UInt32_t  a_resNum  ) 

Definition at line 746 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

00746                                                   {
00747     log_FUNC_A_m(IsResMedOpComplete, "[" << m_iJobParams.jobID << "] a_resNum:"
00748             << a_resNum);
00749 
00750     cmn_MutexLock l(m_resource_x);
00751     if ( a_resNum  >= m_resources.length() ) {
00752         throw ivd_InternalError(ie_FATAL_ERROR,
00753             "Accessing list member that does not exist");
00754     }
00755     return m_resources[a_resNum].resMedOpComplete;
00756 }

void i_Job_i::ResetResMedOpComplete ( UInt32_t  a_resNum  ) 

Definition at line 735 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

Referenced by i_MaintFriJob_i::MediumOperationComplete().

00735                                                     {
00736     log_FUNC_A_m(ResetResMedOpComplete, "[" << m_iJobParams.jobID << "] a_resNum:"
00737         << a_resNum);
00738     cmn_MutexLock l(m_resource_x);
00739     if ( a_resNum  >= m_resources.length() ) {
00740         throw ivd_InternalError(ie_FATAL_ERROR,
00741             "Accessing list member that does not exist");
00742     }
00743     m_resources[a_resNum].resMedOpComplete = false;
00744 }

Here is the caller graph for this function:

void i_Job_i::WaitBeasToFinish ( UInt64_t  a_waitTimeOut  ) 

Definition at line 1150 of file i_job_impl.cpp.

References crashBeaInfo_t::beaNum, bs_PROCESSING, CleanupAfterBeaCrash(), cmn_Thread::Create(), dbg_DETAIL, dbg_NORM, GetBeaStatus(), GetJobId(), cmn_Thread::GetTime(), ipc_ObjectExists(), ivd_BeaStatusToText(), crashBeaInfo_t::jobPtr, log_DBG_m, log_FUNC_m, m_activate_c, m_activeBeas, m_beasStatus, cmn_Thread::PRIO_NORM, cmn_Condition::TimedWait(), and TIMEXPIRE_d.

Referenced by i_RecallJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MaintFriJob_i::Execute(), i_EfficientRecallJob_i::Execute(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_ReorgJob_i::RecallFiles(), and i_RedundantCopyJob_i::RecallFiles().

01150                                                      {
01151     log_FUNC_m(WaitBeasToFinish);
01152 
01153     try {
01154 
01155     vector<UInt32_t> crashedBea;
01156     while (1) {
01157         vector<ivd_BeaStatus_e> activeBeasStatus(m_beasStatus);
01158         log_DBG_m(dbg_DETAIL,"Job:" << GetJobId()
01159                              << " waiting(a_waitTimeOut: "
01160                              << a_waitTimeOut << ")...");
01161         int status(m_activate_c.TimedWait(cmn_Thread::GetTime(a_waitTimeOut)));
01162 
01163         log_DBG_m(dbg_DETAIL,"TimedWait status: " << status);
01164         for (UInt32_t i(0); i < activeBeasStatus.size(); ++i) {
01165             bool beaRunning = ipc_ObjectExists(m_activeBeas[i]);
01166             log_DBG_m(dbg_DETAIL, "BEA " << i << " previous status: "
01167                                   << ivd_BeaStatusToText(activeBeasStatus[i]));
01168             log_DBG_m(dbg_DETAIL, "BEA " << i << " current status: "
01169                                   << ivd_BeaStatusToText(GetBeaStatus(i)));
01170 
01171             if (    (activeBeasStatus[i] == bs_PROCESSING)
01172                  && (GetBeaStatus(i) == bs_PROCESSING)
01173                  && (!beaRunning)) {
01174 
01175                     bool cleanupAlreadyDone(false);
01176                     if (!crashedBea.empty()) {
01177                         for (UInt32_t j(0); j < crashedBea.size(); ++j) {
01178                             if (crashedBea[j] == i) {
01179                                 cleanupAlreadyDone = true;
01180                                 break;
01181                             }
01182                         }
01183                     }
01184 
01185                     if (cleanupAlreadyDone) {
01186                         log_DBG_m(dbg_DETAIL, "MediumOperationComplete already started for BEA: "
01187                                               << i);
01188                     }
01189                     else {
01190                         crashedBea.push_back(i);
01191                         log_DBG_m(dbg_DETAIL, "Added BEA: " << i << " to crashed bea list");
01192                         //beaInfo will be deleted in CleanupAfterBeaCrash method.
01193                         crashBeaInfo_t *beaInfo = new crashBeaInfo_t;
01194                         log_DBG_m(dbg_DETAIL, "Set beaInfo.");
01195                         beaInfo->jobPtr = this;
01196                         log_DBG_m(dbg_DETAIL, "beaInfo->jobPtr: " << beaInfo->jobPtr);
01197                         beaInfo->beaNum = i;
01198                         log_DBG_m(dbg_DETAIL, "beaInfo->beaNum: " << beaInfo->beaNum);
01199                         cmn_Thread::Create(CleanupAfterBeaCrash,
01200                                            (void*)beaInfo,
01201                                            cmn_Thread::PRIO_NORM);
01202                         log_DBG_m(dbg_DETAIL, "MediumOperationComplete started for BEA: " << i);
01203                     }
01204             }
01205         } // for (UInt32_t i(0); i < activeBeasStatus.size(); ++i)
01206 
01207         if (status == TIMEXPIRE_d) {
01208             log_DBG_m(dbg_DETAIL,"Wait time expired.");
01209         }
01210         else {
01211             log_DBG_m(dbg_DETAIL,"Signaled to cotinue");
01212             break;
01213         }
01214     } // while (1)
01215 
01216     }
01217     catch (ivd_Error) {
01218         log_DBG_m(dbg_NORM, "Catch ivd_Error while waiting BEA to finish. Continuing...");
01219     }
01220     catch (ivd_Exception) {
01221         log_DBG_m(dbg_NORM, "Catch ivd_Exception while waiting BEA to finish. Continuing...");
01222     }
01223     catch (std::exception) {
01224         log_DBG_m(dbg_NORM, "Catch std::exception while waiting BEA to finish. Continuing...");
01225     }
01226     catch (...) {
01227         log_DBG_m(dbg_NORM, "Catch unknown exception while waiting BEA to finish. Continuing...");
01228     }
01229 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::SetBeaStatus ( UInt32_t  a_beaNum,
ivd_BeaStatus_e  a_status 
)

Definition at line 1231 of file i_job_impl.cpp.

References dbg_DETAIL, GetJobId(), ie_FATAL_ERROR, ivd_BeaStatusToText(), log_DBG_m, log_FUNC_m, and m_beasStatus.

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_ReorgJob_i::InitializeSingleVolume(), i_ReorgJob_i::MediumOperationComplete(), i_RedundantCopyJob_i::MediumOperationComplete(), i_RecallJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_MaintFriJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_RecallJob_i::Process(), i_MigrationJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RedundantCopyJob_i::ReadSourceData(), i_ReorgJob_i::ReadSourceVolume(), i_RecallJob_i::RecallRetry(), i_MaintFriJob_i::RecreateFRI(), and ~i_Job_i().

01231                                                                       {
01232     log_FUNC_m(SetBeaStatus);
01233 
01234     if (a_beaNum >= m_beasStatus.size()) {
01235         throw ivd_InternalError(ie_FATAL_ERROR,
01236                                 "Job wants to set status for non existing BEA.");
01237     }
01238 
01239     log_DBG_m(dbg_DETAIL, "Job: " << GetJobId());
01240     log_DBG_m(dbg_DETAIL, "Changing status for BEA: " << a_beaNum);
01241     log_DBG_m(dbg_DETAIL, "Previous status: "
01242                           << ivd_BeaStatusToText(m_beasStatus[a_beaNum]));
01243 
01244     m_beasStatus[a_beaNum] = a_status;
01245 
01246     log_DBG_m(dbg_DETAIL, "New status: "
01247                           << ivd_BeaStatusToText(m_beasStatus[a_beaNum]));
01248 }

Here is the call graph for this function:

Here is the caller graph for this function:

ivd_BeaStatus_e i_Job_i::GetBeaStatus ( UInt32_t  a_beaNum  ) 

Definition at line 1250 of file i_job_impl.cpp.

References dbg_DETAIL, GetJobId(), ie_FATAL_ERROR, ivd_BeaStatusToText(), log_DBG_m, log_FUNC_m, and m_beasStatus.

Referenced by WaitBeasToFinish().

01250                                                        {
01251     log_FUNC_m(GetBeaStatus);
01252 
01253     if (a_beaNum >= m_beasStatus.size()) {
01254         throw ivd_InternalError(ie_FATAL_ERROR,
01255                                 "Job requesting status of non existing BEA.");
01256     }
01257     log_DBG_m(dbg_DETAIL, "Job: " << GetJobId());
01258     log_DBG_m(dbg_DETAIL, "Status of BEA: " << a_beaNum << " is "
01259                           << ivd_BeaStatusToText(m_beasStatus[a_beaNum]));
01260 
01261     return m_beasStatus[a_beaNum];
01262 
01263 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::InitBeaStatus ( UInt32_t  a_numOfElements,
ivd_BeaStatus_e  a_status = bs_NOT_RUNNING 
)

Definition at line 1265 of file i_job_impl.cpp.

References dbg_DETAIL, ivd_BeaStatusToText(), log_DBG_m, log_FUNC_m, and m_beasStatus.

Referenced by i_EfficientRecallJob_i::i_EfficientRecallJob_i(), i_MaintFriJob_i::i_MaintFriJob_i(), i_MediumDupl_i::i_MediumDupl_i(), i_MigrationJob_i::i_MigrationJob_i(), i_RecallJob_i::i_RecallJob_i(), i_RedundantCopyJob_i::i_RedundantCopyJob_i(), and i_ReorgJob_i::i_ReorgJob_i().

01265                                                                               {
01266     log_FUNC_m(InitBeaStatus);
01267 
01268     log_DBG_m(dbg_DETAIL, "m_beasStatus resized to "
01269                           << a_numOfElements
01270                           << " elements and init to "
01271                           << ivd_BeaStatusToText(a_status));
01272     m_beasStatus.resize(a_numOfElements);
01273     for (UInt32_t i(0); i < a_numOfElements; ++i) {
01274         m_beasStatus[i] = a_status;
01275     }
01276 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::SetResLoaded ( UInt32_t  a_resNum  ) 

Definition at line 786 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

Referenced by LoadUnload().

00786                                            {
00787     log_FUNC_A_m(SetResLoaded, "[" << m_iJobParams.jobID << "] a_resNum:"
00788         << a_resNum);
00789     cmn_MutexLock l(m_resource_x);
00790     if ( a_resNum  >= m_resources.length() ) {
00791         throw ivd_InternalError(ie_FATAL_ERROR,
00792             "Accessing list member that does not exist");
00793     }
00794     m_resources[a_resNum].load = false;
00795 }

Here is the caller graph for this function:

void i_Job_i::ClearResStatus ( UInt32_t  a_resNum  ) 

Definition at line 758 of file i_job_impl.cpp.

References ie_FATAL_ERROR, i_JobParams::jobID, log_FUNC_A_m, m_iJobParams, m_resource_x, and m_resources.

Referenced by i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_RedundantCopyJob_i::MediumOperationComplete(), and i_ReorgJob_i::RecallFiles().

00758                                              {
00759     log_FUNC_A_m(ClearResStatus, "[" << m_iJobParams.jobID << "] a_resNum:"
00760         << a_resNum);
00761     cmn_MutexLock l(m_resource_x);
00762     if ( a_resNum  >= m_resources.length() ) {
00763         throw ivd_InternalError(ie_FATAL_ERROR,
00764             "Accessing list member that does not exist");
00765     }
00766     m_resources[a_resNum].resRequested  = false;
00767     m_resources[a_resNum].resAllocated  = false;
00768     m_resources[a_resNum].resReleased   = false;
00769     m_resources[a_resNum].resAssigned   = false;
00770     m_resources[a_resNum].resBeaStarted = false;
00771     m_resources[a_resNum].resProcessed  = false;
00772     m_resources[a_resNum].resMedOpComplete = false;
00773     m_resources[a_resNum].load = false;
00774 }

Here is the caller graph for this function:

bool i_Job_i::NeedsProcess ( UInt32_t  a_resNum  ) 

Definition at line 776 of file i_job_impl.cpp.

References dbg_NORM, i_JobParams::jobID, log_DBG_m, log_FUNC_A_m, ipc_Log::LogResources(), m_iJobParams, m_resource_x, and m_resources.

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_RecallJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MaintFriJob_i::Execute(), i_EfficientRecallJob_i::Execute(), i_AdminJob_i::Execute(), i_ReorgJob_i::MigrateFiles(), and i_RedundantCopyJob_i::MigrateFiles().

00776                                            {
00777     log_FUNC_A_m(NeedsProcess, "[" << m_iJobParams.jobID << "] a_resNum:"
00778                                 << a_resNum);
00779     cmn_MutexLock l(m_resource_x);
00780     log_DBG_m(dbg_NORM,"NeedsProcess:" << endl <<
00781                         ipc_Log::LogResources(m_resources[a_resNum]) );
00782     return (m_resources[a_resNum].resAssigned &&
00783             !m_resources[a_resNum].resProcessed);
00784 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::SetResources ( i_ResourceList_t  a_resource  ) 

Definition at line 650 of file i_job_impl.cpp.

References m_resource_x, and m_resources.

Referenced by i_MediumDupl_i::CompleteJob(), i_BackupJob_i::i_BackupJob_i(), i_EfficientRecallJob_i::i_EfficientRecallJob_i(), i_MediumDupl_i::i_MediumDupl_i(), i_MigrationJob_i::i_MigrationJob_i(), i_RecallJob_i::i_RecallJob_i(), i_RedundantCopyJob_i::i_RedundantCopyJob_i(), i_ReorgJob_i::i_ReorgJob_i(), i_ReorgJob_i::InitializeSingleVolume(), i_ReorgJob_i::InitializeVolumes(), i_AdminJob_i::InitJob(), i_RecallJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_MaintFriJob_i::PrepareMedium(), i_RecallJob_i::PrepareResource(), i_EfficientRecallJob_i::PrepareResource(), i_BackupJob_i::PrepareResource(), i_RecallJob_i::Process(), i_MediumDupl_i::Process(), i_EfficientRecallJob_i::Process(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), i_RecallJob_i::RecallRetry(), i_ReorgJob_i::SetResourceBusyStatus(), i_RedundantCopyJob_i::SetResourceBusyStatus(), i_MediumDupl_i::SetResourceBusyStatus(), and i_AdminJob_i::SetResourceBusyStatus().

00650                                                      {
00651 //    log_FUNC_m(SetResources);
00652     cmn_MutexLock l(m_resource_x);
00653 //    log_DBG_m(dbg_DETAIL,"" << endl << "Want to set resource:"  << endl << ipc_Log::LogResources(a_resource));
00654     m_resources = a_resource;
00655 //    log_DBG_m(dbg_DETAIL,"" << endl << "Resource was set to:"  << endl << ipc_Log::LogResources(m_resources));
00656 }

Here is the caller graph for this function:

void i_Job_i::SetResources ( i_Resource_t  a_resource  ) 

Definition at line 797 of file i_job_impl.cpp.

References ie_FATAL_ERROR, m_resource_x, m_resources, and i_Resource_t::resNum.

00797                                                  {
00798     //log_FUNC_m(SetResources);
00799     cmn_MutexLock l(m_resource_x);
00800     /*log_DBG_m(dbg_DETAIL,"" << endl << "Want to set resource:"  << endl <<
00801         ipc_Log::LogResources(a_resource));*/
00802 
00803     if ( static_cast<unsigned int>(a_resource.resNum)  >= m_resources.length() ) {
00804         throw ivd_InternalError(ie_FATAL_ERROR,
00805                                 "Accessing list member that does not exist");
00806     }
00807     m_resources[a_resource.resNum] = a_resource;
00808     /*log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << "] " << "Resource set to:"
00809                                 << endl << ipc_Log::LogResources(m_resources));*/
00810 }

const i_ResourceList_t i_Job_i::GetResources (  ) 

Definition at line 813 of file i_job_impl.cpp.

References log_FUNC_m, m_resource_x, and m_resources.

Referenced by ActivateBea(), i_MediumDupl_i::AssignResources(), i_MediumDupl_i::CheckTargetMedium(), i_AdminJob_i::CloseVolume(), i_RecallJob_i::CompleteJob(), i_MigrationJob_i::CompleteJob(), i_MediumDupl_i::CompleteJob(), i_MaintFriJob_i::CompleteJob(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MaintFriJob_i::Execute(), i_BackupJob_i::Execute(), i_AdminJob_i::Execute(), i_MaintFriJob_i::FRIReadSuccess(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_MaintFriJob_i::GetNewResources(), i_BackupJob_i::GetNewResources(), i_AdminJob_i::GetNewResources(), i_BackupJob_i::i_BackupJob_i(), i_MaintFriJob_i::i_MaintFriJob_i(), i_MediumCheckJob_i::i_MediumCheckJob_i(), i_MediumDupl_i::i_MediumDupl_i(), i_MigrationJob_i::i_MigrationJob_i(), i_RecoveryJob_i::i_RecoveryJob_i(), i_RedundantCopyJob_i::i_RedundantCopyJob_i(), i_ReorgJob_i::i_ReorgJob_i(), i_ReorgJob_i::InitializeSingleVolume(), i_ReorgJob_i::InitializeVolumes(), i_AdminJob_i::InitJob(), LoadUnload(), i_ReorgJob_i::MediumOperationComplete(), i_RedundantCopyJob_i::MediumOperationComplete(), i_RecallJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_MaintFriJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_RecallJob_i::PrepareResource(), i_EfficientRecallJob_i::PrepareResource(), i_BackupJob_i::PrepareResource(), i_RecallJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RecoveryJob_i::ProcessFRI(), i_MediumCheckJob_i::ProcessFRI(), i_ReorgJob_i::ReadSourceVolume(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), ReleaseResource(), i_RecallJob_i::ReleaseResources(), i_MaintFriJob_i::ReleaseResources(), i_EfficientRecallJob_i::ReleaseResources(), i_MaintFriJob_i::RequestResources(), pm_RecallClientThread::Run(), i_ReorgJob_i::SetResourceBusyStatus(), i_RedundantCopyJob_i::SetResourceBusyStatus(), i_MediumDupl_i::SetResourceBusyStatus(), i_AdminJob_i::SetResourceBusyStatus(), i_AdminJob_i::StartBEA(), and ~i_Job_i().

00813                                             {
00814     log_FUNC_m(GetResources);
00815     cmn_MutexLock l(m_resource_x);
00816     return m_resources;
00817 }

void i_Job_i::SetPriority ( CORBA::Long  a_modifier  ) 

Definition at line 820 of file i_job_impl.cpp.

References m_iJobParams, m_jobParams_x, and i_JobParams::priorityModifier.

00820                                              {
00821     cmn_MutexLock l(m_jobParams_x);
00822     m_iJobParams.priorityModifier = a_modifier;
00823 }

void i_Job_i::SetDriveProperties ( UInt32_t  a_copyNum  ) 

Definition at line 825 of file i_job_impl.cpp.

References i_Resource_t::driveCtrlDevice, i_Resource_t::driveHost, i_Resource_t::driveKey, g_cmn, ipc_EXEC_m, log_FUNC_m, cmn_SysInfo::m_hostName, m_resource_x, m_resources, m_rm, i_Resource_t::mediumFamily, mf_DISK, and cmn_Global::si.

Referenced by ActivateBea(), i_AdminJob_i::Execute(), and i_BackupJob_i::PrepareResource().

00825                                                   {
00826     log_FUNC_m(SetDriveProperties);
00827 
00828     cmn_MutexLock l(m_resource_x);
00829     i_Resource_t &tmpRes = m_resources[a_copyNum];
00830     if (tmpRes.mediumFamily == mf_DISK){
00831         tmpRes.driveHost = CORBA::string_dup(g_cmn.si.m_hostName.c_str());
00832     } else {
00833         i_DriveHost_t_var dh;
00834         ipc_EXEC_m(
00835             dh = m_rm->GetHost(tmpRes.driveKey);
00836         );
00837         tmpRes.driveCtrlDevice = dh->controlDevice;
00838         tmpRes.driveHost = dh->host;
00839     }
00840 }

Here is the caller graph for this function:

void i_Job_i::ReleaseResource ( UInt32_t  a_beaNum  ) 

Definition at line 842 of file i_job_impl.cpp.

References dbg_LOW, dbg_NORM, GetResources(), ie_PRECONDITION, ipc_EXEC_m, ivd_Error, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, m_iJobParams, m_rm, i_JobParams::phase, and SetResReleased().

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_ReorgJob_i::MediumOperationComplete(), i_RedundantCopyJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), and i_ReorgJob_i::RecallFiles().

00842                                               {
00843     log_FUNC_m(ReleaseResource);
00844 
00845     i_ResourceList_t relResource;
00846     relResource.length(1);
00847     relResource[0] = (GetResources())[a_beaNum];
00848     if (!relResource[0].resAllocated){
00849         throw ivd_Error(ie_PRECONDITION, "Resource were not allocated.");
00850     }
00851     SetResReleased(a_beaNum);
00852 
00853     try {
00854         ipc_EXEC_m(
00855 
00856             try {
00857                 m_rm->SetPhase(m_iJobParams.jobID, m_iJobParams.phase++);
00858             } catch (...){
00859                 //ignore any exceptions here
00860             }
00861 
00862             log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID <<
00863                                "] " << "ReleaseResource for jobId:" );
00864             m_rm->ReleaseResource(m_iJobParams, relResource);
00865         );
00866 
00867     } catch (ivd_Exception& e) {
00868         log_ERR_m("Caught exception in ReleaseResource: " << e);
00869     } catch (...){
00870         log_ERR_m("Caught UNKNOWN EXCEPTION " );
00871     }
00872 
00873     log_DBG_m(dbg_NORM, "Resources Released for jobId" <<
00874                         m_iJobParams.jobID);
00875 
00876 
00877 }

Here is the call graph for this function:

Here is the caller graph for this function:

string i_Job_i::GetJobTypeText (  )  const

void i_Job_i::RequestDiskBuffer ( UInt64_t  a_minDBSize,
UInt64_t  a_maxDBSize,
UInt64_t a_allocDBSize,
UInt64_t  a_maxDBFileSytem,
job_dbgDiskBuf_e  a_deleteFiles = job_DISKBUFNONE 
)

Definition at line 887 of file i_job_impl.cpp.

References cfg_MEGABYTE, dbg_LOW, dbg_NORM, i_JobParams::diskBufferFS, evt_WARNING, GetJobId(), GetJobTypeText(), i_RESOURCE_ERROR, ie_IMPOSSIBLE, ie_NO_DISK_SPACE, ipc_EXEC_m, IsAborted(), ivd_Error, ivd_Sleep, i_JobParams::jobID, i_JobParams::jobType, log_DBG_m, log_FUNC_A_m, log_WriteEvent(), m_dbAllocated, m_dbDeleteFiles, m_dbReleased, m_dbSize, m_iJobParams, m_rm, m_status, and TIMEOUT_NOT_ENOUGH_SPACE_DISKBUFFER.

Referenced by AllocateDiskBuffer(), i_BackupJob_i::AllocateDiskBuffer(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), and i_RecallJob_i::PrepareResource().

00891                                                                {
00892 
00893     log_FUNC_A_m(RequestDiskBuffer,
00894         "min: " << a_minDBSize << " max: " << a_maxDBSize
00895         << " maxDBFS: " << a_maxDBFileSytem);
00896 
00897     if ( (a_maxDBSize ==0 ) || (a_minDBSize == 0) ) {
00898         throw ivd_InternalError(ie_IMPOSSIBLE,
00899             "Job requested 0 bytes of disk buffer.");
00900     }
00901 
00902     if (a_minDBSize > a_maxDBFileSytem){
00903 
00904         log_DBG_m(dbg_NORM, "a_minDBSize: " << a_minDBSize <<
00905                             ", a_maxDBSize: " << a_maxDBSize);
00906         m_status = i_RESOURCE_ERROR;
00907         ostringstream sstr;
00908         sstr << "Job [" << m_iJobParams.jobID <<
00909                 "]: Disk buffer allocation failed. See error.log for details. ";
00910         log_WriteEvent(sstr.str());
00911 
00912         sstr.str("");
00913         sstr << "Job [" << m_iJobParams.jobID <<
00914                 "]: Disk buffer allocation failed. " << endl <<
00915                 "Job requested from " << a_minDBSize/cfg_MEGABYTE << "MB" <<
00916                 " to " << a_maxDBSize/cfg_MEGABYTE << "MB." <<
00917                 " The size of the biggest diskbuffer file system is: " <<
00918                 a_maxDBFileSytem/cfg_MEGABYTE << "MB.";
00919 
00920         throw ivd_Error(ie_NO_DISK_SPACE, sstr.str());
00921     }
00922 
00923     m_dbDeleteFiles = a_deleteFiles;
00924     bool reported(false);
00925     try {
00926         ipc_EXEC_m(
00927             m_iJobParams.diskBufferFS = m_rm->ReserveDiskBuffer(
00928                                                     GetJobId(),
00929                                                     a_minDBSize,
00930                                                     a_maxDBSize,
00931                                                     a_allocDBSize,
00932                                                     m_iJobParams.jobType);
00933 
00934             m_dbSize = a_allocDBSize;
00935 
00936             while (m_dbSize == 0)  {
00937                 if (!reported){
00938                     log_WriteEvent(
00939                         evt_WARNING,
00940                         "Not enough disk buffer space to allocate. Waiting...",
00941                         GetJobTypeText(),
00942                         m_iJobParams.jobID);
00943                     reported = true;
00944                 }
00945 
00946                 log_DBG_m(dbg_LOW,  "[" << m_iJobParams.jobID <<
00947                     "] " <<
00948                     "Waiting for space for DiskBuffer ...");
00949                 ivd_Sleep(TIMEOUT_NOT_ENOUGH_SPACE_DISKBUFFER);
00950 
00951                 if (IsAborted()){
00952                     return;
00953                 }
00954                 m_iJobParams.diskBufferFS = m_rm->ReserveDiskBuffer(
00955                                                 GetJobId(),
00956                                                 a_minDBSize,
00957                                                 a_maxDBSize,
00958                                                 a_allocDBSize,
00959                                                 m_iJobParams.jobType);
00960                 m_dbSize = a_allocDBSize;
00961 
00962             }
00963 
00964             m_dbAllocated = true;
00965             m_dbReleased = false;
00966             log_DBG_m(dbg_LOW, "Allocated: " << m_iJobParams.diskBufferFS);
00967         ); //ipc_EXEC_m
00968     } catch (ivd_Exception){
00969         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID <<
00970             "] " << "RM->ReserveDiskBuffer failed.");
00971 
00972         m_status = i_RESOURCE_ERROR;
00973         throw;
00974     }
00975 }//RequestDiskBuffer

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::ReleaseDiskBuffer (  ) 

Definition at line 980 of file i_job_impl.cpp.

References dbg_LOW, dbg_NORM, dt_DISKBUF, g_cmn, GetDiskBufferFileName(), GetJobId(), i_DATA_ERROR, ipc_EXEC_m, IsAborted(), job_DISKBUFALL, job_DISKBUFCORRUPT, job_DISKBUFNONE, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WRN_m, m_dbAllocated, m_dbDeleteFiles, m_dbExist, m_dbReleased, cmn_SysInfo::m_hostName, m_iJobParams, m_rm, m_status, ipc_Corba::ResolveSvc(), and cmn_Global::si.

Referenced by i_EfficientRecallJob_i::CompleteJob(), i_ReorgJob_i::DiskBufferCleanup(), i_MigrationJob_i::Execute(), i_RedundantCopyJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_RecallJob_i::RecallRetry(), ~i_Job_i(), i_MediumDupl_i::~i_MediumDupl_i(), i_MigrationJob_i::~i_MigrationJob_i(), i_RecallJob_i::~i_RecallJob_i(), and i_RedundantCopyJob_i::~i_RedundantCopyJob_i().

00980                                {
00981 
00982     log_FUNC_m(ReleaseDiskBuffer);
00983 
00984     switch (m_dbDeleteFiles){
00985         case(job_DISKBUFALL):
00986             log_DBG_m(dbg_NORM, "" << GetJobId() <<
00987                 " Skipping deleting of all diskbuffer.");
00988             break;
00989         case(job_DISKBUFCORRUPT):
00990             if (m_status == i_DATA_ERROR) {
00991                 log_DBG_m(dbg_NORM, "" << GetJobId() <<
00992                     " Skipping deleting of diskbuffer w/i_DATA_ERROR.");
00993                 break;
00994             };
00995         case(job_DISKBUFNONE):
00996         default:
00997             try {
00998                 ipc_EXEC_m(
00999                     if (m_dbExist || IsAborted()){
01000                         log_DBG_m(dbg_NORM, "" << GetJobId() <<
01001                                     " will delete diskbuffer.");
01002                         CORBA::Object_var obj =
01003                         ipc_Corba::ResolveSvc(g_cmn.si.m_hostName);
01004                         i_Service_var svc = i_Service::_narrow(obj);
01005 
01006                         svc->DeleteFile(dt_DISKBUF,
01007                                         GetDiskBufferFileName().c_str());
01008                         m_dbExist = false;
01009                     } else {
01010                         log_DBG_m(dbg_NORM, "" << GetJobId() <<
01011                             " Diskbuffer does not exist.");
01012                     };
01013                 );
01014             }
01015             catch (ivd_Exception &e){
01016                 //ignore
01017                 log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID <<
01018                     "] " << "Error Erasing disk buffer." << endl << e);
01019             }
01020             try {
01021                 ipc_EXEC_m (
01022                     if (m_dbAllocated & !m_dbReleased) {
01023                         m_rm->ReleaseDiskBuffer(GetJobId());
01024                         m_dbReleased = true;
01025                     }
01026                 );
01027             } catch (ivd_Exception &e){
01028                 log_WRN_m("Error while releasing DiskBuffer space. " << e)
01029             } catch (...){
01030                 log_ERR_m("Unknown error while releasing DiskBuffer space.");
01031 
01032             }
01033     }
01034 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::SetDiskBufferWritten (  ) 

virtual void i_Job_i::CompleteJob ( i_CompletionStatus_e  a_status  )  [pure virtual]

virtual void i_Job_i::Execute (  )  [pure virtual]

void i_Job_i::InitJob (  )  [virtual]

Reimplemented in i_AdminJob_i.

Definition at line 1041 of file i_job_impl.cpp.

References log_FUNC_m, and SetJobValid().

Referenced by job_Manager::AddJobToList().

01041                      {
01042     log_FUNC_m(InitJob);
01043     SetJobValid();
01044 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_Job_i::CheckJobValid (  ) 

Definition at line 1046 of file i_job_impl.cpp.

References ie_PRECONDITION, log_FUNC_m, and m_jobValid.

Referenced by job_Manager::AddJobToList().

01046                            {
01047     log_FUNC_m(CheckJobValid);
01048     if (!m_jobValid){
01049         throw ivd_InternalError(ie_PRECONDITION,
01050             "Job was not initialized properly.", true);
01051     }
01052 }

Here is the caller graph for this function:

void i_Job_i::SetJobValid (  ) 

Definition at line 1054 of file i_job_impl.cpp.

References log_FUNC_m, and m_jobValid.

Referenced by InitJob(), and i_AdminJob_i::InitJob().

01054                          {
01055     log_FUNC_m(SetJobValid);
01056     m_jobValid = true;
01057 }

Here is the caller graph for this function:

void i_Job_i::SetCompletionStatus ( i_CompletionStatus_e  a_completionStatus  ) 

Definition at line 1065 of file i_job_impl.cpp.

References m_status.

Referenced by i_BackupJob_i::i_BackupJob_i().

01065                                                                         {
01066     m_status = a_completionStatus;
01067 }

Here is the caller graph for this function:

UInt64_t i_Job_i::AllocateDiskBuffer ( UInt64_t  a_currentSplitSize,
UInt64_t  a_remainingSplitSize,
UInt64_t  a_maxDiskBuffSize,
UInt32_t  a_blockSize,
UInt64_t  a_maxDiskBuff 
)

Definition at line 1069 of file i_job_impl.cpp.

References AllocateDiskBuffer(), dbg_DETAIL, log_DBG_m, log_FUNC_m, RequestDiskBuffer(), and RoundUp2BlockSize().

01073                                                              {
01074     log_FUNC_m(AllocateDiskBuffer);
01075 
01076     ostringstream msg;
01077 
01078     log_DBG_m(dbg_DETAIL, "Max disk buffer space: " << a_maxDiskBuffSize);
01079 
01080     UInt64_t diskBufferSpace5 = (a_maxDiskBuffSize / 20); // 5%
01081     UInt64_t diskBufferSpace50 = (a_maxDiskBuffSize / 2); // 50%
01082     UInt64_t maxSpace2Allocate = diskBufferSpace50;
01083     UInt64_t minSpace2Allocate = diskBufferSpace5;
01084 
01085     UInt64_t currentSplitSize = RoundUp2BlockSize(
01086                                         a_currentSplitSize,
01087                                         a_blockSize);
01088 
01089     UInt64_t remainingSplitSize = RoundUp2BlockSize(
01090                                         a_remainingSplitSize,
01091                                         a_blockSize);
01092 
01093     // Check if size of first file in list is greather than minSpace2Allocate
01094     // If so allocate at least size of first file
01095     if (currentSplitSize > minSpace2Allocate) {
01096         minSpace2Allocate = currentSplitSize;
01097     }
01098 
01099     // Check if size of remaining split is less than maxSpace2Allocate
01100     // No need to allocate more then we need
01101     if (maxSpace2Allocate > remainingSplitSize) {
01102         maxSpace2Allocate = remainingSplitSize;
01103     }
01104     // If remaining split size is less than 5%
01105     // No need to allocate more then we need
01106     if (maxSpace2Allocate < diskBufferSpace5) {
01107         minSpace2Allocate = maxSpace2Allocate;
01108     }
01109     // If size of first file in list is greather than 50% of disk buffer
01110     if (minSpace2Allocate > diskBufferSpace50) {
01111         maxSpace2Allocate = minSpace2Allocate;
01112     }
01113 
01114     log_DBG_m(dbg_DETAIL,   "Min disk buffer space to allocate: " <<
01115                             minSpace2Allocate);
01116     log_DBG_m(dbg_DETAIL,   "Max disk buffer space to allocate: " <<
01117                             maxSpace2Allocate);
01118 
01119     UInt64_t diskBufferSpaceAllocated(0);
01120     RequestDiskBuffer(  minSpace2Allocate,
01121                         maxSpace2Allocate,
01122                         diskBufferSpaceAllocated,
01123                         a_maxDiskBuff);
01124 
01125     return diskBufferSpaceAllocated;
01126 }

Here is the call graph for this function:

UInt64_t i_Job_i::RoundUp2BlockSize ( UInt64_t  a_size,
UInt32_t  a_blockSize 
)

Definition at line 1128 of file i_job_impl.cpp.

References dbg_DETAIL, log_DBG_m, and log_FUNC_m.

Referenced by AllocateDiskBuffer().

01129                                                           {
01130     log_FUNC_m(RoundUp2BlockSize);
01131 
01132 
01133     log_DBG_m(dbg_DETAIL,"Size to roundup: " << a_size <<
01134                          "Block size: " << a_blockSize);
01135 
01136 
01137     UInt64_t remainder(a_size % a_blockSize);
01138     if (remainder != 0) {
01139         a_size += a_blockSize - remainder;
01140         log_DBG_m(dbg_DETAIL,"Rounded to: " << a_size);
01141         return a_size;
01142     }
01143     else {
01144         log_DBG_m(dbg_DETAIL,"Allready rounded to: " << a_size);
01145         return a_size;
01146     }
01147 
01148 }

Here is the caller graph for this function:

cmn_Path i_Job_i::GetDiskBufferFileName (  ) 

Definition at line 214 of file i_job_impl.cpp.

References cmn_Num2Str(), dbg_DETAIL, i_JobParams::diskBufferFS, GetJobId(), log_DBG_m, log_FUNC_m, and m_iJobParams.

Referenced by i_MigrationJob_i::Execute(), i_EfficientRecallJob_i::MediumOperationComplete(), ReleaseDiskBuffer(), and pm_RecallClientThread::Run().

00214                                        { //relative
00215     log_FUNC_m(GetDiskBufferFileName);
00216 
00217     cmn_Path tmpName(m_iJobParams.diskBufferFS);
00218     tmpName += cmn_Num2Str(GetJobId());
00219 
00220     log_DBG_m(dbg_DETAIL, "GetDiskBufferFileName: " << tmpName);
00221     return tmpName;
00222 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool i_Job_i::operator== ( UInt64_t  a_jobID  )  [inline]

Definition at line 208 of file i_job_impl.h.

References GetJobId().

00208                                        {
00209         return this->GetJobId() == a_jobID;
00210     }

Here is the call graph for this function:


Friends And Related Function Documentation

friend class job_Executor [friend]

Definition at line 255 of file i_job_impl.h.

Referenced by i_Job_i().


Member Data Documentation

vector<i_BackEndAgent_var> i_Job_i::m_activeBeas

Definition at line 212 of file i_job_impl.h.

Referenced by i_MediumDupl_i::CheckTargetMedium(), i_ThreadJob_i::CompleteJob(), i_ReorgJob_i::CompleteJob(), i_RedundantCopyJob_i::CompleteJob(), i_MigrationJob_i::CompleteJob(), i_MaintFriJob_i::CompleteJob(), i_ReorgScanJob_i::Execute(), i_ReorgJob_i::Execute(), i_RedundantCopyJob_i::Execute(), i_RecreatedIVDFSJob_i::Execute(), i_RecallJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MediumCheckJob_i::Execute(), i_MaintFriJob_i::Execute(), i_FSCCheckJob_i::Execute(), i_EfficientRecallJob_i::Execute(), i_DelExpiredFilesJob_i::Execute(), i_AdminJob_i::Execute(), i_BackupJob_i::GetNewResources(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_MaintFriJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_RedundantCopyJob_i::Prepare(), i_RecallJob_i::PrepareResource(), i_EfficientRecallJob_i::PrepareResource(), i_BackupJob_i::PrepareResource(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), ReleaseDiskBuffer(), Remove(), i_BackupJob_i::Remove(), RequestDiskBuffer(), i_MaintFriJob_i::RequestResources(), pm_FriProcessor::Run(), job_Executor::Run(), SetCompletionStatus(), i_RecoveryJob_i::~i_RecoveryJob_i(), i_RedundantCopyJob_i::~i_RedundantCopyJob_i(), i_ReorgScanJob_i::~i_ReorgScanJob_i(), job_Executor::~job_Executor(), and pm_FriProcessor::~pm_FriProcessor().

bool i_Job_i::m_jobValid [protected]

Reimplemented in i_AdminJob_i.

Definition at line 217 of file i_job_impl.h.

Referenced by CheckJobValid(), and SetJobValid().

Definition at line 218 of file i_job_impl.h.

Referenced by Remove().

Definition at line 219 of file i_job_impl.h.

Referenced by AbortJob(), i_FSCCheckJob_i::AbortJob(), i_EfficientRecallJob_i::AbortRecallOnHsm(), ActivateBea(), i_MigrationJob_i::AssignResources(), i_MediumDupl_i::AssignResources(), AssignResources(), i_MaintFriJob_i::CheckReadFri(), i_MediumDupl_i::CheckTargetMedium(), ClearResStatus(), i_AdminJob_i::CloseVolume(), i_ThreadJob_i::CompleteJob(), i_ReorgJob_i::CompleteJob(), i_RecallJob_i::CompleteJob(), i_MigrationJob_i::CompleteJob(), i_MediumDupl_i::CompleteJob(), i_MediumCheckJob_i::CompleteJob(), i_MaintFriJob_i::CompleteJob(), i_EfficientRecallJob_i::CompleteJob(), i_AdminJob_i::DeleteMedVolFromRMDB(), i_AdminJob_i::DetectVolumeHeader(), i_ReorgJob_i::DiskBufferCleanup(), i_AdminJob_i::DoInitialize(), i_ReorgScanJob_i::Execute(), i_ReorgJob_i::Execute(), i_RedundantCopyJob_i::Execute(), i_RecallJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_MaintFriJob_i::Execute(), i_EfficientRecallJob_i::Execute(), i_BackupJob_i::Execute(), i_AdminJob_i::Execute(), i_AdminJob_i::Format(), GetDiskBufferFileName(), GetJobId(), GetJobParams(), GetJobStatus(), GetJobTypeEnum(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_BackupJob_i::GetNewResources(), i_RecallJob_i::GetNextRecallSet(), i_EfficientRecallJob_i::GetNextRecallSet(), GetStatus(), i_AdminJob_i::i_AdminJob_i(), i_BackupJob_i::i_BackupJob_i(), i_EfficientRecallJob_i::i_EfficientRecallJob_i(), i_Job_i(), i_MaintFriJob_i::i_MaintFriJob_i(), i_MediumCheckJob_i::i_MediumCheckJob_i(), i_MediumDupl_i::i_MediumDupl_i(), i_MigrationJob_i::i_MigrationJob_i(), i_RecallJob_i::i_RecallJob_i(), i_RecoveryJob_i::i_RecoveryJob_i(), i_RedundantCopyJob_i::i_RedundantCopyJob_i(), i_ReorgJob_i::i_ReorgJob_i(), i_ThreadJob_i::i_ThreadJob_i(), i_AdminJob_i::Initialize(), i_ReorgJob_i::InitializeSingleVolume(), i_AdminJob_i::InitializeSingleVolume(), i_ReorgJob_i::InitializeVolumes(), i_AdminJob_i::InitJob(), IsAborted(), IsResMedOpComplete(), LoadUnload(), i_ThreadJob_i::MediumOperationComplete(), i_ReorgJob_i::MediumOperationComplete(), i_RedundantCopyJob_i::MediumOperationComplete(), i_RecallJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_MaintFriJob_i::MediumOperationComplete(), i_EfficientRecallJob_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), NeedsProcess(), i_AdminJob_i::OperateLA(), i_MediumDupl_i::PreFormat(), i_RedundantCopyJob_i::Prepare(), i_MaintFriJob_i::PrepareMedium(), i_EfficientRecallJob_i::PrepareRecallListSeq(), i_RecallJob_i::PrepareResource(), i_EfficientRecallJob_i::PrepareResource(), i_RecallJob_i::Process(), i_MediumDupl_i::Process(), i_MaintFriJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RecoveryJob_i::ProcessFRI(), i_MediumCheckJob_i::ProcessFRI(), i_RedundantCopyJob_i::ReadSourceData(), i_ReorgJob_i::ReadSourceVolume(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), i_RecallJob_i::RecallRetry(), i_AdminJob_i::RecreateFRIandMIC(), ReleaseDiskBuffer(), ReleaseResource(), i_RecallJob_i::ReleaseResources(), i_MaintFriJob_i::ReleaseResources(), i_EfficientRecallJob_i::ReleaseResources(), Remove(), i_BackupJob_i::Remove(), i_ReorgJob_i::ReorgStatusCleanup(), RequestDiskBuffer(), i_MaintFriJob_i::RequestResources(), ResetResMedOpComplete(), job_Executor::Run(), pm_RecallClientThread::Run(), pm_AssignResThread::Run(), SetPriority(), SetResAllocatedd(), SetResAssigned(), SetResBeaStarted(), SetResLoaded(), SetResMedOpComplete(), SetResProcessed(), SetResReleased(), SetResRequested(), SetStatus(), i_AdminJob_i::SetSysVolIdx(), Start(), i_AdminJob_i::StartBEA(), WaitBea(), i_AdminJob_i::~i_AdminJob_i(), ~i_Job_i(), i_MaintFriJob_i::~i_MaintFriJob_i(), i_MediumDupl_i::~i_MediumDupl_i(), i_MigrationJob_i::~i_MigrationJob_i(), i_RedundantCopyJob_i::~i_RedundantCopyJob_i(), and i_ThreadJob_i::~i_ThreadJob_i().

i_ResourceManager_var i_Job_i::m_rm [protected]

Definition at line 221 of file i_job_impl.h.

Referenced by AbortJob(), i_BackupJob_i::AllocateDiskBuffer(), i_AdminJob_i::CheckMedium(), i_AdminJob_i::CheckPartition(), i_AdminJob_i::CheckPool(), i_MediumDupl_i::CheckTargetMedium(), i_AdminJob_i::CheckVolumesForFriMicJob(), i_AdminJob_i::CloseVolume(), i_MigrationJob_i::CompleteJob(), i_MaintFriJob_i::CompleteJob(), i_AdminJob_i::DeleteMedVolFromRMDB(), i_AdminJob_i::DoInitialize(), i_ReorgScanJob_i::Execute(), i_MigrationJob_i::Execute(), i_MediumDupl_i::Execute(), i_AdminJob_i::Execute(), i_AdminJob_i::Format(), GetJobParams(), i_ReorgJob_i::GetNewResources(), i_RedundantCopyJob_i::GetNewResources(), i_MigrationJob_i::GetNewResources(), i_BackupJob_i::GetNewResources(), i_BackupJob_i::i_BackupJob_i(), i_Job_i(), i_MediumDupl_i::i_MediumDupl_i(), i_RedundantCopyJob_i::i_RedundantCopyJob_i(), i_ReorgJob_i::i_ReorgJob_i(), i_AdminJob_i::Initialize(), i_ReorgJob_i::InitializeSingleVolume(), i_AdminJob_i::InitializeSingleVolume(), i_ReorgJob_i::InitializeVolumes(), i_ReorgJob_i::MediumOperationComplete(), i_RecallJob_i::MediumOperationComplete(), i_MigrationJob_i::MediumOperationComplete(), i_MediumDupl_i::MediumOperationComplete(), i_ReorgJob_i::MigrateFiles(), i_RedundantCopyJob_i::MigrateFiles(), i_AdminJob_i::OperateLA(), i_MediumDupl_i::PreFormat(), i_RedundantCopyJob_i::Prepare(), i_MaintFriJob_i::PrepareMedium(), i_RecallJob_i::PrepareResource(), i_EfficientRecallJob_i::PrepareResource(), i_BackupJob_i::PrepareResource(), i_MaintFriJob_i::PrepareVolumes(), i_RecallJob_i::Process(), i_EfficientRecallJob_i::Process(), i_RecoveryJob_i::ProcessFRI(), i_ReorgJob_i::ReadSourceVolume(), i_ReorgJob_i::RecallFiles(), i_RedundantCopyJob_i::RecallFiles(), ReleaseDiskBuffer(), ReleaseResource(), i_RecallJob_i::ReleaseResources(), i_MaintFriJob_i::ReleaseResources(), i_EfficientRecallJob_i::ReleaseResources(), i_ReorgJob_i::ReorgStatusCleanup(), RequestDiskBuffer(), i_MaintFriJob_i::RequestResources(), SetDriveProperties(), i_RecoveryJob_i::SetRecoveryFlagOnVolumes(), i_AdminJob_i::SetVolumes(), i_ReorgJob_i::UpdateMediumStatus(), i_AdminJob_i::~i_AdminJob_i(), ~i_Job_i(), i_RedundantCopyJob_i::~i_RedundantCopyJob_i(), and i_ReorgJob_i::~i_ReorgJob_i().

i_Job_var i_Job_i::m_iJob [protected]

Definition at line 224 of file i_job_impl.h.

Referenced by i_Job_i(), Start(), and ~i_Job_i().

Definition at line 226 of file i_job_impl.h.

Referenced by GetStatus(), i_Job_i(), SetPriority(), SetStatus(), and Start().

Definition at line 231 of file i_job_impl.h.

Referenced by RegisterBEA(), and WaitBea().

Definition at line 232 of file i_job_impl.h.

Referenced by RegisterBEA(), and WaitBea().

Definition at line 234 of file i_job_impl.h.

Referenced by AbortJob(), and IsAborted().

Definition at line 235 of file i_job_impl.h.

Referenced by Finished(), IsFinished(), and Remove().

bool i_Job_i::m_finished [protected]

Definition at line 237 of file i_job_impl.h.

Referenced by Finished(), IsFinished(), and Remove().

bool i_Job_i::m_aborted [protected]

bool i_Job_i::m_dbAllocated [protected]

Definition at line 240 of file i_job_impl.h.

Referenced by ReleaseDiskBuffer(), and RequestDiskBuffer().

bool i_Job_i::m_dbExist [protected]

Definition at line 241 of file i_job_impl.h.

Referenced by ReleaseDiskBuffer(), and SetDiskBufferWritten().

bool i_Job_i::m_dbReleased [protected]

Definition at line 242 of file i_job_impl.h.

Referenced by ReleaseDiskBuffer(), and RequestDiskBuffer().

Definition at line 243 of file i_job_impl.h.

Referenced by ReleaseDiskBuffer(), and RequestDiskBuffer().

Definition at line 244 of file i_job_impl.h.

Referenced by RequestDiskBuffer().

Definition at line 247 of file i_job_impl.h.

Referenced by job_Executor::job_Executor(), ~i_Job_i(), and job_Executor::~job_Executor().

Definition at line 248 of file i_job_impl.h.

Referenced by job_Executor::Run(), and job_Executor::~job_Executor().

bool i_Job_i::m_execTheadStarted [protected]

Definition at line 249 of file i_job_impl.h.

Referenced by Start(), and ~i_Job_i().

Definition at line 258 of file i_job_impl.h.

Referenced by GetBeaStatus(), InitBeaStatus(), SetBeaStatus(), WaitBeasToFinish(), and ~i_Job_i().


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

Generated on Mon Feb 27 19:34:01 2012 for OPENARCHIVE by  doxygen 1.5.6