﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>Daniel Marbach commented on Raven Situational Awareness</title><description>I thought this scenario is ideal to be integrated with RhinoESB and messaging...
</description><link>http://ayende.com/4824/raven-situational-awareness#comment14</link><guid>http://ayende.com/4824/raven-situational-awareness#comment14</guid><pubDate>Thu, 28 Apr 2011 06:23:56 GMT</pubDate></item><item><title>Ayende Rahien commented on Raven Situational Awareness</title><description>Daniel,
  
Discovery &amp; heartbeat have nothing to do with Rhino ESB
</description><link>http://ayende.com/4824/raven-situational-awareness#comment13</link><guid>http://ayende.com/4824/raven-situational-awareness#comment13</guid><pubDate>Thu, 28 Apr 2011 05:25:53 GMT</pubDate></item><item><title>Daniel marbach commented on Raven Situational Awareness</title><description>Hy ayende
  
  
Why are you using Udp with wcf. Isn't that scenario a typical one for rhino esb? Discovery, heartbeat etc. this all screams RhinoEsb ;)
  
  
Daniel
</description><link>http://ayende.com/4824/raven-situational-awareness#comment12</link><guid>http://ayende.com/4824/raven-situational-awareness#comment12</guid><pubDate>Thu, 28 Apr 2011 05:25:13 GMT</pubDate></item><item><title>lontivero commented on Raven Situational Awareness</title><description>Hi Ayende, could you share with us how you tested it? I find it very interesting.
</description><link>http://ayende.com/4824/raven-situational-awareness#comment11</link><guid>http://ayende.com/4824/raven-situational-awareness#comment11</guid><pubDate>Wed, 27 Apr 2011 17:45:26 GMT</pubDate></item><item><title>Jon Wingfield commented on Raven Situational Awareness</title><description>Google uses Paxos in its BigTable implementation.  I came across this not by wikipedia, but in reading the BigTable pub.  Pretty interesting
</description><link>http://ayende.com/4824/raven-situational-awareness#comment10</link><guid>http://ayende.com/4824/raven-situational-awareness#comment10</guid><pubDate>Wed, 27 Apr 2011 15:14:47 GMT</pubDate></item><item><title>Alex Simkin commented on Raven Situational Awareness</title><description>@hangy
  
  
This is a standard trick. You cannot copyright common words but you can copyright misspelled ones :)
</description><link>http://ayende.com/4824/raven-situational-awareness#comment9</link><guid>http://ayende.com/4824/raven-situational-awareness#comment9</guid><pubDate>Wed, 27 Apr 2011 13:20:05 GMT</pubDate></item><item><title>hangy commented on Raven Situational Awareness</title><description>I know it's a breaking change, but you have a typo in the namespace and the the project files:
  
  
Raven.SituationaAwareness misses an "l".
</description><link>http://ayende.com/4824/raven-situational-awareness#comment8</link><guid>http://ayende.com/4824/raven-situational-awareness#comment8</guid><pubDate>Wed, 27 Apr 2011 12:23:25 GMT</pubDate></item><item><title>tobi commented on Raven Situational Awareness</title><description>I cannot find anything concrete that is wrong with the code so it was probably a false alarm.
</description><link>http://ayende.com/4824/raven-situational-awareness#comment7</link><guid>http://ayende.com/4824/raven-situational-awareness#comment7</guid><pubDate>Wed, 27 Apr 2011 10:58:31 GMT</pubDate></item><item><title>Ayende Rahien commented on Raven Situational Awareness</title><description>topologyState is ConcurrentDictionary
</description><link>http://ayende.com/4824/raven-situational-awareness#comment6</link><guid>http://ayende.com/4824/raven-situational-awareness#comment6</guid><pubDate>Wed, 27 Apr 2011 10:27:03 GMT</pubDate></item><item><title>tobi commented on Raven Situational Awareness</title><description>Is topologyState accessed thread-safely? Is is being accessed and modified in the callback concurrently. I must say that I did not completely digest the code but this "smelled" of threading-bug.
</description><link>http://ayende.com/4824/raven-situational-awareness#comment5</link><guid>http://ayende.com/4824/raven-situational-awareness#comment5</guid><pubDate>Wed, 27 Apr 2011 10:21:53 GMT</pubDate></item><item><title>Ayende Rahien commented on Raven Situational Awareness</title><description>Tobi,
  
Where is the bug? Are you talking about the usage of the Timer in there?
  
There is no bug here, we might be running concurrently, but the code is safe for multi threading access.
</description><link>http://ayende.com/4824/raven-situational-awareness#comment4</link><guid>http://ayende.com/4824/raven-situational-awareness#comment4</guid><pubDate>Wed, 27 Apr 2011 10:12:50 GMT</pubDate></item><item><title>tobi commented on Raven Situational Awareness</title><description>There is a threading bug here: The timer can fire on multiple threads at the same time (for example if your callback takes over 3 seconds to run). Your callback must be thread safe, probably by just ignoring concurrent timer events. Also after disposing the timer, events will still be delivered potentially infinitely many times because they might have queued up on the thread pool. I ran into this once and solved it with the following timer wrapper class which I license to you without restrictions:
  
  
  
    public class StoppableSequentialTimer : IDisposable
  
    {
  
        readonly Action callback;
  
        readonly System.Threading.Timer timer;
  
        bool disposed;
  
        bool running;
  
  
        public StoppableSequentialTimer(Action callback, TimeSpan dueTime, TimeSpan intervall)
  
        {
  
            if (callback == null) throw new ArgumentNullException("callback");
  
            this.callback = callback;
  
            timer = new System.Threading.Timer(_ =&gt; TimerCallback(), null, dueTime, intervall);
  
        }
  
  
        void TimerCallback()
  
        {
  
            lock (timer)
  
            {
  
                if (disposed || running) return;
  
                running = true;
  
            }
  
            try
  
            {
  
                callback();
  
            }
  
            finally
  
            {
  
                lock (timer)
  
                    running = false;
  
            }
  
        }
  
  
        public void Dispose()
  
        {
  
            lock (timer)
  
                disposed = true;
  
            timer.Dispose();
  
        }
  
    }
  
  
The callback executes non-concurrently and stops firing once the Timer is disposed. After disposal only a single superfluous callback run can happen.
</description><link>http://ayende.com/4824/raven-situational-awareness#comment3</link><guid>http://ayende.com/4824/raven-situational-awareness#comment3</guid><pubDate>Wed, 27 Apr 2011 10:04:27 GMT</pubDate></item><item><title>Ayende Rahien commented on Raven Situational Awareness</title><description>Roja,
  
Nodes will be notified about the split and about the joining, masters will be assigned for each split, and when the split it merged, will be merged as well.
  
What they do about it is outside the scope of RSA and in the realm of the actual server running it
  
Paxos is implemented internally, solely for the purpose of master detection
</description><link>http://ayende.com/4824/raven-situational-awareness#comment2</link><guid>http://ayende.com/4824/raven-situational-awareness#comment2</guid><pubDate>Wed, 27 Apr 2011 09:49:34 GMT</pubDate></item><item><title>Roja Buck commented on Raven Situational Awareness</title><description>How is the split-brain ( 
[http://en.wikipedia.org/wiki/Split-brain_](http://en.wikipedia.org/wiki/Split-brain_)(Computing) ) problem dealt with by Raven.SituationalAwareness?
  
  
Is the implementation of Paxos protocol internal to the framework or is it based on an external dependency?
</description><link>http://ayende.com/4824/raven-situational-awareness#comment1</link><guid>http://ayende.com/4824/raven-situational-awareness#comment1</guid><pubDate>Wed, 27 Apr 2011 09:44:31 GMT</pubDate></item></channel></rss>