Пример #1
0
        public void MessageSerializer_when_given_AtLeastOnceDeliverySnapshot_should_handle_empty_unconfirmed()
        {
            var unconfirmed = new UnconfirmedDelivery[0];
            var snap        = new AtLeastOnceDeliverySnapshot(13, unconfirmed);
            var serializer  = _serialization.FindSerializerFor(snap);

            var bytes        = serializer.ToBinary(snap);
            var deserialized = serializer.FromBinary(bytes, typeof(AtLeastOnceDeliverySnapshot));

            deserialized.ShouldBe(snap);
        }
        /// <summary>
        ///     If snapshot from <see cref="GetDeliverySnapshot" /> was saved it will be received during recovery
        ///     phase in a <see cref="SnapshotOffer" /> message and should be set with this method.
        /// </summary>
        /// <param name="snapshot">A previously recovered <see cref="AtLeastOnceDeliverySnapshot" /> that was persisted to storage.</param>
        public void SetDeliverySnapshot(AtLeastOnceDeliverySnapshot snapshot)
        {
            _deliverySequenceNr = snapshot.CurrentDeliveryId;
            var now = DateTime.UtcNow;

            _unconfirmed =
                snapshot.UnconfirmedDeliveries.Select(
                    u => new KeyValuePair <long, AtLeastOnceDeliverySemantic.Delivery>(u.DeliveryId,
                                                                                       new AtLeastOnceDeliverySemantic.Delivery(u.Destination, u.Message, now, 0)))
                .ToImmutableSortedDictionary();
        }
Пример #3
0
        public virtual void SnapshotStore_should_serialize_AtLeastOnceDeliverySnapshot_with_empty_unconfirmed()
        {
            var probe = CreateTestProbe();

            var unconfirmed = new UnconfirmedDelivery[0];
            var atLeastOnceDeliverySnapshot = new AtLeastOnceDeliverySnapshot(13, unconfirmed);

            var metadata = new SnapshotMetadata(Pid, 2);

            SnapshotStore.Tell(new SaveSnapshot(metadata, atLeastOnceDeliverySnapshot), probe.Ref);
            probe.ExpectMsg <SaveSnapshotSuccess>();

            SnapshotStore.Tell(new LoadSnapshot(Pid, SnapshotSelectionCriteria.Latest, long.MaxValue), probe.Ref);
            probe.ExpectMsg <LoadSnapshotResult>(s => s.Snapshot.Snapshot.Equals(atLeastOnceDeliverySnapshot));
        }
Пример #4
0
        public void MessageSerializer_should_serialize_AtLeastOnceDeliverySnapshot()
        {
            var unconfirmed = new[]
            {
                new UnconfirmedDelivery(1, TestActor.Path, "a"),
                new UnconfirmedDelivery(2, TestActor.Path, "b"),
                new UnconfirmedDelivery(3, TestActor.Path, "big string")
            };
            var atLeastOnceDeliverySnapshot = new AtLeastOnceDeliverySnapshot(17, unconfirmed);

            var bytes        = _serializer.ToBinary(atLeastOnceDeliverySnapshot);
            var backSnapshot = _serializer.FromBinary <AtLeastOnceDeliverySnapshot>(bytes);

            backSnapshot.Should().NotBeNull();
            backSnapshot.Should().Be(atLeastOnceDeliverySnapshot);
        }
Пример #5
0
        public void MessageSerializer_when_given_AtLeastOnceDeliverySnapshot_should_handle_a_few_unconfirmed()
        {
            var unconfirmed = new[]
            {
                new UnconfirmedDelivery(1, TestActor.Path, "a"),
                new UnconfirmedDelivery(2, TestActor.Path, "b"),
                new UnconfirmedDelivery(3, TestActor.Path, 42),
            };
            var snap       = new AtLeastOnceDeliverySnapshot(17, unconfirmed);
            var serializer = _serialization.FindSerializerFor(snap);

            var bytes        = serializer.ToBinary(snap);
            var deserialized = serializer.FromBinary(bytes, typeof(AtLeastOnceDeliverySnapshot));

            deserialized.ShouldBe(snap);
        }
Пример #6
0
        private GuaranteedDeliverySnapshot SnapshotFrom(byte[] bytes)
        {
            var snap = AtLeastOnceDeliverySnapshot.ParseFrom(bytes);
            var unconfirmedDeliveries = new UnconfirmedDelivery[snap.UnconfirmedDeliveriesCount];

            for (int i = 0; i < snap.UnconfirmedDeliveriesCount; i++)
            {
                var unconfirmed         = snap.UnconfirmedDeliveriesList[i];
                var unconfirmedDelivery = new UnconfirmedDelivery(
                    deliveryId: unconfirmed.DeliveryId,
                    destination: ActorPath.Parse(unconfirmed.Destination),
                    message: PayloadFromProto(unconfirmed.Payload));
                unconfirmedDeliveries[i] = unconfirmedDelivery;
            }

            return(new GuaranteedDeliverySnapshot(snap.CurrentDeliveryId, unconfirmedDeliveries));
        }
        private Proto.Msg.AtLeastOnceDeliverySnapshot GetAtLeastOnceDeliverySnapshot(AtLeastOnceDeliverySnapshot snapshot)
        {
            var message = new Proto.Msg.AtLeastOnceDeliverySnapshot
            {
                CurrentDeliveryId = snapshot.CurrentDeliveryId
            };

            foreach (var unconfirmed in snapshot.UnconfirmedDeliveries)
            {
                message.UnconfirmedDeliveries.Add(new Proto.Msg.UnconfirmedDelivery
                {
                    DeliveryId  = unconfirmed.DeliveryId,
                    Destination = unconfirmed.Destination.ToString(),
                    Payload     = GetPersistentPayload(unconfirmed.Message)
                });
            }
            return(message);
        }
Пример #8
0
        private AtLeastOnceDeliverySnapshot.Builder SnapshotToProto(GuaranteedDeliverySnapshot snap)
        {
            var builder = AtLeastOnceDeliverySnapshot.CreateBuilder();

            builder.SetCurrentDeliveryId(snap.DeliveryId);

            foreach (var unconfirmed in snap.UnconfirmedDeliveries)
            {
                var unconfirmedBuilder = AtLeastOnceDeliverySnapshot.Types.UnconfirmedDelivery.CreateBuilder()
                                         .SetDeliveryId(unconfirmed.DeliveryId)
                                         .SetDestination(unconfirmed.Destination.ToString())
                                         .SetPayload(PersistentPayloadToProto(unconfirmed.Message));

                builder.AddUnconfirmedDeliveries(unconfirmedBuilder);
            }

            return(builder);
        }
Пример #9
0
 public Snap(AtLeastOnceDeliverySnapshot deliverySnapshot)
 {
     DeliverySnapshot = deliverySnapshot;
 }
Пример #10
0
        public void MessageSerializer_when_given_AtLeastOnceDeliverySnapshot_should_handle_a_few_unconfirmed()
        {
            var unconfirmed = new[]
            {
                new UnconfirmedDelivery(1, TestActor.Path, "a"),
                new UnconfirmedDelivery(2, TestActor.Path, "b"),
                new UnconfirmedDelivery(3, TestActor.Path, 42),
            };
            var snap = new AtLeastOnceDeliverySnapshot(17, unconfirmed);
            var serializer = _serialization.FindSerializerFor(snap);

            var bytes = serializer.ToBinary(snap);
            var deserialized = serializer.FromBinary(bytes, typeof (AtLeastOnceDeliverySnapshot));

            deserialized.ShouldBe(snap);
        }
Пример #11
0
        public void MessageSerializer_when_given_AtLeastOnceDeliverySnapshot_should_handle_empty_unconfirmed()
        {
            var unconfirmed = new UnconfirmedDelivery[0];
            var snap = new AtLeastOnceDeliverySnapshot(13, unconfirmed);
            var serializer = _serialization.FindSerializerFor(snap);

            var bytes = serializer.ToBinary(snap);
            var deserialized = serializer.FromBinary(bytes, typeof (AtLeastOnceDeliverySnapshot));

            deserialized.ShouldBe(snap);
        }
Пример #12
0
        private global::AtLeastOnceDeliverySnapshot.Builder SnapshotToProto(AtLeastOnceDeliverySnapshot snap)
        {
            var builder = global::AtLeastOnceDeliverySnapshot.CreateBuilder();
            builder.SetCurrentDeliveryId(snap.CurrentDeliveryId);

            foreach (var unconfirmed in snap.UnconfirmedDeliveries)
            {
                var unconfirmedBuilder = global::AtLeastOnceDeliverySnapshot.Types.UnconfirmedDelivery.CreateBuilder()
                    .SetDeliveryId(unconfirmed.DeliveryId)
                    .SetDestination(unconfirmed.Destination.ToString())
                    .SetPayload(PersistentPayloadToProto(unconfirmed.Message));

                builder.AddUnconfirmedDeliveries(unconfirmedBuilder);
            }

            return builder;
        }