#include <i_adminjob_impl.h>


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_t * | GetFiles () |
| 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_t > | m_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 | |
| 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

| 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 }

| 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 }


| 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 }


| 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 }


| 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

| 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

| 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 }


| 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


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


| 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()


| 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()


| 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 }

| void i_AdminJob_i::Format | ( | ) | [private] |
The formula:
input:
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()


| 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()


| void i_AdminJob_i::RecreateFRIandMIC | ( | ) | [private] |
Generates new FRI on disk from specified data medium volume.
Complete volume is rescanned.
| i_IvdException | if medium/hardware error occurs or FRI can't be generated. |
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 }


| 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 }


| 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 }

| 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

| 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 }

| 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 }


| 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 }


| 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


| 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 }


| 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


| 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 }

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 }

| 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 }

bool i_AdminJob_i::m_doFormat [private] |
Definition at line 84 of file i_adminjob_impl.h.
Referenced by CheckPool(), CheckVolumesForFormatAndInit(), DoInitialize(), Execute(), Initialize(), and InitJob().
bool i_AdminJob_i::m_doInit [private] |
Definition at line 85 of file i_adminjob_impl.h.
Referenced by CheckPool(), CheckVolumesForFormatAndInit(), Execute(), Format(), FormatAndInitCheck(), and InitJob().
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().
bool i_AdminJob_i::m_doCloseVolume [private] |
Definition at line 88 of file i_adminjob_impl.h.
Referenced by CheckPool(), Execute(), and InitJob().
bool i_AdminJob_i::m_initAllVol [private] |
Definition at line 89 of file i_adminjob_impl.h.
Referenced by CheckVolumesForFormatAndInit(), CheckVolumesForFriMicJob(), Initialize(), and InitializeSingleVolume().
bool i_AdminJob_i::m_forced [private] |
Definition at line 90 of file i_adminjob_impl.h.
Referenced by CheckVolumesForFormatAndInit(), Format(), and InitializeSingleVolume().
UInt32_t i_AdminJob_i::m_lastAccessedVolume [private] |
ui_MsgWriter i_AdminJob_i::m_ui [private] |
Definition at line 94 of file i_adminjob_impl.h.
Referenced by CheckVolumesForFormatAndInit(), CheckVolumesForFriMicJob(), CheckVolumesForVolumeClose(), CloseVolume(), DetectVolumeHeader(), DoInitialize(), Execute(), Format(), Initialize(), InitializeSingleVolume(), InitJob(), OperateLA(), RecreateFRIandMIC(), StartBEA(), and ~i_AdminJob_i().
i_MediumVolSeq_t i_AdminJob_i::m_medVolInRmdb [private] |
Definition at line 96 of file i_adminjob_impl.h.
Referenced by CheckVolumesForFormatAndInit(), CheckVolumesForFriMicJob(), CheckVolumesForVolumeClose(), DoInitialize(), FindVolInRMDB(), Format(), Initialize(), InitializeSingleVolume(), InitJob(), RecreateFRIandMIC(), and SetVolumes().
vector<UInt32_t> i_AdminJob_i::m_initVol [private] |
Definition at line 97 of file i_adminjob_impl.h.
Referenced by CheckVolumesForFormatAndInit(), CheckVolumesForFriMicJob(), CheckVolumesForVolumeClose(), CloseVolume(), i_AdminJob_i(), Initialize(), InitJob(), and RecreateFRIandMIC().
bool i_AdminJob_i::m_makeSysVol [private] |
Definition at line 99 of file i_adminjob_impl.h.
Referenced by Initialize(), and InitializeSingleVolume().
Int32_t i_AdminJob_i::m_idxSysVol [private] |
Definition at line 100 of file i_adminjob_impl.h.
Referenced by DoInitialize(), Format(), Initialize(), InitializeSingleVolume(), and SetSysVolIdx().
bool i_AdminJob_i::m_initSucceeded [private] |
bool i_AdminJob_i::m_jobValid [private] |
string i_AdminJob_i::m_barcode [private] |
i_Medium_t i_AdminJob_i::m_medium [private] |
Definition at line 107 of file i_adminjob_impl.h.
Referenced by DeleteMedVolFromRMDB(), Format(), Initialize(), InitJob(), OperateLA(), StartBEA(), and ~i_AdminJob_i().
i_MediaPool_t i_AdminJob_i::m_mediaPool [private] |
Definition at line 108 of file i_adminjob_impl.h.
Referenced by CheckPartition(), CheckPool(), CheckVolumesForFormatAndInit(), DoInitialize(), Format(), FormatAndInitCheck(), Initialize(), InitializeSingleVolume(), InitJob(), RecreateFRIandMIC(), and SetSysVolIdx().
bool i_AdminJob_i::m_into [private] |
string i_AdminJob_i::m_intoPath [private] |
i_AdminJob_i::log_CLASSID_m [private] |
1.5.6