#include <hsm_FHcache.h>


Definition at line 35 of file hsm_FHcache.h.
Public Member Functions | |
| ~hsm_FHpVecMgr () | |
| void | Insert (hsm_FileHeader *a_FileHObj) |
| Insert must be used ONLY if GetFH return NULL Doesn't check if FH olready exist and put &FH at the end of the vector Insert method increase reference by 2. | |
| void | InsertDirWithTest (hsm_FileHeader **a_FileHObj) |
| void | Remove (register hsm_FileHeader *a_FileHObj) |
| Find proper FH by serching its addres in container if FH has only one reference then is removed from cache othervice not iterator possition is replaced with last FH in vector or just remove Fh if it's last. | |
| bool | RemoveLastButOne (register hsm_FileHeader *a_FileHObj) |
| hsm_FileHeader * | GetFH (ivd_GenInode_t a_generalInode) |
| search for file header NOTE if fount then referece will be increased to prevent from delete | |
Public Attributes | |
| log_CLASSID_m | |
Private Attributes | |
| cmn_Mutex | m_FHpVec_x |
| hsm_FHpVecMgr::~hsm_FHpVecMgr | ( | ) |
Definition at line 44 of file hsm_FHcache.cpp.
References NULL.
00044 { 00045 // log_FUNC_m(hsm_FHcache); 00046 hsm_FileHeader* *ip = &(*begin()); 00047 hsm_FileHeader* *ep = &(*end()); // addres of past the end 00048 for (; ip < ep; ip++) { 00049 if (*ip != NULL) { 00050 (*ip)->DecrRef(); 00051 } 00052 } 00053 //for (hsm_FH_p_vi iter = begin(); iter != end(); iter++) { 00054 // if (*iter != NULL) { 00055 // (*iter)->DecrRef(); 00056 // } 00057 //} 00058 }
| void hsm_FHpVecMgr::Insert | ( | hsm_FileHeader * | a_FileHObj | ) |
Insert must be used ONLY if GetFH return NULL Doesn't check if FH olready exist and put &FH at the end of the vector Insert method increase reference by 2.
Definition at line 62 of file hsm_FHcache.cpp.
References hsm_FileHeader::IncrRef(), log_FUNC_m, and m_FHpVec_x.
00062 { 00063 log_FUNC_m(Insert); 00064 cmn_MutexLock l(m_FHpVec_x); 00065 insert(end(), a_FileHObj); // here is oposite 00066 a_FileHObj->IncrRef(); 00067 }

| void hsm_FHpVecMgr::InsertDirWithTest | ( | hsm_FileHeader ** | a_FileHObj | ) |
Definition at line 71 of file hsm_FHcache.cpp.
References dbg_NORM, IVD_PRINT_ID_FS, log_DBG_m, log_FUNC_m, and m_FHpVec_x.
00071 { 00072 log_FUNC_m(InsertDirWithTest); 00073 cmn_MutexLock l(m_FHpVec_x); 00074 00075 ivd_GenInode_t inode = (*a_FileHObj)->GetInode(); 00076 for (hsm_FH_p_vi iter = begin(); iter != end(); iter++) { 00077 if ((*iter)->GetInode() == inode) { // already inserted 00078 // delete 00079 log_DBG_m(dbg_NORM, " Dir. " << (*iter)->MakePath() 00080 << " inode " << IVD_PRINT_ID_FS(inode) 00081 << " already exist in cache. It's going to delete and replace with FH from cache."); 00082 // (*a_FileHObj)->DecrRef(); not need. It is going to delete anyhow 00083 delete *a_FileHObj; // forget constructed FH 00084 *a_FileHObj = (*iter); // use it that from cache 00085 // when found inc ref to prevent removal from memory specialy for owners 00086 //BUG269 (*iter)->IncMemberRef(); 00087 // (*iter)->IncrRef(); not need inserted FH already has increased reference 00088 return; 00089 } 00090 } 00091 // not in cache yet 00092 insert(end(), *a_FileHObj); 00093 (*a_FileHObj)->IncrRef(); 00094 }
| void hsm_FHpVecMgr::Remove | ( | register hsm_FileHeader * | a_FileHObj | ) |
Find proper FH by serching its addres in container if FH has only one reference then is removed from cache othervice not iterator possition is replaced with last FH in vector or just remove Fh if it's last.
if element is directory then has one
Definition at line 101 of file hsm_FHcache.cpp.
References dbg_NORM, hsm_FileHeader::GetInode(), ie_INVALID_ARG, IVD_PRINT_ID_FS, log_DBG_m, log_FUNC_m, and m_FHpVec_x.
00101 { 00102 log_FUNC_m(Remove); 00103 cmn_MutexLock l(m_FHpVec_x); 00104 00105 hsm_FH_p_vi endel = end(); 00106 for (hsm_FH_p_vi iter = begin(); iter != end(); iter++) { 00107 if (*iter == a_FileHObj) { // find iter that point to FH 00108 log_DBG_m(dbg_NORM, "Removed from cache. INO " << IVD_PRINT_ID_FS(a_FileHObj->GetInode())); 00109 (*iter)->DecrRef(); 00110 if (iter != --endel) { // endel become last 00111 *iter = *endel; // if iter is not last move last to current 00112 } 00113 erase(endel); // othervice remove last 00114 return; // DONE 00115 } 00116 } 00117 throw ivd_InternalError(ie_INVALID_ARG, 00118 "File Header is not found in FHcache by its pointer.", true); 00119 }

| bool hsm_FHpVecMgr::RemoveLastButOne | ( | register hsm_FileHeader * | a_FileHObj | ) |
Definition at line 123 of file hsm_FHcache.cpp.
References dbg_DETAIL, dbg_NORM, hsm_FileHeader::GetInode(), hsm_FileHeader::GetRef(), ie_INVALID_ARG, IVD_PRINT_ID_FS, log_DBG_m, log_FUNC_m, and m_FHpVec_x.
00123 { 00124 log_FUNC_m(RemoveLastButOne); 00125 cmn_MutexLock l(m_FHpVec_x); 00126 00127 hsm_FH_p_vi endel = end(); 00128 for (hsm_FH_p_vi iter = begin(); iter != end(); iter++) { 00129 if (*iter == a_FileHObj) { // find iter that point to FH 00130 UInt32_t ref = a_FileHObj->GetRef(); 00131 if (ref == 2) { // cache and caller referencies 00132 log_DBG_m(dbg_NORM, "Removed from cache. INO " << IVD_PRINT_ID_FS(a_FileHObj->GetInode())); 00133 (*iter)->DecrRef(); 00134 if (iter != --endel) { // endel become last 00135 *iter = *endel; // if iter is not last move last to current 00136 } 00137 erase(endel); // othervice remove last 00138 return true; 00139 } 00140 else { 00141 log_DBG_m(dbg_DETAIL, "Don't remove from cache. Ref=" << ref 00142 << ". INO " << IVD_PRINT_ID_FS(a_FileHObj->GetInode())); 00143 return false; 00144 } 00145 } 00146 } 00147 // 00148 ostringstream sstr; 00149 sstr << "File Header is not found in FHcache by its pointer." << endl 00150 << *a_FileHObj; 00151 throw ivd_InternalError(ie_INVALID_ARG, sstr.str(), true); 00152 }

| hsm_FileHeader * hsm_FHpVecMgr::GetFH | ( | ivd_GenInode_t | a_generalInode | ) |
search for file header NOTE if fount then referece will be increased to prevent from delete
Definition at line 155 of file hsm_FHcache.cpp.
References dbg_DETAIL, IVD_PRINT_ID_FS, log_DBG_m, log_FUNC_m, m_FHpVec_x, and NULL.
00155 { 00156 log_FUNC_m(GetFH(ivd_GenInode_t)); 00157 cmn_MutexLock l(m_FHpVec_x); 00158 // register hsm_FH_p_vi endel = end(); 00159 log_DBG_m(dbg_DETAIL, " Search FH. inode " << IVD_PRINT_ID_FS(a_generalInode)); 00160 for (hsm_FH_p_vi iter = begin(); iter != end(); iter++) { 00161 if ((*iter)->GetInode() == a_generalInode) { 00162 // when found inc ref to prevent removal from memory specialy for owners 00163 //BUG269 (*iter)->IncMemberRef(); 00164 (*iter)->IncrRef(); 00165 return *iter; 00166 } 00167 } 00168 return NULL; 00169 }
cmn_Mutex hsm_FHpVecMgr::m_FHpVec_x [private] |
Definition at line 40 of file hsm_FHcache.h.
Referenced by GetFH(), Insert(), InsertDirWithTest(), Remove(), and RemoveLastButOne().
Definition at line 43 of file hsm_FHcache.h.
1.5.6