예제 #1
0
 /// <summary>
 /// Mark a resource generation as successfully handled
 /// </summary>
 public void TrackResourceGenerationAsHandled(CustomResource resource)
 {
     if (resource.Metadata.Generation != null)
     {
         _lastResourceGenerationProcessed[resource.Metadata.Uid] = resource.Metadata.Generation.Value;
     }
 }
예제 #2
0
        /// <summary>
        /// Returns true if the same resource/generation has already been handled
        /// </summary>
        public bool IsResourceGenerationAlreadyHandled(CustomResource resource)
        {
            if (_discardDuplicates)
            {
                bool processedInPast = _lastResourceGenerationProcessed.TryGetValue(resource.Metadata.Uid, out long resourceGeneration);

                return(processedInPast &&
                       resource.Metadata.Generation != null &&
                       resourceGeneration >= resource.Metadata.Generation.Value);
            }
            else
            {
                return(false);
            }
        }
예제 #3
0
        /// <summary>
        /// Dispatches an incoming event to the controller
        /// </summary>
        public void OnIncomingEvent(WatchEventType eventType, CustomResource resource)
        {
            var resourceEvent = new CustomResourceEvent(eventType, resource);

            _logger.LogDebug($"Received event {resourceEvent}");

            Controller.ProcessEventAsync(resourceEvent, _cancellationToken)
            .ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    var exception = t.Exception.Flatten().InnerException;
                    _logger.LogError(exception, $"Error processing {resourceEvent}");
                }
            });
        }
예제 #4
0
 /// <summary>
 /// Mark a resource generation as successfully deleted
 /// </summary>
 public void TrackResourceGenerationAsDeleted(CustomResource resource)
 {
     _lastResourceGenerationProcessed.Remove(resource.Metadata.Uid);
 }