fsc_GenerationMgr Class Reference
[File System Catalog]

#include <fsc_GenerationMgr.h>

Inheritance diagram for fsc_GenerationMgr:

Inheritance graph
[legend]
Collaboration diagram for fsc_GenerationMgr:

Collaboration graph
[legend]

List of all members.


Detailed Description

<Description:> A more elaborate class description that describes all aspects of class usage etc.

Author:
Dejan Volk Lupo, HERMES SoftLab
See also:
<reference>

Definition at line 53 of file fsc_GenerationMgr.h.


Public Member Functions

 fsc_GenerationMgr (df_SplitInfo &a_splitInfo)
 Default constructor.
 fsc_GenerationMgr (fsc_DataL_t &a_dataL)
virtual ~fsc_GenerationMgr ()
fsc_GenInsertAct_e GetGenInsertAct ()
void Insert (df_SplitInfo &a_splitInfo)
 Insert a split into Data location tree.
void Remove (ivd_MediaKey_t a_mediumKey, ivd_MedVolNum_t a_medVolNum)
 remove all entries from particular volume.
bool Remove (ivd_MediaKey_t a_mediumKey, ivd_MedVolNum_t a_medVolNum, UInt32_t a_blockOffs)
 Remove one particular entry.
fsc_GenerationFindGen (ivd_MigrationID_t a_migID)
 find Generation object
void GetCopiesPos (ivd_CopiesPos_v_t &a_copiesPos_v, ivd_MigrationID_t &a_migID, fsc_MigInfo_t &a_migInfo)
void CheckLastGen (string &a_status, ivd_MigrationID_t &a_migID)
bool Write2DB (fsc_DataL_t &a_dataL, fio_Transaction &a_trans)
 Write all changes to DB, update nextEntry structure to proper index and size return true if nextEntry structure is changed.
void Dump (ostream &os)
bool TreeWalk (fsc_Collector &a_collector)

Public Attributes

fsc_Generation_p_l_t m_generation_p_l
 log_CLASSID_m

Private Attributes

fsc_GenInsertAct_e m_genInsertAct
 what happened when insert gen? add newest one update last update other used to proper update NSC attributes
ivd_RecordIDX_v_t m_idxOfChainedVec_v

Friends

class ut_fsc_GenerationMgr

Constructor & Destructor Documentation

fsc_GenerationMgr::fsc_GenerationMgr ( df_SplitInfo a_splitInfo  ) 

Default constructor.

Definition at line 53 of file fsc_GenerationMgr.cpp.

References log_FUNC_m, and m_generation_p_l.

00055             :
00056             fio_Vector(*g_generationRF_p),
00057             m_genInsertAct(giaNEWEST_GEN)
00058 {
00059     log_FUNC_m(fsc_GenerationMgr(df_SplitInfo));
00060 
00061     fsc_Generation* gen_p = new fsc_Generation(a_splitInfo);
00062     m_generation_p_l.push_front(gen_p);
00063 }
//============================================================================//

fsc_GenerationMgr::fsc_GenerationMgr ( fsc_DataL_t a_dataL  ) 

Definition at line 66 of file fsc_GenerationMgr.cpp.

References alloca(), c_lastVecIdx, c_maxRFVecSize, cmn_HexDump(), cmn_Num2Str(), dbg_DETAIL, g_generationRF_p, fsc_DataL_t::generationIdx, ie_FSC_INV_GENERATION_NUM, log_DBG_m, log_FUNC_m, m_generation_p_l, m_idxOfChainedVec_v, fio_Vector::m_vectorSize, fio_UnusedRec_t::next, fsc_DataL_t::numOfAllGen, fsc_DataL_t::numOfElement, and fio_RelFile::ReadRec().

00067             :
00068             fio_Vector(*g_generationRF_p, a_dataL.numOfElement, a_dataL.generationIdx, false),
00069             m_genInsertAct(giaUNKNOWN_ACT)
00070 {
00071     log_FUNC_m(fsc_GenerationMgr);
00072 
00073     UInt16_t numOfElement  = a_dataL.numOfElement;
00074 
00075     if (a_dataL.numOfElement == 0) { // correct numOfElement and m_vectorSize
00076         numOfElement = c_maxRFVecSize;
00077         m_vectorSize = numOfElement;
00078     }
00079 
00080     UInt16_t        lastElIdx     = numOfElement - 1;
00081     ivd_RecordIDX_t generationIdx = a_dataL.generationIdx;
00082     log_DBG_m(dbg_DETAIL,"Get " << numOfElement
00083                       << " generations from idx " << generationIdx);
00084 
00085     if (generationIdx > 0) {
00086         // allocate space for max possible vec 256
00087         fsc_Generation_t *genData = reinterpret_cast<fsc_Generation_t*>
00088                                     (alloca(c_maxRFVecSize * sizeof(fsc_Generation_t)));
00089 
00090         g_generationRF_p->ReadRec(generationIdx, genData, numOfElement);
00091 
00092         log_DBG_m(dbg_DETAIL, "R Generations from = " << generationIdx << endl <<
00093             cmn_HexDump(genData, numOfElement * sizeof(fsc_Generation_t), sizeof(fsc_Generation_t), false) );
00094 
00095         // if more chained vectors exist than last element is index to next vector in chain
00096         fsc_Generation_t *end_p = &genData[a_dataL.numOfAllGen >= c_maxRFVecSize
00097                                            ? numOfElement - 1
00098                                            : numOfElement];
00099         fsc_Generation_t *p     =  genData;
00100         for (; p < end_p; ++p) {
00101             fsc_Generation* gen_p = new fsc_Generation(*p);
00102             m_generation_p_l.push_back(gen_p);
00103         }
00104 
00105         if (a_dataL.numOfAllGen >= c_maxRFVecSize) {
00106             ivd_RecordIDX_t vecIdx = reinterpret_cast<fio_UnusedRec_t*>(&genData[lastElIdx])->next;
00107             end_p = &genData[c_lastVecIdx];
00108             fio_UnusedRec_t &lastRec_p = *reinterpret_cast<fio_UnusedRec_t*>(&genData[c_lastVecIdx]);
00109             while (vecIdx > 0) {
00110                 m_idxOfChainedVec_v.push_back(vecIdx);
00111                 log_DBG_m(dbg_DETAIL,"Linked vector. Get " << c_maxRFVecSize
00112                                 << " generations from idx " << vecIdx);
00113                 g_generationRF_p->ReadRec(vecIdx, genData, c_maxRFVecSize);
00114                 log_DBG_m(dbg_DETAIL, "R Generations from = " << vecIdx << endl <<
00115                     cmn_HexDump(genData,
00116                                 c_maxRFVecSize * sizeof(fsc_Generation_t),
00117                                 sizeof(fsc_Generation_t),
00118                                 false) );
00119 
00120                 fsc_Generation_t *p = genData;
00121                 for (; p < end_p; ++p) {
00122                     fsc_Generation* gen_p = new fsc_Generation(*p);
00123                     log_DBG_m(dbg_DETAIL, "gen_p = 0x" << hex << gen_p << dec);
00124                     m_generation_p_l.push_back(gen_p);
00125                 }
00126                 vecIdx = lastRec_p.next;
00127             }
00128             if (a_dataL.numOfAllGen != m_generation_p_l.size()) {
00129                 throw ivd_InternalError(ie_FSC_INV_GENERATION_NUM,
00130                                          cmn_Num2Str(m_generation_p_l.size())
00131                                          + " gen num got from generation.lrf != a_dataL.numOfAllGen "
00132                                          + cmn_Num2Str(a_dataL.numOfAllGen));
00133             }
00134         }
00135     }
00136 }
//============================================================================//

Here is the call graph for this function:

fsc_GenerationMgr::~fsc_GenerationMgr (  )  [virtual]

Definition at line 139 of file fsc_GenerationMgr.cpp.

References m_generation_p_l.

00140 {
00141     for (fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00142          iter != m_generation_p_l.end();
00143          iter++) {
00144         delete *iter;
00145     }
00146 }


Member Function Documentation

fsc_GenInsertAct_e fsc_GenerationMgr::GetGenInsertAct (  )  [inline]

Definition at line 85 of file fsc_GenerationMgr.h.

References m_genInsertAct.

Referenced by fsc_DataL::Insert().

00085 { return m_genInsertAct; };

Here is the caller graph for this function:

void fsc_GenerationMgr::Insert ( df_SplitInfo a_splitInfo  ) 

Insert a split into Data location tree.

Definition at line 150 of file fsc_GenerationMgr.cpp.

References dbg_NORM, df_SplitInfo::Dump(), fsc_maxGenerations_c, giaINSERT_OLD_GEN, giaINSERT_ONE_BEFORE_LAST_GEN, giaLAST_GEN_UPDATED, giaNEWEST_GEN, giaONE_BEFORE_LAST_GEN_UPDATED, giaOTHER_GEN_UPDATED, log_DBG_m, log_FUNC_m, log_WRN_m, fio_Vector::m_changed, m_generation_p_l, m_genInsertAct, and df_SplitInfo::migrationID.

Referenced by fsc_DataL::Insert().

00150                                                          {
00151     log_FUNC_m(Insert);
00152 
00153     ivd_MigrationID_t   migID = a_splitInfo.migrationID;
00154     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00155 
00156     // take proper sort position, descending sort by migID
00157     while (iter   != m_generation_p_l.end()
00158         && (**iter).m_migrationID > migID) {
00159         ++iter;
00160     }
00161 
00162     // if generation is not here jet
00163     if (   iter == m_generation_p_l.end()   // end of the list
00164        || (**iter ).m_migrationID < migID) {// no element with same migID
00165         // Empty,  just continue
00166     }
00167     else {
00168         // fix bug 1228, size may change when splits
00169         //if ((*iter)->m_size != a_splitInfo.fileSize) {
00170         //    throw ivd_InternalError(ie_FSC_INV_SPLIT_INFO ,
00171         //        string("Inserted split match with migrationID, but has different file size.") +
00172         //        " Gen   MigID    = " + cmn_Num2Str(migID) +
00173         //        " Gen   FileSize = " + cmn_Num2Str((*iter)->m_size)+ a_splitInfo.Dump(),
00174         //        true);
00175         //}
00176         (*iter)->Insert(a_splitInfo);
00177         if (iter == m_generation_p_l.begin()) {
00178             m_genInsertAct = giaLAST_GEN_UPDATED;
00179         }
00180         else if (iter == ++(m_generation_p_l.begin())) {
00181             m_genInsertAct = giaONE_BEFORE_LAST_GEN_UPDATED;
00182         }
00183         else {
00184            m_genInsertAct =  giaOTHER_GEN_UPDATED;
00185         }
00186         return;
00187     }
00188     // now iter must point to end or to elemet with smaller migID
00189 
00190     fsc_Generation* gen_p = new fsc_Generation(a_splitInfo);
00191 
00192     // newest if inserted to first place
00193     if (iter == m_generation_p_l.begin()) {
00194         m_genInsertAct = giaNEWEST_GEN;
00195     }
00196     else if (iter == ++(m_generation_p_l.begin())) {
00197         m_genInsertAct = giaINSERT_ONE_BEFORE_LAST_GEN;
00198     }
00199     else {
00200         m_genInsertAct =  giaINSERT_OLD_GEN;
00201     }
00202 
00203     m_generation_p_l.insert(iter, gen_p);
00204     m_changed = true;
00205     if (m_generation_p_l.size() % 256 == 0) {
00206         log_DBG_m(dbg_NORM,"CONGRATULATION: " << m_generation_p_l.size()
00207                            << " generations of file: " <<  a_splitInfo.Dump());
00208     }
00209     if (m_generation_p_l.size() > fsc_maxGenerations_c) {
00210         log_WRN_m("Number of generation exceeded " << fsc_maxGenerations_c
00211                <<". The oldest one will be ignored.");
00212         fsc_Generation_p_l_i iter = --(m_generation_p_l.end());
00213         delete *iter;
00214         m_generation_p_l.erase(iter);
00215     }
00216     return;
00217 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_GenerationMgr::Remove ( ivd_MediaKey_t  a_mediumKey,
ivd_MedVolNum_t  a_medVolNum 
)

remove all entries from particular volume.

Definition at line 220 of file fsc_GenerationMgr.cpp.

References log_FUNC_m, and m_generation_p_l.

Referenced by Remove(), and fsc_DataL::Remove().

00221                                                                 {
00222     log_FUNC_m(Remove);
00223     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00224     for (;iter != m_generation_p_l.end(); iter++) {
00225         (**iter).Remove(a_mediumKey, a_medVolNum);
00226     }
00227 }

Here is the caller graph for this function:

bool fsc_GenerationMgr::Remove ( ivd_MediaKey_t  a_mediumKey,
ivd_MedVolNum_t  a_medVolNum,
UInt32_t  a_blockOffs 
)

Remove one particular entry.

Definition at line 230 of file fsc_GenerationMgr.cpp.

References log_FUNC_m, m_generation_p_l, and Remove().

00232                                                                {
00233     log_FUNC_m(Remove);
00234 
00235     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00236     for (;iter != m_generation_p_l.end(); iter++) {
00237         if ((**iter).Remove(a_mediumKey, a_medVolNum, a_blockOffs)) {
00238             return true;
00239         }
00240     }
00241     return false;
00242 }

Here is the call graph for this function:

fsc_Generation * fsc_GenerationMgr::FindGen ( ivd_MigrationID_t  a_migID  ) 

find Generation object

Definition at line 245 of file fsc_GenerationMgr.cpp.

References m_generation_p_l, and NULL.

00245                                                                     {
00246 
00247     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00248     for (;iter != m_generation_p_l.end(); iter++) {
00249         if ((*iter)->m_migrationID == a_migID) {
00250             return *iter;
00251         }
00252     }
00253     return NULL;
00254 }

void fsc_GenerationMgr::GetCopiesPos ( ivd_CopiesPos_v_t a_copiesPos_v,
ivd_MigrationID_t a_migID,
fsc_MigInfo_t a_migInfo 
)

Definition at line 257 of file fsc_GenerationMgr.cpp.

References Dump(), fsc_Generation::GetCopiesPos(), ie_FSC_NOCOPIES, ivd_DATA_d, ivd_Error, log_FUNC_m, fsc_MigInfo_t::m_fileId, m_generation_p_l, and fsc_Generation::m_migrationID.

Referenced by fsc_DataL::GetCopiesPos().

00259                                                 {
00260     log_FUNC_m(GetCopiesPos);
00261 
00262     fsc_Generation *gen_p;
00263 
00264     if (  a_migID == 0  ) {
00265         fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00266         for (;iter != m_generation_p_l.end(); iter++) {
00267             if ((*iter)->m_dataType & ivd_DATA_d) {
00268                 gen_p = *iter;
00269                 goto GetCopies;
00270             }
00271         }
00272         stringstream dump;
00273         dump << " Getting copies of fileID " << a_migInfo.m_fileId
00274              << " and MigID " << a_migID
00275              << " failed, because none of generations contain data.\n";
00276         Dump(dump);
00277         throw ivd_Error(ie_FSC_NOCOPIES, dump.str());
00278     }
00279     else {
00280         fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00281         for (;iter != m_generation_p_l.end(); iter++) {
00282             if (   (*iter)->m_migrationID <= a_migID
00283                 && (*iter)->m_dataType & ivd_DATA_d) {
00284                 gen_p = *iter;
00285                 goto GetCopies;
00286             }
00287         }
00288         stringstream dump;
00289         dump << " Getting copies of fileID " << a_migInfo.m_fileId
00290              << " and MigID " << a_migID
00291              << " failed, because none of generations before MigID contain data.\n";
00292         Dump(dump);
00293         throw ivd_Error(ie_FSC_NOCOPIES, dump.str());
00294     }
00295 
00296 GetCopies:
00297     a_migID = gen_p->m_migrationID;
00298     gen_p->GetCopiesPos(a_copiesPos_v, a_migInfo);
00299 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_GenerationMgr::CheckLastGen ( string &  a_status,
ivd_MigrationID_t a_migID 
)

Definition at line 318 of file fsc_GenerationMgr.cpp.

References log_FUNC_m, m_generation_p_l, and fsc_Generation::m_migrationID.

Referenced by fsc_DataL::CheckLastGen().

00318                                                                                 {
00319     log_FUNC_m(CheckLastGen);
00320 
00321     if (m_generation_p_l.size() == 0) {
00322         a_status += "    Missing in FSC.\n";
00323         return;
00324     }
00325     fsc_Generation *gen_p = *m_generation_p_l.begin();
00326     a_migID = gen_p->m_migrationID;
00327 }

Here is the caller graph for this function:

bool fsc_GenerationMgr::Write2DB ( fsc_DataL_t a_dataL,
fio_Transaction a_trans 
)

Write all changes to DB, update nextEntry structure to proper index and size return true if nextEntry structure is changed.

Definition at line 330 of file fsc_GenerationMgr.cpp.

References c_maxNumOfMember, c_maxRFVecSize, cmn_HexDump(), dbg_DETAIL, dlc_NotUsed, fsc_NextEntity_t::dlcType, fsc_Generation::Dump(), fsc_Vector_t::entryIdx, g_generationRF_p, fsc_DataL_t::generationIdx, giaUNKNOWN_ACT, log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_generation_p_l, m_genInsertAct, m_idxOfChainedVec_v, fio_Vector::m_relFileTrans, fio_Vector::m_vectorIndex, fio_Vector::m_vectorSize, fio_UnusedRec_t::next, fsc_Generation_t::nextEntity, fsc_DataL_t::numOfAllGen, fsc_DataL_t::numOfElement, fsc_Vector_t::numOfElement, fio_RelFileTrans::ReleaseVectorIdx(), size, fsc_NextEntity_t::vector, fio_Vector::Write2DB(), and fsc_Generation::Write2DB().

Referenced by fsc_DataL::Write2DB().

00331                                                            {
00332     log_FUNC_m(Write2DB);
00333 
00334     bool vecDataChanged      = false;
00335     fsc_Generation_v_st size = m_generation_p_l.size();
00336 
00337     log_DBG_m(dbg_DETAIL, "Generations = " << size);
00338     if (size) {
00339         fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00340         fsc_Generation_t *p  = &g_gensData[0];
00341         fsc_Generation_t *ep = &g_gensData[size];
00342 
00343         while (p < ep) {  // fulfill the data vector
00344             fsc_Generation *g = (*iter);
00345             if (g->Write2DB(*p, a_trans)) {
00346                 vecDataChanged = true;
00347                 if (   p->nextEntity.dlcType          == dlc_NotUsed
00348                 &&  p->nextEntity.vector.entryIdx     == 0
00349                 &&  p->nextEntity.vector.numOfElement == 0) { // entry was removed
00350                     m_changed = true;
00351                     ostringstream sstr;
00352                     g->Dump(sstr);
00353                     log_DBG_m(dbg_DETAIL, "Remove generation " << sstr.str());
00354                     // release object
00355                     delete g;
00356                     size--;
00357                     ep--;
00358                     iter = m_generation_p_l.erase(iter);
00359                     continue;
00360                 }
00361             }
00362             iter++;
00363             p++;
00364         }
00365     }
00366     if (!(m_changed || vecDataChanged)) {
00367         log_DBG_m(dbg_DETAIL, "No gen changed.");
00368         a_dataL.numOfAllGen  = size;
00369         return false;
00370     }
00371     // it is possible that size became zero after handle each element
00372     if (size == 0) {
00373         if( size != m_vectorSize) {
00374             //TODO remove all chained vector
00375             m_relFileTrans.ReleaseVectorIdx(m_vectorIndex, m_vectorSize, &a_trans);
00376             m_vectorSize  = 0;
00377             m_vectorIndex = 0;
00378             vecDataChanged = true;
00379         }
00380         a_dataL.numOfAllGen   = 0;
00381         a_dataL.generationIdx = 0;
00382         a_dataL.numOfElement  = 0;
00383         return vecDataChanged;
00384     }
00385 
00386     UInt32_t genToStore;
00387     UInt32_t firstVecSize = genToStore = size;
00388 
00389     log_DBG_m(dbg_DETAIL, "size >= c_maxRFVecSize, " << size << " >= " << c_maxRFVecSize);
00390     if (size >= c_maxRFVecSize) { // save prepared vector to DB
00391         ivd_RecordIDX_t nextVecIdx = 0; // last vector in chain
00392 
00393         while (genToStore >= c_maxRFVecSize) {
00394             fsc_Generation_t *ep = &g_gensData[genToStore];
00395             fio_UnusedRec_t &link = *reinterpret_cast<fio_UnusedRec_t*>(ep);
00396             ep -= c_maxNumOfMember;
00397 
00398             link.next = nextVecIdx;
00399             ivd_RecordIDX_t vecIdx = 0;
00400             if (m_idxOfChainedVec_v.size()) {
00401                 vecIdx = m_idxOfChainedVec_v.back();
00402                 m_idxOfChainedVec_v.pop_back();
00403             }
00404             fio_Vector v(*g_generationRF_p,
00405                          c_maxRFVecSize,
00406                          vecIdx, true);
00407 
00408             v.Write2DB(ep, c_maxRFVecSize, nextVecIdx, a_trans);
00409                 log_DBG_m(dbg_DETAIL, "W entry vector of " << c_maxRFVecSize << " generations : idx =" << nextVecIdx << endl <<
00410                     cmn_HexDump(ep,
00411                                 c_maxRFVecSize * sizeof(fsc_Generation_t),
00412                                 sizeof(fsc_Generation_t), false) );
00413             genToStore -= c_maxNumOfMember;
00414         }
00415         firstVecSize = genToStore + 1;
00416         fio_UnusedRec_t &lastRecfv = *reinterpret_cast<fio_UnusedRec_t*>(&g_gensData[genToStore]);
00417         lastRecfv.next = nextVecIdx;
00418     }
00419 
00420     // remove not used c_maxRFVecSize elements size vectors
00421     ivd_RecordIDX_t *vIdxIp = &(*m_idxOfChainedVec_v.begin()); // reuse vector
00422     ivd_RecordIDX_t *vIdxEp = &(*m_idxOfChainedVec_v.end());
00423     log_DBG_m(dbg_DETAIL, "Release vect " << hex << vIdxIp
00424                        << " " << vIdxEp << dec);
00425     while (vIdxIp < vIdxEp) {
00426         log_DBG_m(dbg_DETAIL, "Release vect " << *vIdxIp);
00427         g_generationRF_p->ReleaseVectorIdx(*vIdxIp, c_maxRFVecSize, &a_trans);
00428         vIdxIp++;
00429     }
00430     m_idxOfChainedVec_v.clear();
00431 
00432     bool change = m_changed;
00433     if (   m_changed
00434         || vecDataChanged) {
00435         m_changed = true; // fio_Vector doesn't know if only vecDataChanged is changed
00436         fio_Vector::Write2DB(g_gensData, firstVecSize, a_dataL.generationIdx, a_trans);
00437         a_dataL.numOfElement = firstVecSize;
00438         log_DBG_m(dbg_DETAIL, "W linked vector of " << firstVecSize << " generations : idx =" << a_dataL.generationIdx << endl <<
00439             cmn_HexDump(g_gensData, firstVecSize * sizeof(fsc_Generation_t), sizeof(fsc_Generation_t), false) );
00440     }
00441 
00442     m_genInsertAct = giaUNKNOWN_ACT;
00443     // tel owner my profile
00444     a_dataL.numOfAllGen  = size;
00445     return change;
00446 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_GenerationMgr::Dump ( ostream &  os  ) 

Reimplemented from fio_Vector.

Definition at line 449 of file fsc_GenerationMgr.cpp.

References dbg_DETAIL, fio_Vector::GetVectorIndex(), log_DBG_m, log_FUNC_m, and m_generation_p_l.

Referenced by fsc_DataL::Dump(), and GetCopiesPos().

00449                                         {
00450     log_FUNC_m(Dump);
00451 //    os << "Gen  vector index  =" << fio_Vector::GetVectorIndex() << endl;
00452     os << "    Generation number  =" << m_generation_p_l.size() << endl;
00453     os << "    Next idx = " << fio_Vector::GetVectorIndex() << endl;
00454 //    os << "n  Previous num of gen. =" << m_prevVecSize << endl;
00455 
00456     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00457     for (;iter != m_generation_p_l.end(); ++iter) {
00458         log_DBG_m(dbg_DETAIL, "*iter = 0x" << hex << (*iter) << dec);
00459         if ((*iter)->m_migrationID == 0) {
00460             os << "       Reserved space for generation." << endl;
00461         }
00462         else {
00463             (*iter)->Dump(os);
00464         }
00465     }
00466 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_GenerationMgr::TreeWalk ( fsc_Collector a_collector  ) 

Definition at line 302 of file fsc_GenerationMgr.cpp.

References log_FUNC_m, m_generation_p_l, and fsc_Collector::ProcObjGenerationMgr().

Referenced by fsc_DataL::TreeWalk().

00302                                                              {
00303     log_FUNC_m(TreeWalk);
00304 
00305     if (!a_collector.ProcObjGenerationMgr(this)) {
00306         return false;
00307     }
00308     fsc_Generation_p_l_i iter = m_generation_p_l.begin();
00309     for (;iter != m_generation_p_l.end(); iter++) {
00310         if (!(**iter).TreeWalk(a_collector)) {
00311             return false;
00312         }
00313     }
00314     return true;
00315 }

Here is the call graph for this function:

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class ut_fsc_GenerationMgr [friend]

Definition at line 54 of file fsc_GenerationMgr.h.


Member Data Documentation

what happened when insert gen? add newest one update last update other used to proper update NSC attributes

Definition at line 74 of file fsc_GenerationMgr.h.

Referenced by GetGenInsertAct(), Insert(), and Write2DB().

Definition at line 76 of file fsc_GenerationMgr.h.

Referenced by fsc_GenerationMgr(), and Write2DB().

Reimplemented from fio_Vector.

Definition at line 82 of file fsc_GenerationMgr.h.


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

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