MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / walk_tip

Method walk_tip

src/jrd/validation.cpp:3291–3342  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3289}
3290
3291Validation::RTN Validation::walk_tip(TraNumber transaction)
3292{
3293/**************************************
3294 *
3295 * w a l k _ t i p
3296 *
3297 **************************************
3298 *
3299 * Functional description
3300 * Walk transaction inventory pages.
3301 *
3302 **************************************/
3303 Database* dbb = vdr_tdbb->getDatabase();
3304
3305 if (!dbb->getKnownPagesCount(pag_transactions))
3306 return corrupt(VAL_TIP_LOST, 0);
3307
3308 tx_inv_page* page = 0;
3309 const ULONG pages = transaction / dbb->dbb_page_manager.transPerTIP;
3310
3311 for (ULONG sequence = 0; sequence <= pages; sequence++)
3312 {
3313 auto pageNumber = dbb->getKnownPage(pag_transactions, sequence);
3314 if (!pageNumber)
3315 {
3316 corrupt(VAL_TIP_LOST_SEQUENCE, 0, sequence);
3317 if (!(vdr_flags & VDR_repair))
3318 continue;
3319
3320 TRA_extend_tip(vdr_tdbb, sequence);
3321 vdr_fixed++;
3322
3323 pageNumber = dbb->getKnownPage(pag_transactions, sequence);
3324 }
3325
3326 WIN window(DB_PAGE_SPACE, -1);
3327 fetch_page(true, pageNumber, pag_transactions, &window, &page);
3328
3329#ifdef DEBUG_VAL_VERBOSE
3330 if (VAL_debug_level)
3331 fprintf(stdout, "walk_tip: page %d next %d\n", pageNumber, page->tip_next);
3332#endif
3333 const auto next = dbb->getKnownPage(pag_transactions, sequence + 1);
3334 if (page->tip_next && page->tip_next != next)
3335 {
3336 corrupt(VAL_TIP_CONFUSED, 0, sequence);
3337 }
3338 release_page(&window);
3339 }
3340
3341 return rtn_ok;
3342}
3343
3344Validation::RTN Validation::walk_scns()
3345{

Callers

nothing calls this directly

Calls 5

corruptFunction · 0.85
TRA_extend_tipFunction · 0.85
getDatabaseMethod · 0.80
getKnownPagesCountMethod · 0.80
getKnownPageMethod · 0.80

Tested by

no test coverage detected