Previous Table of Contents Next


22.15 Router Administration

   One basic function of a Router is to forward a request to another Router, which is “closer? to the eventual target of a client’s original request. In terms of the relationship between these two routers, the first Router can be thought of as the “source Router,? and the second can be called the “destination Router.? In the case where the network is partitioned or the destination Router has temporarily or permanently become unavailable, the source Router will be unable to forward its message. When this occurs, the Router must determine when and how to retry the request to the destination Router.

   To enable scalable networks of routers, a RouterAdmin interface has been specified. The interface is defined mainly for the purpose of avoiding the non-scaling scenario where a source Router has no choice but to consume network resources by continuously “pinging? its destination Router.

   This problem is analogous to the one faced by the target router when attempting delivery of the request to the message’s target. Therefore, the mechanism specified here generically supports registrations of destination routers as well as actual target object references.

   module MessageRouting {

   typedef short RegistrationState; const RegistrationState NOT_REGISTERED = 0; const RegistrationState ACTIVE = 1; const RegistrationState SUSPENDED = 2;

   exception InvalidState{ RegistrationState registration_state; };

   valuetype RetryPolicy supports CORBA::Policy { };

   const CORBA::PolicyType IMMEDIATE_SUSPEND_POLICY_TYPE = 50;

   valuetype ImmediateSuspend : RetryPolicy { };

   const CORBA::PolicyType UNLIMITED_PING_POLICY_TYPE = 51; valuetype UnlimitedPing : RetryPolicy {

   public short max_backoffs;public float backoff_factor;public unsigned long base_interval_seconds;

   };

   const CORBA::PolicyType LIMITED_PING_POLICY_TYPE = 52;valuetype LimitedPing : UnlimitedPing {public unsigned long interval_limit;};

   const CORBA::PolicyType DECAY_POLICY_TYPE = 53;valuetype DecayPolicy supports CORBA::Policy {public unsigned long decay_seconds;};

   const CORBA::PolicyType RESUME_POLICY_TYPE = 54;valuetype ResumePolicy supports CORBA::Policy {public unsigned long resume_seconds;};

   interface RouterAdmin {

   void register_destination(in Object dest,in boolean is_router,in RetryPolicy retry,in DecayPolicy decay);

   void suspend_destination(in Object dest,in ResumePolicy resumption)

   raises (InvalidState);

   void resume_destination(in Object dest)raises (InvalidState);

   void unregister_destination(in Object dest)raises (InvalidState);

   };

   interface Router { readonly attribute RouterAdmin admin; }; };

   When a request arrives at a Router (source router) that must either be delivered directly to a target, or be forwarded on via another Router (destination router), that source router attempts to send the message. If the message send fails, the source router needs to decide when to retry the send.

   The following use of the RouterAdmin is intended for router-to-router administration:

   The “target router? is the one that synchronously delivers requests to the target. The RouterAdmin is also used for the administration of policies that determine when this target router will actually attempt to deliver its request. A target’s use of this interface is very similar to the way it is used for router-to-router administration described above. The analogous scenarios are re-described here for clarity: