Here's the timeline ... all transactions on separate connections and
concurrent except as noted.
Assume table t1 (f1 integer) with an index on f1.
T1: insert into table1 values 3;
T1: commit;
T2: start;
T3: start;
T3: update t1 set f1 = 5 where f1 = 3;
(at this point the index on f1 has entries for values 3 and 5, both
with record 1. There's a record version object with the new and
old versions in the record cache. The old index entry has been
processed, and there's a new index entry in T3's deferred index)
System chills T3 changes - new version of record 1 is chilled, old
version is left in memory as back version.
T3: commit;
T2: commit;
T4: select * from table1 where f1 > 1 and f1 < 4; (index bitmap
built, with hit for 3);
System removes obsolete version of record 1 (f1 = 3), from cache
and disk, and index. Index lookup find a hit for 3 on record 1.
T3 becomes write complete, T4 has a dependency on T3
Thaw fails to find record with that value
Fetch fails to find record with that value