Exemple #1
0
        public void when_try_release_where_envelope_null()
        {
            var memoryQuarantine  = new MemoryQuarantine();
            var immutableEnvelope = new ImmutableEnvelope("EnvId", DateTime.UtcNow, new SerializerTest1 {
                Name = "Test1"
            },
                                                          new[]
            {
                new MessageAttribute("key1", "val1"),
                new MessageAttribute("key2", "val2"),
            });
            var result0 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());

            memoryQuarantine.TryRelease(null);
            var result1 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());
            var result2 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());
            var result3 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());
            var result4 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());

            Assert.IsFalse(result0);
            Assert.IsFalse(result1);
            Assert.IsFalse(result2);
            Assert.IsTrue(result3);
            Assert.IsFalse(result4);
        }
Exemple #2
0
        public void when_more_try_to_quarantine()
        {
            var memoryQuarantine  = new MemoryQuarantine();
            var immutableEnvelope = new ImmutableEnvelope("EnvId", DateTime.UtcNow, new SerializerTest1 {
                Name = "Test1"
            },
                                                          new[]
            {
                new MessageAttribute("key1", "val1"),
                new MessageAttribute("key2", "val2"),
            });

            const int callCount = 30;
            var       results   = new bool[callCount];

            for (int i = 0; i < callCount; i++)
            {
                results[i] = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception());
            }

            for (int i = 0; i < callCount; i++)
            {
                if ((i + 1) % 4 == 0)
                {
                    Assert.IsTrue(results[i]);
                }
                else
                {
                    Assert.IsFalse(results[i]);
                }
            }
        }
        public bool TryToQuarantine(ImmutableEnvelope context, Exception ex)
        {
            // quit immediately, we don't want an endless cycle!
            //if (context.Items.Any(m => m.Content is MessageQuarantined))
            //    return true;
            var quarantined = _quarantine.TryToQuarantine(context, ex);

            try
            {
                var file = string.Format("{0:yyyy-MM-dd}-{1}-engine.txt",
                                         DateTime.UtcNow,
                                         context.EnvelopeId.ToLowerInvariant());



                var data = "";
                if (_root.Exists(file))
                {
                    using (var stream = _root.OpenRead(file))
                        using (var reader = new StreamReader(stream))
                        {
                            data = reader.ReadToEnd();
                        }
                }

                var builder = new StringBuilder(data);
                if (builder.Length == 0)
                {
                    DescribeMessage(builder, context);
                }

                builder.AppendLine("[Exception]");
                builder.AppendLine(DateTime.UtcNow.ToString(CultureInfo.InvariantCulture));
                builder.AppendLine(ex.ToString());
                builder.AppendLine();

                var text = builder.ToString();

                using (var stream = _root.OpenWrite(file))
                    using (var writer = new StreamWriter(stream))
                    {
                        writer.Write(text);
                    }

                if (quarantined)
                {
                    ReportFailure(text, context);
                }
            }
            catch (Exception x)
            {
                SystemObserver.Notify(x.ToString());
            }

            return(quarantined);
        }
Exemple #4
0
        public bool TryToQuarantine(ImmutableEnvelope envelope, Exception ex)
        {
            var quarantined = _quarantine.TryToQuarantine(envelope, ex);


            try
            {
                var item = GetStreamingItem(envelope.CreatedOnUtc, envelope.EnvelopeId);
                var data = "";
                try
                {
                    data = item.ReadText();
                }
                catch (StreamingItemNotFoundException) { }

                var builder = new StringBuilder(data);
                if (builder.Length == 0)
                {
                    builder.AppendLine(envelope.PrintToString(o => o.SerializeAndFormat()));
                }

                builder.AppendLine("[Exception]");
                builder.AppendLine(DateTime.UtcNow.ToString());
                builder.AppendLine(ex.ToString());
                builder.AppendLine();

                var text = builder.ToString();
                item.WriteText(text);

                if (quarantined)
                {
                    ReportFailure(text, envelope);
                }
            }
            catch (Exception x)
            {
                Trace.WriteLine(x.ToString());
            }

            return(quarantined);
        }