示例#1
0
 public WriteEvents(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     string streamId,
     bool betterOrdering,
     long expectedVersion,
     ClaimsPrincipal user,
     Event[] events,
     CommitSource commitSource)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 0,
         waitForCommit: true)
 {
     _streamId = streamId;
     //this seems like it should work, but really really doesn't
     //TODO(clc): confirm MetaWrite is implemented
     //_accessType = SystemStreams.IsMetaStream(streamId) ? StreamAccessType.MetaWrite : StreamAccessType.Write;
     _accessType     = StreamAccessType.Write;
     _betterOrdering = betterOrdering;
     _user           = user;
     _events         = events;
 }
示例#2
0
 public TransactionStart(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     string streamId,
     bool betterOrdering,
     long expectedVersion,
     ClaimsPrincipal user,
     CommitSource commitSource)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 1)
 {
     _streamId       = streamId;
     _betterOrdering = betterOrdering;
     _user           = user;
 }
示例#3
0
 public DeleteStream(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     string streamId,
     bool betterOrdering,
     long expectedVersion,
     IPrincipal user,
     bool hardDelete,
     CommitSource commitSource)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 0,
         waitForCommit: true)
 {
     _hardDelete     = hardDelete;
     _streamId       = streamId;
     _betterOrdering = betterOrdering;
     _user           = user;
 }
示例#4
0
 public DeleteStream(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     string streamId,
     long expectedVersion,
     bool hardDelete,
     CommitSource commitSource,
     CancellationToken cancellationToken = default)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 0,
         waitForCommit: true)
 {
     _hardDelete        = hardDelete;
     _cancellationToken = cancellationToken;
     _streamId          = streamId;
 }
示例#5
0
 public TransactionCommit(
     IPublisher publisher,
     TimeSpan prepareTimeout,
     TimeSpan commitTimeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     long transactionId,
     bool betterOrdering,
     ClaimsPrincipal user,
     CommitSource commitSource)
     : base(
         publisher,
         prepareTimeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion: -1,
         commitSource,
         transactionId: transactionId,
         prepareCount: 1,
         waitForCommit: true)
 {
     _commitTimeout  = commitTimeout;
     _betterOrdering = betterOrdering;
     _user           = user;
 }
示例#6
0
 public WriteEvents(IPublisher publisher,
                    TimeSpan timeout,
                    IEnvelope clientResponseEnvelope,
                    Guid internalCorrId,
                    Guid clientCorrId,
                    string streamId,
                    long expectedVersion,
                    Event[] events,
                    CommitSource commitSource,
                    CancellationToken cancellationToken = default)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 0,
         waitForCommit: true)
 {
     _streamId          = streamId;
     _events            = events;
     _cancellationToken = cancellationToken;
 }
示例#7
0
 protected override void AllEventsWritten()
 {
     if (CommitSource.ReplicationPosition >= LastEventPosition)
     {
         Committed();
     }
     else if (!Registered)
     {
         CommitSource.NotifyFor(LastEventPosition, Committed, CommitLevel.Replicated);
         Registered = true;
     }
 }
示例#8
0
 public TransactionStart(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     string streamId,
     long expectedVersion,
     CommitSource commitSource)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount: 1)
 {
     _streamId = streamId;
 }
示例#9
0
 public TransactionWrite(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     Event[] events,
     long transactionId,
     CommitSource commitSource)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion: -1,
         commitSource,
         prepareCount: events.Length,
         transactionId)
 {
     _events = events;
 }
示例#10
0
		public TransactionCommit(
					IPublisher publisher,
					TimeSpan prepareTimeout,
					TimeSpan commitTimeout,
					IEnvelope clientResponseEnvelope,
					Guid internalCorrId,
					Guid clientCorrId,
					long transactionId,
					CommitSource commitSource)
			: base(
					 publisher,
					 prepareTimeout,
					 clientResponseEnvelope,
					 internalCorrId,
					 clientCorrId,
					 expectedVersion: -1,
					 commitSource,
					 transactionId: transactionId,
					 prepareCount: 1,
					 waitForCommit: true) {
			_commitTimeout = commitTimeout;
		}
示例#11
0
        protected RequestManagerBase(
            IPublisher publisher,
            TimeSpan timeout,
            IEnvelope clientResponseEnvelope,
            Guid internalCorrId,
            Guid clientCorrId,
            long expectedVersion,
            CommitSource commitSource,
            int prepareCount   = 0,
            long transactionId = -1,
            bool waitForCommit = false)
        {
            Ensure.NotEmptyGuid(internalCorrId, nameof(internalCorrId));
            Ensure.NotEmptyGuid(clientCorrId, nameof(clientCorrId));
            Ensure.NotNull(publisher, nameof(publisher));
            Ensure.NotNull(clientResponseEnvelope, nameof(clientResponseEnvelope));
            Ensure.NotNull(commitSource, nameof(commitSource));

            Publisher = publisher;
            Timeout   = timeout;
            _clientResponseEnvelope = clientResponseEnvelope;
            InternalCorrId          = internalCorrId;
            ClientCorrId            = clientCorrId;
            WriteReplyEnvelope      = new PublishEnvelope(Publisher);
            ExpectedVersion         = expectedVersion;
            CommitSource            = commitSource;
            _prepareCount           = prepareCount;
            TransactionId           = transactionId;
            _commitReceived         = !waitForCommit;     //if not waiting for commit flag as true
            _allPreparesWritten     = _prepareCount == 0; //if not waiting for prepares flag as true
            if (prepareCount == 0 && waitForCommit == false)
            {
                //empty operation just return success
                var position = Math.Max(transactionId, 0);
                ReturnCommitAt(position, 0, 0);
            }
        }
示例#12
0
 public FakeRequestManager(
     IPublisher publisher,
     TimeSpan timeout,
     IEnvelope clientResponseEnvelope,
     Guid internalCorrId,
     Guid clientCorrId,
     long expectedVersion,
     CommitSource commitSource,
     int prepareCount   = 0,
     long transactionId = -1,
     bool waitForCommit = false)
     : base(
         publisher,
         timeout,
         clientResponseEnvelope,
         internalCorrId,
         clientCorrId,
         expectedVersion,
         commitSource,
         prepareCount,
         transactionId,
         waitForCommit)
 {
 }
示例#13
0
 public void CommitSelection(CommitSource source)
 {
     _commitSource   = source;
     _committedIndex = SelectedIndex;
     base.OnSelectedIndexChanged(new EventArgs());
 }
示例#14
0
        protected override async Task <int> WriteAsync()
        {
            var updates = GetCurrentBatchOfUpdates();
            var grainId = Services.GrainReference.ToKeyString();

            var nextVersion = _confirmedVersionInternal + 1;

            var commitSource = new CommitSource
            {
                Id      = grainId,
                Type    = _grainTypeName,
                Version = nextVersion
            };

            var events = new List <object>();

            foreach (var update in updates)
            {
                events.Add(update.Entry);
            }


            var commitRequest       = new CommitRequest(commitSource, events);
            var commitRequestString = JsonConvert.SerializeObject(commitRequest, _serializerSettings);


            var opts = new RequestOptions()
            {
                PartitionKey = new PartitionKey(commitRequest.PartitionId)
            };

            var commitResult = await _storedProcClient.ExecuteStoredProcedureAsync <string>(_commitStoredProcUri, opts, commitRequestString);

            var commit = JsonConvert.DeserializeObject <Commit>(commitResult.Response);

            //var commit = new Commit(commitNumber, nextVersion, commitSource, events);
            //await _client.UpsertDocumentAsync(_collectionUri, commit);

            _commits.Add(commit);

            foreach (var @event in events)
            {
                Host.UpdateView(_confirmedViewInternal, (TLogEntry)@event);
            }

            if (_options.TakeSnapshots && commit.Source.Version % _options.CommitsPerSnapshot == 0)
            {
                var snapshot = new Snapshot <TLogView>
                {
                    Source = commitSource,
                    State  = _confirmedViewInternal
                };

                await _client.UpsertDocumentAsync(_collectionUri, snapshot, new RequestOptions { PartitionKey = new PartitionKey(snapshot.PartitionId) });
            }

            if (_options.PostCommit != null)
            {
                await _options.PostCommit(commit);
            }

            _confirmedVersionInternal = commit.Source.Version;

            return(updates.Length);
        }