From: Ann W. H. <aha...@ib...> - 2005-05-04 16:29:25
|
Vlad Horsun wrote: > > But there are no "tra_oldest_snapshot" member in calss jrd_tra. Did you > want to wrote "tra_oldest_active" ? Yes. > >> >>In TRA_update_header the header->hdr_oldest_snapshot is set to the >>dbb->dbb_oldest_active if the latter is greater. > > Hmm... what is a TRA_update_header ? An routine in tra.cpp actually called TRA_header_write, and you're right, it updates header->hdr_oldest_snapshot from database->dbb_oldest_*snapshot* if the latter is larger. > >> >>My question is why have it at all? Why not just use the oldest_active? > > Only use of "oldest_snapshot" in TRA_start is to early break the > circle which finds the actual oldest active transaction : Right, but that could be done more effectively using the header->oldest_active, couldn't it? The oldest_snapshot is always going to be older than any active transaction. We spend a lot of time carrying around two values that are confusingly similar. The oldest active is computed at transaction start by querying the lock table for the lowest value stored in the lock data of any lock in the transaction series. A transaction stores the id of the oldest transaction active when it started in the lock data of its transaction lock. The oldest snapshot is the value of the oldest active for the previous transaction. Why is that interesting? Regards, Ann |