示例#1
0
        protected void OnEventInternal(DurableEvent e, Func <bool> handler = null)
        {
            var initialClock = clock;
            var initialEvent = lastEventHandled;

            lastEventHandled = e;
            if (HasSharedClockEntry)
            {
                clock = clock.Set(e.LocalLogId, e.LocalSequenceNr);
                if (e.EmitterId != Id)
                {
                    clock = clock.Merge(e.VectorTimestamp);
                }
            }
            else
            {
                if (e.EmitterId != Id)
                {
                    clock = clock.Update(e.VectorTimestamp);
                }
                else if (isRecovering)
                {
                    clock = clock.Merge(e.VectorTimestamp);
                }
            }

            if (handler != null && !handler())
            {
                clock            = initialClock;
                lastEventHandled = initialEvent;
            }
        }
示例#2
0
        private void ReceiveEvent(DurableEvent e)
        {
            OnEventInternal(e, () => OnEvent(e.Payload));

            if (!IsRecovering)
            {
                ConditionChanged(e.VectorTimestamp);
            }
        }
示例#3
0
        public bool Apply(DurableEvent e)
        {
            foreach (var filter in Filters)
            {
                if (filter.Apply(e))
                {
                    return(true);
                }
            }

            return(false);
        }
示例#4
0
        public Snapshot(object payload, string emitterId, DurableEvent lastEvent, VectorTime currentTime, long sequenceNr,
                        ImmutableArray <DeliveryAttempt> deliveryAttempts             = default(ImmutableArray <DeliveryAttempt>),
                        ImmutableArray <PersistOnEventRequest> persistOnEventRequests = default(ImmutableArray <PersistOnEventRequest>))
        {
            Payload                = payload;
            EmitterId              = emitterId;
            LastEvent              = lastEvent;
            CurrentTime            = currentTime;
            SequenceNr             = sequenceNr;
            DeliveryAttempts       = deliveryAttempts;
            PersistOnEventRequests = persistOnEventRequests;

            Metadata = new SnapshotMetadata(EmitterId, LastEvent.LocalSequenceNr);
        }
示例#5
0
 private void Zeroize()
 {
     lastEventHandled = new DurableEvent(null, Id);
     clock            = new VectorClock(Id, VectorTime.Zero);
 }
示例#6
0
 protected void LoadedSnapshot(Snapshot snapshot)
 {
     lastEventHandled = snapshot.LastEvent;
     clock            = new VectorClock(clock.ProcessId, snapshot.CurrentTime);
 }
示例#7
0
 protected void OnEventInternal(DurableEvent e, Exception cause)
 {
     lastEventHandled = e;
 }
示例#8
0
 public bool Apply(DurableEvent e)
 {
     return(true);
 }
示例#9
0
 protected override void ReceiveEvent(DurableEvent e)
 {
     base.ReceiveEvent(e);
 }