i_AdminJob_i Class Reference
[Management Interface]

#include <i_adminjob_impl.h>

Inheritance diagram for i_AdminJob_i:

Inheritance graph
[legend]
Collaboration diagram for i_AdminJob_i:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 38 of file i_adminjob_impl.h.


Public Member Functions

 i_AdminJob_i (mif_JobManager &a_jobManager, bool a_doFormat, bool a_doInit, bool a_doFri, bool a_doMic, bool a_doVolumeClose, bool a_forced, const char *a_barcode, const i_VolNumList_t &a_volumes, i_UIMessageServer_ptr &a_UIMS_p, CORBA::Boolean a_into=false, const char *a_intoPath="")
virtual ~i_AdminJob_i ()
void InitJob ()
void FormatAndInitCheck ()
void RecreateFRIandMICCheck ()
void CloseVolumeCheck ()
void AllocateDiskBuffer (i_FileSize_t a_size)
void MediumOperationComplete (i_Index_t beaNumber, i_CompletionStatus_e a_status)
virtual void CompleteJob (i_CompletionStatus_e status)
void GetNewResources (i_Index_t resourceNumber)
i_JobRequestList_tGetFiles ()
i_FSC_ptr GetFSC ()

Private Member Functions

void DetectVolumeHeader (i_VolInfo_t_var &a_volInfo, Int32_t a_volumeNr)
void InitializeSingleVolume (Int32_t volumeNr)
void DoInitialize (Int32_t a_volumeNr, Int32_t a_size)
void OperateLA (rm_Resource_t &resource)
void StartBEA ()
void DeleteMedVolFromRMDB (string a_barcode, Int32_t a_medVolNum)
void Format ()
void Initialize ()
void RecreateFRIandMIC ()
 Generates new FRI on disk from specified data medium volume.
void CloseVolume ()
void SetSysVolIdx (UInt32_t a_numOfVol)
void Execute ()
void CheckMedium ()
void CheckPool ()
void CheckPartition ()
void CheckVolumesForFormatAndInit (bool a_log=true)
void CheckVolumesForFriMicJob ()
void CheckVolumesForVolumeClose ()
void SetVolumes ()
UInt32_t FindVolInRMDB (UInt32_t a_volNum)
void SetResourceBusyStatus (i_Index_t a_resNum, i_ResourceBusy_e a_resStatus)

Private Attributes

bool m_doFormat
bool m_doInit
bool m_doFri
bool m_doMic
bool m_doCloseVolume
bool m_initAllVol
bool m_forced
UInt32_t m_lastAccessedVolume
ui_MsgWriter m_ui
i_MediumVolSeq_t m_medVolInRmdb
vector< UInt32_tm_initVol
bool m_makeSysVol
Int32_t m_idxSysVol
bool m_initSucceeded
bool m_jobValid
string m_barcode
i_Medium_t m_medium
i_MediaPool_t m_mediaPool
bool m_into
string m_intoPath
 log_CLASSID_m

Constructor & Destructor Documentation

i_AdminJob_i::i_AdminJob_i ( mif_JobManager a_jobManager,
bool  a_doFormat,
bool  a_doInit,
bool  a_doFri,
bool  a_doMic,
bool  a_doVolumeClose,
bool  a_forced,
const char *  a_barcode,
const i_VolNumList_t a_volumes,
i_UIMessageServer_ptr &  a_UIMS_p,
CORBA::Boolean  a_into = false,
const char *  a_intoPath = "" 
)

Definition at line 41 of file i_adminjob_impl.cpp.

References i_JobParams::bufType, dbg_LOW, i_DISK_BUF, i_JobParams::jobType, jt_ADMIN, log_DBG_m, log_FUNC_m, i_Job_i::m_iJobParams, and m_initVol.

00053     :   i_Job_i(a_jobManager, true),
00054         m_doFormat(a_doFormat),
00055         m_doInit(a_doInit),
00056         m_doFri(a_doFri),
00057         m_doMic(a_doMic),
00058         m_doCloseVolume(a_doCloseVolume),
00059         m_initAllVol(a_volumes.length() == 0),
00060         m_forced(a_forced),
00061         m_lastAccessedVolume(0),
00062         m_ui(a_UIMS_p),
00063         m_makeSysVol(false),
00064         m_idxSysVol(0),
00065         m_initSucceeded(false),
00066         m_barcode(a_barcode),
00067         m_into(a_into),
00068         m_intoPath(a_intoPath)
00069         {
00070     log_FUNC_m(i_AdminJob_i);
00071     // copy i_VolNumList_t& a_volumes to member m_initVol
00072     for (UInt32_t i(0); i < a_volumes.length(); i++){
00073         log_DBG_m(dbg_LOW, "Volume: " << a_volumes[i]);
00074         m_initVol.push_back(a_volumes[i]);
00075     }
00076     m_iJobParams.jobType          = jt_ADMIN;
00077     m_iJobParams.bufType          = i_DISK_BUF;    
00078 
00079 } //i_AdminJob_i::i_AdminJob_i

i_AdminJob_i::~i_AdminJob_i (  )  [virtual]

Definition at line 83 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, ui_MsgWriter::DisplayMessage(), ui_MsgWriter::DisplayWarning(), evt_ADMINJOB, evt_WARNING, ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_FUNC_m, log_WriteEvent(), i_Job_i::m_iJobParams, m_medium, i_Job_i::m_rm, and m_ui.

00083                             {
00084     log_FUNC_m(~i_AdminJob_i);
00085 
00086     // do any other necessary cleanups.
00087     try {
00088         ipc_EXEC_m(m_rm->UseNewResource();)
00089     } 
00090     catch (...) {
00091         //ignore any exceptions
00092     }
00093 
00094     if ( IsAborted() ) {
00095         ostringstream msg;
00096         msg << "Aborted.";
00097         log_WriteEvent(evt_WARNING, msg.str(), evt_ADMINJOB, 
00098                        m_iJobParams.jobID, string(m_medium.barcode));
00099         ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00100     }
00101     else {
00102         ostringstream msg;
00103         msg << "Finished.";
00104         log_WriteEvent(msg.str(), evt_ADMINJOB,
00105                        m_iJobParams.jobID, string(m_medium.barcode));
00106         ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00107     }
00108 
00109 } // i_AdminJob_i::~i_AdminJob_i

Here is the call graph for this function:


Member Function Documentation

void i_AdminJob_i::InitJob (  )  [virtual]

Reimplemented from i_Job_i.

Definition at line 125 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, i_MediaPool_t::blockSize, CloseVolumeCheck(), ui_MsgWriter::DisplayMessage(), FormatAndInitCheck(), i_Job_i::GetResources(), ie_PRECONDITION, ivd_Error, i_JobParams::jobID, log_FUNC_m, i_Job_i::m_activeBeas, m_doCloseVolume, m_doFormat, m_doFri, m_doInit, m_doMic, i_Job_i::m_iJobParams, m_initVol, m_mediaPool, m_medium, m_medVolInRmdb, m_ui, i_MediaPool_t::mediaFamily, i_MediaPool_t::mediaPoolKey, i_MediaPool_t::mediaPoolType, i_Medium_t::mediumKey, i_MediaPool_t::partitionUUIDString, i_JobParams::partUUID, RecreateFRIandMICCheck(), ipc_Init::ResourceInit(), i_Job_i::SetJobValid(), and i_Job_i::SetResources().

00125                           {
00126     log_FUNC_m(InitJob);
00127 
00128     if (m_doInit || m_doFormat){
00129         FormatAndInitCheck();
00130     } else if (m_doFri || m_doMic){
00131         RecreateFRIandMICCheck();
00132     } else if (m_doCloseVolume){
00133         CloseVolumeCheck();
00134     }
00135     ostringstream msg;
00136     msg << "Started (JobID: " << m_iJobParams.jobID << ").";
00137     m_ui.DisplayMessage(msg.str());
00138 
00139     m_iJobParams.partUUID         = m_mediaPool.partitionUUIDString;
00140 
00141     i_ResourceList_t resources;
00142     resources.length(1);
00143     ipc_Init::ResourceInit(resources[0]);
00144     resources[0].poolKey           = m_mediaPool.mediaPoolKey;
00145     resources[0].poolType          = m_mediaPool.mediaPoolType;
00146     resources[0].mediumFamily      = m_mediaPool.mediaFamily;
00147     resources[0].mediumKey         = m_medium.mediumKey;
00148     resources[0].barcode           = CORBA::string_dup(string(m_medium.barcode).c_str());
00149     resources[0].blockSize         = m_mediaPool.blockSize;
00150     if (m_doCloseVolume){
00151         if (m_medVolInRmdb.length() > 0){
00152             resources[0].medVolId = CORBA::string_dup(m_medVolInRmdb[0].medVolId);
00153             resources[0].medVolNr = m_initVol[0];
00154         } else {
00155             throw ivd_Error(ie_PRECONDITION, "Volume is not initialized.", true);
00156         }
00157     }
00158     SetResources(resources);
00159     m_activeBeas.resize(GetResources().length());
00160 
00161     SetJobValid();
00162 }

Here is the call graph for this function:

void i_AdminJob_i::FormatAndInitCheck (  ) 

Definition at line 166 of file i_adminjob_impl.cpp.

References CheckMedium(), CheckPartition(), CheckPool(), CheckVolumesForFormatAndInit(), log_FUNC_m, m_doInit, m_mediaPool, i_MediaPool_t::mediaPoolType, pt_Backup, and SetVolumes().

Referenced by InitJob().

00166                                      {
00167     log_FUNC_m(FormatAndInitCheck);
00168 
00169     CheckMedium();
00170     CheckPool();
00171     SetVolumes();
00172     if (m_doInit && m_mediaPool.mediaPoolType != pt_Backup){
00173         CheckPartition(); //only for init! and not for backup pool
00174     }
00175     CheckVolumesForFormatAndInit();
00176 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::RecreateFRIandMICCheck (  ) 

Definition at line 180 of file i_adminjob_impl.cpp.

References CheckMedium(), CheckPool(), CheckVolumesForFriMicJob(), log_FUNC_m, and SetVolumes().

Referenced by InitJob().

00180                                          {
00181     log_FUNC_m(RecreateFRIandMICCheck);
00182 
00183     CheckMedium();
00184     CheckPool();
00185     SetVolumes();
00186     CheckVolumesForFriMicJob();    
00187 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CloseVolumeCheck (  ) 

Definition at line 192 of file i_adminjob_impl.cpp.

References CheckMedium(), CheckPool(), CheckVolumesForVolumeClose(), log_FUNC_m, and SetVolumes().

Referenced by InitJob().

00192                                    {
00193     log_FUNC_m(CloseVolumeCheck);
00194 
00195     CheckMedium();
00196     CheckPool();
00197     SetVolumes();
00198     CheckVolumesForVolumeClose();
00199 }

Here is the call graph for this function:

Here is the caller graph for this function:

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

Reimplemented from i_Job_i.

Definition at line 1902 of file i_adminjob_impl.cpp.

References ie_IMPOSSIBLE.

01902                                                         {
01903     throw ivd_InternalError(ie_IMPOSSIBLE);
01904 }

void i_AdminJob_i::MediumOperationComplete ( i_Index_t  beaNumber,
i_CompletionStatus_e  a_status 
) [virtual]

Implements i_Job_i.

void i_AdminJob_i::CompleteJob ( i_CompletionStatus_e  status  )  [virtual]

Implements i_Job_i.

Definition at line 218 of file i_adminjob_impl.cpp.

References ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, and i_Job_i::Remove().

00218                                                             {
00219 
00220     log_FUNC_m(CompleteJob);
00221     try {
00222         Remove();
00223     }
00224     ipc_CATCH_IVD_THROW_CORBA_m
00225 } // i_AdminJob_i::CompleteJob

Here is the call graph for this function:

void i_AdminJob_i::GetNewResources ( i_Index_t  resourceNumber  )  [virtual]

Implements i_Job_i.

Definition at line 115 of file i_adminjob_impl.cpp.

References i_Job_i::GetResources(), ie_FATAL_ERROR, ipc_CATCH_IVD_THROW_CORBA_m, and log_FUNC_m.

00115                                                      {
00116     log_FUNC_m(GetResources);
00117     try {
00118         throw ivd_InternalError(ie_FATAL_ERROR);
00119     } ipc_CATCH_IVD_THROW_CORBA_m;
00120 } // i_AdminJob_i::GetResources

Here is the call graph for this function:

i_JobRequestList_t * i_AdminJob_i::GetFiles (  )  [virtual]

Implements i_Job_i.

Definition at line 229 of file i_adminjob_impl.cpp.

References ie_FATAL_ERROR, ipc_CATCH_IVD_THROW_CORBA_m, and log_FUNC_m.

00229                                            {
00230     log_FUNC_m(GetFiles);
00231     try {
00232         throw ivd_InternalError(ie_FATAL_ERROR);
00233     }
00234     ipc_CATCH_IVD_THROW_CORBA_m
00235 } // i_AdminJob_i::GetFiles

i_FSC_ptr i_AdminJob_i::GetFSC (  )  [virtual]

Implements i_Job_i.

Definition at line 239 of file i_adminjob_impl.cpp.

References ie_IMPOSSIBLE, ipc_CATCH_IVD_THROW_CORBA_m, ivd_Error, and log_FUNC_m.

00239                                {
00240     log_FUNC_m(GetFSC);
00241     try {
00242         i_FSC_ptr dummy;
00243         throw ivd_Error(ie_IMPOSSIBLE);
00244         return dummy;
00245     }
00246     ipc_CATCH_IVD_THROW_CORBA_m
00247 } // i_AdminJob_i::GetFSC

void i_AdminJob_i::DetectVolumeHeader ( i_VolInfo_t_var &  a_volInfo,
Int32_t  a_volumeNr 
) [private]

Definition at line 783 of file i_adminjob_impl.cpp.

References dbg_DETAIL, dbg_LOW, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, evt_ERROR, g_cmn, ivd_BaseException::GetFriendly(), i_VOL_BLANK, i_VOL_ECMA, i_VOL_IVD, i_VOL_IVD_NT, i_VOL_OTHER, i_VOL_TAR, ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), ipc_Log::LogVolInfo(), i_Job_i::m_activeBeas, i_Job_i::m_iJobParams, m_lastAccessedVolume, ivd_Product::m_nameShort, m_ui, and cmn_Global::prod.

Referenced by Format(), and InitializeSingleVolume().

00783                                                                                    {
00784     log_FUNC_m(DetectVolumeHeader);
00785     ostringstream msgBase;    
00786     msgBase <<  "Medium " << m_medium.barcode << ", volume " << a_volumeNr << ": ";
00787     ostringstream msg;
00788     msg << msgBase.str();
00789     try {
00790         ipc_EXEC_m(
00791             a_volInfo = m_activeBeas[0]->GetVolInfo(a_volumeNr);
00792             m_lastAccessedVolume = a_volumeNr;
00793         )
00794     } catch (ivd_Exception &e){
00795         log_ERR_m("[" << m_iJobParams.jobID << 
00796             "] " << "Get volume info failed:" << endl << e);
00797         msg << "Get volume size failed (" << e.GetFriendly() << ").";
00798         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
00799             m_iJobParams.jobID, string(m_medium.barcode));
00800         m_ui.DisplayError(msg.str());
00801         throw;
00802     }
00803 
00804     if (IsAborted()) return;
00805     log_DBG_m(dbg_DETAIL,   "[" << m_iJobParams.jobID << 
00806                             "] " << "Found volume" <<
00807                             endl << ipc_Log::LogVolInfo(a_volInfo));
00808                         
00809     msg.str("");
00810     msg << msgBase.str();
00811     switch (a_volInfo->type) {
00812         case i_VOL_BLANK:
00813             msg << "Blank volume detected.";
00814             break;
00815         case i_VOL_IVD:
00816             msg << g_cmn.prod.m_nameShort << " volume detected.";                
00817             break;
00818         case i_VOL_ECMA:
00819             msg << "ECMA volume detected.";
00820             break;
00821         case i_VOL_TAR:
00822             msg << "TAR volume detected.";
00823             break;
00824         case i_VOL_IVD_NT:
00825             msg << "IVD NT volume detected.";
00826             break;
00827         case i_VOL_OTHER:
00828             msg<< "Unknown volume type detected.";                
00829             break;
00830     }
00831     log_DBG_m(dbg_LOW,  "[" << m_iJobParams.jobID << 
00832                         "] " << msg.str());    
00833     ipc_EXEC_m( m_ui.DisplayMessage(msg.str());)
00834 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::InitializeSingleVolume ( Int32_t  volumeNr  )  [private]

Definition at line 839 of file i_adminjob_impl.cpp.

References dbg_LOW, dbg_NORM, DetectVolumeHeader(), ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), ui_MsgWriter::DisplayWarning(), DoInitialize(), evt_ADMINJOB, evt_ERROR, evt_WARNING, FindVolInRMDB(), g_cmn, ivd_BaseException::GetFriendly(), i_VOL_BLANK, i_VOL_ECMA, i_VOL_IVD, i_VOL_IVD_NT, i_VOL_OTHER, i_VOL_TAR, ie_PRECONDITION, ipc_EXEC_m, ivd_Error, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_A_m, log_WriteEvent(), m_forced, cmn_SysInfo::m_hostName, m_idxSysVol, i_Job_i::m_iJobParams, m_initAllVol, m_makeSysVol, m_mediaPool, m_medVolInRmdb, i_Job_i::m_rm, m_ui, i_MediumVol_t::medVolNr, i_MediaPool_t::partitionUUIDString, ipc_Corba::ResolvePMByPartID(), rmdb_MEDVOL_REORG_RECYCLED, cmn_Global::si, and i_MediumVol_t::status.

Referenced by Initialize().

00839                                                             {
00840 
00841     log_FUNC_A_m(InitializeSingleVolume, "# :" << a_volumeNr);
00842 
00843     // get volume info from medium.
00844     ostringstream msgBase;    
00845     msgBase <<  "Medium " << m_medium.barcode << ", volume " << a_volumeNr << ": ";
00846     ostringstream msg;    
00847     msg << msgBase.str() << "Reading volume identification...";
00848     ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00849     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << "] " << msg.str());
00850     msg.str("");
00851     i_VolInfo_t_var volInfo;
00852     DetectVolumeHeader(volInfo, a_volumeNr);
00853     try {
00854         // check if volume is in rmdb
00855         
00856         bool found(false);
00857         i_MediumVol_t medVol;
00858         UInt32_t findIdx(0);
00859         try {
00860             findIdx = FindVolInRMDB(a_volumeNr);
00861             medVol = m_medVolInRmdb[findIdx];
00862             found = true;
00863         }
00864         catch (ivd_Error) {
00865             found = false;
00866         }
00867         
00868         log_DBG_m(dbg_NORM, "Volume in rmdb: " << boolalpha << found << 
00869                     " medVol.status" << medVol.status);
00870 
00871         // determine, if medium volume may be initialized.
00872         msg << msgBase.str();
00873         if ( (volInfo->type == i_VOL_BLANK) ||              
00874             (volInfo->type == i_VOL_OTHER) || 
00875             (m_forced && (volInfo->type == i_VOL_ECMA
00876                           || volInfo->type == i_VOL_TAR
00877                           || volInfo->type == i_VOL_IVD_NT ) ) ) {
00878 
00879         
00880             if ( (a_volumeNr == m_idxSysVol) && m_makeSysVol) { //this should be System Volume
00881                 if (!m_initAllVol && (m_medium.idxOfSysVol != m_idxSysVol) ){ 
00882                     //but there is already another system volume
00883                     //do not allow two system volumes
00884                     msg << "Can not initialize (system volume already exist on medium).";
00885                     log_ERR_m("[" << m_iJobParams.jobID << 
00886                                       "] " << msg.str());
00887                     ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00888                     return;
00889                 } else {
00890                     log_DBG_m(dbg_LOW, "Invoking init for system volume");
00891                     DoInitialize(a_volumeNr, volInfo->size );
00892                 }
00893             } else {
00894                 DoInitialize(a_volumeNr, volInfo->size );
00895             }
00896         } 
00897         else if ( m_forced && (volInfo->type == i_VOL_IVD)){
00898             if (m_initAllVol) { //no problem just do it
00899                 DoInitialize(a_volumeNr, volInfo->size );
00900             } else {
00901                 if ( (m_idxSysVol == a_volumeNr) && (volInfo->sysVolNum != a_volumeNr) ) {
00902                     //do not allow two system volumes
00903                     msg << "Can not initialize (system volume already exist on medium).";
00904                     log_ERR_m("[" << m_iJobParams.jobID << 
00905                                       "] " << msg.str());
00906                     ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00907                     return;
00908                 } else {
00909                     DoInitialize(a_volumeNr, volInfo->size ); 
00910                 }
00911             }
00912         } else if (found && (medVol.status & rmdb_MEDVOL_REORG_RECYCLED)){
00913         
00914         
00915             //resolve PM
00916             i_Partition_t_var pm = 
00917                 m_rm->SelectPartitionByUUID(m_mediaPool.partitionUUIDString);
00918             i_PartitionManager_var m_iPM;
00919             ipc_EXEC_m(
00920                 string pmName(pm->partitionName);
00921                 CORBA::Object_var obj = ipc_Corba::ResolvePMByPartID(g_cmn.si.m_hostName, pmName);
00922                 m_iPM = i_PartitionManager::_narrow(obj);
00923             );
00924 
00925             if (!CORBA::is_nil(m_iPM)){
00926                 DoInitialize(a_volumeNr, volInfo->size); 
00927             } else {
00928                 throw ivd_Error(ie_PRECONDITION, "Initialization of recycled \
00929                                                  volume requires Partition Manager to be running.");
00930             }
00931             
00932             //delete entries from FSC
00933             log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00934                                 "] " << "Deleting entries from FSC.");
00935             msg.str("");
00936             msg << msgBase.str() << "Deleting entries from FSC ...";
00937             ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00938             
00939             m_iPM->ReleaseVolEntries(m_medium.mediumKey, medVol.medVolNr);
00940            
00941         } else {
00942             msg << "Initialization of HSM/ECMA/TAR/IVD NT volume not allowed. "
00943                 << "Use force option.";
00944             log_WriteEvent(
00945                     evt_WARNING, msg.str(), evt_ADMINJOB, m_iJobParams.jobID);
00946             ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00947         }
00948         
00949     } catch (ivd_Exception &e){
00950         log_ERR_m("[" << m_iJobParams.jobID << 
00951                   "] " << "Get volume info failed:" << endl << e);
00952         msg << "DoInitialize failed (" << e.GetFriendly() << ").";
00953         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
00954                        m_iJobParams.jobID, string(m_medium.barcode));
00955         m_ui.DisplayError(msg.str());
00956         throw;
00957     }
00958     
00959 
00960 } // i_AdminJob_i::InitializeSingleVolume

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::DoInitialize ( Int32_t  a_volumeNr,
Int32_t  a_size 
) [private]

Definition at line 964 of file i_adminjob_impl.cpp.

References i_MediumVol_t::accessNr, i_VolInfo_t::accessNum, i_MediumVol_t::accessTime, i_VolInfo_t::appendNum, i_MediaPool_t::blockSize, i_VolInfo_t::blockSize, dbg_DETAIL, dbg_LOW, dbg_NORM, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, evt_ERROR, FindVolInRMDB(), ivd_BaseException::GetFriendly(), i_VOL_IVD, i_VolInfo_t::implID, i_MediumVol_t::initTime, ipc_EXEC_m, ipc_nilStr, i_JobParams::jobID, i_MediumVol_t::lastVerification, log_DBG_m, log_ERR_m, log_FUNC_A_m, log_WriteEvent(), ipc_Log::LogMediumVol(), ipc_Log::LogVolInfo(), i_Job_i::m_activeBeas, m_doFormat, m_idxSysVol, i_Job_i::m_iJobParams, m_mediaPool, m_medVolInRmdb, i_Job_i::m_rm, m_ui, i_MediumVol_t::mediumBarcode, i_VolInfo_t::medVolID, i_MediumVol_t::medVolId, i_MediumVol_t::medVolNr, NULL, i_MediumVol_t::owriteNr, i_VolInfo_t::owriteNum, i_MediumVol_t::owriteTime, i_VolInfo_t::partID, i_JobParams::partUUID, i_VolInfo_t::poolID, i_MediaPool_t::poolUUIDString, rmdb_DATA_VOLUME, rmdb_MEDVOL_EMPTY, rmdb_SYSTEM_VOLUME, i_VolInfo_t::size, i_MediumVol_t::status, i_VolInfo_t::sysVolNum, cmn_UUID_t::ToString(), i_MediumVol_t::totalData, i_VolInfo_t::type, i_MediumVol_t::validData, i_VolInfo_t::volNum, i_MediumVol_t::volSize, i_MediumVol_t::volType, i_MediumVol_t::volUsed, i_MediumVol_t::writeNr, and i_MediumVol_t::writeTime.

Referenced by InitializeSingleVolume().

00965                                                 {
00966     log_FUNC_A_m(DoInitialize, "[" << m_iJobParams.jobID << 
00967                                   "] " << "a_volumeNr=" << a_volumeNr <<
00968                                " a_size=" << a_size);
00969     cmn_UUID_t uuid;
00970     ivd_Time_t now  = time(NULL);
00971     
00972     //is there a medVol Record already in RMDB for this volume?
00973     bool found(false);
00974     i_MediumVol_t medVol;
00975     try {
00976         medVol = m_medVolInRmdb[FindVolInRMDB(a_volumeNr)];
00977         found = true;
00978     }
00979     catch (ivd_Error) {
00980         found = false;
00981     }
00982     
00983     if (!found){
00984         medVol.mediumBarcode    = m_medium.barcode;
00985         medVol.medVolNr         = a_volumeNr;
00986         medVol.status           = 0;
00987         medVol.accessNr         = 0;
00988         medVol.owriteNr         = 0;
00989         medVol.writeNr          = 0;
00990     }
00991     
00992     medVol.medVolId         = CORBA::string_dup(uuid.ToString().c_str());
00993     medVol.volType          = (a_volumeNr == m_idxSysVol) ? 
00994                               rmdb_SYSTEM_VOLUME : rmdb_DATA_VOLUME ;  
00995     medVol.status           = rmdb_MEDVOL_EMPTY;
00996     medVol.volUsed          = 0;
00997     medVol.volSize          = a_size;
00998     medVol.initTime         = now;           
00999     medVol.accessTime       = 0;             
01000     medVol.writeTime        = 0;             
01001     medVol.owriteTime       += 1;             
01002     medVol.lastVerification = 0;             
01003     medVol.totalData        = 0;
01004     medVol.validData        = 0;
01005     log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID << 
01006                        "] " << "Init:" << endl << ipc_Log::LogMediumVol(medVol));
01007 
01008     i_VolInfo_t volInfo;
01009     volInfo.volNum      = a_volumeNr;
01010     volInfo.implID      = CORBA::string_dup(ipc_nilStr);
01011     volInfo.size        = 0;
01012     volInfo.type        = i_VOL_IVD;
01013     volInfo.sysVolNum   = m_idxSysVol;
01014     volInfo.medVolID    = CORBA::string_dup(uuid.ToString().c_str());
01015     log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 
01016                          "] " << "MediaPoolUUID : " << m_mediaPool.poolUUIDString);
01017     
01018     volInfo.poolID      = m_mediaPool.poolUUIDString;
01019     volInfo.partID      = m_iJobParams.partUUID;
01020     volInfo.blockSize   = m_mediaPool.blockSize;
01021     
01022     volInfo.accessNum   = 0;
01023     volInfo.appendNum   = 0;
01024     volInfo.owriteNum   = 0;
01025     
01026     log_DBG_m(dbg_LOW, "[" << m_iJobParams.jobID << 
01027                        "] " << "Init:" << endl << ipc_Log::LogVolInfo(volInfo));
01028     //
01029     // initialize volume.
01030     ostringstream msgBase;    
01031     msgBase <<  "Medium " << m_medium.barcode << ", volume " << a_volumeNr << ": ";
01032     ostringstream msg;
01033     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << "] " << msg.str());
01034 
01035     try {
01036         ipc_EXEC_m(
01037             m_activeBeas[0]->Init(volInfo);
01038             log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
01039                                   "] " << "BEA->Init() returned");
01040             
01041         );
01042         if (a_volumeNr == m_idxSysVol){
01043             //Update Medium Record with SysVol
01044             i_Medium_t_var iMed;
01045             ipc_EXEC_m(iMed = m_rm->SelectMedium(m_medium.barcode););
01046             m_medium = iMed;
01047             m_medium.idxOfSysVol = m_idxSysVol;
01048             ipc_EXEC_m(m_rm->UpdateMedium(m_medium););
01049         }
01050     } catch (ivd_Exception &e){
01051         log_ERR_m("[" << m_iJobParams.jobID << 
01052                                   "] " << "Init Failed:" << endl << e);
01053         msg << msgBase.str() << "Init failed (" << e.GetFriendly() << ").";
01054         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
01055                        m_iJobParams.jobID, string(m_medium.barcode));
01056         m_ui.DisplayError(msg.str());
01057         return;
01058     }
01059 
01060     
01061     
01062     try {
01063         ipc_EXEC_m(
01064             if (found && !m_doFormat) { //format deletes all Volumes
01065                 m_rm->UpdateMediumVol(medVol);
01066             } else {
01067                 // add volume record to RMDB.
01068                 m_rm->AddMediumVol(medVol);
01069             }
01070         )
01071     } catch (ivd_Exception &e){
01072         msg << msgBase.str() 
01073             << "Insert/update of new volume failed (" 
01074             << e.GetFriendly() << ").";
01075         log_ERR_m("[" << m_iJobParams.jobID << 
01076                   "] " << msg.str() << endl << e);
01077         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
01078                        m_iJobParams.jobID, string(m_medium.barcode));
01079         m_ui.DisplayError(msg.str());
01080         return;
01081     }
01082 
01083     msg << msgBase.str() << "Volume initialized.";
01084     ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
01085     
01086 } // i_AdminJob_i::DoInitialize

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::OperateLA ( rm_Resource_t resource  )  [private]

Definition at line 251 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, dbg_DETAIL, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), rm_Resource_t::driveKey, evt_ADMINJOB, evt_ERROR, ivd_BaseException::GetFriendly(), ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, rm_Resource_t::load, i_Job_i::LoadUnload(), log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_iJobParams, m_medium, i_Job_i::m_rm, m_ui, rm_Resource_t::mediumFamily, and mf_DISK.

Referenced by Execute().

00251                                                       {
00252     log_FUNC_m(OperateLA);
00253             
00254     if (IsAborted() || (a_resource.mediumFamily == mf_DISK)) return;
00255     string driveName;
00256     // operate LA.
00257     
00258     ipc_EXEC_m(
00259         i_Drive_t_var drive;
00260         drive = m_rm->SelectDriveByKey(a_resource.driveKey);
00261         driveName = drive->driveName;
00262     )
00263     
00264     try {
00265         //
00266         // check if LA should be operated at all.
00267         if (a_resource.load) {
00268             ostringstream msg;
00269             msg << "Loading medium " << m_medium.barcode <<
00270                     " to drive " << driveName << ".";
00271             ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00272 
00273             LoadUnload(0);
00274             log_DBG_m(dbg_DETAIL, "[" << m_iJobParams.jobID << 
00275                                   "] " << "Some tape moves were done.");
00276          }
00277          else {
00278             ostringstream msg;
00279             msg << "Medium " << m_medium.barcode <<
00280                     " is already present in drive " << driveName << ".";
00281             ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00282          }
00283      }
00284      catch (ivd_Exception &e) {
00285          log_ERR_m("[" << m_iJobParams.jobID << "] " <<  e);
00286          
00287          ostringstream eventText;
00288          eventText << "Problems with Load/Unload (" 
00289                    << e.GetFriendly() << ").";
00290 
00291          log_WriteEvent(evt_ERROR, eventText.str(), evt_ADMINJOB, 
00292                         m_iJobParams.jobID, string(m_medium.barcode));
00293 
00294          m_ui.DisplayError(eventText.str());
00295          throw;
00296      }
00297 } // i_AdminJob_i::OperateLA()

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::StartBEA (  )  [private]

Definition at line 301 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, dbg_NORM, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, evt_ERROR, ivd_BaseException::GetFriendly(), i_Job_i::GetResources(), ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activeBeas, i_Job_i::m_iJobParams, m_medium, m_ui, i_Job_i::StartBea(), and i_Job_i::WaitBea().

Referenced by Execute().

00301                             {
00302     log_FUNC_m(StartBEA);
00303 
00304     if (IsAborted()) return;
00305 
00306     try {
00307         ipc_EXEC_m(
00308             ostringstream msg;
00309             msg << "Starting Back End Agent.";
00310             ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00311 
00312             StartBea(string(GetResources()[0].driveHost),
00313                                 GetResources()[0].resNum);
00314             log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID <<
00315                                   "] " << "BEA started.");
00316 
00317             WaitBea(0);
00318             ipc_EXEC_m(
00319                 m_activeBeas[0]->UseResources((GetResources())[0]);
00320             );
00321         )
00322     }
00323     catch (ivd_Exception &ex) {
00324         log_ERR_m("[" << m_iJobParams.jobID << "] " << "Caught error when starting BEA. " << ex);
00325 
00326         ostringstream eventText;
00327         eventText << "Problems with Back End Agent ("
00328                   << ex.GetFriendly() << ").";
00329         log_WriteEvent(evt_ERROR, eventText.str(), evt_ADMINJOB,
00330                        m_iJobParams.jobID, string(m_medium.barcode));
00331         m_ui.DisplayError(eventText.str());
00332         throw;
00333     }
00334 } // i_AdminJob_i::StartBEA()

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::DeleteMedVolFromRMDB ( string  a_barcode,
Int32_t  a_medVolNum 
) [private]

Definition at line 338 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, dbg_NORM, ipc_EXEC_m, i_JobParams::jobID, log_DBG_m, log_FUNC_m, log_WRN_m, i_Job_i::m_iJobParams, m_medium, and i_Job_i::m_rm.

Referenced by Format(), and Initialize().

00338                                                                              {
00339     log_FUNC_m(DeleteMedVolFromRMDB);
00340     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00341                         "] " << "Removing volume " << a_medVolNum
00342                         << " on medium " << a_barcode );
00343     try {
00344         ipc_EXEC_m(m_rm->RemoveMediumVol(
00345                                     m_medium.barcode,
00346                                     a_medVolNum);
00347         )
00348     } catch (ivd_Exception& e){
00349         log_WRN_m("[" << m_iJobParams.jobID << 
00350                   "] " << "ADMIN JOB: Error Deleting Volume in RMDB" << e); //log and ignore
00351     }
00352 }

Here is the caller graph for this function:

void i_AdminJob_i::Format (  )  [private]

The formula:

input:

  • N data partitions
  • SS sys partition size (and position)
  • TS tape size (in MB)

calculation OH = 262 (overhead per partition) MC = 1.138 (factor by which the specified size is increased by AIT drive; Murphy constant ;) ) TS = 50972 MB (AIT-2 in AIT mode)

SS' = SS/MC DS = (TS-SS-N*OH)/N

DS'=DS/MC

Definition at line 378 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, cfg_MAX_VOLUME_NUM, i_Medium_t::currentVolume, dbg_LOW, dbg_NORM, DeleteMedVolFromRMDB(), DetectVolumeHeader(), ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), ui_MsgWriter::DisplayWarning(), evt_ADMINJOB, evt_ERROR, evt_WARNING, ivd_BaseException::GetFriendly(), i_VOL_BLANK, i_VOL_OTHER, i_Medium_t::idxOfSysVol, ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activeBeas, m_doInit, m_forced, m_idxSysVol, i_Job_i::m_iJobParams, m_mediaPool, m_medium, m_medVolInRmdb, i_Job_i::m_rm, m_ui, i_Medium_t::mediumType, MIF_MEDIUM_AIT2_VOLUME_OVERHEAD, MIF_MEDIUM_AIT2_VOLUMESIZE_FACTOR, mt_DISK, i_MediaPool_t::numOfVolumes, i_Medium_t::numOfVolumes, rmdb_MEDIUM_OPEN, SetSysVolIdx(), i_MediaPool_t::sizeOfSysVol, i_MediaPool_t::sizeOfVolume, i_Medium_t::status, svl_NONE, and i_MediaPool_t::sysVolLocation.

Referenced by Execute().

00378                           {
00379     log_FUNC_m(Format);
00380            
00381     if (IsAborted()) return;
00382     // delete all medium volume entries.
00383     try {
00384         ipc_EXEC_m(
00385             i_Medium_t_var iMed = m_rm->SelectMedium(m_medium.barcode);
00386             m_medium = iMed;
00387             m_medium.currentVolume = 0;
00388             m_medium.numOfVolumes = 0;
00389             m_medium.idxOfSysVol = 0;
00390             m_medium.status = m_medium.status & ~rmdb_MEDIUM_OPEN;
00391             m_rm->UpdateMedium(m_medium);
00392         )
00393     } catch (ivd_Exception &e){
00394         log_ERR_m("[" << m_iJobParams.jobID << "] " << e);
00395     }
00396 
00397     for (UInt32_t ct = 0; ct < m_medVolInRmdb.length(); ct++) {
00398         try {
00399             ipc_EXEC_m(
00400                 if (IsAborted()) return;
00401                 DeleteMedVolFromRMDB(   string(m_medium.barcode), 
00402                                         m_medVolInRmdb[ct].medVolNr);
00403             )
00404         } catch (ivd_Exception &e){
00405             log_ERR_m("[" << m_iJobParams.jobID << "] " << e);
00406         }
00407     }
00408 
00409     // calculate whole medium size.
00410     UInt32_t wholeSize(0);
00411     UInt32_t numOfVolOnMed(0);
00412     i_VolSizes_t newVolSizes;
00413     
00414     //Check if there are some volumes
00415     i_VolSizes_t_var volumeSizes;
00416     ipc_EXEC_m(
00417         volumeSizes = m_activeBeas[0]->GetVolumeSizes();
00418     );
00419     
00420     numOfVolOnMed = volumeSizes->length();
00421     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00422         "] " << "Medium volumes found: " << numOfVolOnMed << ".");
00423 
00424     if (m_medium.mediumType == mt_DISK) {
00425         i_VolSize_t medSize;
00426         ipc_EXEC_m(
00427             medSize = m_activeBeas[0]->GetMediumSize();
00428             log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00429                 "] " << "Medium Size: " << medSize << ".");
00430         );
00431         UInt32_t volNum = medSize / m_mediaPool.sizeOfVolume;
00432         if (volNum > cfg_MAX_VOLUME_NUM){
00433             ostringstream msg;
00434             msg << "Medium " << m_medium.barcode 
00435                 << ": only 255 volumes will be created "
00436                 <<"(not all disk space will be used).";
00437 
00438             ipc_EXEC_m(m_ui.DisplayWarning(msg.str()););
00439             log_WriteEvent(evt_WARNING, msg.str(), "", m_iJobParams.jobID);
00440             volNum = cfg_MAX_VOLUME_NUM;
00441         }
00442         if (volNum > 0){
00443             newVolSizes.length(volNum);
00444         } else {
00445             newVolSizes.length(1);
00446         }
00447         for (UInt32_t j(0); j < newVolSizes.length(); j++){
00448             newVolSizes[j] = m_mediaPool.sizeOfVolume;
00449             log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00450                 "] " << "New volSize["<< j << "] " << newVolSizes[j] << ".");
00451         }    
00452     }
00453     else {
00454         for (UInt32_t ct = 0; ct < numOfVolOnMed; ct++) {
00455             //wholeSize += (volumeSizes[ct] + MIF_MEDIUM_AIT2_VOLUME_OVERHEAD);
00456                 wholeSize += volumeSizes[ct];
00457         };
00458         wholeSize += ( numOfVolOnMed - 1 ) * MIF_MEDIUM_AIT2_VOLUME_OVERHEAD;
00459         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00460                                 "] "  <<       
00461                                 "Medium total size [MB]: " << wholeSize << ".");
00462         if (IsAborted()){ 
00463             return;
00464         }
00465 
00466         //
00467         // generate structure with volume sizes.
00468         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00469                             "] " << "Calculating volume sizes, which will be passed to BEA.");
00470 
00471         
00472         newVolSizes.length(m_mediaPool.numOfVolumes);
00473 
00474         UInt32_t dataVolumeSize(0);
00475         
00495         // media pool has system volume.
00496         if ( (m_mediaPool.numOfVolumes > 1) && (m_mediaPool.sysVolLocation != svl_NONE) ) {
00497             dataVolumeSize = (
00498                                 wholeSize 
00499                                 - m_mediaPool.sizeOfSysVol
00500                                 - (m_mediaPool.numOfVolumes - 1) * MIF_MEDIUM_AIT2_VOLUME_OVERHEAD
00501 
00502                             ) / (m_mediaPool.numOfVolumes - 1);
00503 
00504             
00505             UInt32_t sysVolumeSize = UInt32_t(m_mediaPool.sizeOfSysVol 
00506                                     / MIF_MEDIUM_AIT2_VOLUMESIZE_FACTOR);
00507 
00508             log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID << 
00509                             "] " << "sysVolumeSize = " << sysVolumeSize);
00510             
00511             dataVolumeSize = UInt32_t(dataVolumeSize
00512                                     / MIF_MEDIUM_AIT2_VOLUMESIZE_FACTOR);
00513 
00514             log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID << 
00515                             "] " << "dataVolumeSize = " << dataVolumeSize);
00516             SetSysVolIdx(m_mediaPool.numOfVolumes);
00517 
00518             for (UInt32_t ct = 0; ct < m_mediaPool.numOfVolumes - 1; ct++) {
00519                 //counter is from 0 to numOfVol - 1, 
00520                 //m_idxSysVol is absolute number on medium (1 - numofVol)
00521                 if (ct == (UInt32_t(m_idxSysVol) - 1) ) {
00522                     newVolSizes[ct] = sysVolumeSize;
00523                     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00524                                     "] " << "System volume, BEA-passed size [MB]: " <<
00525                                         sysVolumeSize);
00526                 } else {
00527                     newVolSizes[ct] = dataVolumeSize;
00528                     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00529                                     "] " << "Volume " << ct + 1 << 
00530                                         ", BEA-passed size [MB]: " << dataVolumeSize);
00531                 }
00532             }
00533         } 
00534         else { // media pool does not have system volume.
00535             dataVolumeSize = UInt32_t(((wholeSize 
00536                             - m_mediaPool.numOfVolumes * MIF_MEDIUM_AIT2_VOLUME_OVERHEAD)
00537                             / m_mediaPool.numOfVolumes) 
00538                             / MIF_MEDIUM_AIT2_VOLUMESIZE_FACTOR);
00539             
00540             for (UInt32_t ct = 0; ct < m_mediaPool.numOfVolumes - 1; ct++) {
00541                 newVolSizes[ct] = dataVolumeSize;
00542                 log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00543                                     "] " << "Volume " << ct + 1 << 
00544                                     ", BEA-passed size [MB]: " << dataVolumeSize);
00545             }
00546         }
00547         newVolSizes[m_mediaPool.numOfVolumes - 1] = 1;
00548         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00549                                     "] " << "Volume, real BEA size [MB]: 1");
00550 
00551         ostringstream msg;
00552         msg << "Medium " << m_medium.barcode << ": Formatting started.";
00553         ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00554     }
00555 
00556     
00557     // Check if volume is initialized
00558     i_VolInfo_t_var volInfo;
00559     bool foundHdr(false);
00560     if (!m_forced && (numOfVolOnMed > 0)) {
00561         DetectVolumeHeader(volInfo, 1);
00562         foundHdr = (volInfo->type != i_VOL_BLANK) && (volInfo->type != i_VOL_OTHER);
00563     } else log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00564                                "] " << "No need to detect volume header");
00565 
00566     if ( (numOfVolOnMed == 0) || !foundHdr || m_forced ){
00567         try {
00568             ipc_EXEC_m(
00569                 log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00570                                     "] " << "Structure passed to BEA, size " << 
00571                                     newVolSizes.length() );
00572                 m_activeBeas[0]->Format(newVolSizes, false);
00573             )
00574         } catch (ivd_Exception &e){
00575             log_ERR_m("[" << m_iJobParams.jobID << 
00576                     "] " << "Format failed:" << endl << e);
00577             ostringstream msg;
00578             msg << "Format failed (" << e.GetFriendly() << ").";
00579             log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
00580                         m_iJobParams.jobID, string(m_medium.barcode));
00581             m_ui.DisplayError(msg.str());
00582             m_doInit = false;
00583             return;
00584         }
00585     } else {
00586         ostringstream msg;
00587         msg << "[" << m_iJobParams.jobID << 
00588                 "] " << "Format failed. Medium contains HSM/ECMA header";
00589         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
00590             m_iJobParams.jobID, string(m_medium.barcode));
00591         m_ui.DisplayError(msg.str());
00592         m_doInit = false;
00593         return;
00594     }
00595 
00596     ostringstream msg;
00597     msg << "Medium " << m_medium.barcode 
00598         << ": Formatting finished successfully, "
00599         << newVolSizes.length() << " volumes created.";
00600     ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00601  
00602     //
00603     // print actually written volume sizes.
00604     i_VolSizes_t_var volSizesAfterFmt;
00605     ipc_EXEC_m(
00606         volSizesAfterFmt = m_activeBeas[0]->GetVolumeSizes();
00607     );
00608 
00609     for (UInt32_t ct = 0; ct < volSizesAfterFmt->length(); ct++) {
00610         log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00611                             "] " << "Volume " << ct + 1 << 
00612                             ", actual size on medium [MB]: " << volSizesAfterFmt[ct]);
00613     }
00614     
00615     
00616     try {
00617         ipc_EXEC_m(
00618             i_Medium_t_var iMed = m_rm->SelectMedium(m_medium.barcode);
00619             m_medium = iMed;
00620             // update medium record in RMDB with actual medium status after formatting.
00621             
00622             m_medium.numOfVolumes = volSizesAfterFmt->length();
00623             m_medium.idxOfSysVol = 0; //this will be set when SysVol is initialized
00624             m_rm->UpdateMedium(m_medium);
00625         )
00626     } catch (ivd_Exception& e){
00627         log_ERR_m("[" << m_iJobParams.jobID << 
00628                   "] " << "Error While updating medium record after Format" << e)
00629     }
00630     
00631 } // i_AdminJob_i::Format()

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::Initialize ( void   )  [private]

Definition at line 635 of file i_adminjob_impl.cpp.

References i_Medium_t::barcode, i_MediaPool_t::blockSize, dbg_DETAIL, dbg_LOW, dbg_NORM, DeleteMedVolFromRMDB(), ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), ui_MsgWriter::DisplayWarning(), evt_ADMINJOB, evt_ERROR, ivd_BaseException::GetFriendly(), i_Medium_t::idxOfSysVol, InitializeSingleVolume(), ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), log_WRN_m, i_Job_i::m_activeBeas, m_doFormat, m_idxSysVol, i_Job_i::m_iJobParams, m_initAllVol, m_initSucceeded, m_initVol, m_makeSysVol, m_mediaPool, m_medium, m_medVolInRmdb, i_Job_i::m_rm, m_ui, mt_DISK, i_MediaPool_t::numOfVolumes, i_Medium_t::numOfVolumes, rmdb_INIT_MEDIUM_STATUS, rmdb_MEDIUM_IN_USE, SetSysVolIdx(), svl_NONE, and i_MediaPool_t::sysVolLocation.

Referenced by Execute().

00635                               {
00636     log_FUNC_m(Initialize);
00637     
00638     if (IsAborted()) return;
00639     ostringstream msg;
00640     UInt32_t numOfVolOnMed;
00641     //
00642     // get number of volumes on medium.
00643     i_VolSizes_t_var volumeSizes;
00644     try {
00645         ipc_EXEC_m(
00646             volumeSizes = m_activeBeas[0]->GetVolumeSizes();
00647             numOfVolOnMed = volumeSizes->length();
00648         )
00649     } catch (ivd_Exception &e){
00650         log_ERR_m("[" << m_iJobParams.jobID << 
00651                   "] " << "Get Volume Sizes Failed:" << endl << e);
00652         msg << "Get volume sizes failed (" << e.GetFriendly() << ").";
00653         log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
00654                        m_iJobParams.jobID, string(m_medium.barcode));
00655         m_ui.DisplayError(msg.str());
00656         return;
00657     }
00658 
00659     log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
00660                         "] " << " Found " << numOfVolOnMed 
00661                         << " volumes on medium.");
00662 
00663     if ( (m_mediaPool.sysVolLocation != svl_NONE) && (numOfVolOnMed > 1)) { //there should be a SysVol on this medium
00664         m_makeSysVol = true;
00665         log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 
00666                              "] " << "SysVol will be created");
00667         if ( (m_medium.idxOfSysVol == 0) || m_initAllVol) {
00668             SetSysVolIdx(numOfVolOnMed);
00669         } else {
00670             m_idxSysVol = m_medium.idxOfSysVol;
00671             log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 
00672                                   "] " << "m_idxSysVol=" << m_idxSysVol);
00673         }
00674     } else {
00675         m_makeSysVol = false;
00676         log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID << 
00677                               "] " << "SysVol will NOT be created");
00678     }
00679     if (IsAborted()) {
00680         return;
00681     }
00682 
00683     // update medium record in RMDB with actual volume status on medium.
00684     i_Medium_t_var iMed;
00685     ipc_EXEC_m(
00686         iMed = m_rm->SelectMedium(m_medium.barcode);
00687     );
00688     m_medium = iMed;
00689     m_medium.numOfVolumes = numOfVolOnMed;
00690     m_medium.blockSize = m_mediaPool.blockSize;
00691     m_medium.status = rmdb_INIT_MEDIUM_STATUS | rmdb_MEDIUM_IN_USE;
00692     ipc_EXEC_m(
00693         m_rm->UpdateMedium(m_medium);
00694     );
00695     
00696     if (numOfVolOnMed == 0) {
00697         msg << "No volumes found on the medium.";
00698         ipc_EXEC_m(m_ui.DisplayError(msg.str());)
00699         return;
00700     }
00701     
00702     msg << "Medium " << m_medium.barcode
00703         << ": " << numOfVolOnMed << " volumes found.";
00704     ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
00705     msg.str("");
00706     
00707     if (   m_mediaPool.numOfVolumes != numOfVolOnMed
00708         && m_medium.mediumType != mt_DISK) {
00709 
00710         msg << m_mediaPool.numOfVolumes << 
00711             " volumes defined in media pool, " << numOfVolOnMed << 
00712             " volumes found on medium!";
00713         ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00714         msg.str("");
00715     }
00716     
00717     if (m_initAllVol) {
00718         //init sysVolFirst (if configured)
00719         if (m_idxSysVol > 0) {
00720             try {
00721                 InitializeSingleVolume(m_idxSysVol);
00722             } catch (ivd_Exception &e){
00723                 log_DBG_m(dbg_LOW, e);
00724                 throw;
00725             }
00726         }
00727 
00728         for (UInt32_t i = 0; i < volumeSizes->length(); i++) {
00729             if (IsAborted()) return;
00730             
00731             if ((i + 1) != UInt32_t(m_idxSysVol)) {
00732                 try {
00733                     InitializeSingleVolume(i + 1);
00734                     m_initSucceeded = true;
00735                 } catch (ivd_Exception){
00736                     //ignore            
00737                 }
00738             }
00739         }
00740         for (UInt32_t j = 0; j < m_medVolInRmdb.length(); j++) {
00741             if (    !m_doFormat && 
00742                     (   
00743                         static_cast<UInt32_t>(m_medVolInRmdb[j].medVolNr) > 
00744                         volumeSizes->length()
00745                     )
00746                 ){
00747                 
00748                 DeleteMedVolFromRMDB(string(m_medium.barcode), 
00749                                             m_medVolInRmdb[j].medVolNr);
00750             }
00751         }
00752 
00753     } else {
00754         for (UInt32_t i = 0; i < m_initVol.size(); i++) {
00755             log_DBG_m(dbg_NORM, "m_initVol[i]:" << m_initVol[i] 
00756                                 << " volumeSizes->length():" 
00757                                 << volumeSizes->length());
00758             if (m_initVol[i] <= volumeSizes->length()){
00759                 if (IsAborted()) return;
00760                 try {
00761                     InitializeSingleVolume(m_initVol[i]);
00762                     m_initSucceeded = true;
00763                 } catch (ivd_Exception){
00764                     //ignore            
00765                 }
00766                 
00767             } else {
00768                 msg.str("");
00769                 msg << "Can not initialize volume " << m_initVol[i] << 
00770                        " because medium has only " << volumeSizes->length() 
00771                        << " volumes";
00772                 log_WRN_m("[" << m_iJobParams.jobID << 
00773                           "] " << msg.str());
00774                 ipc_EXEC_m(m_ui.DisplayWarning(msg.str());)
00775             }
00776         }
00777     }
00778 } // mif_AdminJobExecutor::Initialize() 

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::RecreateFRIandMIC (  )  [private]

Generates new FRI on disk from specified data medium volume.

Complete volume is rescanned.

Exceptions:
i_IvdException if medium/hardware error occurs or FRI can't be generated.
void GenerateFRIFromMedVol( in string a_tapeDrive, in i_VolInfo_t a_volume) raises (i_IvdException);

Regenerates MIC values for one medium volume. void RecreateMIC(in i_VolInfo_t a_volume) raises (i_IvdException);

Definition at line 1102 of file i_adminjob_impl.cpp.

References i_MediumVol_t::accessNr, i_VolInfo_t::accessNum, i_MediumVol_t::accessTime, i_VolInfo_t::accessTime, i_VolInfo_t::appendNum, i_VolInfo_t::appendTime, i_VolInfo_t::blockSize, dbg_LOW, dbg_NORM, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, evt_ERROR, FindVolInRMDB(), ivd_BaseException::GetFriendly(), i_SV_APPEND, i_VOL_IVD, i_VolInfo_t::implID, ipc_EXEC_m, ipc_nilStr, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), ipc_Log::LogVolInfo(), i_Job_i::m_activeBeas, m_doFri, m_doMic, i_Job_i::m_iJobParams, m_initVol, m_into, m_intoPath, m_mediaPool, m_medVolInRmdb, m_ui, i_MediumVol_t::medVolId, i_VolInfo_t::medVolID, i_MediumVol_t::medVolNr, i_MediumVol_t::owriteNr, i_VolInfo_t::owriteNum, i_MediumVol_t::owriteTime, i_VolInfo_t::owriteTime, i_VolInfo_t::partID, i_JobParams::partUUID, i_VolInfo_t::poolID, i_MediaPool_t::poolUUIDString, rmdb_SYSTEM_VOLUME, i_VolInfo_t::size, i_VolInfo_t::sysVolNum, i_VolInfo_t::type, i_VolInfo_t::volNum, i_MediumVol_t::volSize, i_MediumVol_t::volType, i_MediumVol_t::volUsed, i_MediumVol_t::writeNr, and i_MediumVol_t::writeTime.

Referenced by Execute().

01102                                     {
01103     log_FUNC_m(RecreateFRI);
01104 
01105     for (UInt32_t i = 0; i < m_initVol.size(); ++i) {  
01106         
01107         i_MediumVol_t &medVol = m_medVolInRmdb[FindVolInRMDB(m_initVol[i])];
01108 
01109         ostringstream msgBase;    
01110         msgBase <<  "Medium " << m_medium.barcode 
01111                 << ", volume " << medVol.medVolNr << ": ";
01112         
01113         ostringstream msg;
01114         try {
01115             if (medVol.volUsed == 0)  {
01116                 msg.str("");
01117                 msg << msgBase.str() << "Medium volume is empty. Skipped.";
01118                 m_ui.DisplayMessage(msg.str());
01119                 log_DBG_m(dbg_LOW,msg.str());
01120                 msg.str("");
01121             } else if (medVol.volType == rmdb_SYSTEM_VOLUME){
01122                 msg.str("");
01123                 msg << msgBase.str() << "Medium volume is system. Skipped.";
01124                 m_ui.DisplayMessage(msg.str());
01125                 msg.str("");
01126             } else {
01127                 ipc_EXEC_m(
01128                     i_VolInfo_t volInfo;
01129                     volInfo.volNum      = medVol.medVolNr;
01130                     volInfo.implID      = CORBA::string_dup(ipc_nilStr);
01131                     volInfo.size        = medVol.volSize;
01132                     volInfo.type        = i_VOL_IVD;
01133                     volInfo.sysVolNum   = m_medium.idxOfSysVol;
01134                     volInfo.medVolID    = medVol.medVolId;
01135                     volInfo.poolID      = m_mediaPool.poolUUIDString;
01136 
01137                     volInfo.partID      = m_iJobParams.partUUID;
01138                     volInfo.blockSize   = m_medium.blockSize;
01139 
01140                     volInfo.accessNum   = medVol.accessNr;
01141                     volInfo.appendNum   = medVol.writeNr;
01142                     volInfo.owriteNum   = medVol.owriteNr;
01143 
01144                     volInfo.accessTime  = medVol.accessTime;
01145                     volInfo.appendTime  = medVol.writeTime;
01146                     volInfo.owriteTime  = medVol.owriteTime;
01147 
01148                     log_DBG_m(dbg_LOW,
01149                         "[" << m_iJobParams.jobID <<
01150                         "] " << "Recreate FRI:" << endl << ipc_Log::LogVolInfo(volInfo));
01151                     //
01152                     // recreate FRI for volume.
01153                     if (IsAborted()) return;
01154                     if (m_doFri){
01155                         if (m_into){
01156                             msg << msgBase.str() << "Recreating FRI into " << m_intoPath << ".";
01157                             m_ui.DisplayMessage(msg.str());
01158                             msg.str("");
01159                         }
01160                         
01161                         msg << msgBase.str() << "Recreating FRI started...";
01162                         m_ui.DisplayMessage(msg.str());
01163                         msg.str("");
01164                         i_VolInfoList_t volInfoList;
01165                         volInfoList.length(1);
01166                         volInfoList[0] = volInfo;
01167                         i_BoolList_t emptyList;
01168                         m_activeBeas[0]->RecreateFastRecoveryInfo(
01169                                     volInfoList,
01170                                     false,
01171                                     emptyList,
01172                                     i_SV_APPEND,
01173                                     m_into,
01174                                     CORBA::string_dup(m_intoPath.c_str())
01175                         );
01176                             
01177                         msg << msgBase.str() << "Recreating FRI finished.";
01178                         m_ui.DisplayMessage(msg.str());
01179                         msg.str("");
01180 
01181                         log_DBG_m(dbg_NORM,
01182                             "[" << m_iJobParams.jobID <<
01183                             "] " << "BEA->RecreateFastRecoveryInfo() returned");
01184                     }
01185                     if (IsAborted()) return;
01186                     if (m_doMic){
01187                         msg << msgBase.str() << "Recreating MIC started.";
01188                         m_ui.DisplayMessage(msg.str());
01189                         msg.str("");
01190 
01191                         m_activeBeas[0]->RecreateMIC(volInfo);
01192                         log_DBG_m(dbg_NORM,
01193                             "[" << m_iJobParams.jobID << "] " << "BEA->GenerateMIC() returned");
01194                         msg << msgBase.str() << "Recreating MIC finished.";
01195                         m_ui.DisplayMessage(msg.str());
01196                         msg.str("");
01197                     }
01198                 )
01199 //
01200 // Proper system volume action must be specified (see i_bea.idl). Discuss with Luka.
01201 //
01202             }
01203 
01204         } catch (ivd_Exception &e){
01205             log_ERR_m("[" << m_iJobParams.jobID <<
01206                                       "] " << "FRI Recreate Failed:" << endl << e);
01207             msg << msgBase.str() << "FRI Recreate failed (" << e.GetFriendly() << ").";
01208             log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB, 
01209                            m_iJobParams.jobID, string(m_medium.barcode));
01210             m_ui.DisplayError(msg.str());
01211             msg.str("");
01212         }
01213     }
01214 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CloseVolume (  )  [private]

Definition at line 1218 of file i_adminjob_impl.cpp.

References dbg_DETAIL, dbg_LOW, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, evt_ERROR, ivd_BaseException::GetFriendly(), i_Job_i::GetResources(), ipc_EXEC_m, i_Job_i::IsAborted(), i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activeBeas, i_Job_i::m_iJobParams, m_initVol, i_Job_i::m_rm, m_ui, i_MediumVol_t::medVolId, i_Resource_t::medVolId, and i_Resource_t::medVolNr.

Referenced by Execute().

01218                               {
01219     log_FUNC_m(CloseVolume);
01220 
01221     i_Resource_t tmpRes;
01222     tmpRes = GetResources()[0];
01223 
01224     for (UInt32_t i = 0; i < m_initVol.size(); ++i) {
01225         ostringstream msgBase;
01226         msgBase <<  "Medium " << m_medium.barcode 
01227                 << ", volume " << m_initVol[i] << ": ";
01228 
01229         ostringstream msg;
01230         try {
01231             log_DBG_m(dbg_LOW,
01232                 "[" << m_iJobParams.jobID << "] " << "Volume Close:" );
01233             //
01234             // close Volume for volume.
01235             if (IsAborted()) return;
01236 
01237             //send message to cli
01238             ostringstream msg;
01239             msg << msgBase.str() << "Closing volume...";
01240             ipc_EXEC_m(m_ui.DisplayMessage(msg.str()););
01241 
01242             log_WriteEvent(msg.str(), evt_ADMINJOB, m_iJobParams.jobID);
01243 
01244             ipc_EXEC_m( m_activeBeas[0]->CloseMediumVolume(m_initVol[i]); );
01245 
01246             log_DBG_m(dbg_DETAIL, "[" << m_iJobParams.jobID <<
01247                                 "] " << "BEA->CloseMediumVolume() returned");
01248         } catch (ivd_Exception &e){
01249             // mark volume as closed
01250             try {
01251                 ipc_EXEC_m( m_rm->VolumeFull(GetResources()[0].medVolId); );
01252             } catch (ivd_Error &e) {
01253                 log_ERR_m("[" << m_iJobParams.jobID <<
01254                     "] " << "VolumeClose Failed to mark Volume as Full" << endl << e);
01255             }
01256             log_ERR_m("[" << m_iJobParams.jobID <<
01257                                       "] " << "VolumeClose Failed:" << endl << e);
01258             msg << msgBase.str() << "VolumeClose failed (" << e.GetFriendly() << ").";
01259             log_WriteEvent(evt_ERROR, msg.str(), evt_ADMINJOB,
01260                            m_iJobParams.jobID, string(m_medium.barcode));
01261 
01262             ipc_EXEC_m( m_ui.DisplayError(msg.str()); )
01263         }
01264         msg.str("");
01265 
01266         if ( i+1 < m_initVol.size() ) {
01267             // Get medium volume ID for next volume and sent data to BEA
01268             // to be able to use the resources properly.
01269             ipc_EXEC_m(
01270                 i_MediumVol_t_var medVol(
01271                 m_rm->SelectMediumVol(m_medium.barcode, m_initVol[i+1]) );
01272                 tmpRes.medVolId = CORBA::string_dup(medVol->medVolId);
01273                 tmpRes.medVolNr = m_initVol[i+1];
01274             );
01275             m_activeBeas[0]->UseResources(tmpRes);
01276         }
01277     }
01278 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::SetSysVolIdx ( UInt32_t  a_numOfVol  )  [private]

Definition at line 356 of file i_adminjob_impl.cpp.

References dbg_LOW, ie_FATAL_ERROR, i_JobParams::jobID, log_DBG_m, log_FUNC_m, m_idxSysVol, i_Job_i::m_iJobParams, m_mediaPool, svl_FIRST, svl_LAST, svl_MIDDLE, and i_MediaPool_t::sysVolLocation.

Referenced by Format(), and Initialize().

00356                                                   {
00357     log_FUNC_m(SetSysVolIdx);
00358     switch (m_mediaPool.sysVolLocation) {
00359         case(svl_FIRST):
00360             m_idxSysVol = 1;
00361             break;
00362         case(svl_MIDDLE):
00363             m_idxSysVol = a_numOfVol/2 + 1;
00364             break;
00365         case(svl_LAST):
00366             m_idxSysVol = a_numOfVol;
00367             break;
00368         default:
00369             throw ivd_InternalError(ie_FATAL_ERROR, "MediaPool sysVolLocation should be set");
00370     }
00371     log_DBG_m(dbg_LOW,"[" << m_iJobParams.jobID << 
00372                       "] " << "m_idxSysVol=" << m_idxSysVol);    
00373 }

Here is the caller graph for this function:

void i_AdminJob_i::Execute (  )  [private, virtual]

Implements i_Job_i.

Definition at line 1284 of file i_adminjob_impl.cpp.

References CheckMedium(), CheckVolumesForFormatAndInit(), CloseVolume(), dbg_DETAIL, dbg_NORM, ui_MsgWriter::DisplayMessage(), evt_ADMINJOB, i_Job_i::Finished(), Format(), i_Job_i::GetResources(), i_FAILED, i_RESOURCE_ERROR, i_SUCCEDED, Initialize(), ipc_EXEC_m, i_Job_i::IsAborted(), i_Job_i::IsFinished(), job_MED_PROC, i_JobParams::jobID, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), i_Job_i::m_activate_c, i_Job_i::m_activate_x, m_doCloseVolume, m_doFormat, m_doFri, m_doInit, m_doMic, i_Job_i::m_iJobParams, i_Job_i::m_rm, i_Job_i::m_status, m_ui, i_Job_i::NeedsProcess(), OperateLA(), RecreateFRIandMIC(), i_Job_i::SetDriveProperties(), i_Job_i::SetResProcessed(), i_Job_i::SetResRequested(), i_Job_i::SetStatus(), SetVolumes(), StartBEA(), and cmn_Condition::Wait().

01284                           {
01285     log_FUNC_m(Execute);
01286     try {
01287         try {
01288             ipc_EXEC_m(
01289                 ostringstream msg;
01290                 msg << "Started.";
01291 
01292                 log_WriteEvent(msg.str(), evt_ADMINJOB, 
01293                     m_iJobParams.jobID, string(m_medium.barcode));
01294                 m_ui.DisplayMessage(msg.str());
01295 
01296                 log_DBG_m(dbg_NORM,"[" << m_iJobParams.jobID << 
01297                     "] " << "ADMIN JOB: Started.");
01298 
01299                 log_DBG_m(dbg_NORM, "[" << m_iJobParams.jobID << 
01300                     "] " << " waiting for resource allocation.");
01301 
01302                 msg.str("");
01303                 msg << "Requesting resources...";
01304                 m_ui.DisplayMessage(msg.str());
01305                 SetStatus(job_MED_PROC);
01306 
01307                 SetResRequested(0);
01308                 m_rm->GetResources(this->_this(), m_iJobParams, GetResources());
01309             )
01310         }
01311         catch (ivd_Exception &ex) {
01312             log_ERR_m("[" << m_iJobParams.jobID << "] " 
01313                         "Caught exception in n calling RM GetResources: " << ex);
01314             m_status = i_RESOURCE_ERROR;
01315             throw;
01316         }
01317         ipc_EXEC_m(
01318 
01319             while ( !IsFinished() &&
01320                     !IsAborted() ) {
01321 
01322                 cmn_MutexLock l(m_activate_x);
01323 
01324                 if (!IsAborted()){
01325                     for (UInt32_t i = 0 ; i < GetResources().length(); i++){
01326                         log_DBG_m(dbg_NORM,"[" << m_iJobParams.jobID <<
01327                                             "] " << "Processing copyNum:" << i <<
01328                                              " resources assigned:" << boolalpha <<
01329                                              GetResources()[i].resAssigned <<
01330                                              " copy processed:" << boolalpha <<
01331                                              GetResources()[i].resProcessed);
01332 
01333                         if (NeedsProcess(i)) {
01334 
01335                             if( m_doFormat || m_doInit ){
01336                                 CheckMedium();
01337                                 SetVolumes();
01338                                 CheckVolumesForFormatAndInit(false);
01339                             }
01340                             SetDriveProperties(i);
01341 
01342                             if (IsAborted()) return;
01343 
01344                             rm_Resource_t rmRes;
01345                             rmRes = GetResources()[i];
01346                             OperateLA(rmRes);
01347 
01348                             if (IsAborted()) return;
01349 
01350                             StartBEA();
01351                             //
01352                             // format (partition) medium.
01353                             if (IsAborted()) return;
01354 
01355                             SetResProcessed(i);
01356                             if (m_doFormat) {
01357                                 Format();
01358                             }
01359 
01360                             if (IsAborted()) return;
01361                             //
01362                             // initialize medium volume(s).
01363                             if (m_doInit) {
01364                                 Initialize();
01365                             };
01366 
01367                             if (IsAborted()) return;
01368                             //
01369                             // Recreate FRI.
01370                             if (m_doFri || m_doMic) {
01371                                 RecreateFRIandMIC();
01372                             };
01373 
01374                             if (m_doCloseVolume) {
01375                                 CloseVolume();
01376 
01377                         }
01378                         Finished();
01379                         break;
01380                     }
01381                 }
01382                 if (!IsFinished() &&
01383                     !IsAborted()) {
01384 
01385                     log_DBG_m(dbg_DETAIL,"[" << m_iJobParams.jobID <<
01386                                             "] " <<  " waiting for resources ...");
01387                     m_activate_c.Wait();
01388                 }
01389 
01390                 }
01391             }
01392             m_status = i_SUCCEDED;
01393         )
01394     }
01395     catch (ivd_Exception &ex) {
01396         log_ERR_m("Caught exception in Execute(): " << ex);
01397         m_status = i_FAILED;
01398         throw;
01399     }
01400     catch (ivd_InternalError &ie){
01401         log_ERR_m("Caught internal Error in Execute(): " << ie);
01402         m_status = i_FAILED;
01403         throw;
01404     }
01405     catch (...) {
01406         log_ERR_m("Caught unknown error in Execute().");
01407         m_status = i_FAILED;
01408         throw;
01409     }
01410 } // mif_AdminJobExecutor::Run

Here is the call graph for this function:

void i_AdminJob_i::CheckMedium (  )  [private]

Definition at line 1414 of file i_adminjob_impl.cpp.

References dbg_DETAIL, ie_PRECONDITION, ipc_EXEC_m, ivd_Error, log_DBG_m, log_FUNC_m, m_barcode, i_Job_i::m_rm, rmdb_MEDIUM_UNRELIABLE, and rmdb_MEDIUM_UNUSABLE.

Referenced by CloseVolumeCheck(), Execute(), FormatAndInitCheck(), and RecreateFRIandMICCheck().

01414                               {
01415     log_FUNC_m(CheckMedium);
01416     i_Medium_t_var medium;
01417     try {
01418         ipc_EXEC_m(
01419             medium = m_rm->SelectMedium(m_barcode.c_str());
01420             log_DBG_m(dbg_DETAIL, "Medium with barcode " << m_barcode <<
01421                                   " selected!");
01422         )
01423     }
01424     catch (ivd_Exception) {
01425         throw ivd_Error(ie_PRECONDITION, "Could not find medium.", true); 
01426     }
01427 
01428     m_medium = medium;
01429 
01430     // Check if medium is Usable for any operation
01431     if (   m_medium.status & rmdb_MEDIUM_UNRELIABLE
01432         || m_medium.status & rmdb_MEDIUM_UNUSABLE) {
01433 
01434         throw ivd_Error(ie_PRECONDITION, "Medium marked as UNRELIABLE or UNUSABLE.", true);
01435     }
01436 }

Here is the caller graph for this function:

void i_AdminJob_i::CheckPool (  )  [private]

Definition at line 1440 of file i_adminjob_impl.cpp.

References dbg_DETAIL, dbg_LOW, ie_PRECONDITION, ipc_EXEC_m, ivd_Error, log_DBG_m, log_FUNC_m, ipc_Log::LogMediaPool(), m_doCloseVolume, m_doFormat, m_doInit, m_mediaPool, i_Job_i::m_rm, i_MediaPool_t::mediaPoolType, and pt_Backup.

Referenced by CloseVolumeCheck(), FormatAndInitCheck(), and RecreateFRIandMICCheck().

01440                             {
01441     log_FUNC_m(CheckPool);
01442 
01443     i_MediaPool_t_var pool;
01444     // retrieve medium pool struct.
01445 
01446     try {
01447         ipc_EXEC_m( 
01448             pool = m_rm->SelectMediaPool(m_medium.mediaPoolName);
01449         );
01450     } catch (ivd_Exception &e){
01451         log_DBG_m(dbg_LOW, e);
01452         ostringstream msg;
01453         if (m_doInit){
01454             msg << "Can not initialize medium "  << m_medium.barcode;
01455         } else if (m_doFormat) {
01456             msg << "Can not format medium "  << m_medium.barcode;        
01457         }        
01458         msg << " which is not assigned to any pool.";
01459         log_DBG_m(dbg_LOW," msg : " << msg.str());
01460         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01461     }
01462     
01463     m_mediaPool = pool;
01464     log_DBG_m(dbg_DETAIL, "Medium pool is configured. " << endl << 
01465                             ipc_Log::LogMediaPool(m_mediaPool));
01466 
01467     if (   (m_mediaPool.mediaPoolType == pt_Backup)
01468         && (m_doCloseVolume == true) ){
01469         ostringstream mssg;
01470         mssg << "Can not close volume on medium assigned to backup pool.";
01471         throw ivd_Error(ie_PRECONDITION, mssg.str(), true);
01472     }        
01473 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CheckPartition (  )  [private]

Definition at line 1477 of file i_adminjob_impl.cpp.

References dbg_LOW, evt_WARNING, ie_PRECONDITION, ipc_EXEC_m, ivd_Error, log_DBG_m, log_FUNC_m, log_WriteEvent(), m_mediaPool, i_Job_i::m_rm, i_MediaPool_t::mediaPoolName, and i_MediaPool_t::partitionUUIDString.

Referenced by FormatAndInitCheck().

01477                                   {
01478     log_FUNC_m(CheckPartition);
01479 
01480     i_PartSeq_t_var partitionSeq;
01481 
01482     // check if pool has partition associated.
01483     bool partitionFound(false);
01484     ipc_EXEC_m(partitionSeq = m_rm->SelectAllPartition();)
01485 
01486     string poolPartUUID(m_mediaPool.partitionUUIDString);
01487     
01488     for (UInt32_t i(0); i < partitionSeq->length(); i++) {
01489         if (string(partitionSeq[i].partitionUUIDString) == poolPartUUID) {
01490             partitionFound = true;
01491             break;
01492         }
01493     }
01494 
01495     if  (!partitionFound)  {
01496         ostringstream msg;
01497         msg << "Cannot initialize medium "  << m_medium.barcode << 
01498             " belonging to Pool " << m_mediaPool.mediaPoolName;
01499         msg << " which is not assigned to any partition.";
01500         log_DBG_m(dbg_LOW," msg : " << msg.str());
01501         log_WriteEvent(evt_WARNING, msg.str(), "", 0, string(m_medium.barcode));
01502         throw ivd_Error(ie_PRECONDITION, msg.str() ,true);        
01503     }
01504 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CheckVolumesForFormatAndInit ( bool  a_log = true  )  [private]

Definition at line 1628 of file i_adminjob_impl.cpp.

References dbg_LOW, dbg_NORM, ui_MsgWriter::DisplayMessage(), evt_WARNING, FindVolInRMDB(), ie_PRECONDITION, ipc_EXEC_m, ivd_Error, log_DBG_m, log_FUNC_m, log_WriteEvent(), m_doFormat, m_doInit, m_forced, m_initAllVol, m_initVol, m_mediaPool, m_medVolInRmdb, m_ui, i_MediaPool_t::mediaPoolType, pt_Backup, rmdb_MEDVOL_FULL, rmdb_MEDVOL_REORG_RECYCLED, i_MediumVol_t::status, svl_NONE, i_MediaPool_t::sysVolLocation, and i_MediumVol_t::volUsed.

Referenced by Execute(), and FormatAndInitCheck().

01628                                                           {
01629     log_FUNC_m(CheckVolumesForFormatAndInit);
01630 
01631     ostringstream opMsg;
01632     if (m_doFormat) {
01633         opMsg << "format ";
01634     } 
01635     else if (m_doInit) {
01636         opMsg << "initialize ";  
01637     } 
01638     else if (m_doFormat & m_doInit){
01639         opMsg << "format and initialize ";  
01640     }
01641 
01642     if ((m_mediaPool.mediaPoolType == pt_Backup) && m_forced ){
01643         //allow init of backup medium if --forced is used
01644         if (a_log){
01645             ostringstream msg;
01646             msg << "Admin Job will initialize backup medium "  
01647                 << m_medium.barcode;
01648 
01649             log_WriteEvent(msg.str(), "", 0, string(m_medium.barcode));
01650             ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
01651                 log_DBG_m(dbg_NORM, msg.str());
01652         }
01653         return;
01654     }
01655     
01656     if (m_initAllVol){
01657         // check if medium is initialized
01658         if (m_medVolInRmdb.length() > 0 && !m_forced ){ 
01659             //medium is initialized (forced option was not used)
01660             
01661             ostringstream msg;
01662             
01663             msg << "Cannot " << opMsg.str() << " medium "  
01664                 << m_medium.barcode << ": there are "
01665                 << m_medVolInRmdb.length() 
01666                 << " volumes in RMDB. Use force option.";
01667 
01668 
01669             log_DBG_m(dbg_LOW," msg : " << msg.str());
01670             log_WriteEvent( evt_WARNING, msg.str(), "", 0, 
01671                             string(m_medium.barcode));
01672             m_ui.DisplayMessage(msg.str());
01673 
01674             throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01675         }
01676         if (m_medVolInRmdb.length() > 0 && 
01677             ivd_IsMediumTypeWORM(
01678                 static_cast<ivd_MediaType_e>(m_medium.mediumType))){
01679             //medium is WORM and can not be initialized
01680             
01681             ostringstream msg;
01682             
01683             msg << "Cannot " << opMsg.str() << 
01684                    " already initialized WORM medium.";
01685 
01686             log_DBG_m(dbg_LOW," msg : " << msg.str());
01687             log_WriteEvent( evt_WARNING, msg.str(), "", 0, 
01688                             string(m_medium.barcode));
01689 
01690             throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01691 
01692         }
01693 
01694         for (UInt32_t i(0); i < m_medVolInRmdb.length(); i++){
01695             
01696             if (m_medVolInRmdb[i].status & rmdb_MEDVOL_REORG_RECYCLED){
01697                 if (a_log){
01698                     ostringstream msg;
01699                     msg << "Initializing recycled medium "  << m_medium.barcode
01700                         << " Volume Num: " << m_medVolInRmdb[i].medVolNr;
01701                     log_DBG_m(dbg_LOW," msg : " << msg.str());
01702                     log_WriteEvent(msg.str(), "", 0, string(m_medium.barcode));
01703                     m_ui.DisplayMessage(msg.str());
01704                 }
01705             
01706             } 
01707             else if ( m_medVolInRmdb[i].volUsed > 0 ||
01708                       m_medVolInRmdb[i].status & rmdb_MEDVOL_FULL){
01709 
01710                 ostringstream msg;
01711                 msg << "Can not " << opMsg.str() << "medium "  << m_medium.barcode 
01712                     << " Volume Num: " << m_medVolInRmdb[i].medVolNr 
01713                     << " contains data.";
01714 
01715                 log_DBG_m(dbg_LOW," msg : " << msg.str());
01716                 log_WriteEvent( evt_WARNING, msg.str(), "", 0, 
01717                                 string(m_medium.barcode));
01718                 m_ui.DisplayMessage(msg.str());
01719 
01720                 throw ivd_Error(ie_PRECONDITION, msg.str(), true); 
01721             }
01722         } 
01723     } else {
01724         log_DBG_m(dbg_NORM, "init particular volume(s): #" << m_initVol.size());
01725 
01726         if ( (m_mediaPool.sysVolLocation != svl_NONE) && (m_medium.idxOfSysVol == 0) ){
01727         
01728             ostringstream msg;
01729             msg << "Can not initialize single volume on medium with system volume "
01730                 << m_medium.barcode << ". Initialize whole medium.";
01731             
01732             log_DBG_m(dbg_LOW," msg : " << msg.str());
01733             log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01734                             string(m_medium.barcode));
01735             m_ui.DisplayMessage(msg.str());
01736             throw ivd_Error(ie_PRECONDITION, msg.str(), true);  
01737         }
01738            
01739         for (UInt32_t i(0); i < m_initVol.size(); i++){
01740             
01741             UInt32_t volNum(m_initVol[i]);
01742             UInt32_t volIdxInRmdb(0);
01743             bool found(false);
01744             try {
01745                 volIdxInRmdb = FindVolInRMDB(volNum);
01746                 found = true;
01747             } 
01748             catch (ivd_Error) {
01749                 //found stays false
01750             }
01751             if (found){
01752                 i_MediumVol_t &mv = m_medVolInRmdb[volIdxInRmdb];
01753                 log_DBG_m(dbg_NORM, "Volume exists in rmdb");
01754 
01755                 if (ivd_IsMediumTypeWORM(
01756                         static_cast<ivd_MediaType_e>(m_medium.mediumType))){
01757                     //medium is WORM and can not be initialized
01758 
01759                     ostringstream msg;
01760 
01761                     msg << "Cannot " << opMsg.str() << 
01762                         " already initialized WORM medium.";
01763 
01764                     log_DBG_m(dbg_LOW," msg : " << msg.str());
01765                     log_WriteEvent( evt_WARNING, msg.str(), "", 0, 
01766                         string(m_medium.barcode));
01767 
01768                     throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01769                 }
01770                 if (mv.status & rmdb_MEDVOL_REORG_RECYCLED){
01771                     if (a_log){
01772                         ostringstream msg;
01773                         msg << "Initializing recycled medium "  << m_medium.barcode
01774                             << " Volume Num: " << volNum;
01775                         log_DBG_m(dbg_LOW," msg : " << msg.str());
01776 
01777                         log_WriteEvent(msg.str(), "", 0, string(m_medium.barcode));
01778 
01779                         m_ui.DisplayMessage(msg.str());
01780                     }
01781                 } 
01782                 else if ( mv.volUsed > 0 || mv.status & rmdb_MEDVOL_FULL ){
01783 
01784                     ostringstream msg;
01785                     msg << "Can not initialize medium "  << m_medium.barcode
01786                         << " Volume Num: " <<  volNum << " contains Data.";
01787 
01788                     log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01789                         string(m_medium.barcode));
01790                     m_ui.DisplayMessage(msg.str());
01791 
01792                     throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01793 
01794                 } else if (!m_forced){
01795 
01796                     ostringstream msg;
01797                     msg << "Can not initialize medium "  << m_medium.barcode 
01798                         << " Volume " << volNum << " exists in RMDB. Use force option.";
01799 
01800                     log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01801                                     string(m_medium.barcode));
01802 
01803                     m_ui.DisplayMessage(msg.str());
01804                     throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01805                 }
01806             } else {
01807                 log_DBG_m(dbg_NORM, "Volume does NOT exist in rmdb");
01808             }
01809             if (a_log){
01810                 ostringstream msg;
01811                 msg << "Admin Job will initialize medium "  << m_medium.barcode
01812                     << " Volume Num: " << volNum;
01813                 log_WriteEvent(msg.str(), "", 0, string(m_medium.barcode));
01814                 ipc_EXEC_m(m_ui.DisplayMessage(msg.str());)
01815                 log_DBG_m(dbg_NORM, msg.str());
01816             }
01817         } //for each in m_initVol
01818     }
01819 } //CheckVolumesForFormatAndInit

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CheckVolumesForFriMicJob (  )  [private]

Definition at line 1509 of file i_adminjob_impl.cpp.

References dbg_DETAIL, dbg_LOW, ui_MsgWriter::DisplayWarning(), evt_WARNING, FindVolInRMDB(), ie_PRECONDITION, ipc_EXEC_m, ivd_Error, log_DBG_m, log_ERR_m, log_FUNC_m, log_WriteEvent(), ipc_Log::LogMediumVol(), m_initAllVol, m_initVol, m_medVolInRmdb, i_Job_i::m_rm, m_ui, i_MediumVol_t::medVolNr, rmdb_MEDVOL_EMPTY, rmdb_MEDVOL_REORG_SCANNED, rmdb_SYSTEM_VOLUME, i_MediumVol_t::status, and i_MediumVol_t::volType.

Referenced by RecreateFRIandMICCheck().

01509                                             {
01510     log_FUNC_m(CheckVolumesForFriMicJob);
01511     
01512     if ( m_medVolInRmdb.length() == 0 ) {
01513         //can not recreate FRI if Volume is missing
01514         ostringstream msgErr;
01515         msgErr << "Medium has no initialized Volumes. CanÝt recreate FRI/MIC ";
01516         log_DBG_m(dbg_LOW," msg : " << msgErr.str());
01517         throw ivd_Error(ie_PRECONDITION, msgErr.str());
01518     }
01519 
01520     if (m_initAllVol){
01521         for (UInt32_t i(0); i < m_medVolInRmdb.length(); i++){
01522             i_MediumVol_t& mv = m_medVolInRmdb[i];
01523             if ((mv.status != rmdb_MEDVOL_EMPTY ) &&
01524                 (mv.volType != rmdb_SYSTEM_VOLUME)){
01525 
01526                 m_initVol.push_back(mv.medVolNr);
01527                 log_DBG_m(dbg_LOW,"Will recreate FRI/MIC for volume: " <<
01528                                     mv.medVolNr);
01529             }
01530             else {
01531                 ostringstream msgDbg;
01532                 msgDbg << i << " skipping Volume " << mv.medVolNr
01533                        << " Status = " << mv.status
01534                        << " volType = " << mv.volType;
01535                 log_DBG_m(dbg_LOW, msgDbg.str());
01536             }
01537         }
01538     }
01539     
01540     // check if there are any volumes on the list
01541     if ( 0 == m_initVol.size() ){
01542         //can not recreate FRI if Volume empty
01543         ostringstream msgErr;
01544         msgErr << "Medium does not have a single volume containing FRI relevant data.";
01545         log_DBG_m(dbg_LOW," msg : " << msgErr.str());
01546         throw ivd_Error(ie_PRECONDITION, msgErr.str());
01547     }        
01548 
01549     for (UInt32_t i = 0; i < m_initVol.size(); i++){
01550         UInt32_t& volNum = m_initVol[i];
01551         
01552         UInt32_t idxRmdb;
01553         try {
01554             idxRmdb = FindVolInRMDB(volNum);
01555         }
01556         catch (ivd_Error) {
01557             ostringstream msgWrn;
01558             msgWrn << "Volume: " << volNum << " not found in RMDB." ;
01559             log_DBG_m(dbg_LOW," msg : " << msgWrn.str());
01560             log_WriteEvent(evt_WARNING, msgWrn.str(), "", 0,
01561                 string(m_medium.barcode));
01562             ipc_EXEC_m(
01563                 m_ui.DisplayWarning(msgWrn.str());
01564             );
01565             throw ivd_Error(ie_PRECONDITION, msgWrn.str());
01566         }
01567 
01568         i_MediumVol_t& mv = m_medVolInRmdb[idxRmdb];
01569         ipc_EXEC_m(
01570             if (mv.volType & rmdb_SYSTEM_VOLUME){
01571                 ostringstream msgWrn;
01572                 msgWrn << "Can not recreate FRI/MIC on System Volume: " <<
01573                             mv.medVolNr << "." ;
01574                 log_DBG_m(dbg_LOW," msg : " << msgWrn.str());
01575                 throw ivd_Error(ie_PRECONDITION, msgWrn.str());
01576             }
01577 
01578             if ( mv.status == rmdb_MEDVOL_EMPTY ){
01579                 //can not recreate FRI if Volume empty
01580                 ostringstream msgWrn;
01581                 msgWrn << "Can not recreate FRI/MIC on empty Volume:"  <<
01582                             mv.medVolNr << ".";
01583                 log_DBG_m(dbg_LOW," msg : " << msgWrn.str());
01584                 throw ivd_Error(ie_PRECONDITION, msgWrn.str());
01585             }
01586         )
01587         
01588         // clear reorg scanned flag
01589         try{
01590             log_DBG_m(dbg_DETAIL, 
01591                 "Clearing reorg scanned flag for volume: " << endl <<
01592                 ipc_Log::LogMediumVol(mv));
01593             ipc_EXEC_m (
01594                 m_rm->MedVolStatusClear(
01595                 mv.medVolId, 
01596                 rmdb_MEDVOL_REORG_SCANNED
01597                 );
01598             )
01599         } catch (...){
01600             log_ERR_m("Clearing reorg scanned flag failed for volume '"
01601                 << mv.medVolId << "' (BC: " << mv.mediumBarcode 
01602                 << ", Vol.: " << mv.medVolId << ")");
01603         }
01604     }
01605 }

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::CheckVolumesForVolumeClose (  )  [private]

Definition at line 1824 of file i_adminjob_impl.cpp.

References dbg_NORM, ui_MsgWriter::DisplayMessage(), evt_WARNING, FindVolInRMDB(), ie_PRECONDITION, ivd_Error, log_DBG_m, log_FUNC_m, log_WriteEvent(), m_initVol, m_medVolInRmdb, m_ui, rmdb_MEDVOL_EMPTY, rmdb_MEDVOL_FULL, rmdb_SYSTEM_VOLUME, i_MediumVol_t::status, and i_MediumVol_t::volType.

Referenced by CloseVolumeCheck().

01824                                              {
01825     log_FUNC_m(CheckVolumesForVolumeClose);
01826     
01827     if (m_initVol.size() > 1){
01828         ostringstream msg;
01829         msg << "Can not close several volumes at once. "  << m_medium.barcode;
01830 
01831         log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01832             string(m_medium.barcode));
01833         m_ui.DisplayMessage(msg.str());
01834         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01835     } else if (m_initVol.size() != 1) {
01836         throw ivd_Error(ie_PRECONDITION, "Number of volumes should be 1.", true);
01837     }
01838     
01839     log_DBG_m(dbg_NORM, "Will close volume:" << m_initVol[0]);
01840     
01841     UInt32_t volIdxinRmdb(0);
01842     try {
01843         volIdxinRmdb = this->FindVolInRMDB(m_initVol[0]);
01844     }
01845     catch (ivd_Error){
01846         ostringstream msg;
01847         msg << "Can not close volume. Volume is not initialized.";
01848 
01849         log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01850             string(m_medium.barcode));
01851         m_ui.DisplayMessage(msg.str());
01852         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01853     }
01854         
01855     i_MediumVol_t &mv = m_medVolInRmdb[volIdxinRmdb];
01856 
01857     if (mv.status & rmdb_MEDVOL_FULL){
01858         ostringstream msg;
01859         msg << "Can not close volume. Volume already closed.";
01860 
01861         log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01862             string(m_medium.barcode));
01863         m_ui.DisplayMessage(msg.str());
01864         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01865     }
01866     
01867     if (mv.status == rmdb_MEDVOL_EMPTY){
01868         ostringstream msg;
01869         msg << "Can not close volume. Volume is empty.";
01870 
01871         log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01872             string(m_medium.barcode));
01873         m_ui.DisplayMessage(msg.str());
01874         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01875     }
01876 
01877     if (mv.volType == rmdb_SYSTEM_VOLUME) {
01878         ostringstream msg;
01879         msg << "Can not close system volume. ";
01880 
01881         log_WriteEvent(evt_WARNING, msg.str(), "", 0, 
01882             string(m_medium.barcode));
01883         m_ui.DisplayMessage(msg.str());
01884         throw ivd_Error(ie_PRECONDITION, msg.str(), true);
01885     }
01886 }//CheckVolumesForVolumeClose

Here is the call graph for this function:

Here is the caller graph for this function:

void i_AdminJob_i::SetVolumes (  )  [private]

Definition at line 1609 of file i_adminjob_impl.cpp.

References dbg_DETAIL, ipc_EXEC_m, log_DBG_m, log_FUNC_m, m_medVolInRmdb, and i_Job_i::m_rm.

Referenced by CloseVolumeCheck(), Execute(), FormatAndInitCheck(), and RecreateFRIandMICCheck().

01609                              {
01610     log_FUNC_m(SetVolumes);
01611 
01612     i_MediumVolSeq_t_var medVolSeq;
01613     ipc_EXEC_m(
01614         medVolSeq = m_rm->SelectAllMediumVolByBarcode(m_medium.barcode);
01615     );
01616 
01617     if ( medVolSeq->length() == 0 ) {
01618         ostringstream msg;
01619         msg << "WARNING: No initialized volumes on Medium.";
01620         log_DBG_m(dbg_DETAIL," msg : " << msg.str());
01621     }
01622 
01623     m_medVolInRmdb = medVolSeq;
01624 }

Here is the caller graph for this function:

UInt32_t i_AdminJob_i::FindVolInRMDB ( UInt32_t  a_volNum  )  [private]

Definition at line 1891 of file i_adminjob_impl.cpp.

References ie_NOTFOUND, ivd_Error, log_FUNC_m, and m_medVolInRmdb.

Referenced by CheckVolumesForFormatAndInit(), CheckVolumesForFriMicJob(), CheckVolumesForVolumeClose(), DoInitialize(), InitializeSingleVolume(), and RecreateFRIandMIC().

01891                                                      {
01892     log_FUNC_m(FindVolInRMDB);
01893     for (UInt32_t i(0); i < m_medVolInRmdb.length(); i++){
01894         if (static_cast<UInt32_t>(m_medVolInRmdb[i].medVolNr) == a_volNum){
01895             return i;
01896         }
01897     }
01898     throw ivd_Error(ie_NOTFOUND, "Volume Number not found in RMDB");
01899 }

Here is the caller graph for this function:

void i_AdminJob_i::SetResourceBusyStatus ( i_Index_t  a_resNum,
i_ResourceBusy_e  a_resStatus 
) [private]

Reimplemented from i_Job_i.

Definition at line 1907 of file i_adminjob_impl.cpp.

References i_Resource_t::barcode, evt_INFO, i_Job_i::GetResources(), i_MEDIUM_BUSY, i_MEDIUM_NOT_AVAILABLE, ipc_CATCH_IVD_THROW_CORBA_m, log_FUNC_m, log_WriteEvent(), ipc_Log::ResourceBusy(), i_Resource_t::resourceBusyStatus, and i_Job_i::SetResources().

01908                                                                               {
01909     log_FUNC_m(SetResourceBusyStatus);
01910 
01911     try {
01912         i_Resource_t tmpRes;
01913         tmpRes = GetResources()[a_resNum];
01914         tmpRes.resourceBusyStatus = a_resStatus;
01915         SetResources(tmpRes);
01916         
01917         ostringstream msg;
01918        
01919         msg << ipc_Log::ResourceBusy(a_resStatus);
01920         
01921         if (a_resStatus == i_MEDIUM_BUSY ||
01922             a_resStatus == i_MEDIUM_NOT_AVAILABLE){
01923         
01924             msg << " <";
01925             
01926         
01927             //waiting for medium <bc: 000123>
01928             msg << "bc: " << 
01929             tmpRes.barcode << ">";
01930         }
01931         
01932         log_WriteEvent(evt_INFO, msg.str());
01933         // Workaround for bug 8652 GUI deadlock
01934         // m_ui.DisplayMessage(msg.str());
01935         
01936     } ipc_CATCH_IVD_THROW_CORBA_m;
01937 }

Here is the call graph for this function:


Member Data Documentation

bool i_AdminJob_i::m_doFormat [private]

bool i_AdminJob_i::m_doInit [private]

bool i_AdminJob_i::m_doFri [private]

Definition at line 86 of file i_adminjob_impl.h.

Referenced by Execute(), InitJob(), and RecreateFRIandMIC().

bool i_AdminJob_i::m_doMic [private]

Definition at line 87 of file i_adminjob_impl.h.

Referenced by Execute(), InitJob(), and RecreateFRIandMIC().

Definition at line 88 of file i_adminjob_impl.h.

Referenced by CheckPool(), Execute(), and InitJob().

bool i_AdminJob_i::m_forced [private]

Definition at line 90 of file i_adminjob_impl.h.

Referenced by CheckVolumesForFormatAndInit(), Format(), and InitializeSingleVolume().

Definition at line 92 of file i_adminjob_impl.h.

Referenced by DetectVolumeHeader().

vector<UInt32_t> i_AdminJob_i::m_initVol [private]

Definition at line 99 of file i_adminjob_impl.h.

Referenced by Initialize(), and InitializeSingleVolume().

Definition at line 102 of file i_adminjob_impl.h.

Referenced by Initialize().

bool i_AdminJob_i::m_jobValid [private]

Reimplemented from i_Job_i.

Definition at line 103 of file i_adminjob_impl.h.

string i_AdminJob_i::m_barcode [private]

Definition at line 106 of file i_adminjob_impl.h.

Referenced by CheckMedium().

bool i_AdminJob_i::m_into [private]

Definition at line 110 of file i_adminjob_impl.h.

Referenced by RecreateFRIandMIC().

string i_AdminJob_i::m_intoPath [private]

Definition at line 111 of file i_adminjob_impl.h.

Referenced by RecreateFRIandMIC().

Reimplemented from i_Job_i.

Definition at line 145 of file i_adminjob_impl.h.


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

Generated on Mon Feb 27 19:30:14 2012 for OPENARCHIVE by  doxygen 1.5.6