예제 #1
0
        public void GetScaleStatus_HandlesMalformedMetrics()
        {
            // Null metrics
            var context = new ScaleStatusContext <DurableTaskTriggerMetrics>
            {
                WorkerCount = 1,
                Metrics     = null,
            };

            var recommendation = this.scaleMonitor.GetScaleStatus(context);

            Assert.Equal(ScaleVote.None, recommendation.Vote);

            // Empty metrics
            var heartbeats = new PerformanceHeartbeat[0];

            context.Metrics = new DurableTaskTriggerMetrics[0];

            this.performanceMonitor
            .Setup(m => m.MakeScaleRecommendation(1, heartbeats))
            .Returns <ScaleRecommendation>(null);

            recommendation = this.scaleMonitor.GetScaleStatus(context);

            Assert.Equal(ScaleVote.None, recommendation.Vote);

            // Metrics with null properties
            var metrics = new DurableTaskTriggerMetrics[5];

            for (int i = 0; i < metrics.Length; ++i)
            {
                metrics[i] = new DurableTaskTriggerMetrics();
            }

            context.Metrics = metrics;

            heartbeats = new PerformanceHeartbeat[5];
            for (int i = 0; i < heartbeats.Length; ++i)
            {
                heartbeats[i] = new PerformanceHeartbeat
                {
                    ControlQueueLengths   = new List <int>(),
                    ControlQueueLatencies = new List <TimeSpan>(),
                };
            }

            this.performanceMonitor
            .Setup(m => m.MakeScaleRecommendation(1, this.MatchEquivalentHeartbeats(heartbeats)))
            .Returns <ScaleRecommendation>(null);

            recommendation = this.scaleMonitor.GetScaleStatus(context);

            Assert.Equal(ScaleVote.None, recommendation.Vote);
        }
예제 #2
0
        private void GetCorrespondingHeartbeatsAndMetrics(out PerformanceHeartbeat[] heartbeats, out DurableTaskTriggerMetrics[] metrics)
        {
            heartbeats = new PerformanceHeartbeat[]
            {
                new PerformanceHeartbeat
                {
                    PartitionCount      = 4,
                    ControlQueueLengths = new List <int> {
                        1, 2, 3, 4
                    },
                    ControlQueueLatencies = new List <TimeSpan> {
                        TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(2), TimeSpan.FromMilliseconds(3), TimeSpan.FromMilliseconds(4),
                    },
                    WorkItemQueueLength  = 5,
                    WorkItemQueueLatency = TimeSpan.FromMilliseconds(6),
                },
                new PerformanceHeartbeat
                {
                    PartitionCount      = 7,
                    ControlQueueLengths = new List <int> {
                        8, 9, 10, 11
                    },
                    ControlQueueLatencies = new List <TimeSpan> {
                        TimeSpan.FromMilliseconds(12), TimeSpan.FromMilliseconds(13), TimeSpan.FromMilliseconds(14), TimeSpan.FromMilliseconds(15),
                    },
                    WorkItemQueueLength  = 16,
                    WorkItemQueueLatency = TimeSpan.FromMilliseconds(17),
                },
            };

            metrics = new DurableTaskTriggerMetrics[]
            {
                new DurableTaskTriggerMetrics
                {
                    PartitionCount        = 4,
                    ControlQueueLengths   = "[1,2,3,4]",
                    ControlQueueLatencies = "[\"00:00:00.0010000\",\"00:00:00.0020000\",\"00:00:00.0030000\",\"00:00:00.0040000\"]",
                    WorkItemQueueLength   = 5,
                    WorkItemQueueLatency  = "00:00:00.0060000",
                },
                new DurableTaskTriggerMetrics
                {
                    PartitionCount        = 7,
                    ControlQueueLengths   = "[8,9,10,11]",
                    ControlQueueLatencies = "[\"00:00:00.0120000\",\"00:00:00.0130000\",\"00:00:00.0140000\",\"00:00:00.0150000\"]",
                    WorkItemQueueLength   = 16,
                    WorkItemQueueLatency  = "00:00:00.0170000",
                },
            };
        }