I have about 100 people using SyncFX to sync their data. Works flawlessly most of the time. A few of the clients every once in a while are not able to sync one of their tables. The log shows the following...
INFO , w3wp, 5, 01/08/2014 19:04:24:818, ----- Deletes for Table "HoistConfig" -----
ERROR , w3wp, 5, 01/08/2014 19:04:24:820, Caught exception while applying changes: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.Synchronization.Data.SqlServer.SqlChangeHandler.ApplyBulkChanges(DataTable dataTable)
at Microsoft.Synchronization.Data.RelationalSyncProvider.ApplyChangesInternal(DbSyncScopeMetadata scopeMetadata, IDbTransaction transaction, FailedDeleteDelegate_type failedDeleteDelegate, DataSet dataSet, ChangeApplicationType applyType)
at Microsoft.Synchronization.Data.RelationalSyncProvider.ApplyChanges(DbSyncScopeMetadata scopeMetadata, IDbTransaction applyTransaction, DataSet dataSet, DbSyncSession DbSyncSession, Boolean commitTransaction, FailedDeleteDelegate_type failedDeleteDelegate, String batchFileName, ChangeApplicationAction& action)
ERROR , w3wp, 5, 01/08/2014 19:04:24:820, Rolling back application transaction.
VERBOSE, w3wp, 5, 01/08/2014 19:04:24:820, Closing Connection
My first assumption was that the tablet is trying to delete a HoistConfig but the record doesn't exist on the server. So I checked for a HoistConfig_tracking record with a sync_row_is_tombstone of 0 and no corresponding record in the HoistConfig table.
No such record existed.
I also enabled logging via the tracelog tool. I was not able to find any relevant help regardless of the tracing parameters I used.
If anyone has any ideas on how I can fix this problem or at least get more info about the client is attempting to do, I would love to hear it.