Q: Why prefetching? Possible prefech calls a) for array fields b) for pointer fields c) for typecasted oid's e.g. ==== x.y.z x.y.r x.y.r.t x[i].z ((Integer) x).z control = 1 byte, oid = 4 bytes, new oid = 4 bytes, depth = 1/ 2 bytes, name/type = 2 bytes, offset = 2 bytes, index = 2 bytes, typecastcheck = 2 bytes, new oid = The oid found at the Participant side that can be sent to Coordinator sending prefetch message Assumptions =========== 1. Assume a max object size Q: Why? 2. Procedure: 1. Compiler identifies which oids and oids.offset field to prefetch(analysing the C code) and supplies that information to the Coordinator machine wanting to commit transaction. Q: How does compiler convey this to a machine? (Design compiler interface) 2. Machine distinguishes and classifies tuples as "shared" or "unique" e.g. while prefetching x.y.z and a.y.z if variable x == a then considered shared else unique also consider the case of x.y.z and a.y.z.t where x == a ( Then prefetch only a.y.z.t) 3. If not available in local machine, look up location table and make piles to send prefetch control messages to all the Particpant machines from which prefetch is required. 4. Iteratively look up the data field of the objects at the Particpant side to find objects and send them across to Coordinator. 5. Coordinator takes inventory and finds out the location of the objs not found yet. Q: How to implement if some objects are not found through prefetch? Coordinator messages: