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 RopSynchronizationConfigure ROP request (section that is made when initializing a download. As specified in section, setting the Eid and CN flags causes the server to send the PidTagMid property (section and the PidTagChangeNumber property (section 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 and MetaTagCnsetSeen (section (or MetaTagCnsetSeenFAI (section, for folder associated information (FAI) messages) properties by using the PidTagMid and PidTagChangeNumber properties, respectively. Each of these properties is specified in section or section

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<47> return the initial ICS state, or MAY<48> 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.