> #! Index/ Page file interactions: #!<< a:User /a index:Index[a] /a tx:HawtTransaction[a] /a tx updates:Map[a] pf:HawtPageFile[a] /snap1:SnapshotHead[a] /commit 3:Commit commit 2:Commit commit 1:Commit a:tx=a tx.new a tx:updates=a tx updates.new *3 a tx updates This map keeps track of the redo page translations for the tx *3 a:index=a index.new [c: user performs multiple update operations] a:a index.put [c: btree search for the btree node that needs to be updated ] (1)a index:a tx.get(page) *1 a index To load a btree node from a stored page *1 a tx:updated=a tx updates.get(page) [c: if page was not updated yet in this transaction] [c: if snapshot==null] a tx:snapshot=pf.openSnapshot pf:snap1.new [/c] a tx:updated=snap1.translate(page) snap1:commit 2.get(page) snap1:commit 1.get(page) [/c] [/c] (2)a index:a tx.put(page) *2 a index To store an updated btree node *2 a tx:a tx updates.put(page, redoPage) [/c] a:a tx.commit a tx:pf.commit(updates) pf:snap1.destroy pf:commit 3.new(udpates) commit 3:commit 2.linkAfter]]>