Next: 4 Our Approach
Up: Specifying Dynamism in Software
Previous: 2 Motivating Example
Consider one possible solution, in which there are two servers, one a ``primary" server, which is more desirable to use, but which may go down unexpectedly, and a ``secondary" server, which, while reliable, provides a lesser form of the service. One way to use these is to alter the architecture such that both servers are present, and when the primary server goes down, the client uses the secondary server until such time as the primary server returns to service. The topology of the system is shown in Figure 3, while a Wright description of a possible client is shown in Figure 4. In this description the server communicates with ``serverDown" and ``serverUp" when it is about to go down or come up (resp). (In practise, such events might be supplied by a time-out service.)
Instead of rigid encoding of the dynamism in the steady state behavior of the components, what we would like is to provide constructs to describe the dynamics of the system explicitly. In this case, rather than using a fixed topology of two servers and hiding the changes inside the client components ``choice" about which server to use, we could describe the server's failures as triggers that change the topology during computation. In effect, instead of the single configuration shown in Figure 3, we would have two configurations, shown in Figure 5. These configurations, each simple in itself, alternate as the primary server goes down and comes back up.
Robert Allen, Remi Douence, and David Garlan