From: Vlad K. <hv...@us...> - 2014-05-13 12:25:50
|
> 13.05.2014 13:36, Vlad Khorsun wrote: >> Yes > > How? If I remember your lesson right, garbage in a record is collected only if head > version is marked with transaction number lesser that OAT. This is a most often case. But, if you look at VIO_chase_record_version, you'll see that concurrency (snapshot) transactions could pass not visible for them versions of record and stop at some point. And in this point record version could be - visible for current tx - mature for GC - still have backversions In this case, cooperative GC could happen (i.e. purge will be called) before return to the caller (VIO_next or VIO_data). >> list_staying used to undo dead record version. It is not a most often operation. > > Actually, it is used in following cases: > > 1) Undo with VIO_backout(). > 2) Undo of update_in_place() in VIO_verb_cleanup(). > 3) Applying third and following changes of the same record in one transaction. I know. I just a bit lazy when need to wrtite too much words, especially in Engilish :) In any case - all your points above is cases of undo operation. Regards, Vlad |