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,
});
}
}