18.104.22.168 Client Side Checkpointing
Checkpointing is a method of ICS state management that is used for upload and download operations to provide updated state information on an object-by-object basis. If a client has to abort synchronizations regularly, or if mitigating the effects of application or connection termination is a priority, the client can implement an ICS state checkpointing strategy. This is made possible by setting the Eid and CN flags in the SynchronizationExtraFlags field in the ulExtra field of the RopSynchronizationConfigureROP request (section 22.214.171.124.1.1) that is made when initializing a download. As specified in section 126.96.36.199.1.1, setting the Eid and CN flags causes the server to send the PidTagMid property (section 188.8.131.52.1) and the PidTagChangeNumber property (section 184.108.40.206.3) in the ICS header for each messaging object. Using the PidTagChangeNumber property and the item's PidTagMid property, the ICS state can be maintained on the client by updating its MetaTagIdsetGiven (section 220.127.116.11.1) and MetaTagCnsetSeen (section 18.104.22.168.2) (or MetaTagCnsetSeenFAI (section 22.214.171.124.3), for folder associated information (FAI) messages) properties by using the PidTagMid and PidTagChangeNumber properties, respectively. Each of these properties is specified in section 126.96.36.199 or section 188.8.131.52.
If this updated ICS state is then persisted periodically, the client does not have to redownload all items in the event of a cancellation or other abnormal termination. It is recommended that the client persist the state downloaded at the end of the current (or a subsequent) ICS download process, after the download is complete. This is because the ICS state provided by the server is a much more efficient version than the version obtained by using checkpointing alone.
Note Checkpointing for synchronization download operations functions differently than checkpointing for synchronization upload operations. During a synchronization upload operation, the server returns checkpoint ICS states that are accurate to the time at which the checkpoint was requested. During a synchronization download operation, the server SHOULD<44> return the initial ICS state, or MAY<45> return the checkpoint ICS state that is accurate to the time at which the checkpoint was requested, until the download is complete, at which time it returns the final ICS state.