/// <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; } }
/// <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); } }
/// <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}"); } }); }
/// <summary> /// Mark a resource generation as successfully deleted /// </summary> public void TrackResourceGenerationAsDeleted(CustomResource resource) { _lastResourceGenerationProcessed.Remove(resource.Metadata.Uid); }