/// <summary> /// Initializes a new instance of the <see cref="KinesisFirehoseSink"/> class. /// </summary> /// <param name="context">The <see cref="IPlugInContext"/> that contains configuration info, logger, metrics etc.</param> /// <param name="failoverSink">The <see cref="FailoverSink{AmazonKinesisFirehoseClient}"/> that defines failover sink class.</param> /// <param name="failoverSinkRegionStrategy">The <see cref="FailoverStrategy{AmazonKinesisFirehoseClient}"/> that defines failover sink region selection strategy.</param> public KinesisFirehoseSink( IPlugInContext context, FailoverSink <AmazonKinesisFirehoseClient> failoverSink, FailoverStrategy <AmazonKinesisFirehoseClient> failoverSinkRegionStrategy) : this(context, failoverSinkRegionStrategy.GetPrimaryRegionClient()) // Setup Kinesis Firehose Client with Primary Region { // Parse or default // Max wait interval between failback retry if (!int.TryParse(_config[ConfigConstants.MAX_FAILBACK_RETRY_INTERVAL_IN_MINUTES], out _maxFailbackRetryIntervalInMinutes)) { _maxFailbackRetryIntervalInMinutes = ConfigConstants.DEFAULT_MIN_WAIT_BEFORE_REGION_FAILBACK_RETRY_IN_MINUTES; } else if (_maxFailbackRetryIntervalInMinutes < ConfigConstants.DEFAULT_MIN_WAIT_BEFORE_REGION_FAILBACK_RETRY_IN_MINUTES) { throw new ArgumentException(String.Format("Invalid \"{0}\" value, please provide positive integer greator than \"{1}\".", ConfigConstants.MAX_FAILBACK_RETRY_INTERVAL_IN_MINUTES, ConfigConstants.DEFAULT_MIN_WAIT_BEFORE_REGION_FAILBACK_RETRY_IN_MINUTES)); } // Failover Sink _failoverSink = failoverSink; _failoverSinkEnabled = true; // Failover Sink Region Strategy _failoverSinkRegionStrategy = failoverSinkRegionStrategy; // Setup Primary Region Failback Timer _primaryRegionFailbackTimer = new System.Timers.Timer(_maxFailbackRetryIntervalInMinutes * 60 * 1000); _primaryRegionFailbackTimer.Elapsed += new ElapsedEventHandler(FailbackToPrimaryRegion); _primaryRegionFailbackTimer.AutoReset = true; _primaryRegionFailbackTimer.Start(); }
/// <inheritdoc/> public TAWSClient FailbackToPrimaryRegion(Throttle throttle) { _logger?.LogDebug($"FailoverSink id {Id} is trying to fail back to primary region."); // Setup client with Primary Region var client = _failoverSinkRegionStrategy.GetPrimaryRegionClient(); if (client is not null) { // Reset Throttle throttle.SetSuccess(); _logger?.LogInformation($"FailoverSink id {Id} failed back successfully to primary region {_failoverSinkRegionStrategy.GetCurrentRegion().Region.SystemName}."); return(client); } else { _logger?.LogDebug($"FailoverSink id {Id} fail back to primary region unsuccessful, primary region currently is down or in use."); } return(null); }