protected override bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment, Func<string, Attachment> getAttachment, out RavenJObject metadataToSave, out byte[] dataToSave) { var existingAttachmentIsInConflict = existingAttachment.Metadata[Constants.RavenReplicationConflict] != null; var existingAttachmentIsDeleted = existingAttachment.Metadata[Constants.RavenDeleteMarker] != null && existingAttachment.Metadata[Constants.RavenDeleteMarker].Value<bool>(); metadataToSave = null; dataToSave = null; if (existingAttachmentIsInConflict && existingAttachmentIsDeleted == false) { var conflictIds = existingAttachment.Data().ToJObject().Value<RavenJArray>("Conflicts") .Select(x => x.Value<string>()) .ToArray(); if (conflictIds.Length == 0) return false; if (conflictIds .Select(getAttachment) .All(doc => Historian.IsDirectChildOfCurrent(metadata, doc.Metadata)) == false) return false; metadataToSave = metadata; dataToSave = data; return true; } return false; }
private void HandleConflictedAttachment(Attachment attachment) { var attachmentDataStream = attachment.Data(); var attachmentData = attachmentDataStream.ToJObject(); var conflicts = attachmentData.Value<RavenJArray>("Conflicts"); if (conflicts == null) return; var currentSource = Database.TransactionalStorage.Id.ToString(); foreach (var c in conflicts) { var conflict = Database.GetStatic(c.Value<string>()); var conflictSource = conflict.Metadata.Value<RavenJValue>(Constants.RavenReplicationSource).Value<string>(); if (conflictSource != currentSource) continue; this.deletedHistory.Value = new RavenJArray { new RavenJObject { { Constants.RavenReplicationVersion, conflict.Metadata[Constants.RavenReplicationVersion] }, { Constants.RavenReplicationSource, conflict.Metadata[Constants.RavenReplicationSource] } } }; return; } }
public override bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment, Func<string, Attachment> getAttachment, out RavenJObject metadataToSave, out byte[] dataToSave) { metadataToSave = existingAttachment.Metadata; dataToSave = existingAttachment.Data().ReadData(); return true; }