Example #1
0
        public override void When()
        {
            // The EpochManager for these tests only caches 5 epochs
            // Epochs 2 and 3 don't exist
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            EpochManager.WriteNewEpoch(1);
            Writer.Write(CreateLogRecord(1), out _);

            _uncachedLeaderEpochs = EpochManager.GetLastEpochs(2);

            EpochManager.WriteNewEpoch(4);
            Writer.Write(CreateLogRecord(2), out _);
            EpochManager.WriteNewEpoch(5);
            Writer.Write(CreateLogRecord(3), out _);
            EpochManager.WriteNewEpoch(6);
            Writer.Write(CreateLogRecord(4), out _);
            EpochManager.WriteNewEpoch(7);
            Writer.Write(CreateLogRecord(5), out _);
            EpochManager.WriteNewEpoch(8);

            _replicaEpochs = new List <Epoch> {
                new Epoch(_uncachedLeaderEpochs[0].EpochPosition + 8000, 3, Guid.NewGuid()),
                new Epoch(_uncachedLeaderEpochs[0].EpochPosition + 4000, 2, Guid.NewGuid()),
                new Epoch(_uncachedLeaderEpochs[0].EpochPosition, _uncachedLeaderEpochs[0].EpochNumber, _uncachedLeaderEpochs[0].EpochId),
                new Epoch(_uncachedLeaderEpochs[1].EpochPosition, _uncachedLeaderEpochs[1].EpochNumber, _uncachedLeaderEpochs[1].EpochId)
            };

            AddSubscription(_replicaId, true, _replicaEpochs.ToArray(), _replicaEpochs[0].EpochPosition, out _replicaManager);
        }
Example #2
0
        public void subscription_is_sent_a_replica_subscribed_message_to_epoch_position_after_common_epoch()
        {
            var subscribed = GetTcpSendsFor(_replicaManager).Select(x => x.Message)
                             .OfType <ReplicationMessage.ReplicaSubscribed>().ToArray();

            Assert.AreEqual(1, subscribed.Length);
            Assert.AreEqual(EpochManager.GetLastEpochs(5).First(x => x.EpochNumber == 4).EpochPosition, subscribed[0].SubscriptionPosition);
            Assert.AreEqual(_replicaId, subscribed[0].SubscriptionId);
            Assert.AreEqual(LeaderId, subscribed[0].LeaderId);
        }
Example #3
0
        public override void When()
        {
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            Writer.Write(CreateLogRecord(1), out _);
            Writer.Write(CreateLogRecord(2), out _);
            Writer.Write(CreateLogRecord(3), out _);
            Writer.Write(CreateLogRecord(4), out _subscribedPosition);
            EpochManager.WriteNewEpoch(1);

            _lastEpoch = EpochManager.GetLastEpoch();
            var epochs = EpochManager.GetLastEpochs(10)
                         .Select(e => new Epoch(e.EpochPosition, e.EpochNumber, e.EpochId)).ToArray();

            AddSubscription(_replicaId, true, epochs, _subscribedPosition, out _replicaManager);
        }
Example #4
0
        public override void When()
        {
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            Writer.Write(CreateLogRecord(1), out _);
            Writer.Write(CreateLogRecord(2), out var otherEpochLogPosition);
            Writer.Write(CreateLogRecord(3), out _);
            Writer.Write(CreateLogRecord(4), out _);
            EpochManager.WriteNewEpoch(2);

            var firstEpoch = EpochManager.GetLastEpochs(10).First(e => e.EpochNumber == 0);

            _replicaEpochs = new List <Epoch> {
                new Epoch(otherEpochLogPosition, 1, Guid.NewGuid()),
                new Epoch(firstEpoch.EpochPosition, firstEpoch.EpochNumber, firstEpoch.EpochId)
            };

            AddSubscription(_replicaId, true, _replicaEpochs.ToArray(), _replicaEpochs[0].EpochPosition, out _replicaManager);
        }
Example #5
0
        public override void When()
        {
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            Writer.Write(CreateLogRecord(1), out _);
            Writer.Write(CreateLogRecord(2), out _);
            Writer.Write(CreateLogRecord(3), out _);
            Writer.Write(CreateLogRecord(4), out _);
            EpochManager.WriteNewEpoch(1);

            var subscribePosition = Db.Config.WriterCheckpoint.ReadNonFlushed() + 1000;

            _replicaEpochs = new List <Epoch> {
                new Epoch(subscribePosition, 2, Guid.NewGuid()),
            };
            _replicaEpochs.AddRange(EpochManager.GetLastEpochs(10)
                                    .Select(e => new Epoch(e.EpochPosition, e.EpochNumber, e.EpochId)).ToList());

            AddSubscription(_replicaId, true, _replicaEpochs.ToArray(), subscribePosition, out _replicaManager);
        }
Example #6
0
        public override void When()
        {
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            EpochManager.WriteNewEpoch(1);

            // The EpochManager for these tests only caches 5 epochs
            _replicaEpochs = EpochManager.GetLastEpochs(2)
                             .Select(e => new Epoch(e.EpochPosition, e.EpochNumber, e.EpochId)).ToList();

            Writer.Write(CreateLogRecord(1), out _);
            EpochManager.WriteNewEpoch(2);
            Writer.Write(CreateLogRecord(2), out _);
            EpochManager.WriteNewEpoch(3);
            Writer.Write(CreateLogRecord(3), out _);
            EpochManager.WriteNewEpoch(4);
            Writer.Write(CreateLogRecord(4), out _);
            EpochManager.WriteNewEpoch(5);
            Writer.Write(CreateLogRecord(5), out _);
            EpochManager.WriteNewEpoch(6);

            AddSubscription(_replicaId, true, _replicaEpochs.ToArray(), _replicaEpochs[0].EpochPosition, out _replicaManager);
        }
Example #7
0
        public override void When()
        {
            EpochManager.WriteNewEpoch(0);
            Writer.Write(CreateLogRecord(0), out _);
            Writer.Write(CreateLogRecord(1), out _);
            Writer.Write(CreateLogRecord(2), out _);
            Writer.Write(CreateLogRecord(3), out _);
            Writer.Write(CreateLogRecord(4), out _);
            EpochManager.WriteNewEpoch(1);
            Writer.Write(CreateLogRecord(5), out _);
            Writer.Write(CreateLogRecord(6), out _);
            Writer.Write(CreateLogRecord(7), out var lastWritePosition);
            Writer.Flush();

            _replicaEpochs = new List <Epoch> {
                new Epoch(lastWritePosition + 2000, 4, Guid.NewGuid()),
                new Epoch(lastWritePosition + 1000, 3, Guid.NewGuid()),
                new Epoch(lastWritePosition, 2, Guid.NewGuid()),
            };
            _replicaEpochs.AddRange(EpochManager.GetLastEpochs(10)
                                    .Select(e => new Epoch(e.EpochPosition, e.EpochNumber, e.EpochId)).ToList());

            AddSubscription(_replicaId, true, _replicaEpochs.ToArray(), lastWritePosition + 2000, out _replicaManager);
        }