コード例 #1
0
ファイル: Simple.cs プロジェクト: webmonger/ravendb
        public void PutNewDocInTxCommitAndThenGetIt()
        {
            var transactionInformation = new TransactionInformation {
                Id = Guid.NewGuid(), Timeout = TimeSpan.FromMinutes(1)
            };

            db.Put("ayende", null, RavenJObject.Parse("{ayende:'rahien'}"), new RavenJObject(), transactionInformation);

            db.Commit(transactionInformation.Id);

            Assert.NotNull(db.Get("ayende", null));
        }
コード例 #2
0
ファイル: Deletes.cs プロジェクト: stgwilli/ravendb
        public void DeletingDocumentAndThenAddingDocumentInSameTransactionCanWork()
        {
            db.Put("ayende", null, RavenJObject.Parse("{ayende:'oren'}"), new RavenJObject(), null);
            var transactionInformation = new TransactionInformation {
                Id = Guid.NewGuid(), Timeout = TimeSpan.FromMinutes(1)
            };

            db.Delete("ayende", null, transactionInformation);
            db.Put("ayende", null, RavenJObject.Parse("{ayende:'rahien'}"), new RavenJObject(), transactionInformation);
            db.Commit(transactionInformation.Id);

            Assert.Equal("rahien", db.Get("ayende", null).ToJson()["ayende"].Value <string>());
        }
コード例 #3
0
ファイル: Simple.cs プロジェクト: stvoidmain/ravendb
        public void PutNewDocInTxCommitAndThenGetIt()
        {
            EnsureDtcIsSupported(db);
            var transactionInformation = new TransactionInformation {
                Id = Guid.NewGuid().ToString(), Timeout = TimeSpan.FromMinutes(1)
            };

            db.Documents.Put("ayende", null, RavenJObject.Parse("{ayende:'rahien'}"), new RavenJObject(), transactionInformation);

            db.PrepareTransaction(transactionInformation.Id);
            db.Commit(transactionInformation.Id);

            Assert.NotNull(db.Documents.Get("ayende", null));
        }
コード例 #4
0
ファイル: Etags.cs プロジェクト: yogiramchandani/ravendb
        public void WhenUsingTransactionWillWorkIfDocumentEtagMatch()
        {
            db.Put("ayende", null, RavenJObject.Parse("{ayende:'oren'}"), new RavenJObject(), null);
            var doc = db.Get("ayende", null);
            var transactionInformation = new TransactionInformation {
                Id = Guid.NewGuid(), Timeout = TimeSpan.FromMinutes(1)
            };

            db.Put("ayende", doc.Etag, RavenJObject.Parse("{ayende:'rahien'}"), new RavenJObject(), transactionInformation);
            db.Commit(transactionInformation.Id);


            Assert.Equal("rahien", db.Get("ayende", null).ToJson()["ayende"].Value <string>());
        }
コード例 #5
0
        public void PutTwoDocumentsAndThenCommit()
        {
            var transactionInformation = new TransactionInformation {
                Id = Guid.NewGuid(), Timeout = TimeSpan.FromMinutes(1)
            };

            db.Put("ayende1", null, JObject.Parse("{ayende:'rahien'}"), new JObject(), transactionInformation);
            db.Put("ayende2", null, JObject.Parse("{ayende:'rahien'}"), new JObject(), transactionInformation);

            db.Commit(transactionInformation.Id);

            Assert.NotNull(db.Get("ayende1", null));
            Assert.NotNull(db.Get("ayende2", null));
        }
コード例 #6
0
        private void ActivatePendingDocuments()
        {
            using (_database.DisableAllTriggersForCurrentThread())
            {
                var revisionKeys = PendingRevisionsIndex.GetRevisionsRequiringActivation(_database);

                foreach (var revisionkey in revisionKeys)
                {
                    _log.Info("Activating Temporal Document {0}", revisionkey);

                    // Establish a new transaction
                    var transactionInformation = new TransactionInformation {
                        Id = Guid.NewGuid().ToString(), Timeout = TimeSpan.FromMinutes(1)
                    };

                    // Get the current key from the revision key
                    var currentKey = revisionkey.Substring(0, revisionkey.IndexOf(TemporalConstants.TemporalKeySeparator, StringComparison.Ordinal));

                    // Mark the document as non-pending
                    _database.SetDocumentMetadata(revisionkey, transactionInformation, TemporalMetadata.RavenDocumentTemporalPending, false);

                    // Mark it in the history also
                    Etag historyEtag;
                    var  history = _database.GetTemporalHistoryFor(currentKey, transactionInformation, out historyEtag);
                    history.Revisions.First(x => x.Key == revisionkey).Pending = false;
                    _database.SaveTemporalHistoryFor(currentKey, history, transactionInformation, historyEtag);

                    // Load the new revisions document
                    var newRevisionDoc = _database.Get(revisionkey, transactionInformation);
                    var temporal       = newRevisionDoc.Metadata.GetTemporalMetadata();
                    if (temporal.Deleted)
                    {
                        // When the revision is a deletion, delete the current document
                        _database.Delete(currentKey, null, transactionInformation);
                    }
                    else
                    {
                        // Prepare the current document metadata
                        newRevisionDoc.Metadata.Remove(TemporalMetadata.RavenDocumentTemporalDeleted);
                        newRevisionDoc.Metadata.Remove(TemporalMetadata.RavenDocumentTemporalPending);
                        newRevisionDoc.Metadata.Remove("@id");
                        temporal.Status         = TemporalStatus.Current;
                        temporal.RevisionNumber = int.Parse(newRevisionDoc.Key.Split('/').Last());

                        // Copy the revision to the current document
                        _database.Put(currentKey, null, newRevisionDoc.DataAsJson, newRevisionDoc.Metadata, transactionInformation);
                    }

                    // Commit the transaction
                    _database.Commit(transactionInformation.Id);
                }
            }
        }
コード例 #7
0
ファイル: WorkerRole.cs プロジェクト: simplefx/AzureRavenDB
        private void SetupReplication()
        {
            if (RoleEnvironment.CurrentRoleInstance.Role.Instances.Count < 2)
            {
                var tr = new TransactionInformation();
                _database.Put("Debug", null,
                              JObject.Parse(@"{""Url"":""" +
                                            GetEndPointAddress(MyInstanceEndpoint.IPEndpoint) + @"""}"),
                              new JObject(), tr);

                _database.Commit(tr.Id);
            }
            else
            {
                var json = BuildDestinationsString();
                Trace.WriteLine(json);

                var tr = new TransactionInformation();
                _database.Delete("Raven/Replication/Destinations", null, tr);
                _database.Put("Raven/Replication/Destinations", null, JObject.Parse(json),
                              new JObject(), tr);
                _database.Commit(tr.Id);
            }
        }
コード例 #8
0
 public void Commit(Enlistment enlistment)
 {
     database.Commit(txId);
     enlistment.Done();
 }
コード例 #9
0
 /// <summary>
 /// Commits the specified tx id.
 /// </summary>
 /// <param name="txId">The tx id.</param>
 public void Commit(Guid txId)
 {
     CurrentOperationContext.Headers.Value = OperationsHeaders;
     database.Commit(txId);
 }
コード例 #10
0
 public void Commit(Enlistment enlistment)
 {
     database.Commit(transactionId);
     enlistment.Done();
 }
コード例 #11
0
 public void Commit(Guid txId)
 {
     database.Commit(txId);
 }
コード例 #12
0
 public void Commit(Guid txId)
 {
     CurrentRavenOperation.Headers.Value = OperationsHeaders;
     database.Commit(txId);
 }