#include <df.h>


Definition at line 389 of file df.h.
Public Member Functions | |
| blk_DiskFRIWriter (df_BlockManager &a_mgr, const string &a_medVolID, bool a_createOnTmp=false, bool a_createNew=false, bool a_createInto=false, cmn_Path a_intoPath="", const string &a_extension="") | |
| blk_DiskFRIWriter (df_BlockManager &a_mgr, const string &a_medVolID, ivd_MigrationID_t a_migID, UInt32_t a_copyID, UInt32_t a_mediumKey, UInt32_t a_medVolNum, i_FSC_ptr a_fsc) | |
| virtual | ~blk_DiskFRIWriter () |
Protected Member Functions | |
| virtual void | Write (const UInt8_t *a_data, const UInt32_t a_size) |
Protected Attributes | |
| cmn_File | m_diskFRI |
Private Member Functions | |
| void | OpenFRIFile (const string &a_medVolID, bool a_createOnTmp, bool a_createNew, bool a_createInto=false, cmn_Path a_intoPath="", const string &a_extension="") |
Private Attributes | |
| log_CLASSID_m | |
| ivd_MigrationID_t | m_migID |
| UInt32_t | m_copyID |
| UInt32_t | m_mediumKey |
| UInt32_t | m_medVolNum |
| i_FSC_var | m_fsc |
| blk_DiskFRIWriter::blk_DiskFRIWriter | ( | df_BlockManager & | a_mgr, | |
| const string & | a_medVolID, | |||
| bool | a_createOnTmp = false, |
|||
| bool | a_createNew = false, |
|||
| bool | a_createInto = false, |
|||
| cmn_Path | a_intoPath = "", |
|||
| const string & | a_extension = "" | |||
| ) |
Definition at line 44 of file blk_diskfriwriter.cpp.
References log_FUNC_A_m, and OpenFRIFile().
00052 : blk_BufferWriter(a_mgr), 00053 m_migID(0), 00054 m_copyID(0), 00055 m_mediumKey(0), 00056 m_medVolNum(0) { 00057 00058 log_FUNC_A_m(blk_DiskFRIWriter, 00059 "a_medVolID=" << a_medVolID << 00060 " createOnTmp = " << boolalpha << a_createOnTmp << 00061 " create = " << boolalpha << a_createNew << 00062 " a_createInto = " << boolalpha << a_createInto << 00063 " a_intoPath = " << boolalpha << a_intoPath ); 00064 00065 OpenFRIFile( a_medVolID, 00066 a_createOnTmp, 00067 a_createNew, 00068 a_createInto, 00069 a_intoPath, 00070 a_extension); 00071 }

| blk_DiskFRIWriter::blk_DiskFRIWriter | ( | df_BlockManager & | a_mgr, | |
| const string & | a_medVolID, | |||
| ivd_MigrationID_t | a_migID, | |||
| UInt32_t | a_copyID, | |||
| UInt32_t | a_mediumKey, | |||
| UInt32_t | a_medVolNum, | |||
| i_FSC_ptr | a_fsc | |||
| ) |
Definition at line 73 of file blk_diskfriwriter.cpp.
References ie_INVALID_ARG, log_FUNC_A_m, m_fsc, and OpenFRIFile().
00081 : blk_BufferWriter(a_mgr), 00082 m_migID(a_migID), 00083 m_copyID(a_copyID), 00084 m_mediumKey(a_mediumKey), 00085 m_medVolNum(a_medVolNum), 00086 m_fsc(i_FSC::_duplicate(a_fsc)) { 00087 00088 log_FUNC_A_m(blk_DiskFRIWriter, 00089 "a_medVolID=" << a_medVolID << 00090 " a_migID = " << a_migID << 00091 " a_copyID = " << a_copyID << 00092 " a_mediumKey = " << a_mediumKey << 00093 " a_medVolNum = " << a_medVolNum); 00094 00095 if (CORBA::is_nil(m_fsc)) { 00096 throw ivd_InternalError(ie_INVALID_ARG, "a_fsc is nil."); 00097 }; 00098 00099 OpenFRIFile(a_medVolID, false, false); 00100 }

| blk_DiskFRIWriter::~blk_DiskFRIWriter | ( | ) | [virtual] |
Definition at line 103 of file blk_diskfriwriter.cpp.
References cmn_File::GetFullPathRef(), log_ERR_m, log_FUNC_m, m_diskFRI, and cmn_File::SyncF().
00103 { 00104 log_FUNC_m(~blk_DiskFRIWriter); 00105 00106 try { 00107 m_diskFRI.SyncF(); 00108 } 00109 catch (ivd_Exception &ie) { 00110 log_ERR_m( 00111 "SyncF failed for file: " << m_diskFRI.GetFullPathRef() << 00112 " . Ignored. Error: " << ie); 00113 } 00114 }

| void blk_DiskFRIWriter::Write | ( | const UInt8_t * | a_data, | |
| const UInt32_t | a_size | |||
| ) | [protected, virtual] |
Implements blk_BufferWriter.
Definition at line 116 of file blk_diskfriwriter.cpp.
References dbg_DETAIL, dbg_LOW, dbg_NORM, i_MinorCol_t::flags, cmn_File::GetCurrentPosF(), ivd_BaseException::GetError(), cmn_File::GetFullPathRef(), ie_NO_DISK_SPACE, ie_RMDB_NOTFOUND, ipc_EXEC_m, ivd_Error, log_DBG_m, log_FUNC_m, log_WRN_m, m_copyID, m_diskFRI, m_fsc, m_mediumKey, m_medVolNum, m_migID, ipc_Corba::ResolveRM(), size, cmn_File::TruncF(), and cmn_File::WriteF().
00116 { 00117 log_FUNC_m(Write); 00118 00119 // 00120 // Atomic append to the file. 00121 // TODO: Shall this functionality be moved to cmn_File? 00122 // 00123 ivd_FileRetSize_t wrote = m_diskFRI.WriteF(a_data, a_size); 00124 00125 if (static_cast<UInt32_t>(wrote) < a_size) { 00126 log_WRN_m( 00127 "Writing failed. Truncating file to last full block: " << 00128 m_diskFRI.GetFullPathRef() ); 00129 00130 ivd_FilePosition_t filePos = m_diskFRI.GetCurrentPosF(); 00131 m_diskFRI.TruncF(filePos - wrote); 00132 00133 throw ivd_Error(ie_NO_DISK_SPACE, "FRI disk out of space."); 00134 } 00135 00136 if (!CORBA::is_nil(m_fsc)) { 00137 00138 log_DBG_m(dbg_DETAIL, "Sending block to FSC."); 00139 00140 i_CollocationIDs_t_var colIds; 00141 ipc_EXEC_m( 00142 i_FRIBlockInfo_t friInfo; 00143 00144 friInfo.migID = m_migID; 00145 friInfo.copyID = m_copyID; 00146 friInfo.medVolNum = m_medVolNum; 00147 friInfo.mediaKey = m_mediumKey; 00148 00149 i_DataBlock_t friBlock( 00150 a_size, a_size, const_cast<CORBA::Octet*>(a_data), 0); 00151 00152 colIds = m_fsc->InsertSplitFromFRIBlock(friInfo, friBlock); 00153 ); 00154 UInt32_t size = colIds->length(); 00155 log_DBG_m(dbg_DETAIL, "Number of minor collocation IDs: " << size); 00156 00157 if (size > 0) { 00158 // Get RM reference. 00159 i_ResourceManager_var rm; 00160 ipc_EXEC_m( 00161 CORBA::Object_var obj = ipc_Corba::ResolveRM(); 00162 rm = i_ResourceManager::_narrow(obj); 00163 log_DBG_m(dbg_DETAIL,"Sucessfully resolved RM"); 00164 ); 00165 i_ColMediaVol_t entry; 00166 for (UInt32_t i(0); i < size; i++) { 00167 entry.minColId = colIds[i]; 00168 entry.mediaKey = m_mediumKey; 00169 entry.medVolNr = m_medVolNum; 00170 log_DBG_m(dbg_DETAIL, "Adding minorColID " << entry.minColId 00171 << " to medium " << entry.mediaKey 00172 << " volume " << entry.medVolNr); 00173 00174 i_MinorCol_t minorCol; 00175 try { 00176 ipc_EXEC_m( 00177 minorCol = rm->SelectMinorCol(entry.minColId); 00178 ); 00179 log_DBG_m(dbg_DETAIL, "Flags: " << minorCol.flags); 00180 ipc_EXEC_m( 00181 rm->AddColMediaVol(entry, minorCol.flags); 00182 ); 00183 log_DBG_m(dbg_NORM, "Added."); 00184 } 00185 catch (ivd_Exception &e) { 00186 if (e.GetError() == ie_RMDB_NOTFOUND){ 00187 log_DBG_m(dbg_LOW, "Minor collocation ID " << entry.minColId 00188 << " is missing in RMDB for target medium key=" << m_mediumKey 00189 << " vol=" << m_medVolNum 00190 << " migID=" << m_migID 00191 << " copyID=" << m_copyID); 00192 } 00193 else { 00194 throw; 00195 } 00196 } 00197 } 00198 } // if (size > 0) 00199 } // if (!CORBA::is_nil(m_fsc)) 00200 }

| void blk_DiskFRIWriter::OpenFRIFile | ( | const string & | a_medVolID, | |
| bool | a_createOnTmp, | |||
| bool | a_createNew, | |||
| bool | a_createInto = false, |
|||
| cmn_Path | a_intoPath = "", |
|||
| const string & | a_extension = "" | |||
| ) | [private] |
Definition at line 202 of file blk_diskfriwriter.cpp.
References cmn_Global::dirs, fom_CREATE_ALWAYS, fom_OPEN_ALWAYS, fom_WRITE, ivd_Directories::fri, g_cmn, m_diskFRI, cmn_File::OpenF(), cmn_File::SeekEndF(), cmn_File::SetFullPath(), and ivd_Directories::tmp.
Referenced by blk_DiskFRIWriter().
00208 { 00209 00210 if (a_createOnTmp) { 00211 m_diskFRI.SetFullPath(g_cmn.dirs.tmp + string("fri") + a_medVolID); 00212 /* 00213 m_diskFRI.OpenF( 00214 O_BINARY | O_WRONLY | O_CREAT | 00215 (a_createNew? O_TRUNC : O_APPEND) ); 00216 */ 00217 } 00218 else if (a_createInto) { 00219 string filename(a_medVolID + "." + a_extension); 00220 m_diskFRI.SetFullPath(a_intoPath + filename); 00221 } 00222 else { 00223 m_diskFRI.SetFullPath(g_cmn.dirs.fri + a_medVolID); 00224 /* 00225 It would be better that create new would not overwrite the file 00226 if it exists when creating file for non-recovery purposes. 00227 m_diskFRI.OpenF( 00228 O_BINARY | O_WRONLY | 00229 (a_createNew? (O_CREAT | O_EXCL) : O_APPEND) ); 00230 */ 00231 } 00232 m_diskFRI.OpenF(fom_WRITE |(a_createNew ? fom_CREATE_ALWAYS : 00233 fom_OPEN_ALWAYS)); 00234 00235 if (!a_createNew) { 00236 // append to exiting FRI file 00237 m_diskFRI.SeekEndF(); 00238 } 00239 }


cmn_File blk_DiskFRIWriter::m_diskFRI [protected] |
Definition at line 416 of file df.h.
Referenced by OpenFRIFile(), Write(), and ~blk_DiskFRIWriter().
blk_DiskFRIWriter::log_CLASSID_m [private] |
ivd_MigrationID_t blk_DiskFRIWriter::m_migID [private] |
UInt32_t blk_DiskFRIWriter::m_copyID [private] |
UInt32_t blk_DiskFRIWriter::m_mediumKey [private] |
UInt32_t blk_DiskFRIWriter::m_medVolNum [private] |
i_FSC_var blk_DiskFRIWriter::m_fsc [private] |
1.5.6