Raven.Storage.Managed.TransactionStorageActions.CompleteTransaction C# (CSharp) Method

CompleteTransaction() public method

public CompleteTransaction ( System.Guid txId, Action perDocumentModified ) : void
txId System.Guid
perDocumentModified Action
return void
		public void CompleteTransaction(Guid txId, Action<DocumentInTransactionData> perDocumentModified)
		{
			storage.Transactions.Remove(new RavenJObject {{"txId", txId.ToByteArray()}});

			var documentsInTx = storage.DocumentsModifiedByTransactions["ByTxId"]
				.SkipTo(new RavenJObject {{"txId", txId.ToByteArray()}})
				.TakeWhile(x => new Guid(x.Value<byte[]>("txId")) == txId);

			foreach (var docInTx in documentsInTx)
			{
				var readResult = storage.DocumentsModifiedByTransactions.Read(docInTx);

				storage.DocumentsModifiedByTransactions.Remove(docInTx);

				RavenJObject metadata = null;
				RavenJObject data = null;
				if (readResult.Position > 0) // position can never be 0, because of the skip record
				{
					var ms = new MemoryStream(readResult.Data());
					metadata = ms.ToJObject();
					data = ms.ToJObject();
				}
				perDocumentModified(new DocumentInTransactionData
				{
					Key = readResult.Key.Value<string>("key"),
					Etag = new Guid(readResult.Key.Value<byte[]>("etag")),
					Delete = readResult.Key.Value<bool>("deleted"),
					Metadata = metadata,
					Data = data,
				});

			}
		}