コード例 #1
0
		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;
			}
		}
コード例 #2
0
	    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;
		}
コード例 #3
0
		public bool TryResolveConflict(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment,
										Func<string, Attachment> getAttachment, out RavenJObject metadataToSave,
										out byte[] dataToSave)
		{
			var success = TryResolve(id, metadata, data, existingAttachment, getAttachment, out metadataToSave, out dataToSave);
			if (success == false)
				return false;

			var metaToSave = metadataToSave;
			log.Debug(() =>
			{
				var builder = new StringBuilder();
				builder.AppendLine(string.Format("Conflict on attachment with key '{0}' resolved by '{1}'.", id, GetType().Name));
				builder.AppendLine(string.Format("Existing metadata:"));
				if (existingAttachment != null && existingAttachment.Metadata != null)
					builder.AppendLine(existingAttachment.Metadata.ToString());
				builder.AppendLine(string.Format("Incoming metadata:"));
				if (metadata != null)
					builder.AppendLine(metadata.ToString());
				builder.AppendLine(string.Format("Output metadata:"));
				if (metaToSave != null)
					builder.AppendLine(metaToSave.ToString());

				return builder.ToString();
			});

			return true;
		}
		public override bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment, Func<string, Attachment> getAttachment,
		                                out RavenJObject metadataToSave, out byte[] dataToSave)
		{
			metadataToSave = metadata;
			dataToSave = data;

			return true;
		}
コード例 #5
0
		protected 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;
		}
コード例 #6
0
 public virtual void OnRead(string key, Attachment attachment)
 {
 }
コード例 #7
0
		public abstract bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment,
		                                Func<string, Attachment> getAttachment, out RavenJObject metadataToSave,
		                                out byte[] dataToSave);
コード例 #8
0
		private static bool IsDirectChildOfCurrentAttachment(Attachment existingAttachment, RavenJObject metadata)
		{
			var version = new RavenJObject
			{
				{ReplicationConstants.RavenReplicationSource, existingAttachment.Metadata[ReplicationConstants.RavenReplicationSource]},
				{ReplicationConstants.RavenReplicationVersion, existingAttachment.Metadata[ReplicationConstants.RavenReplicationVersion]},
			};

			var history = metadata[ReplicationConstants.RavenReplicationHistory];
			if (history == null) // no history, not a parent
				return false;

			return history.Values().Contains(version, new RavenJTokenEqualityComparer());
		}
コード例 #9
0
			public override void OnRead(string key, Attachment attachment)
			{
				attachment.Data = () => new MemoryStream(new byte[] { 1, 2, 3, 4 });
				attachment.Size = 4;
			}
コード例 #10
0
		private bool HasConflict(Attachment attachment)
		{
			var conflict = attachment.Metadata.Value<RavenJValue>(Constants.RavenReplicationConflict);

			return conflict != null && conflict.Value<bool>();
		}
コード例 #11
0
		private void HandleAttachment(Attachment document)
		{
			deletedHistory.Value = document.Metadata.Value<RavenJArray>(Constants.RavenReplicationHistory) ??
									   new RavenJArray();

			deletedHistory.Value.Add(
					new RavenJObject
					{
						{Constants.RavenReplicationVersion, document.Metadata[Constants.RavenReplicationVersion]},
						{Constants.RavenReplicationSource, document.Metadata[Constants.RavenReplicationSource]}
					});
		}
コード例 #12
0
ファイル: Index.cs プロジェクト: modulexcite/docs-8
			public virtual void OnRead(string key, Attachment attachment)
			{
			}
コード例 #13
0
		private void HandleAttachment(Attachment document)
		{
			deletedHistory.Value = new RavenJArray(ReplicationData.GetHistory(document.Metadata))
			{
				new RavenJObject
				{
					{Constants.RavenReplicationVersion, document.Metadata[Constants.RavenReplicationVersion]},
					{Constants.RavenReplicationSource, document.Metadata[Constants.RavenReplicationSource]}
				}
			};
		}
コード例 #14
0
		public abstract bool TryResolve(string id, RavenJObject metadata, byte [] data, Attachment existingAttachment);