Skip to main content

Listeners: What are conflict listeners and how to work with them?

To allow users to handle document replication conflicts automatically, we introduced a Document Conflict listener. To create your own listener of this type, just implement IDocumentConflictListener interface.

public interface IDocumentConflictListener
{
bool TryResolveConflict(string key, JsonDocument[] conflictedDocs,
out JsonDocument resolvedDocument);
}

Example

This example shows how to create an automatic conflict resolver by using IDocumentConflictListener, which will pick the newest item from the list of conflicted documents:

public class ResolveInFavourOfNewest : IDocumentConflictListener
{
public bool TryResolveConflict(
string key,
JsonDocument[] conflictedDocs,
out JsonDocument resolvedDocument)
{
DateTime? maxDate = conflictedDocs.Max(x => x.LastModified);
resolvedDocument = conflictedDocs
.FirstOrDefault(x => x.LastModified == maxDate);

if (resolvedDocument == null)
return false;

resolvedDocument.Metadata.Remove("@id");
resolvedDocument.Metadata.Remove("@etag");
return true;
}
}