Beispiel #1
0
        private void Cancel(IUntypedPublisher target, TimeSpan timeout)
        {
            var typedTarget = UntypedPublisher.ToTyped <T>(target);

            if (
                typedTarget.GetType()
                .GetInterfaces()
                .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IProcessor <,>)))
            {
                if (Log.IsDebugEnabled)
                {
                    Log.Debug(
                        $"Cancelling {typedTarget} Processor's publisher and subscriber sides (after {timeout.TotalMilliseconds} ms)");
                }
                HandleSubscriptionTimeout(target, new SubscriptionTimeoutException(
                                              $"Publisher was not attached to upstream within deadline {timeout.TotalMilliseconds} ms"));
            }
            else
            if (Log.IsDebugEnabled)
            {
                Log.Debug(
                    $"Cancelling {typedTarget} (after {timeout.TotalMilliseconds} ms)");
            }
            HandleSubscriptionTimeout(target, new SubscriptionTimeoutException(
                                          $"Publisher {typedTarget} you are trying to subscribe to has been shut-down because exceeing its subscription timeout"));
        }
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="untypedPublisher">TBD</param>
 /// <returns>TBD</returns>
 public static object ToTyped(IUntypedPublisher untypedPublisher)
 {
     if (untypedPublisher is UntypedPublisher)
     {
         return(((UntypedPublisher)untypedPublisher).Unwrap());
     }
     return(untypedPublisher);
 }
Beispiel #3
0
        private void Warn(IUntypedPublisher target, TimeSpan timeout)
        {
            var typedTarget = UntypedPublisher.ToTyped <T>(target);

            Log.Warning(
                "Timed out {0} detected (after {1})! You should investigate if you either cancel or consume all {2} instances",
                typedTarget, timeout, typedTarget.GetType().Name);
        }
Beispiel #4
0
        public void SubscriptionTimedOut(IUntypedPublisher target)
        {
            switch (SubscriptionTimeoutSettings.Mode)
            {
            case StreamSubscriptionTimeoutTerminationMode.CancelTermination: Cancel(target, SubscriptionTimeoutSettings.Timeout); break;

            case StreamSubscriptionTimeoutTerminationMode.WarnTermination: Warn(target, SubscriptionTimeoutSettings.Timeout); break;
            }
        }
Beispiel #5
0
        /// <summary>
        /// Callback that should ensure that the target is canceled with the given cause.
        /// </summary>
        public void HandleSubscriptionTimeout(IUntypedPublisher target, Exception cause)
        {
            SubstreamOutput output;

            if ((output = UntypedPublisher.ToTyped <T>(target) as SubstreamOutput) != null)
            {
                output.Error(cause);
                output.AttachSubscriber(CancelingSubscriber <T> .Instance);
            }
        }
Beispiel #6
0
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="publisher">TBD</param>
 public abstract void RegisterPublisher(IUntypedPublisher publisher);
Beispiel #7
0
 /// <summary>
 /// TBD
 /// </summary>
 /// <param name="publisher">TBD</param>
 public override void RegisterPublisher(IUntypedPublisher publisher)
 {
     _publisher.RegisterPublisher(UntypedPublisher.ToTyped <T>(publisher));
 }
 /// <summary>
 /// TBD
 /// </summary>
 /// <typeparam name="T">TBD</typeparam>
 /// <param name="untypedPublisher">TBD</param>
 /// <returns>TBD</returns>
 public static IPublisher <T> ToTyped <T>(IUntypedPublisher untypedPublisher)
 {
     return((IPublisher <T>)ToTyped(untypedPublisher));
 }