comp.lang.ada
 help / color / mirror / Atom feed
* Distributed Ada, robustness etc.
@ 2006-05-23 12:14 Dr. Adrian Wrigley
  2006-05-25  1:12 ` Dr. Adrian Wrigley
  0 siblings, 1 reply; 11+ messages in thread
From: Dr. Adrian Wrigley @ 2006-05-23 12:14 UTC (permalink / raw)


Up until now, I have been using fairly elementary Annex E features
with GNAT/GLADE on Linux.

I have a client/server model, where the clients are uncategorized
units each in their own partition, and may be multiply invoked.  The
one server is in a Remote_Call_Interface unit, and is invoked once
when the application starts.

I have a couple of problems:

1)  I need to use multiple servers partitions now. (spec change!)
2)  If the server node or partition fails, the application fails.

I understand that a partition with RCI units can only be invoked once
and cannot be restarted. This is a single point of failure :(
For flexibility and reliability, I think I have to avoid RCI units.

If I changed the RCI unit into an RT unit, each partition would get
its own instantiation.  This is prohibited since the server has
to access a single, common resource.

If I changed the server RCI into a normal unit, I could invoke it once
when starting up.  If the partition or node failed, it could be
restarted.  But how could I call the server in one partition from
another?  This is just like the example in ARM E.4.2.  This uses
an RCI as a name server, holding accesses to class-wide abstract
tagged limited private type.  This would solve (1), because I
could invoke multiple servers (each with their own single common
resource).  But it wouldn't solve (2) because there would still
be a single point of failure in the RCI of the name server.

Is it possible to achieve full redundancy/restartability in a
distributed application with a client/server architecture using
Annex E?

One basis for a solution would be if the servers could broadcast
their registration to all the interested partitions.  But I don't
see any facility to "broadcast" in Annex E.  And I don't find
anything for enumerating active partitions in an application.
Can this be done?  Basically, it is the "access value" for the
server that the client needs before they can connect, but this
can only be communicated through a "third party" known to
both units.

On a related topic, Are there any facilities in Annex E which result
in partitions being instantiated dynamically?  At the moment, I start
multiple instances of a partition manually (from a shell).

For the moment, I will have to use the "name server" approach
of E.4.2.  But as an application increases in scale and utility,
it becomes increasingly important to maintain robustness.

Annex E is amazingly easy to use, considering the power and
flexibility it has (is it still Annex E in the new standard?).
But it does seem to have its limitations.  I haven't looked
into any of the alternatives.  I still haven't studied
PolyORB to see what extra capability this might have.

Any thoughts?
--
Adrian




^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2006-06-02 10:27 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-23 12:14 Distributed Ada, robustness etc Dr. Adrian Wrigley
2006-05-25  1:12 ` Dr. Adrian Wrigley
2006-05-25 10:34   ` Dmitry A. Kazakov
2006-05-29  0:55   ` Dr. Adrian Wrigley
2006-05-30 15:11     ` Dr. Adrian Wrigley
2006-05-31  5:49       ` Ludovic Brenta
2006-05-31 12:40         ` Dr. Adrian Wrigley
2006-05-31 13:21           ` Jean-Pierre Rosen
2006-05-31 14:38             ` Dr. Adrian Wrigley
2006-05-31 15:38               ` Jean-Pierre Rosen
2006-06-02 10:27           ` Stephen Leake

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox