Is it possible to reduce the number of items in the shared calendar? And configure the iPhones to only sync 1 month of data?
There are currently about 11,000 items in the shared calendar.
The server responds to clients with a retry command after it tries a number of times to obtain write access to the calendar.
The logs show the iPhones are not losing the data, they are intentionally deleting it. When the server responds with a retry command the iPhones are doing a full resync instead of just trying the last sync again. So the phone deletes everything in the calendar locally and does a full re-sync from the server.
While the resync is occurring the calendar may appear empty on the iphone. Only items that have been re-sync'd to the device will appear in the calenar. If the phone is set to sync all data, that is 11,000 items that need to be sent back to the device.
Reducing the number of events in the calendar would reduce the frequency of the retry commands being sent back to clients, and in the event an iPhone decided to do a full resync it would reduce the amount of time the full sync took. It also reduces the amount of time server processing takes as there are fewer items for the server to deal with, which reduces the contention on the calendar and the frequency the server responds with a retry command.
Having the phone only sync 1 month of data further reduces the number of items that need to be sync'd, which also helps with both of these items.
If reducing the events in the calendar is an option, I have a powershell script I can share that will help to remove old items.
I'll also ask our development team to investigate to see if there are any server side improvements we can make.