#include <hsm_FHrelc.h>

Definition at line 30 of file hsm_FHrelc.h.
Public Member Functions | |
| hsm_ReleaseCandRec (fio_CirFileTrans &a_cirFile, ivd_Time32_t a_retaintionTime) | |
| void | FindNextClearCurrRec (fio_Transaction &a_trans) |
| NULL trans is used only in constructor, cause not need to clean already read record Method FindNextRec find first record that have removeTime != 0 in circular file if circular file is empty then releasedrecord is filled with zeroes and m_idx is set to zero. | |
| void | FindNextRec () |
| ivd_RecordIDX_t | Append (hsm_FileHeader *a_fh_p, fio_Transaction &a_trans) |
| ivd_RecordIDX_t | Append (hdb_ReleaseCand_t &a_rc, fio_Transaction &a_trans) |
| void | Release (hsm_FileHeader *a_fh_p, fio_Transaction &a_trans) |
| bool | IsValid () |
| void | MoveToEnd (hsm_FileHeader *a_fh_p, fio_Transaction &a_trans) |
| hdb_ReleaseCand_t & | GetRefRleaseCandRec () |
| ivd_Time32_t | GetRemoveTime () |
| void | Reconfigure (ivd_Time32_t a_RetentionTime) |
Public Attributes | |
| log_CLASSID_m | |
Private Attributes | |
| fio_CirFileTrans & | m_cirFile |
| ivd_Time32_t | m_retaintionTime |
| how much time must files wait on release candidate list | |
| ivd_RecordIDX_t | m_idx |
| hdb_ReleaseCand_t | m_releaseCandRec |
| cmn_Mutex | m_releaseCandRec_x |
| hsm_ReleaseCandRec::hsm_ReleaseCandRec | ( | fio_CirFileTrans & | a_cirFile, | |
| ivd_Time32_t | a_retaintionTime | |||
| ) |
Definition at line 59 of file hsm_FHrelc.cpp.
References FindNextRec(), and log_FUNC_m.
00062 : 00063 m_cirFile(a_cirFile), 00064 m_retaintionTime(a_retaintionTime), 00065 m_idx(0) 00066 { 00067 log_FUNC_m(hsm_ReleaseCandRec); 00068 // dont need transaction cause m_idx is zerro 00069 FindNextRec(); 00070 } //============================================================================//

| void hsm_ReleaseCandRec::FindNextClearCurrRec | ( | fio_Transaction & | a_trans | ) |
NULL trans is used only in constructor, cause not need to clean already read record Method FindNextRec find first record that have removeTime != 0 in circular file if circular file is empty then releasedrecord is filled with zeroes and m_idx is set to zero.
Definition at line 74 of file hsm_FHrelc.cpp.
References FindNextRec(), log_FUNC_m, m_cirFile, m_idx, m_releaseCandRec_x, and fio_CirFileTrans::WriteRec().
Referenced by hsm_FHrelc::Truncate().
00074 { 00075 log_FUNC_m(FindNextClearCurrRec); 00076 cmn_MutexLock l(m_releaseCandRec_x); 00077 if (m_idx != 0) { 00078 hdb_ReleaseCand_t rc; // release previous cand record with zeroes 00079 m_cirFile.WriteRec(m_idx, &rc, 1, a_trans); 00080 } 00081 FindNextRec(); 00082 }


| void hsm_ReleaseCandRec::FindNextRec | ( | ) |
Definition at line 86 of file hsm_FHrelc.cpp.
References hdb_ReleaseCand_t::appendTime, hdb_ReleaseCand_t::Clear(), dbg_DETAIL, log_DBG_m, log_FUNC_m, m_cirFile, m_idx, m_releaseCandRec, and fio_CirFileTrans::ReadFront().
Referenced by FindNextClearCurrRec(), hsm_ReleaseCandRec(), IsValid(), and Release().
00086 { 00087 log_FUNC_m(FindNextRec); 00088 ivd_RecordIDX_t idx = 0; 00089 log_DBG_m(dbg_DETAIL, "Current index is " << m_idx); 00090 do { // read util no more records or found actual record 00091 idx = m_cirFile.ReadFront(&m_releaseCandRec); 00092 log_DBG_m(dbg_DETAIL, " ReadFront from idx " << idx); 00093 // first record is already truncate so skip it (idx == m_idx) 00094 } while (idx != 0 && (m_releaseCandRec.appendTime == 0 || idx == m_idx)); 00095 if (idx == 0) { 00096 // log_DBG_m(dbg_DETAIL, "No more records in circ file."); 00097 m_releaseCandRec.Clear(); 00098 } 00099 m_idx = idx; 00100 log_DBG_m(dbg_DETAIL, " New RF idx " << m_idx); 00101 }


| ivd_RecordIDX_t hsm_ReleaseCandRec::Append | ( | hsm_FileHeader * | a_fh_p, | |
| fio_Transaction & | a_trans | |||
| ) |
Definition at line 126 of file hsm_FHrelc.cpp.
References dbg_NORM, hsm_FileHeader::GetFileID(), fio_File::GetFileName(), hsm_FileHeader::GetFileSize(), hsm_FileHeader::GetFName(), hsm_FileHeader::GetfType(), hsm_FileHeader::GetInode(), hsm_FileHeader::GetNameOwnIdx(), log_DBG_m, log_FUNC_m, m_cirFile, m_retaintionTime, and cmn_Time::Time2YMDhms().
Referenced by hsm_FHrelc::Append(), and Append().
00128 { 00129 log_FUNC_m(Append(FH*)); 00130 hdb_ReleaseCand_t rc(a_fh_p->GetfType(), 00131 a_fh_p->GetNameOwnIdx(), // nameOwnerIdx 00132 a_fh_p->GetInode(), 00133 a_fh_p->GetFileID()); 00134 00135 ivd_RecordIDX_t idx = Append(rc, a_trans); 00136 00137 cmn_Time remTime(rc.appendTime + m_retaintionTime ); 00138 log_DBG_m(dbg_NORM, "Add file " << a_fh_p->GetFName() 00139 << " size " << a_fh_p->GetFileSize() 00140 << " time to remove " << remTime.Time2YMDhms() 00141 << " to " << m_cirFile.GetFileName()); 00142 return idx; 00143 }


| ivd_RecordIDX_t hsm_ReleaseCandRec::Append | ( | hdb_ReleaseCand_t & | a_rc, | |
| fio_Transaction & | a_trans | |||
| ) |
Definition at line 105 of file hsm_FHrelc.cpp.
References Append(), hdb_ReleaseCand_t::appendTime, dbg_DETAIL, log_DBG_m, log_FUNC_m, m_cirFile, m_idx, m_releaseCandRec, m_releaseCandRec_x, NULL, and fio_CirFileTrans::WriteBack().
00107 { 00108 00109 log_FUNC_m(Append(rc&)); 00110 00111 a_rc.appendTime = time(NULL); 00112 log_DBG_m(dbg_DETAIL, a_rc); 00113 00114 ivd_RecordIDX_t idx = m_cirFile.WriteBack(&a_rc, a_trans); 00115 00116 cmn_MutexLock l(m_releaseCandRec_x); 00117 if (m_releaseCandRec.appendTime == 0) { 00118 m_releaseCandRec = a_rc; // first record is set immediately 00119 m_idx = idx; // and is skipped by FindNexRec 00120 } 00121 return idx; 00122 }

| void hsm_ReleaseCandRec::Release | ( | hsm_FileHeader * | a_fh_p, | |
| fio_Transaction & | a_trans | |||
| ) |
Definition at line 147 of file hsm_FHrelc.cpp.
References dbg_DETAIL, FindNextRec(), fio_File::GetFileName(), hsm_FileHeader::GetFName(), hsm_ListPos::GetRelCandIdx(), log_DBG_m, log_FUNC_m, m_cirFile, m_idx, m_releaseCandRec_x, and fio_CirFileTrans::WriteRec().
Referenced by hsm_FHrelc::Release().
00148 { 00149 log_FUNC_m(Release); 00150 00151 ivd_RecordIDX_t idx = a_fh_p->GetRelCandIdx(); 00152 00153 log_DBG_m(dbg_DETAIL, "remove file " << a_fh_p->GetFName() 00154 << " from " << m_cirFile.GetFileName()); 00155 00156 hdb_ReleaseCand_t relCand; // record with zerroes 00157 m_cirFile.WriteRec(idx, &relCand, 1, a_trans); 00158 00159 cmn_MutexLock l(m_releaseCandRec_x); 00160 00161 if (m_idx == idx) { // if current record is released, then read next 00162 FindNextRec(); 00163 } 00164 }


| bool hsm_ReleaseCandRec::IsValid | ( | ) |
Definition at line 167 of file hsm_FHrelc.cpp.
References hdb_ReleaseCand_t::appendTime, dbg_NORM, hdb_ReleaseCand_t::fileID, hdb_ReleaseCand_t::fileType, FindNextRec(), hdb_ReleaseCand_t::generalInode, fio_File::GetFileName(), ie_HSMDB_ERROR, log_DBG_m, log_FUNC_m, m_cirFile, m_idx, m_releaseCandRec, m_releaseCandRec_x, hdb_ReleaseCand_t::nameOwnIdx, and fio_CirFileTrans::ReadRec().
Referenced by hsm_FHrelc::Truncate().
00167 { 00168 log_FUNC_m(IsRelCandValid); 00169 00170 hdb_ReleaseCand_t relCand; // record with zerroes 00171 cmn_MutexLock l(m_releaseCandRec_x); 00172 m_cirFile.ReadRec(m_idx, &relCand, 1); 00173 if (relCand.appendTime == 0) { 00174 // record removed recently 00175 log_DBG_m(dbg_NORM, "Release candidate on idx " << m_idx 00176 << " removed recently " << m_releaseCandRec); 00177 FindNextRec(); 00178 return false; 00179 } 00180 else if ( (relCand.fileID != m_releaseCandRec.fileID) 00181 || (relCand.generalInode != m_releaseCandRec.generalInode) 00182 || (relCand.nameOwnIdx != m_releaseCandRec.nameOwnIdx 00183 || (relCand.fileType) != m_releaseCandRec.fileType)) { 00184 // strange not same file, throw internal error 00185 ostringstream sstr; 00186 sstr << " Not the same record in circular file " << m_cirFile.GetFileName() << endl 00187 << " In memory : " << m_releaseCandRec << endl 00188 << " read from index " << m_idx << endl 00189 << relCand; 00190 00191 throw ivd_InternalError(ie_HSMDB_ERROR, sstr.str(), true); 00192 } 00193 return true; 00194 }


| void hsm_ReleaseCandRec::MoveToEnd | ( | hsm_FileHeader * | a_fh_p, | |
| fio_Transaction & | a_trans | |||
| ) |
Definition at line 197 of file hsm_FHrelc.cpp.
References log_FUNC_m.
00198 { 00199 log_FUNC_m(MoveToEnd); 00200 00201 }
| hdb_ReleaseCand_t& hsm_ReleaseCandRec::GetRefRleaseCandRec | ( | ) | [inline] |
Definition at line 75 of file hsm_FHrelc.h.
References m_releaseCandRec.
Referenced by hsm_FHrelc::ChoiceOldestList(), and hsm_FHrelc::Truncate().
00075 { return m_releaseCandRec;};

| ivd_Time32_t hsm_ReleaseCandRec::GetRemoveTime | ( | ) | [inline] |
Definition at line 77 of file hsm_FHrelc.h.
References hdb_ReleaseCand_t::appendTime, m_releaseCandRec, and m_retaintionTime.
Referenced by hsm_FHrelc::ChoiceOldestList(), and hsm_FHrelc::Truncate().
00077 { 00078 return m_releaseCandRec.appendTime 00079 ? m_releaseCandRec.appendTime + m_retaintionTime 00080 : 0; 00081 };

| void hsm_ReleaseCandRec::Reconfigure | ( | ivd_Time32_t | a_RetentionTime | ) | [inline] |
Definition at line 85 of file hsm_FHrelc.h.
References m_retaintionTime.
Referenced by hsm_FHrelc::Reconfigure().
00085 {m_retaintionTime = a_RetentionTime;};

Definition at line 37 of file hsm_FHrelc.h.
fio_CirFileTrans& hsm_ReleaseCandRec::m_cirFile [private] |
Definition at line 40 of file hsm_FHrelc.h.
Referenced by Append(), FindNextClearCurrRec(), FindNextRec(), IsValid(), and Release().
how much time must files wait on release candidate list
Definition at line 42 of file hsm_FHrelc.h.
Referenced by Append(), GetRemoveTime(), and Reconfigure().
ivd_RecordIDX_t hsm_ReleaseCandRec::m_idx [private] |
Definition at line 44 of file hsm_FHrelc.h.
Referenced by Append(), FindNextClearCurrRec(), FindNextRec(), IsValid(), and Release().
Definition at line 45 of file hsm_FHrelc.h.
Referenced by Append(), FindNextRec(), GetRefRleaseCandRec(), GetRemoveTime(), and IsValid().
Definition at line 47 of file hsm_FHrelc.h.
Referenced by Append(), FindNextClearCurrRec(), IsValid(), and Release().
1.5.6