public async Task EHStatistics_MonitorCalledAccordingly() { var streamId = new FullStreamIdentity(Guid.NewGuid(), StreamNamespace, StreamProviderName); //set up one slow consumer grain var slowConsumer = this.fixture.GrainFactory.GetGrain <ISlowConsumingGrain>(Guid.NewGuid()); await slowConsumer.BecomeConsumer(streamId.Guid, StreamNamespace, StreamProviderName); //set up 30 healthy consumer grain to show how much we favor slow consumer int healthyConsumerCount = 30; var healthyConsumers = await EHSlowConsumingTests.SetUpHealthyConsumerGrain(this.fixture.GrainFactory, streamId.Guid, StreamNamespace, StreamProviderName, healthyConsumerCount); //configure data generator for stream and start producing var mgmtGrain = this.fixture.GrainFactory.GetGrain <IManagementGrain>(0); var randomStreamPlacementArg = new EventDataGeneratorStreamProvider.AdapterFactory.StreamRandomPlacementArg(streamId, this.seed.Next(100)); await mgmtGrain.SendControlCommandToProvider(typeof(EHStreamProviderForMonitorTests).FullName, StreamProviderName, (int)EventDataGeneratorStreamProvider.AdapterFactory.Commands.Randomly_Place_Stream_To_Queue, randomStreamPlacementArg); //since there's an extreme slow consumer, so the back pressure algorithm should be triggered await TestingUtils.WaitUntilAsync(lastTry => AssertCacheBackPressureTriggered(true, lastTry), timeout); //make slow consumer stop consuming await slowConsumer.StopConsuming(); //assert EventHubReceiverMonitor call counters var receiverMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(EHStreamProviderForMonitorTests).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTests.AdapterFactory.QueryCommands.GetReceiverMonitorCallCounters, null); foreach (var callCounter in receiverMonitorCounters) { AssertReceiverMonitorCallCounters(callCounter as EventHubReceiverMonitorCounters); } var cacheMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(EHStreamProviderForMonitorTests).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTests.AdapterFactory.QueryCommands.GetCacheMonitorCallCounters, null); foreach (var callCounter in cacheMonitorCounters) { AssertCacheMonitorCallCounters(callCounter as CacheMonitorCounters); } var objectPoolMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(EHStreamProviderForMonitorTests).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTests.AdapterFactory.QueryCommands.GetObjectPoolMonitorCallCounters, null); foreach (var callCounter in objectPoolMonitorCounters) { AssertObjectPoolMonitorCallCounters(callCounter as ObjectPoolMonitorCounters); } }
public async Task EHStatistics_MonitorCalledAccordingly() { var streamId = new FullStreamIdentity(Guid.NewGuid(), StreamNamespace, StreamProviderName); //set up 30 healthy consumer grain to show how much we favor slow consumer int healthyConsumerCount = 30; _ = await EHSlowConsumingTests.SetUpHealthyConsumerGrain(this.fixture.GrainFactory, streamId.Guid, StreamNamespace, StreamProviderName, healthyConsumerCount); //configure data generator for stream and start producing var mgmtGrain = this.fixture.GrainFactory.GetGrain <IManagementGrain>(0); var randomStreamPlacementArg = new EHStreamProviderForMonitorTestsAdapterFactory.StreamRandomPlacementArg(streamId, this.seed.Next(100)); await mgmtGrain.SendControlCommandToProvider(typeof(PersistentStreamProvider).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTestsAdapterFactory.Commands.Randomly_Place_Stream_To_Queue, randomStreamPlacementArg); // let the test to run for a while to build up some streaming traffic await Task.Delay(timeout); //wait sometime after cache pressure changing, for the system to notice it and trigger cache monitor to track it await mgmtGrain.SendControlCommandToProvider(typeof(PersistentStreamProvider).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTestsAdapterFactory.QueryCommands.ChangeCachePressure, null); await Task.Delay(timeout); //assert EventHubReceiverMonitor call counters var receiverMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(PersistentStreamProvider).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTestsAdapterFactory.QueryCommands.GetReceiverMonitorCallCounters, null); foreach (var callCounter in receiverMonitorCounters) { AssertReceiverMonitorCallCounters(callCounter as EventHubReceiverMonitorCounters); } var cacheMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(PersistentStreamProvider).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTestsAdapterFactory.QueryCommands.GetCacheMonitorCallCounters, null); foreach (var callCounter in cacheMonitorCounters) { AssertCacheMonitorCallCounters(callCounter as CacheMonitorCounters); } var objectPoolMonitorCounters = await mgmtGrain.SendControlCommandToProvider(typeof(PersistentStreamProvider).FullName, StreamProviderName, (int)EHStreamProviderForMonitorTestsAdapterFactory.QueryCommands.GetObjectPoolMonitorCallCounters, null); foreach (var callCounter in objectPoolMonitorCounters) { AssertObjectPoolMonitorCallCounters(callCounter as ObjectPoolMonitorCounters); } }