public override void HandleItem(WatchEventType eventType, TCustomResource item) { var executionContext = new CustomResourceExecutionContext <TCustomResource>() { Item = item, EventType = eventType, PreviousExecutionsCount = 0 }; executionQueue.Enqueue(executionContext); Metrics?.Measure.Gauge.SetValue(RepeatingQueuedOperatorMetrics.ExecutionQueueDepth, tags, executionQueue.Count); Metrics?.Measure.Counter.Increment(RepeatingQueuedOperatorMetrics.MessagesProcessed, tags); }
private void RequeueContext(CustomResourceExecutionContext <TCustomResource> context) { if (executionLimit == null || context.PreviousExecutionsCount < executionLimit) { context.PreviousExecutionsCount++; var backoffFactor = Math.Min(context.PreviousExecutionsCount, 6); var backoffSeconds = Math.Pow(2, backoffFactor); context.NextExecutionTime = DateTimeOffset.Now.AddSeconds(backoffSeconds); Logger.LogDebug("Requeuing {kind} {name} to execute after {time} ({backoffSeconds})", context.Item.Kind, context.Item.Metadata.Name, context.NextExecutionTime, backoffSeconds); retryItems.TryAdd(context, context); Metrics?.Measure.Gauge.SetValue(RepeatingQueuedOperatorMetrics.RetryItemDepth, tags, retryItems.Count); } }