public void Before() { context = HystrixRequestContext.InitializeContext(); HystrixCommandMetrics.Reset(); HystrixThreadPoolMetrics.Reset(); HystrixCollapserMetrics.Reset(); // clear collapsers RequestCollapserFactory.Reset(); // clear circuit breakers HystrixCircuitBreakerFactory.Reset(); HystrixPlugins.Reset(); HystrixOptionsFactory.Reset(); // clear up all streams CumulativeCollapserEventCounterStream.Reset(); CumulativeCommandEventCounterStream.Reset(); CumulativeThreadPoolEventCounterStream.Reset(); RollingCollapserBatchSizeDistributionStream.Reset(); RollingCollapserEventCounterStream.Reset(); RollingCommandEventCounterStream.Reset(); RollingCommandLatencyDistributionStream.Reset(); RollingCommandMaxConcurrencyStream.Reset(); RollingCommandUserLatencyDistributionStream.Reset(); RollingThreadPoolEventCounterStream.Reset(); RollingThreadPoolMaxConcurrencyStream.Reset(); }
public void TestCollapsedAndResponseFromCacheAgeOutOfCumulativeWindow() { var key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-D"); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); stream.StartCachingStreamValuesIfUnstarted(); var latch = new CountdownEvent(1); latchSubscription = stream.Observe().Take(20 + LatchedObserver.STABLE_TICK_COUNT).Subscribe(new LatchedObserver(output, latch)); for (var i = 0; i < 3; i++) { Collapser.From(output, key, i).Observe(); Collapser.From(output, key, i).Observe(); // same arg - should get a response from cache Collapser.From(output, key, i).Observe(); // same arg - should get a response from cache } Assert.True(latch.Wait(10000), "CountdownEvent was not set!"); Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); var expected = new long[CollapserEventTypeHelper.Values.Count]; expected[(int)CollapserEventType.BATCH_EXECUTED] = 1; expected[(int)CollapserEventType.ADDED_TO_BATCH] = 3; expected[(int)CollapserEventType.RESPONSE_FROM_CACHE] = 6; Assert.Equal(expected, stream.Latest); }
public void TestCollapsedAndResponseFromCache() { var key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-C"); var latch = new CountdownEvent(1); var observer = new LatchedObserver(output, latch); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); latchSubscription = stream.Observe().Subscribe(observer); var tasks = new List <Task>(); for (var i = 0; i < 3; i++) { tasks.Add(Collapser.From(output, key, i).ExecuteAsync()); tasks.Add(Collapser.From(output, key, i).ExecuteAsync()); // same arg - should get a response from cache tasks.Add(Collapser.From(output, key, i).ExecuteAsync()); // same arg - should get a response from cache } Task.WaitAll(tasks.ToArray()); Assert.True(WaitForLatchedObserverToUpdate(observer, 1, 500, output), "Latch took to long to update"); Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); var expected = new long[CollapserEventTypeHelper.Values.Count]; expected[(int)CollapserEventType.BATCH_EXECUTED] = 1; expected[(int)CollapserEventType.ADDED_TO_BATCH] = 3; expected[(int)CollapserEventType.RESPONSE_FROM_CACHE] = 6; Assert.Equal(expected, stream.Latest); }
public override void Dispose() { base.Dispose(); stream.Unsubscribe(); CumulativeCollapserEventCounterStream.Reset(); }
public void TestEmptyStreamProducesZeros() { IHystrixCollapserKey key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-A"); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); stream.StartCachingStreamValuesIfUnstarted(); CountdownEvent latch = new CountdownEvent(1); stream.Observe().Take(10).Subscribe(new LatchedObserver(latch)); // no writes try { Assert.True(latch.Wait(10000), "CountdownEvent was not set!"); } catch (Exception) { Assert.False(true, "Interrupted ex"); } output.WriteLine("ReqLog : " + HystrixRequestLog.CurrentRequestLog.GetExecutedCommandsAsString()); Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); Assert.Equal(0, stream.GetLatest(CollapserEventType.ADDED_TO_BATCH)); Assert.Equal(0, stream.GetLatest(CollapserEventType.BATCH_EXECUTED)); Assert.Equal(0, stream.GetLatest(CollapserEventType.RESPONSE_FROM_CACHE)); }
public void TestCollapsedAndResponseFromCacheAgeOutOfCumulativeWindow() { IHystrixCollapserKey key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-D"); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); stream.StartCachingStreamValuesIfUnstarted(); CountdownEvent latch = new CountdownEvent(1); stream.Observe().Take(30).Subscribe(new LatchedObserver(latch)); for (int i = 0; i < 3; i++) { Collapser.From(output, key, i).Observe(); Collapser.From(output, key, i).Observe(); // same arg - should get a response from cache Collapser.From(output, key, i).Observe(); // same arg - should get a response from cache } try { Assert.True(latch.Wait(10000), "CountdownEvent was not set!"); } catch (Exception) { Assert.True(false, "Interrupted ex"); } Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); long[] expected = new long[CollapserEventTypeHelper.Values.Count]; expected[(int)CollapserEventType.BATCH_EXECUTED] = 1; expected[(int)CollapserEventType.ADDED_TO_BATCH] = 3; expected[(int)CollapserEventType.RESPONSE_FROM_CACHE] = 6; output.WriteLine("ReqLog : " + HystrixRequestLog.CurrentRequestLog.GetExecutedCommandsAsString()); Assert.Equal(expected, stream.Latest); }
#pragma warning restore S1199 // Nested code blocks should not be used internal static void Reset() { RollingCollapserEventCounterStream.Reset(); CumulativeCollapserEventCounterStream.Reset(); RollingCollapserBatchSizeDistributionStream.Reset(); Metrics.Clear(); }
public void TestCollapsed() { IHystrixCollapserKey key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-B"); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); stream.StartCachingStreamValuesIfUnstarted(); CountdownEvent latch = new CountdownEvent(1); stream.Observe().Take(10).Subscribe(new LatchedObserver(latch)); for (int i = 0; i < 3; i++) { CommandStreamTest.Collapser.From(output, key, i).Observe(); } try { Assert.True(latch.Wait(10000)); } catch (Exception) { Assert.True(false, "Interrupted ex"); } Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); long[] expected = new long[CollapserEventTypeHelper.Values.Count]; expected[(int)CollapserEventType.BATCH_EXECUTED] = 1; expected[(int)CollapserEventType.ADDED_TO_BATCH] = 3; string log = HystrixRequestLog.CurrentRequestLog.GetExecutedCommandsAsString(); output.WriteLine("ReqLog : " + log); Assert.Equal <long[]>(expected, stream.Latest); }
public void TestCollapsed() { IHystrixCollapserKey key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-B"); CountdownEvent latch = new CountdownEvent(1); var observer = new LatchedObserver(output, latch); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); latchSubscription = stream.Observe().Subscribe(observer); List <Task> tasks = new List <Task>(); for (int i = 0; i < 3; i++) { tasks.Add(Collapser.From(output, key, i).ExecuteAsync()); } Task.WaitAll(tasks.ToArray()); Assert.True(WaitForLatchedObserverToUpdate(observer, 1, 500, output), "Latch took to long to update"); Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); long[] expected = new long[CollapserEventTypeHelper.Values.Count]; expected[(int)CollapserEventType.BATCH_EXECUTED] = 1; expected[(int)CollapserEventType.ADDED_TO_BATCH] = 3; Assert.Equal(expected, stream.Latest); }
public override void Dispose() { latchSubscription?.Dispose(); stream?.Unsubscribe(); latchSubscription = null; stream = null; base.Dispose(); }
HystrixCollapserMetrics(IHystrixCollapserKey key, IHystrixCollapserOptions properties) : base(null) { this.collapserKey = key; this.properties = properties; rollingCollapserEventCounterStream = RollingCollapserEventCounterStream.GetInstance(key, properties); cumulativeCollapserEventCounterStream = CumulativeCollapserEventCounterStream.GetInstance(key, properties); rollingCollapserBatchSizeDistributionStream = RollingCollapserBatchSizeDistributionStream.GetInstance(key, properties); }
public void TestEmptyStreamProducesZeros() { var key = HystrixCollapserKeyDefault.AsKey("CumulativeCollapser-A"); var latch = new CountdownEvent(1); var observer = new LatchedObserver(output, latch); stream = CumulativeCollapserEventCounterStream.GetInstance(key, 10, 100); latchSubscription = stream.Observe().Subscribe(observer); Assert.True(WaitForLatchedObserverToUpdate(observer, 1, 500, output), "Latch took to long to update"); Assert.Equal(CollapserEventTypeHelper.Values.Count, stream.Latest.Length); Assert.Equal(0, stream.GetLatest(CollapserEventType.ADDED_TO_BATCH)); Assert.Equal(0, stream.GetLatest(CollapserEventType.BATCH_EXECUTED)); Assert.Equal(0, stream.GetLatest(CollapserEventType.RESPONSE_FROM_CACHE)); }