public void Handle(ReplicationMessage.WriteRequestCreated message)
        {
            var manager = new WriteStreamTwoPhaseRequestManager(_bus, _prepareCount, _commitCount);

            _currentRequests.Add(message.CorrelationId, manager);
            manager.Handle(message);
        }
        public void Handle(ReplicationMessage.WriteRequestCreated message)
        {
            // TODO AN verify the check for just the first event is sensible solution for idempotency
            int eventVersion;

            if (_commitedEvents.TryGetRecord(message.Events[0].EventId, out eventVersion))
            {
                var response = new ClientMessage.WriteEventsCompleted(message.CorrelationId, message.EventStreamId, eventVersion);
                message.Envelope.ReplyWith(response);
                return;
            }

            var manager = new TwoPhaseCommitRequestManager(_bus, _prepareCount, _commitCount);

            _currentRequests.Add(message.CorrelationId, manager);
            manager.Handle(message);
        }
示例#3
0
        public void Handle(ReplicationMessage.WriteRequestCreated request)
        {
            if (_initialized)
            {
                throw new InvalidOperationException();
            }

            _initialized      = true;
            _requestType      = RequestType.Write;
            _responseEnvelope = request.Envelope;
            _correlationId    = request.CorrelationId;
            _eventStreamId    = request.EventStreamId;

            _bus.Publish(new ReplicationMessage.WritePrepares(request.CorrelationId,
                                                              _publishEnvelope,
                                                              request.EventStreamId,
                                                              request.ExpectedVersion,
                                                              request.Events,
                                                              allowImplicitStreamCreation: true,
                                                              liveUntil: DateTime.UtcNow.AddSeconds(PrepareTimeout.Seconds)));
            _bus.Publish(TimerMessage.Schedule.Create(PrepareTimeout,
                                                      _publishEnvelope,
                                                      new ReplicationMessage.PreparePhaseTimeout(_correlationId)));
        }