hsm_FHpVecMgr Class Reference
[Classes for managing object list]

#include <hsm_FHcache.h>

Inheritance diagram for hsm_FHpVecMgr:

Inheritance graph
[legend]
Collaboration diagram for hsm_FHpVecMgr:

Collaboration graph
[legend]

List of all members.


Detailed Description

File header pointer vector manager.

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_FileHeaderGetFH (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

Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }

Here is the call graph for this function:

void hsm_FHpVecMgr::InsertDirWithTest ( hsm_FileHeader **  a_FileHObj  ) 

See also:
hsm_FHcache

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }


Member Data Documentation

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.


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

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