private async Task <bool> ReportLoadOnChangeRole(ReplicaRole role) { MetricReliableStateManager target = new MetricReliableStateManager( this.GetContext(), new JsonReliableStateSerializerResolver(), this.GetConfig(), new MockReliableStateManager()); ManualResetEvent reset = new ManualResetEvent(false); bool actual = false; MockStatefulServicePartition partition = new MockStatefulServicePartition() { OnReportLoad = (metrics) => { actual = true; reset.Set(); } }; await((IStateProviderReplica)target).OpenAsync(ReplicaOpenMode.New, partition, CancellationToken.None); await((IStateProviderReplica)target).ChangeRoleAsync(role, CancellationToken.None); // this may yield false negatives because we're at the mercy of the task scheduler // to actually execute the reporting task in a timely manner, which depends on external factors. reset.WaitOne(TimeSpan.FromSeconds(10)); return(actual); }
public void TestStatefulServiceWithMockPartition() { var partition = new MockStatefulServicePartition(); var partitionInfo = MockQueryPartitionFactory.CreateIntPartitonInfo(); partition.PartitionInfo = partitionInfo; var statefulServiceContext = MockStatefulServiceContextFactory.Default; var sut = new NestedStatefulService(statefulServiceContext); sut.SetPartition(partition); Assert.AreEqual(partitionInfo, sut.GetPartition().PartitionInfo); }
public void TestDeadLock9() { Func <StatefulServiceContext, IReliableStateManagerReplica2, StatefulServiceWithReplicaListener> serviceFactory = (context, stateManagerReplica) => { var partition = new MockStatefulServicePartition() { PartitionInfo = MockQueryPartitionFactory.CreateSingletonPartitonInfo(Guid.NewGuid()) }; context = MockStatefulServiceContextFactory.Create( context.CodePackageActivationContext, context.ServiceTypeName, context.ServiceName, partition.PartitionInfo.Id, context.ReplicaId); var service = new StatefulServiceWithReplicaListener(context); service.SetPartition(partition); return(service); }; //shared instance, called from multiple threads MockStatefulServiceReplicaSet <StatefulServiceWithReplicaListener> replicaSet; Parallel.For(1, 100, async(i) => { replicaSet = new MockStatefulServiceReplicaSet <StatefulServiceWithReplicaListener>(serviceFactory); await replicaSet.AddReplicaAsync(ReplicaRole.Primary, 1); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 2); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 3); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 4); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 5); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 6); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 7); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 8); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 9); await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 10); }); }