hsm_ReleaseCandRec Class Reference
[Classes for managing object list]

#include <hsm_FHrelc.h>

Collaboration diagram for hsm_ReleaseCandRec:

Collaboration graph
[legend]

List of all members.


Detailed Description

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_tGetRefRleaseCandRec ()
ivd_Time32_t GetRemoveTime ()
void Reconfigure (ivd_Time32_t a_RetentionTime)

Public Attributes

 log_CLASSID_m

Private Attributes

fio_CirFileTransm_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

Constructor & Destructor Documentation

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

Here is the call graph for this function:


Member Function Documentation

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:


Member Data Documentation

Definition at line 37 of file hsm_FHrelc.h.

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

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


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

Generated on Mon Feb 27 19:29:36 2012 for OPENARCHIVE by  doxygen 1.5.6