Esempio n. 1
0
        private void PrimaryToActiveSecondaryTestHelper(bool drainInParallel)
        {
            var inst = OperationFetcherTest.Create(drainInParallel);

            // go to active sec
            inst.DoStateChangeOperations(ReplicaRole.IdleSecondary, ReplicaRole.ActiveSecondary);

            // complete the copy queue
            if (!drainInParallel)
            {
                OperationQueueStub.CompleteTaskAndWait(inst.CopyQueue.DrainTasks[0]);
            }

            // now go to primary
            inst.DoStateChangeOperations(ReplicaRole.Primary);

            // both queues are being drained only once
            OperationFetcherTest.AssertQueueTaskCount(1, inst.CopyQueue);
            OperationFetcherTest.AssertQueueTaskCount(1, inst.ReplicationQueue);

            // now go to active secondary
            inst.Fetcher.ChangeRole(ReplicaRole.ActiveSecondary);

            // we have started draining again
            OperationFetcherTest.AssertQueueTaskCount(1, inst.CopyQueue);
            OperationFetcherTest.AssertQueueTaskCount(2, inst.ReplicationQueue);
        }
Esempio n. 2
0
            public static void CompleteTaskAndWait(Task t)
            {
                if (t.IsCompleted)
                {
                    return;
                }

                OperationQueueStub.GetEventForTask(t).Set();
                t.Wait();
            }
Esempio n. 3
0
        private static void AssertQueueTaskCount(int expectedCount, OperationQueueStub queue)
        {
#if DotNetCoreClr
            // asnegi : RDBug 10087224 : Need to find why we need this higher timeout.
            int timeout = 15;
#else
            int timeout = 1;
#endif
            Assert.IsTrue(MiscUtility.WaitUntil(() => queue.DrainTasks.Count == expectedCount, TimeSpan.FromSeconds(timeout), 50));
        }
Esempio n. 4
0
        public void OperationFetcherTest_DrainInSequentialDrainsReplicationQueueAfterCopyQueueIsDone()
        {
            var inst = OperationFetcherTest.Create();

            inst.Fetcher.ChangeRole(ReplicaRole.IdleSecondary);

            // complete the draining of the copy queue
            OperationQueueStub.CompleteTaskAndWait(inst.CopyQueue.DrainTasks[0]);

            // it should start draining the replicaiton queue now
            OperationFetcherTest.AssertQueueTaskCount(1, inst.ReplicationQueue);
        }
Esempio n. 5
0
        public void OperationFetcherTest_DrainInSequentialDoesNotDrainReplicationQueueIfCloseIsCalled()
        {
            var inst = OperationFetcherTest.Create();

            // become idle sec -> start draining copy queue
            // call close
            inst.DoStateChangeOperations(ReplicaRole.IdleSecondary, true);

            // complete the draining of the copy queue
            OperationQueueStub.CompleteTaskAndWait(inst.CopyQueue.DrainTasks[0]);

            // the replication queue should not have been drained
            OperationFetcherTest.AssertQueueTaskCount(0, inst.ReplicationQueue);
        }
Esempio n. 6
0
        private void ActiveSecondaryToCloseTestHelper(bool drainInParallel)
        {
            var inst = OperationFetcherTest.Create(drainInParallel);

            // idle -> active -> close
            inst.DoStateChangeOperations(ReplicaRole.IdleSecondary, ReplicaRole.ActiveSecondary);

            if (!drainInParallel)
            {
                OperationQueueStub.CompleteTaskAndWait(inst.CopyQueue.DrainTasks[0]);
            }

            // the count of drains should be = 1
            OperationFetcherTest.AssertQueueTaskCount(1, inst.CopyQueue);
            OperationFetcherTest.AssertQueueTaskCount(1, inst.ReplicationQueue);

            // close
            inst.DoStateChangeOperations(true);

            // the count of drains should be = 1
            OperationFetcherTest.AssertQueueTaskCount(1, inst.CopyQueue);
            OperationFetcherTest.AssertQueueTaskCount(1, inst.ReplicationQueue);
        }