#include <i_recreateivdfsjob_impl.h>


Definition at line 21 of file i_recreateivdfsjob_impl.h.
Public Member Functions | |
| i_RecreatedIVDFSJob_i (pm_JobMgr &a_jobMgr, i_PartitionManager_i &a_iPM, i_UIMessageServer_ptr a_uims) | |
| virtual | ~i_RecreatedIVDFSJob_i () |
| void | AbortJob () |
Public Attributes | |
| log_CLASSID_m | |
Protected Member Functions | |
| void | Execute () |
| i_RecreatedIVDFSJob_i::i_RecreatedIVDFSJob_i | ( | pm_JobMgr & | a_jobMgr, | |
| i_PartitionManager_i & | a_iPM, | |||
| i_UIMessageServer_ptr | a_uims | |||
| ) |
Definition at line 39 of file i_recreateivdfsjob_impl.cpp.
References log_FUNC_m.
00043 : i_ThreadJob_i(a_jobMgr, a_iPM, a_uims) 00044 { 00045 log_FUNC_m(i_RecreatedIVDFSJob_i); 00046 }
| i_RecreatedIVDFSJob_i::~i_RecreatedIVDFSJob_i | ( | ) | [virtual] |
Definition at line 48 of file i_recreateivdfsjob_impl.cpp.
References log_FUNC_m.
00048 { 00049 log_FUNC_m(~i_RecreatedIVDFSJob_i); 00050 }
| void i_RecreatedIVDFSJob_i::AbortJob | ( | ) | [virtual] |
Reimplemented from i_Job_i.
Definition at line 53 of file i_recreateivdfsjob_impl.cpp.
References i_Job_i::AbortJob(), i_FSC_i::IVDFSRecoveryAbort(), log_FUNC_m, i_PartitionManager_i::m_iFSCi, and i_ThreadJob_i::m_iPM.
00053 { 00054 log_FUNC_m(AbortJob); 00055 i_Job_i::AbortJob(); 00056 m_iPM.m_iFSCi->IVDFSRecoveryAbort(); 00057 }

| void i_RecreatedIVDFSJob_i::Execute | ( | ) | [protected, virtual] |
Implements i_ThreadJob_i.
Definition at line 59 of file i_recreateivdfsjob_impl.cpp.
References cfg_PMCfg::clients, dbg_DETAIL, dbg_NORM, ui_MsgWriter::DisplayError(), ui_MsgWriter::DisplayMessage(), ui_MsgWriter::DisplayWarning(), evt_ERROR, evt_WARNING, ivd_BaseException::GetFriendly(), i_PartitionManager_i::GetName(), i_FAILED, i_IVD, i_SUCCEDED, ie_PRECONDITION, ipc_EXEC_m, ivd_Error, ivd_Sleep, i_FSC_i::IVDFSRecovery(), log_DBG_m, log_FUNC_m, log_WriteEvent(), i_PartitionManager_i::m_config, i_PartitionManager_i::m_iFSCi, i_PartitionManager_i::m_iHSM, i_ThreadJob_i::m_iPM, i_Job_i::m_status, i_ThreadJob_i::m_uiMsgWriter, i_PartitionManager_i::RecoveryOfIVDFSClear(), i_PartitionManager_i::RecoveryOfIVDFSSet(), and ipc_Corba::ResolveSvc().
00059 { 00060 log_FUNC_m(Execute); 00061 m_status = i_FAILED; 00062 if (!m_iPM.RecoveryOfIVDFSSet()) { 00063 string sstr("HSMFS recovery already in progress."); 00064 m_uiMsgWriter.DisplayWarning(sstr); 00065 log_WriteEvent(evt_WARNING, sstr); 00066 return; 00067 } 00068 00069 // HSM must be mounted by recovery job 00070 if ( !CORBA::is_nil(m_iPM.m_iHSM)) { 00071 string sstr("HSM File System mounted - can't start HSMFS recovery."); 00072 m_uiMsgWriter.DisplayError(sstr); 00073 log_WriteEvent(evt_ERROR, sstr); 00074 m_iPM.RecoveryOfIVDFSClear(); 00075 return; 00076 } 00077 00078 string clientHostName = m_iPM.m_config.clients[0].name; 00079 string fileSystemID = m_iPM.m_config.clients[0].fileSystemId; 00080 00081 i_Service_var svc; 00082 00083 try { 00084 CORBA::Object_var obj = ipc_Corba::ResolveSvc(clientHostName); 00085 svc = i_Service::_narrow(obj); 00086 } 00087 catch (...) { 00088 string sstr("Cannot resolve client " + clientHostName + ". Probably disconnected."); 00089 m_uiMsgWriter.DisplayError(sstr); 00090 log_WriteEvent(evt_ERROR, sstr); 00091 m_iPM.RecoveryOfIVDFSClear(); 00092 return; 00093 } 00094 00095 log_DBG_m(dbg_DETAIL, "PM: m_svc referenced as: " << svc << endl); 00096 00097 i_StringList_t argSequence; 00098 argSequence.length(3); 00099 argSequence[0] = CORBA::string_dup("--mount-recovery"); 00100 00101 // Pass empty argument for mount point. ivd-svc will define it. 00102 cmn_Path mountPoint(""); 00103 00104 argSequence[1] = CORBA::string_dup(mountPoint.c_str()); 00105 00106 argSequence[2] = CORBA::string_dup(fileSystemID.c_str()); 00107 00108 log_DBG_m(dbg_DETAIL, " Recovery on host " << clientHostName 00109 << " mount point " << mountPoint 00110 << " fileSystem ID " << fileSystemID); 00111 ipc_EXEC_m( 00112 svc->Execute(i_IVD, argSequence); 00113 ); 00114 00115 // wait for 120 seconds for HSM to register with new CORBA reference 00116 const int maxWait = 120; // two minutes 00117 for (int count=0; count < maxWait && CORBA::is_nil(m_iPM.m_iHSM); ++count) { 00118 log_DBG_m(dbg_DETAIL, "RecoverHSMFS: waiting for HSM to register..."); 00119 ivd_Sleep(1); 00120 } 00121 00122 if (CORBA::is_nil(m_iPM.m_iHSM)) { 00123 ostringstream sstr; 00124 sstr << "HSM did not start in " << maxWait 00125 << " seconds. HSMFS failed to mount to temporary recovery location."; 00126 m_uiMsgWriter.DisplayError(sstr.str()); 00127 log_WriteEvent(evt_ERROR, sstr.str()); 00128 00129 m_iPM.RecoveryOfIVDFSClear(); 00130 throw ivd_Error(ie_PRECONDITION, sstr.str()); 00131 } 00132 else { 00133 //mounted 00134 string msg = "HSMFS successfully mounted to temporary recovery location."; 00135 m_uiMsgWriter.DisplayMessage(msg); 00136 } 00137 00138 try { 00139 for (int count=0; count < maxWait && !m_iPM.m_iHSM->IsHSMReady(); ++count) { 00140 log_DBG_m(dbg_DETAIL, "RecoverHSMFS: waiting for HSM to become ready..."); 00141 ivd_Sleep(1); 00142 } 00143 00144 if (!m_iPM.m_iHSM->IsHSMReady()) { 00145 ostringstream sstr; 00146 sstr << "HSM is not ready in " << maxWait << " seconds. Cannot start recovery."; 00147 m_uiMsgWriter.DisplayError(sstr.str()); 00148 log_WriteEvent(evt_ERROR, sstr.str()); 00149 goto end; 00150 } 00151 00152 ipc_EXEC_m( 00153 m_iPM.m_iFSCi->IVDFSRecovery( 00154 m_iPM.GetName(), 00155 i_HSM::_duplicate(m_iPM.m_iHSM), 00156 m_uiMsgWriter); 00157 ); 00158 } 00159 catch (ivd_Exception &e) { 00160 string msg("HSMFS recovery failed: " + e.GetFriendly()); 00161 m_uiMsgWriter.DisplayError(msg); 00162 log_WriteEvent(evt_ERROR, msg); 00163 } 00164 catch (...) { 00165 string msg("HSMFS recovery failed. See error.log"); 00166 m_uiMsgWriter.DisplayError(msg); 00167 log_WriteEvent(evt_ERROR, msg); 00168 } 00169 end: 00170 argSequence[0] = CORBA::string_dup("--umount-recovery"); 00171 ipc_EXEC_m( 00172 svc->Execute(i_IVD, argSequence); 00173 ); 00174 00175 m_iPM.RecoveryOfIVDFSClear(); 00176 m_status = i_SUCCEDED; 00177 00178 log_DBG_m(dbg_NORM, "END HSMFSRecovery"); 00179 }

1.5.6